@videopeer/segmenter
Version:
MP4 video file segmenter for MPEG-DASH usage, based on MP4Box
70 lines (60 loc) • 2.08 kB
JavaScript
let Segmenter = require('segmenter.lib');
// create custom output adapter class
CustomOutput = function (config, segmenter) {
// need to implement super constructor (typescript issue)
this.config = config;
this.segmenter = segmenter;
};
// extends from AbstractOutputAdapter
CustomOutput.prototype = Segmenter.AbstractOutputAdapter.prototype;
// implement abstract methods
CustomOutput.prototype.doInit = function (options) {
// do init stuff here. Here options is this adapter's options in segmenter.config.js file
return Promise.resolve();
};
CustomOutput.prototype.doDispose = function () {
// do dispose stuff here
return Promise.resolve();
};
CustomOutput.prototype.handleInitSegment = function (data) {
// store init segment somehow
console.log('INIT SEGMENT', data.streamId, data.buffer);
// you can emit debug messages, they will proxy to segmenter debug event
this.emit('debug', 'Debug message');
// you can emit error messages, they will proxy to segmenter error event
// this.emit('error', 'Error message');
};
CustomOutput.prototype.handleMediaSegment = function (data) {
// store media segment somehow
console.log('MEDIA SEGMENT', data.streamId, data.segmentId, data.buffer);
};
CustomOutput.prototype.handleMPD = function (data) {
// store MPD manifest somehow
console.log('MPD MANIFEST');
};
// load config file
let config = require('/path/to/segmenter.config');
// build segmenter
let segmenter = Segmenter.SegmenterFactory.createFromConfig(config);
// register custom output adapter
Segmenter.OutputFactory.register('custom', CustomOutput);
// listen to useful events
segmenter.on('warn', (err) => {
process.stderr.write(`${err}\n`);
});
segmenter.on('error', (err) => {
throw err;
});
segmenter.on('debug', (msg) => {
process.stdout.write(msg + '\n');
});
segmenter.on('end', () => {
process.stdout.write(`no more data\n`);
process.exit();
});
// init and start segmentation
segmenter.init().then(() => {
segmenter.start();
}, err => {
throw err;
});