UNPKG

@videopeer/segmenter

Version:

MP4 video file segmenter for MPEG-DASH usage, based on MP4Box

70 lines (60 loc) 2.08 kB
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; });