2015-12-16 00:30:14 -05:00
/ * d e m u x e r w e b w o r k e r .
* - listen to worker message , and trigger DemuxerInline upon reception of Fragments .
* - provides MP4 Boxes back to main thread using [ transferable objects ] ( https : //developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast) in order to minimize message passing overhead.
* /
import DemuxerInline from '../demux/demuxer-inline' ;
import Event from '../events' ;
import EventEmitter from 'events' ;
var DemuxerWorker = function ( self ) {
// observer setup
var observer = new EventEmitter ( ) ;
observer . trigger = function trigger ( event , ... data ) {
observer . emit ( event , event , ... data ) ;
} ;
observer . off = function off ( event , ... data ) {
observer . removeListener ( event , ... data ) ;
} ;
self . addEventListener ( 'message' , function ( ev ) {
2016-02-24 22:15:07 -05:00
var data = ev . data ;
//console.log('demuxer cmd:' + data.cmd);
switch ( data . cmd ) {
2015-12-16 00:30:14 -05:00
case 'init' :
2016-02-24 22:15:07 -05:00
self . demuxer = new DemuxerInline ( observer , data . typeSupported ) ;
2015-12-16 00:30:14 -05:00
break ;
case 'demux' :
self . demuxer . push ( new Uint8Array ( data . data ) , data . audioCodec , data . videoCodec , data . timeOffset , data . cc , data . level , data . sn , data . duration ) ;
break ;
default :
break ;
}
} ) ;
2016-02-24 22:15:07 -05:00
// listen to events triggered by Demuxer
2015-12-16 00:30:14 -05:00
observer . on ( Event . FRAG _PARSING _INIT _SEGMENT , function ( ev , data ) {
2016-02-24 22:15:07 -05:00
self . postMessage ( { event : ev , tracks : data . tracks , unique : data . unique } ) ;
2015-12-16 00:30:14 -05:00
} ) ;
observer . on ( Event . FRAG _PARSING _DATA , function ( ev , data ) {
2016-02-24 22:15:07 -05:00
var objData = { event : ev , type : data . type , startPTS : data . startPTS , endPTS : data . endPTS , startDTS : data . startDTS , endDTS : data . endDTS , data1 : data . data1 . buffer , data2 : data . data2 . buffer , nb : data . nb } ;
// pass data1/data2 as transferable object (no copy)
self . postMessage ( objData , [ objData . data1 , objData . data2 ] ) ;
2015-12-16 00:30:14 -05:00
} ) ;
observer . on ( Event . FRAG _PARSED , function ( event ) {
self . postMessage ( { event : event } ) ;
} ) ;
observer . on ( Event . ERROR , function ( event , data ) {
self . postMessage ( { event : event , data : data } ) ;
} ) ;
observer . on ( Event . FRAG _PARSING _METADATA , function ( event , data ) {
var objData = { event : event , samples : data . samples } ;
self . postMessage ( objData ) ;
} ) ;
2016-02-01 12:02:17 -05:00
observer . on ( Event . FRAG _PARSING _USERDATA , function ( event , data ) {
var objData = { event : event , samples : data . samples } ;
self . postMessage ( objData ) ;
} ) ;
2015-12-16 00:30:14 -05:00
} ;
export default DemuxerWorker ;