# node-demux

> Video Demuxer

Latest version **1.1.0** (published 2016-06-13) · BSD-3-Clause license · 0 weekly downloads

## Install

```sh
npm install node-demux
pnpm add node-demux
yarn add node-demux
bun add node-demux
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.0 |
| Published | 2016-06-13 |
| First published | 2015-01-05 |
| Weekly downloads | 0 |
| License | BSD-3-Clause |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | yes |
| GitHub stars | 8 |
| Author | Thomas Marrinan |
| Maintainers | tmarrinan |
| Keywords | video, demux, nan |

## Links

- npm: https://www.npmjs.com/package/node-demux
- Repository: https://github.com/tmarrinan/node-demux
- Homepage: https://github.com/tmarrinan/node-demux#readme
- Issues: https://github.com/tmarrinan/node-demux/issues
- npm.io page: https://npm.io/package/node-demux

## Dependencies (1)

- [nan](https://npm.io/package/nan.md) ^2.3.5

## Alternatives

- [@sindresorhus/slugify](https://npm.io/package/@sindresorhus/slugify.md) — 3.7M weekly downloads
- [solid-js](https://npm.io/package/solid-js.md) — 2.7M weekly downloads
- [expo-glass-effect](https://npm.io/package/expo-glass-effect.md) — 2.5M weekly downloads
- [nanoassert](https://npm.io/package/nanoassert.md) — 780.8K weekly downloads
- [@ffmpeg/ffmpeg](https://npm.io/package/@ffmpeg/ffmpeg.md) — 529.5K weekly downloads

## Recent versions

- 1.1.0 (latest) — 2016-06-13
- 1.0.3 — 2015-10-15
- 1.0.2 — 2015-09-16
- 1.0.1 — 2015-09-10
- 1.0.0 — 2015-09-10
- 0.1.1 — 2015-03-10
- 0.1.0 — 2015-03-05
- 0.0.9 — 2015-01-30
- 0.0.8 — 2015-01-29
- 0.0.7 — 2015-01-26
- 0.0.6 — 2015-01-26
- 0.0.5 — 2015-01-26
- 0.0.4 — 2015-01-22
- 0.0.3 — 2015-01-16
- 0.0.2 — 2015-01-16
- … 1 more at https://npm.io/package/node-demux/versions

## README

node-demux
==========

Node-Demux is a node.js package that decodes video files into raw frames in real-time. This is useful for creating a video player.


### Prerequisites ###
FFMpeg (for developers)
* Windows
    * Download [FFMpeg](http://ffmpeg.zeranoe.com/builds/) (Shared and Dev - 64bit)
    * Use 7-zip to extract downloads
    * Create folder 'C:\Dev' if it does not already exist
    * Move extracted FFMpeg Shared folder to 'C:\Dev\ffmpeg-win64-shared'
    * Move extracted FFMpeg Dev folder to 'C:\Dev\ffmpeg-win64-dev'
    * Add 'C:\Dev\ffmpeg-win64-shared\bin' to your system `Path` variable
* Mac OS X
    * `brew install ffmpeg --with-libvpx --with-libvorbis --with-ffplay`
* Linux
    * Install FFMpeg and FFMpeg-Dev from your package manager (may need at add repository prior to install)


### Install ###

* `npm install node-demux`
    * Note: Windows users may need option to specify compiler `--msvc_version=2013`


### Usage ###

declare new demuxer: `var video = new demux();`

| Method                            | Use |
|-----------------------------------|-----|
| `video.load(filename, options)`   | loads video from file (`filename` is path or url to desired file, `options` is an optional object) |
| `video.play()`                    | starts demuxing video (callback for `'start'` when it begins and `'frame'` on each new decoded frame |
| `video.pause(callback)`           | pauses demuxing (`callback` is called once video successfully pauses decoding |
| `video.stop(callback)`            | stops demuxing (same as pause, but also seeks video back to start) |
| `video.seek(timestamp, callback)` | seeks video to desired time in seconds (`callback` is called once video successfully finished seek) |
| `video.nextFrame()`               | decodes next frame as soon as possible (`'frame'` message will be called) |
| `video.on(message)`               | `message` is one of `'error'`, `'metadata'`, `'start'`, `'end'`, or `'frame'` |


### Load Options ###
| Option                            | Meaning |
|-----------------------------------|---------|
| `decodeFirstFrame`                | boolean flag: decodes one frame after load, seek, or stop |
| `colorspace`                      | string: desired frame colorspace (`'yuv420p'` or `'rgb24'`) |


### Example ###

```
var demux = require('node-demux');


var start;
var nframes;

var video = new demux();
video.on('error', function(err) {
    console.log(err);
});
video.on('metadata', function(metadata) {
	nframes = 0;
    console.log(metadata);
});
video.on('start', function() {
    start = Date.now();
    console.log("start demuxing");
});
video.on('end', function() {
    var time = (Date.now() - start) / 1000;
    console.log("finished demuxing");
    console.log("  total time: " + time.toFixed(3) + "sec");
    console.log("  average frames per second: " + (nframes/time).toFixed(3) + "fps");
});
video.on('frame', function(frameIdx, data) {
    nframes++;
    console.log("received frame " + frameIdx + " (size: " + data.length + ")");
});
video.load("big-buck-bunny_trailer.mp4");
video.play();
```

---
_Source: https://npm.io/package/node-demux · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
