@videopeer/segmenter
Version:
MP4 video file segmenter for MPEG-DASH usage, based on MP4Box
2 lines • 204 kB
JavaScript
module.exports=function(t){function e(r){if(i[r])return i[r].exports;var n=i[r]={exports:{},id:r,loaded:!1};return t[r].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=i(1);e.SegmenterLib=r.SegmenterLib;var n=i(131);e.AbstractInputAdapter=n.AbstractInputAdapter;var s=i(138);e.AbstractOutputAdapter=s.AbstractOutputAdapter;var o=i(128);e.InputFactory=o.InputFactory;var a=i(136);e.OutputFactory=a.OutputFactory;var f=i(142);e.SegmenterFactory=f.SegmenterFactory},function(t,e,i){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}var o=function(){function t(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,i,r){return i&&t(e.prototype,i),r&&t(e,r),e}}();Object.defineProperty(e,"__esModule",{value:!0});var a=i(2),f=i(3),u=i(120),l=i(122),p=i(123),h=i(124),c=i(121),d=i(126),m=i(127),y=i(128),_=i(136),g=function(t){function e(t){r(this,e);var i=n(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return i.tracks={},i.readers=[],i.readersMap={},i.wallClockStart=0,i.options={input:[],output:[],encKey:null,filterTracks:function(){},framesPerSegment:function(t){return"video"===t.type?25:125},initSegmentName:function(t,e){return"init-"+e.globalId+".mp4"},simulateLive:!1,mediaSegmentName:function(t,e){return i.options.mpd.useSegmentTimeline?"segment-"+e.globalId+"-$Time$.mp4":"segment-"+e.globalId+"-$Number$.mp4"},globalTrackId:function(t,e){return t+"-"+e.id},mpd:{minBufferTime:"PT1.5S",minimumUpdatePeriod:null,segmentsDuration:null,type:null,useSegmentTimeline:null},timeBuffer:function(){return 0}},i.state={adaptationSets:{},availabilityStartTime:new Date,minBufferTime:null,minimumUpdatePeriod:null,mpdType:null,publishTime:new Date,tracks:{}},i.trackToRepresentationMap={},i.options=h.recursive(!0,i.options,t),i}return s(e,t),o(e,[{key:"init",value:function(){var t=this;return new Promise(function(e,i){return 0===t.options.input.length?i("need at least one input"):0===t.options.output.length?i("need at least one output"):void t.createReaders().then(function(){return t.createOutputs()}).then(function(){e()}).catch(function(t){i(t)})})}},{key:"getOptions",value:function(){return this.options}},{key:"createReaders",value:function(){var t=this;return new Promise(function(e,i){var r=[];t.options.input.forEach(function(e){var i=y.InputFactory.createFromConfig(e);i.on("debug",function(e){t.emit("debug",e)}),t.readers.push(i),t.readersMap[i.getId()]=i,r.push(i.init())}),Promise.all(r).then(function(){e()},function(t){i("unable to init all readers: "+t)})})}},{key:"createOutputs",value:function(){var t=this;return new Promise(function(e,i){var r=[];t.options.output.forEach(function(e){var i=_.OutputFactory.createFromConfig(e,t);r.push(i.init(t))}),Promise.all(r).then(function(){e()},function(t){i("unable to init all outputs: "+t)})})}},{key:"start",value:function(){var t=this;return this.state.minBufferTime=this.options.mpd.minBufferTime,this.state.minimumUpdatePeriod=this.options.mpd.minimumUpdatePeriod,this.state.mpdType=this.options.mpd.type,this.options.mpd.type?["dynamic","static"].some(function(e){return t.options.mpd.type===e})?(null===this.options.mpd.useSegmentTimeline&&(this.options.mpd.useSegmentTimeline="static"===this.options.mpd.type||"dynamic"===this.options.mpd.type&&null===this.options.mpd.segmentsDuration),this.options.mpd.useSegmentTimeline!==!1||this.options.mpd.segmentsDuration?(null===this.options.mpd.minimumUpdatePeriod&&"dynamic"===this.options.mpd.type&&(this.options.mpd.minimumUpdatePeriod=this.options.mpd.useSegmentTimeline?"PT1.000S":"PT30.000S"),"dynamic"===this.options.mpd.type&&this.options.mpd.useSegmentTimeline===!0&&this.emit("warn",'Warning: you are using SegmentTimeline with "dynamic" mpd type.'),void this.getTracksInfo().then(function(){var e=0;t.options.filterTracks(t.tracks),t.emit("info",t.tracks);var i=function(i){return t.tracks.hasOwnProperty(i)?void t.tracks[i].forEach(function(r){var n=t.options.framesPerSegment(r),s=t.readersMap[i],o=new u.Segmenter(s,r,{framesPerSegment:n});e++,o.on("init",function(e){var n=e.segment,s=Buffer.from(n.buffer);t.wallClockStart=Date.now(),t.state.availabilityStartTime=new Date,t.options.encKey&&(s=t.encryptBuffer(s));var o=t.buildAdaptationSet(r),a=t.buildRepresentation(r,i);return t.emit("init",{segment:n,buffer:s,streamId:i,trackInfo:r,representation:a}),t.options.mpd.useSegmentTimeline&&a.segmentTemplate.indexOf("$Time$")===-1?void t.emit("error","$Time$ must be specified for segment template when using SegmentTimeline mpd"):t.options.mpd.useSegmentTimeline||a.segmentTemplate.indexOf("$Number$")!==-1?(t.state.adaptationSets[o.id]&&(o=t.state.adaptationSets[o.id]),o.representations[a.id]=a,t.state.adaptationSets[o.id]=o,t.trackToRepresentationMap[r.globalId]=a,void(t.state.tracks[r.globalId]={firstSegmentPTS:0,lastSegmentPTS:0})):void t.emit("error","$Number$ must be specified for segment template when not using SegmentTimeline mpd")}),o.on("segment",function(e){var n=e.samples[0].dts,s=e.samples[0].cts,a=e.samples[0].timescale,u=0,l=Buffer.from(e.buffer);if(t.options.simulateLive&&o.pause(),e.samples.forEach(function(t){u+=t.duration}),!e.samples[0].is_sync){var p=e.samples[0];return void t.emit("error","Track #"+r.globalId+": segment is not RAP aligned. PTS: "+p.cts/a+", DTS: "+p.dts/a)}var h={dts:n,pts:s,duration:u,timescale:a},c=t.trackToRepresentationMap[r.globalId];if(c.segmentsCounter++,c.processedDuration+=h.duration,c.segments.push(h),"dynamic"===t.options.mpd.type){var d=c.processedDuration/c.timescale*1e3,m=t.state.availabilityStartTime.getTime()+d;t.state.publishTime=new Date(m)}else t.state.publishTime=new Date;var y=t.resolveSegmentId(h,c);t.options.encKey&&(l=t.encryptBuffer(l));var _=(c.processedDuration/c.timescale).toFixed(2);if(t.emit("debug",f.green("Segmenter")+": Track #"+r.globalId+": segment received: [PTS: "+h.pts/a+", DTS: "+h.dts/a+", DURATION: "+h.duration/a+", TOTAL DURATION: "+_+"]"),t.emit("segment",{segment:h,buffer:l,segmentId:y,streamId:i,trackInfo:r,representation:c}),0===t.state.tracks[r.globalId].firstSegmentPTS&&(t.state.tracks[r.globalId].firstSegmentPTS=h.pts,t.state.tracks[r.globalId].lastSegmentPTS=h.pts),t.state.tracks[r.globalId].lastSegmentPTS=h.pts,t.writeMPD(),t.removeGarbage(i,r),e.nextSegment>10&&o.getMp4Box().releaseUsedSamples(e.trackId,e.nextSegment-1),t.options.simulateLive){var g=c.processedDuration/c.timescale*1e3,v=Date.now()-t.wallClockStart,b=g-v;b<0&&(b=0),t.emit("debug",f.green("Segmenter")+": Track #"+r.globalId+": sleeping for "+f.yellow(b)+" ms..."),setTimeout(function(){return o.unPause()},b)}}),o.on("end",function(){t.writeMPD(),e--,0===e&&setTimeout(function(){return t.emit("end")},4e3)}),o.on("error",function(e){t.emit("error",e)})}):"continue"};for(var r in t.tracks){i(r)}t.readers.forEach(function(t){t.disableBuffering(),t.flushBuffer(),t.resumeReading()})}).catch(function(e){t.emit("error",e)})):void this.emit("error","mpd.segmentsDuration option must be specified when not using SegmentTimeline mpd")):void this.emit("error",'mpd.type option my be "static" or "dynamic"'):void this.emit("error","mpd.type option must be specified")}},{key:"getTracksInfo",value:function(){var t=this;return new Promise(function(e){var i=0;t.readers.forEach(function(r){i++;var n=new a.MP4Box,s=0;r.enableBuffering(),r.on("data",function(t){var e=t.byteLength,i=Buffer.alloc(e),r=t.copy(i,0,0,e);if(r<e)throw new Error("Not all buffered data copied");var o=i.buffer;o.fileStart=s,n.appendBuffer(o),s+=o.byteLength}),n.onReady=function(n){i--,r.pauseReading(),r.removeAllListeners("data"),n.tracks.forEach(function(e){var i=r.getId();e.globalId=t.options.globalTrackId(i,e),e._metadata={},t.tracks[i]?t.tracks[i].push(e):t.tracks[i]=[e]}),0===i&&e()},n.onError=function(t){throw new Error("mp4box error while getting tracks info: "+t)}}),t.readers.forEach(function(t){t.startReading()})})}},{key:"encryptBuffer",value:function(t){var e=d.randomBytes(16),i=this.options.encKey.slice(0,10)+"3412f4"+this.options.encKey.slice(15,31),r=Buffer.from(i,"hex"),n=d.createCipheriv("aes-128-cbc",r,e),s=n.update(t),o=n.final();return Buffer.concat([e,s,o])}},{key:"resolveSegmentId",value:function(t,e){var i=void 0;return i=this.options.mpd.useSegmentTimeline?t.dts:e.segmentsCounter}},{key:"buildAdaptationSet",value:function(t){var e=void 0;switch(t.type){case"video":e={id:"video-"+t.video.width+"-"+t.video.height,maxHeight:t.video.height,maxWidth:t.video.width,representations:{},type:t.type};break;case"audio":e={id:"audio-"+t.globalId,lang:t.language,representations:{},sampleRate:t.audio.sample_rate,type:t.type};break;default:this.emit("error","Unsupported track type")}return e}},{key:"buildRepresentation",value:function(t,e){switch(t.type){case"video":return{bandwidth:t.bitrate,codecs:t.codec,height:t.video.height,id:t.globalId,initialization:this.options.initSegmentName(e,t),segmentTemplate:this.options.mediaSegmentName(e,t),segments:[],segmentsDuration:this.options.mpd.segmentsDuration?Math.round(this.options.mpd.segmentsDuration(e,t)*t.timescale/1e3):null,timescale:t.timescale,type:t.type,width:t.video.width,segmentsCounter:0,processedDuration:0,metadata:t._metadata};case"audio":return{bandwidth:Math.floor(t.bitrate),codecs:t.codec,id:t.globalId,initialization:this.options.initSegmentName(e,t),sampleRate:t.audio.sample_rate,segmentTemplate:this.options.mediaSegmentName(e,t),segments:[],segmentsDuration:this.options.mpd.segmentsDuration?Math.round(this.options.mpd.segmentsDuration(e,t)*t.timescale/1e3):null,timescale:t.timescale,type:t.type,segmentsCounter:0,processedDuration:0,metadata:t._metadata};default:this.emit("error","Unsupported track type")}}},{key:"writeMPD",value:function(){var t=this.options.mpd.useSegmentTimeline?l.default:p.default,e=t(this.state);this.emit("mpd",{content:e})}},{key:"removeGarbage",value:function(t,e){var i=this,r=this.options.timeBuffer(e);if(r){var n=this.state.tracks[e.globalId],s=this.trackToRepresentationMap[e.globalId],o=n.lastSegmentPTS-r*e.timescale;s.segments=s.segments.filter(function(r){if(r.pts<o){var n=i.resolveSegmentId(r,s);return i.emit("segment:expired",{segment:r,segmentId:n,streamId:t,trackInfo:e}),!1}return!0}),s.segments.length>0&&(n.firstSegmentPTS=s.segments[0].pts)}}},{key:"parseFileName",value:function(t){var e=t.split("#"),i={};return e[1]&&(i=m.parse(e[1])),{name:e[0],metadata:i}}},{key:"time",value:function(){return Date.now()}}]),e}(c.EventEmitter);e.SegmenterLib=g},function(t,e,i){var r=function(){var t=new Date,e=4,i=3,n=2,s=1,o=e,a={setLogLevel:function(t){o=t==this.debug?s:t==this.info?n:t==this.warn?i:t==this.error?e:e},debug:function(e,i){void 0===console.debug&&(console.debug=console.log),s>=o&&console.debug("["+r.getDurationString(new Date-t,1e3)+"]","["+e+"]",i)},info:function(e,i){n>=o&&console.info("["+r.getDurationString(new Date-t,1e3)+"]","["+e+"]",i)},warn:function(e,n){i>=o&&console.warn("["+r.getDurationString(new Date-t,1e3)+"]","["+e+"]",n)},error:function(i,n){e>=o&&console.error("["+r.getDurationString(new Date-t,1e3)+"]","["+i+"]",n)}};return a}();r.getDurationString=function(t,e){function i(t,e){for(var i=""+t,r=i.split(".");r[0].length<e;)r[0]="0"+r[0];return r.join(".")}var r;t<0?(r=!0,t=-t):r=!1;var n=e||1,s=t/n,o=Math.floor(s/3600);s-=3600*o;var a=Math.floor(s/60);s-=60*a;var f=1e3*s;return s=Math.floor(s),f-=1e3*s,f=Math.floor(f),(r?"-":"")+o+":"+i(a,2)+":"+i(s,2)+"."+i(f,3)},r.printRanges=function(t){var e=t.length;if(e>0){for(var i="",n=0;n<e;n++)n>0&&(i+=","),i+="["+r.getDurationString(t.start(n))+","+r.getDurationString(t.end(n))+"]";return i}return"(empty)"},e.Log=r;var n=function(t){if(!(t instanceof ArrayBuffer))throw"Needs an array buffer";this.buffer=t,this.dataview=new DataView(t),this.position=0};n.prototype.getPosition=function(){return this.position},n.prototype.getEndPosition=function(){return this.buffer.byteLength},n.prototype.getLength=function(){return this.buffer.byteLength},n.prototype.seek=function(t){var e=Math.max(0,Math.min(this.buffer.byteLength,t));return this.position=isNaN(e)||!isFinite(e)?0:e,!0},n.prototype.isEos=function(){return this.getPosition()>=this.getEndPosition()},n.prototype.readAnyInt=function(t,e){var i=0;if(this.position+t<=this.buffer.byteLength){switch(t){case 1:i=e?this.dataview.getInt8(this.position):this.dataview.getUint8(this.position);break;case 2:i=e?this.dataview.getInt16(this.position):this.dataview.getUint16(this.position);break;case 3:if(e)throw"No method for reading signed 24 bits values";i=this.dataview.getUint8(this.position)<<16,i|=this.dataview.getUint8(this.position)<<8,i|=this.dataview.getUint8(this.position);break;case 4:i=e?this.dataview.getInt32(this.position):this.dataview.getUint32(this.position);break;case 8:if(e)throw"No method for reading signed 64 bits values";i=this.dataview.getUint32(this.position)<<32,i|=this.dataview.getUint32(this.position);break;default:throw"readInt method not implemented for size: "+t}return this.position+=t,i}throw"Not enough bytes in buffer"},n.prototype.readUint8=function(){return this.readAnyInt(1,!1)},n.prototype.readUint16=function(){return this.readAnyInt(2,!1)},n.prototype.readUint24=function(){return this.readAnyInt(3,!1)},n.prototype.readUint32=function(){return this.readAnyInt(4,!1)},n.prototype.readUint64=function(){return this.readAnyInt(8,!1)},n.prototype.readString=function(t){if(this.position+t<=this.buffer.byteLength){for(var e="",i=0;i<t;i++)e+=String.fromCharCode(this.readUint8());return e}throw"Not enough bytes in buffer"},n.prototype.readCString=function(){for(var t=[];;){var e=this.readUint8();if(0===e)break;t.push(e)}return String.fromCharCode.apply(null,t)},n.prototype.readInt8=function(){return this.readAnyInt(1,!0)},n.prototype.readInt16=function(){return this.readAnyInt(2,!0)},n.prototype.readInt32=function(){return this.readAnyInt(4,!0)},n.prototype.readUint8Array=function(t){for(var e=new Uint8Array(t),i=0;i<t;i++)e[i]=this.readUint8();return e},n.prototype.readInt16Array=function(t){for(var e=new Int16Array(t),i=0;i<t;i++)e[i]=this.readUint16();return e},n.prototype.readUint32Array=function(t){for(var e=new Uint32Array(t),i=0;i<t;i++)e[i]=this.readUint32();return e},n.prototype.readInt32Array=function(t){for(var e=new Int32Array(t),i=0;i<t;i++)e[i]=this.readInt32();return e},e.MP4BoxStream=n;var s=function(t,e,i){this._byteOffset=e||0,t instanceof ArrayBuffer?this.buffer=t:"object"==typeof t?(this.dataView=t,e&&(this._byteOffset+=e)):this.buffer=new ArrayBuffer(t||0),this.position=0,this.endianness=null==i?s.LITTLE_ENDIAN:i};s.prototype={},s.prototype.getPosition=function(){return this.position},s.prototype._realloc=function(t){if(this._dynamicSize){var e=this._byteOffset+this.position+t,i=this._buffer.byteLength;if(e<=i)return void(e>this._byteLength&&(this._byteLength=e));for(i<1&&(i=1);e>i;)i*=2;var r=new ArrayBuffer(i),n=new Uint8Array(this._buffer),s=new Uint8Array(r,0,n.length);s.set(n),this.buffer=r,this._byteLength=e}},s.prototype._trimAlloc=function(){if(this._byteLength!=this._buffer.byteLength){var t=new ArrayBuffer(this._byteLength),e=new Uint8Array(t),i=new Uint8Array(this._buffer,0,e.length);e.set(i),this.buffer=t}},s.BIG_ENDIAN=!1,s.LITTLE_ENDIAN=!0,s.prototype._byteLength=0,Object.defineProperty(s.prototype,"byteLength",{get:function(){return this._byteLength-this._byteOffset}}),Object.defineProperty(s.prototype,"buffer",{get:function(){return this._trimAlloc(),this._buffer},set:function(t){this._buffer=t,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}}),Object.defineProperty(s.prototype,"byteOffset",{get:function(){return this._byteOffset},set:function(t){this._byteOffset=t,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}}),Object.defineProperty(s.prototype,"dataView",{get:function(){return this._dataView},set:function(t){this._byteOffset=t.byteOffset,this._buffer=t.buffer,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._byteOffset+t.byteLength}}),s.prototype.seek=function(t){var e=Math.max(0,Math.min(this.byteLength,t));this.position=isNaN(e)||!isFinite(e)?0:e},s.prototype.isEof=function(){return this.position>=this._byteLength},s.prototype.mapUint8Array=function(t){this._realloc(1*t);var e=new Uint8Array(this._buffer,this.byteOffset+this.position,t);return this.position+=1*t,e},s.prototype.readInt32Array=function(t,e){t=null==t?this.byteLength-this.position/4:t;var i=new Int32Array(t);return s.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),s.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},s.prototype.readInt16Array=function(t,e){t=null==t?this.byteLength-this.position/2:t;var i=new Int16Array(t);return s.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),s.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},s.prototype.readInt8Array=function(t){t=null==t?this.byteLength-this.position:t;var e=new Int8Array(t);return s.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,t*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e},s.prototype.readUint32Array=function(t,e){t=null==t?this.byteLength-this.position/4:t;var i=new Uint32Array(t);return s.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),s.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},s.prototype.readUint16Array=function(t,e){t=null==t?this.byteLength-this.position/2:t;var i=new Uint16Array(t);return s.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),s.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},s.prototype.readUint8Array=function(t){t=null==t?this.byteLength-this.position:t;var e=new Uint8Array(t);return s.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,t*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e},s.prototype.readFloat64Array=function(t,e){t=null==t?this.byteLength-this.position/8:t;var i=new Float64Array(t);return s.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),s.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},s.prototype.readFloat32Array=function(t,e){t=null==t?this.byteLength-this.position/4:t;var i=new Float32Array(t);return s.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),s.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},s.prototype.readInt32=function(t){var e=this._dataView.getInt32(this.position,null==t?this.endianness:t);return this.position+=4,e},s.prototype.readInt16=function(t){var e=this._dataView.getInt16(this.position,null==t?this.endianness:t);return this.position+=2,e},s.prototype.readInt8=function(){var t=this._dataView.getInt8(this.position);return this.position+=1,t},s.prototype.readUint32=function(t){var e=this._dataView.getUint32(this.position,null==t?this.endianness:t);return this.position+=4,e},s.prototype.readUint16=function(t){var e=this._dataView.getUint16(this.position,null==t?this.endianness:t);return this.position+=2,e},s.prototype.readUint8=function(){var t=this._dataView.getUint8(this.position);return this.position+=1,t},s.prototype.readFloat32=function(t){var e=this._dataView.getFloat32(this.position,null==t?this.endianness:t);return this.position+=4,e},s.prototype.readFloat64=function(t){var e=this._dataView.getFloat64(this.position,null==t?this.endianness:t);return this.position+=8,e},s.endianness=new Int8Array(new Int16Array([1]).buffer)[0]>0,s.memcpy=function(t,e,i,r,n){var s=new Uint8Array(t,e,n),o=new Uint8Array(i,r,n);s.set(o)},s.arrayToNative=function(t,e){return e==this.endianness?t:this.flipArrayEndianness(t)},s.nativeToEndian=function(t,e){return this.endianness==e?t:this.flipArrayEndianness(t)},s.flipArrayEndianness=function(t){for(var e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=0;i<t.byteLength;i+=t.BYTES_PER_ELEMENT)for(var r=i+t.BYTES_PER_ELEMENT-1,n=i;r>n;r--,n++){var s=e[n];e[n]=e[r],e[r]=s}return t},s.prototype.failurePosition=0,String.fromCharCodeUint8=function(t){for(var e=[],i=0;i<t.length;i++)e[i]=t[i];return String.fromCharCode.apply(null,e)},s.prototype.readString=function(t,e){return null==e||"ASCII"==e?String.fromCharCodeUint8.apply(null,[this.mapUint8Array(null==t?this.byteLength-this.position:t)]):new TextDecoder(e).decode(this.mapUint8Array(t))},s.prototype.readCString=function(t){var e=this.byteLength-this.position,i=new Uint8Array(this._buffer,this._byteOffset+this.position),r=e;null!=t&&(r=Math.min(t,e));for(var n=0;n<r&&0!==i[n];n++);var s=String.fromCharCodeUint8.apply(null,[this.mapUint8Array(n)]);return null!=t?this.position+=r-n:n!=e&&(this.position+=1),s};var o=Math.pow(2,32);s.prototype.readUint64=function(){return this.readUint32()*o+this.readUint32()},s.prototype.readUint24=function(){return(this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8()},e.DataStream=s,s.prototype.save=function(t){var e=new Blob([this.buffer]),i=window.webkitURL||window.URL;if(!i||!i.createObjectURL)throw"DataStream.save: Can't create object URL.";var r=i.createObjectURL(e),n=document.createElement("a");n.setAttribute("href",r),n.setAttribute("download",t),n.click(),i.revokeObjectURL(r)},s.prototype._dynamicSize=!0,Object.defineProperty(s.prototype,"dynamicSize",{get:function(){return this._dynamicSize},set:function(t){t||this._trimAlloc(),this._dynamicSize=t}}),s.prototype.shift=function(t){var e=new ArrayBuffer(this._byteLength-t),i=new Uint8Array(e),r=new Uint8Array(this._buffer,t,i.length);i.set(r),this.buffer=e,this.position-=t},s.prototype.writeInt32Array=function(t,e){if(this._realloc(4*t.length),t instanceof Int32Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)s.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapInt32Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeInt32(t[i],e)},s.prototype.writeInt16Array=function(t,e){if(this._realloc(2*t.length),t instanceof Int16Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)s.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapInt16Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeInt16(t[i],e)},s.prototype.writeInt8Array=function(t){if(this._realloc(1*t.length),t instanceof Int8Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)s.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapInt8Array(t.length);else for(var e=0;e<t.length;e++)this.writeInt8(t[e])},s.prototype.writeUint32Array=function(t,e){if(this._realloc(4*t.length),t instanceof Uint32Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)s.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapUint32Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeUint32(t[i],e)},s.prototype.writeUint16Array=function(t,e){if(this._realloc(2*t.length),t instanceof Uint16Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)s.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapUint16Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeUint16(t[i],e)},s.prototype.writeUint8Array=function(t){if(this._realloc(1*t.length),t instanceof Uint8Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)s.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapUint8Array(t.length);else for(var e=0;e<t.length;e++)this.writeUint8(t[e])},s.prototype.writeFloat64Array=function(t,e){if(this._realloc(8*t.length),t instanceof Float64Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)s.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapFloat64Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeFloat64(t[i],e)},s.prototype.writeFloat32Array=function(t,e){if(this._realloc(4*t.length),t instanceof Float32Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)s.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapFloat32Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeFloat32(t[i],e)},s.prototype.writeInt32=function(t,e){this._realloc(4),this._dataView.setInt32(this.position,t,null==e?this.endianness:e),this.position+=4},s.prototype.writeInt16=function(t,e){this._realloc(2),this._dataView.setInt16(this.position,t,null==e?this.endianness:e),this.position+=2},s.prototype.writeInt8=function(t){this._realloc(1),this._dataView.setInt8(this.position,t),this.position+=1},s.prototype.writeUint32=function(t,e){this._realloc(4),this._dataView.setUint32(this.position,t,null==e?this.endianness:e),this.position+=4},s.prototype.writeUint16=function(t,e){this._realloc(2),this._dataView.setUint16(this.position,t,null==e?this.endianness:e),this.position+=2},s.prototype.writeUint8=function(t){this._realloc(1),this._dataView.setUint8(this.position,t),this.position+=1},s.prototype.writeFloat32=function(t,e){this._realloc(4),this._dataView.setFloat32(this.position,t,null==e?this.endianness:e),this.position+=4},s.prototype.writeFloat64=function(t,e){this._realloc(8),this._dataView.setFloat64(this.position,t,null==e?this.endianness:e),this.position+=8},s.prototype.writeUCS2String=function(t,e,i){null==i&&(i=t.length);for(var r=0;r<t.length&&r<i;r++)this.writeUint16(t.charCodeAt(r),e);for(;r<i;r++)this.writeUint16(0)},s.prototype.writeString=function(t,e,i){var r=0;if(null==e||"ASCII"==e)if(null!=i){var n=Math.min(t.length,i);for(r=0;r<n;r++)this.writeUint8(t.charCodeAt(r));for(;r<i;r++)this.writeUint8(0)}else for(r=0;r<t.length;r++)this.writeUint8(t.charCodeAt(r));else this.writeUint8Array(new TextEncoder(e).encode(t.substring(0,i)))},s.prototype.writeCString=function(t,e){var i=0;if(null!=e){var r=Math.min(t.length,e);for(i=0;i<r;i++)this.writeUint8(t.charCodeAt(i));for(;i<e;i++)this.writeUint8(0)}else{for(i=0;i<t.length;i++)this.writeUint8(t.charCodeAt(i));this.writeUint8(0)}},s.prototype.writeStruct=function(t,e){for(var i=0;i<t.length;i+=2){var r=t[i+1];this.writeType(r,e[t[i]],e)}},s.prototype.writeType=function(t,e,i){var r;if("function"==typeof t)return t(this,e);if("object"==typeof t&&!(t instanceof Array))return t.set(this,e,i);var n=null,o="ASCII",a=this.position;switch("string"==typeof t&&/:/.test(t)&&(r=t.split(":"),t=r[0],n=parseInt(r[1])),"string"==typeof t&&/,/.test(t)&&(r=t.split(","),t=r[0],o=parseInt(r[1])),t){case"uint8":this.writeUint8(e);break;case"int8":this.writeInt8(e);break;case"uint16":this.writeUint16(e,this.endianness);break;case"int16":this.writeInt16(e,this.endianness);break;case"uint32":this.writeUint32(e,this.endianness);break;case"int32":this.writeInt32(e,this.endianness);break;case"float32":this.writeFloat32(e,this.endianness);break;case"float64":this.writeFloat64(e,this.endianness);break;case"uint16be":this.writeUint16(e,s.BIG_ENDIAN);break;case"int16be":this.writeInt16(e,s.BIG_ENDIAN);break;case"uint32be":this.writeUint32(e,s.BIG_ENDIAN);break;case"int32be":this.writeInt32(e,s.BIG_ENDIAN);break;case"float32be":this.writeFloat32(e,s.BIG_ENDIAN);break;case"float64be":this.writeFloat64(e,s.BIG_ENDIAN);break;case"uint16le":this.writeUint16(e,s.LITTLE_ENDIAN);break;case"int16le":this.writeInt16(e,s.LITTLE_ENDIAN);break;case"uint32le":this.writeUint32(e,s.LITTLE_ENDIAN);break;case"int32le":this.writeInt32(e,s.LITTLE_ENDIAN);break;case"float32le":this.writeFloat32(e,s.LITTLE_ENDIAN);break;case"float64le":this.writeFloat64(e,s.LITTLE_ENDIAN);break;case"cstring":this.writeCString(e,n);break;case"string":this.writeString(e,o,n);break;case"u16string":this.writeUCS2String(e,this.endianness,n);break;case"u16stringle":this.writeUCS2String(e,s.LITTLE_ENDIAN,n);break;case"u16stringbe":this.writeUCS2String(e,s.BIG_ENDIAN,n);break;default:if(3==t.length){for(var f=t[1],u=0;u<e.length;u++)this.writeType(f,e[u]);break}this.writeStruct(t,e)}null!=n&&(this.position=a,this._realloc(n),this.position=a+n)},s.prototype.writeUint64=function(t){var e=Math.floor(t/o);this.writeUint32(e),this.writeUint32(4294967295&t)},s.prototype.writeUint24=function(t){this.writeUint8((16711680&t)>>16),this.writeUint8((65280&t)>>8),this.writeUint8(255&t)},s.prototype.adjustUint32=function(t,e){var i=this.position;this.seek(t),this.writeUint32(e),this.seek(i)},s.prototype.mapInt32Array=function(t,e){this._realloc(4*t);var i=new Int32Array(this._buffer,this.byteOffset+this.position,t);return s.arrayToNative(i,null==e?this.endianness:e),this.position+=4*t,i},s.prototype.mapInt16Array=function(t,e){this._realloc(2*t);var i=new Int16Array(this._buffer,this.byteOffset+this.position,t);return s.arrayToNative(i,null==e?this.endianness:e),this.position+=2*t,i},s.prototype.mapInt8Array=function(t){this._realloc(1*t);var e=new Int8Array(this._buffer,this.byteOffset+this.position,t);return this.position+=1*t,e},s.prototype.mapUint32Array=function(t,e){this._realloc(4*t);var i=new Uint32Array(this._buffer,this.byteOffset+this.position,t);return s.arrayToNative(i,null==e?this.endianness:e),this.position+=4*t,i},s.prototype.mapUint16Array=function(t,e){this._realloc(2*t);var i=new Uint16Array(this._buffer,this.byteOffset+this.position,t);return s.arrayToNative(i,null==e?this.endianness:e),this.position+=2*t,i},s.prototype.mapFloat64Array=function(t,e){this._realloc(8*t);var i=new Float64Array(this._buffer,this.byteOffset+this.position,t);return s.arrayToNative(i,null==e?this.endianness:e),this.position+=8*t,i},s.prototype.mapFloat32Array=function(t,e){this._realloc(4*t);var i=new Float32Array(this._buffer,this.byteOffset+this.position,t);return s.arrayToNative(i,null==e?this.endianness:e),this.position+=4*t,i};var a=function(t){this.buffers=[],this.bufferIndex=-1,t&&(this.insertBuffer(t),this.bufferIndex=0)};a.prototype=new s(new ArrayBuffer,0,s.BIG_ENDIAN),a.prototype.initialized=function(){var t;return this.bufferIndex>-1||(this.buffers.length>0?(t=this.buffers[0],0===t.fileStart?(this.buffer=t,this.bufferIndex=0,r.debug("MultiBufferStream","Stream ready for parsing"),!0):(r.warn("MultiBufferStream","The first buffer should have a fileStart of 0"),this.logBufferLevel(),!1)):(r.warn("MultiBufferStream","No buffer to start parsing from"),this.logBufferLevel(),!1))},ArrayBuffer.concat=function(t,e){r.debug("ArrayBuffer","Trying to create a new buffer of size: "+(t.byteLength+e.byteLength));var i=new Uint8Array(t.byteLength+e.byteLength);return i.set(new Uint8Array(t),0),i.set(new Uint8Array(e),t.byteLength),i.buffer},a.prototype.reduceBuffer=function(t,e,i){var r;return r=new Uint8Array(i),r.set(new Uint8Array(t,e,i)),r.buffer.fileStart=t.fileStart+e,r.buffer.usedBytes=0,r.buffer},a.prototype.insertBuffer=function(t){for(var e=!0,i=0;i<this.buffers.length;i++){var n=this.buffers[i];if(t.fileStart<=n.fileStart){if(t.fileStart===n.fileStart){if(t.byteLength>n.byteLength){this.buffers.splice(i,1),i--;continue}r.warn("MultiBufferStream","Buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+") already appended, ignoring")}else t.fileStart+t.byteLength<=n.fileStart||(t=this.reduceBuffer(t,0,n.fileStart-t.fileStart)),r.debug("MultiBufferStream","Appending new buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+")"),this.buffers.splice(i,0,t),0===i&&(this.buffer=t);e=!1;break;
}if(t.fileStart<n.fileStart+n.byteLength){var s=n.fileStart+n.byteLength-t.fileStart,o=t.byteLength-s;if(!(o>0)){e=!1;break}t=this.reduceBuffer(t,s,o)}}e&&(r.debug("MultiBufferStream","Appending new buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+")"),this.buffers.push(t),0===i&&(this.buffer=t))},a.prototype.logBufferLevel=function(t){var e,i,n,s,o,a=[],f="";for(n=0,s=0,e=0;e<this.buffers.length;e++)i=this.buffers[e],0===e?(o={},a.push(o),o.start=i.fileStart,o.end=i.fileStart+i.byteLength,f+="["+o.start+"-"):o.end===i.fileStart?o.end=i.fileStart+i.byteLength:(o={},o.start=i.fileStart,f+=a[a.length-1].end-1+"], ["+o.start+"-",o.end=i.fileStart+i.byteLength,a.push(o)),n+=i.usedBytes,s+=i.byteLength;a.length>0&&(f+=o.end-1+"]");var u=t?r.info:r.debug;0===this.buffers.length?u("MultiBufferStream","No more buffer in memory"):u("MultiBufferStream",""+this.buffers.length+" stored buffer(s) ("+n+"/"+s+" bytes): "+f)},a.prototype.cleanBuffers=function(t){var e,i;if(t)for(e=0;e<this.buffers.length;e++)i=this.buffers[e],i.fileStart+i.byteLength<t&&(this.buffers.splice(e,1),e--);else for(e=0;e<this.buffers.length;e++)i=this.buffers[e],i.usedBytes===i.byteLength&&(r.debug("MultiBufferStream","Removing buffer #"+e),this.buffers.splice(e,1),e--)},a.prototype.mergeNextBuffer=function(){var t;if(this.bufferIndex+1<this.buffers.length){if(t=this.buffers[this.bufferIndex+1],t.fileStart===this.buffer.fileStart+this.buffer.byteLength){var e=this.buffer.byteLength,i=this.buffer.usedBytes,n=this.buffer.fileStart;return this.buffers[this.bufferIndex]=ArrayBuffer.concat(this.buffer,t),this.buffer=this.buffers[this.bufferIndex],this.buffers.splice(this.bufferIndex+1,1),this.buffer.usedBytes=i,this.buffer.fileStart=n,r.debug("ISOFile","Concatenating buffer for box parsing (length: "+e+"->"+this.buffer.byteLength+")"),!0}return!1}return!1},a.prototype.findPosition=function(t,e,i){var n,s=null,o=-1;for(n=t===!0?0:this.bufferIndex;n<this.buffers.length&&(s=this.buffers[n],s.fileStart<=e);)o=n,i&&(s.fileStart+s.byteLength<=e?s.usedBytes=s.byteLength:s.usedBytes=e-s.fileStart,this.logBufferLevel()),n++;return o!==-1?(s=this.buffers[o],s.fileStart+s.byteLength>=e?(r.debug("MultiBufferStream","Found position in existing buffer #"+o),o):-1):-1},a.prototype.findEndContiguousBuf=function(t){var e,i,r,n=void 0!==t?t:this.bufferIndex;if(i=this.buffers[n],this.buffers.length>n+1)for(e=n+1;e<this.buffers.length&&(r=this.buffers[e],r.fileStart===i.fileStart+i.byteLength);e++)i=r;return i.fileStart+i.byteLength},a.prototype.getEndFilePositionAfter=function(t){var e=this.findPosition(!0,t,!1);return e!==-1?this.findEndContiguousBuf(e):t},a.prototype.addUsedBytes=function(t){this.buffer.usedBytes+=t,this.logBufferLevel()},a.prototype.setAllUsedBytes=function(){this.buffer.usedBytes=this.buffer.byteLength,this.logBufferLevel()},a.prototype.seek=function(t,e,i){var n;return n=this.findPosition(e,t,i),n!==-1?(this.buffer=this.buffers[n],this.bufferIndex=n,this.position=t-this.buffer.fileStart,r.debug("MultiBufferStream","Repositioning parser at buffer position: "+this.position),!0):(r.debug("MultiBufferStream","Position "+t+" not found in buffered data"),!1)},a.prototype.getPosition=function(){if(this.bufferIndex===-1||null===this.buffers[this.bufferIndex])throw"Error accessing position in the MultiBufferStream";return this.buffers[this.bufferIndex].fileStart+this.position},a.prototype.getLength=function(){return this.byteLength},a.prototype.getEndPosition=function(){if(this.bufferIndex===-1||null===this.buffers[this.bufferIndex])throw"Error accessing position in the MultiBufferStream";return this.buffers[this.bufferIndex].fileStart+this.byteLength},e.MultiBufferStream=a;var f=function(){var t=3,e=4,i=5,n=6,s=[];s[t]="ES_Descriptor",s[e]="DecoderConfigDescriptor",s[i]="DecoderSpecificInfo",s[n]="SLConfigDescriptor";var o=this,a={};return this.parseOneDescriptor=function(t){var e,i,n,o=0,f=0;for(e=t.readUint8(),o++,n=t.readUint8(),o++;128&n;)f=(127&n)<<7,n=t.readUint8(),o++;return f+=127&n,r.debug("MPEG4DescriptorParser","Found "+(s[e]||"Descriptor "+e)+", size "+f+" at position "+t.getPosition()),i=s[e]?new a[s[e]](f):new a.Descriptor(f),i.parse(t),i},a.Descriptor=function(t,e){this.tag=t,this.size=e,this.descs=[]},a.Descriptor.prototype.parse=function(t){this.data=t.readUint8Array(this.size)},a.Descriptor.prototype.findDescriptor=function(t){for(var e=0;e<this.descs.length;e++)if(this.descs[e].tag==t)return this.descs[e];return null},a.Descriptor.prototype.parseRemainingDescriptors=function(t){for(var e=t.position;t.position<e+this.size;){var i=o.parseOneDescriptor(t);this.descs.push(i)}},a.ES_Descriptor=function(e){a.Descriptor.call(this,t,e)},a.ES_Descriptor.prototype=new a.Descriptor,a.ES_Descriptor.prototype.parse=function(t){if(this.ES_ID=t.readUint16(),this.flags=t.readUint8(),this.size-=3,128&this.flags?(this.dependsOn_ES_ID=t.readUint16(),this.size-=2):this.dependsOn_ES_ID=0,64&this.flags){var e=t.readUint8();this.URL=t.readString(e),this.size-=e+1}else this.URL=null;32&this.flags?(this.OCR_ES_ID=t.readUint16(),this.size-=2):this.OCR_ES_ID=0,this.parseRemainingDescriptors(t)},a.ES_Descriptor.prototype.getOTI=function(t){var i=this.findDescriptor(e);return i?i.oti:0},a.ES_Descriptor.prototype.getAudioConfig=function(t){var r=this.findDescriptor(e);if(!r)return null;var n=r.findDescriptor(i);return n&&n.data?(248&n.data[0])>>3:null},a.DecoderConfigDescriptor=function(t){a.Descriptor.call(this,e,t)},a.DecoderConfigDescriptor.prototype=new a.Descriptor,a.DecoderConfigDescriptor.prototype.parse=function(t){this.oti=t.readUint8(),this.streamType=t.readUint8(),this.bufferSize=t.readUint24(),this.maxBitrate=t.readUint32(),this.avgBitrate=t.readUint32(),this.size-=13,this.parseRemainingDescriptors(t)},a.DecoderSpecificInfo=function(t){a.Descriptor.call(this,i,t)},a.DecoderSpecificInfo.prototype=new a.Descriptor,a.SLConfigDescriptor=function(t){a.Descriptor.call(this,n,t)},a.SLConfigDescriptor.prototype=new a.Descriptor,this};e.MPEG4DescriptorParser=f;var u={ERR_INVALID_DATA:-1,ERR_NOT_ENOUGH_DATA:0,OK:1,boxCodes:["mdat","idat","free","skip","avcC","hvcC","ftyp","styp","payl","vttC","rtp ","sdp ","btrt","frma","trpy","tpyl","totl","tpay","dmed","dimm","drep","nump","npck","maxr","tmin","tmax","dmax","pmax","payt","vmhd","smhd","hmhd","idat","meco","udta","strk","free","skip","clap","pasp"],fullBoxCodes:["mvhd","tkhd","mdhd","hdlr","vmhd","smhd","hmhd","nmhd","url ","urn ","ctts","cslg","stco","co64","stsc","stss","stsz","stz2","stts","stsh","mehd","trex","mfhd","tfhd","trun","tfdt","esds","subs","txtC","sidx","emsg","prft","pssh","elst","dref","url ","urn ","sbgp","sgpd","cprt","iods","ssix","tfra","mfro","pdin","tsel","trep","leva","stri","stsg","schm","stvi","padb","stdp","sdtp","saio","saiz","meta","xml ","bxml","iloc","pitm","ipro","iinf","infe","iref","mere","kind","elng","ipma","pixi","ispe"],containerBoxCodes:[["moov",["trak","sidx"]],["trak"],["edts"],["mdia"],["minf"],["dinf"],["stbl",["sgpd","sbgp"]],["mvex",["trex"]],["moof",["traf"]],["traf",["trun","sgpd","sbgp"]],["vttc"],["tref"],["iref"],["udta"],["mfra"],["meco"],["hnti"],["hinf"],["strk"],["strd"],["sinf"],["rinf"],["schi"],["trgr"],["udta",["kind"]],["iprp",["ipma"]],["ipco"]],sampleEntryCodes:[{prefix:"Visual",types:["mp4v","avc1","avc2","avc3","avc4","avcp","drac","encv","mjp2","mvc1","mvc2","resv","s263","svc1","vc-1","hvc1","hev1"]},{prefix:"Audio",types:["mp4a","ac-3","alac","dra1","dtsc","dtse",,"dtsh","dtsl","ec-3","enca","g719","g726","m4ae","mlpa","raw ","samr","sawb","sawp","sevc","sqcp","ssmv","twos",".mp3"]},{prefix:"Hint",types:["fdp ","m2ts","pm2t","prtp","rm2t","rrtp","rsrp","rtp ","sm2t","srtp"]},{prefix:"Metadata",types:["metx","mett","urim"]},{prefix:"Subtitle",types:["stpp","wvtt","sbtt","tx3g","stxt"]},{prefix:"System",types:["mp4s"]}],sampleGroupEntryCodes:["roll","prol","alst","rap ","tele","avss","avll","sync","tscl","tsas","stsa","scif","mvif","scnm","dtrt","vipr","tele","rash"],trackGroupTypes:["msrc"],initialize:function(){var t,e,i;for(u.FullBox.prototype=new u.Box,u.ContainerBox.prototype=new u.Box,u.SampleEntry.prototype=new u.FullBox,u.TrackGroupTypeBox.prototype=new u.FullBox,i=u.boxCodes.length,t=0;t<i;t++)u[u.boxCodes[t]+"Box"]=function(t){return function(e){u.Box.call(this,u.boxCodes[t],e)}}(t),u[u.boxCodes[t]+"Box"].prototype=new u.Box;for(i=u.fullBoxCodes.length,t=0;t<i;t++)u[u.fullBoxCodes[t]+"Box"]=function(t){return function(e){u.FullBox.call(this,u.fullBoxCodes[t],e)}}(t),u[u.fullBoxCodes[t]+"Box"].prototype=new u.FullBox;for(i=u.containerBoxCodes.length,t=0;t<i;t++)u[u.containerBoxCodes[t][0]+"Box"]=function(t,e){return function(i){if(u.ContainerBox.call(this,u.containerBoxCodes[t][0],i),e){this.subBoxNames=e;for(var r=e.length,n=0;n<r;n++)this[e[n]+"s"]=[]}}}(t,u.containerBoxCodes[t][1]),u[u.containerBoxCodes[t][0]+"Box"].prototype=new u.ContainerBox;for(i=u.sampleEntryCodes.length,e=0;e<i;e++){var r=u.sampleEntryCodes[e].prefix,n=u.sampleEntryCodes[e].types,s=n.length;for(u[r+"SampleEntry"]=function(t,e){u.SampleEntry.call(this,t,e)},u[r+"SampleEntry"].prototype=new u.SampleEntry,t=0;t<s;t++)u[n[t]+"SampleEntry"]=function(t,e){return function(i){u[u.sampleEntryCodes[t].prefix+"SampleEntry"].call(this,u.sampleEntryCodes[t].types[e],i)}}(e,t),u[n[t]+"SampleEntry"].prototype=new u[r+"SampleEntry"]}for(i=u.sampleGroupEntryCodes.length,t=0;t<i;t++)u[u.sampleGroupEntryCodes[t]+"SampleGroupEntry"]=function(t){return function(e){u.SampleGroupEntry.call(this,u.sampleGroupEntryCodes[t],e)}}(t),u[u.sampleGroupEntryCodes[t]+"SampleGroupEntry"].prototype=new u.SampleGroupEntry;for(i=u.trackGroupTypes.length,t=0;t<i;t++)u[u.trackGroupTypes[t]+"Box"]=function(t){return function(e){u.TrackGroupTypeBox.call(this,u.trackGroupTypes[t],e)}}(t),u[u.trackGroupTypes[t]+"Box"].prototype=new u.TrackGroupTypeBox},Box:function(t,e){this.type=t,this.size=e},FullBox:function(t,e){u.Box.call(this,t,e),this.flags=0,this.version=0},ContainerBox:function(t,e){u.Box.call(this,t,e),this.boxes=[]},SampleEntry:function(t,e,i,r){u.Box.call(this,t,e),this.hdr_size=i,this.start=r,this.boxes=[]},SampleGroupEntry:function(t){this.grouping_type=t},TrackGroupTypeBox:function(t,e){u.FullBox.call(this,t,e)}};u.initialize(),u.TKHD_FLAG_ENABLED=1,u.TKHD_FLAG_IN_MOVIE=2,u.TKHD_FLAG_IN_PREVIEW=4,u.TFHD_FLAG_BASE_DATA_OFFSET=1,u.TFHD_FLAG_SAMPLE_DESC=2,u.TFHD_FLAG_SAMPLE_DUR=8,u.TFHD_FLAG_SAMPLE_SIZE=16,u.TFHD_FLAG_SAMPLE_FLAGS=32,u.TFHD_FLAG_DUR_EMPTY=65536,u.TFHD_FLAG_DEFAULT_BASE_IS_MOOF=131072,u.TRUN_FLAGS_DATA_OFFSET=1,u.TRUN_FLAGS_FIRST_FLAG=4,u.TRUN_FLAGS_DURATION=256,u.TRUN_FLAGS_SIZE=512,u.TRUN_FLAGS_FLAGS=1024,u.TRUN_FLAGS_CTS_OFFSET=2048,u.Box.prototype.add=function(t){var e=new u[t+"Box"];return this.boxes.push(e),this[t+"s"]?this[t+"s"].push(e):this[t]=e,e},u.Box.prototype.set=function(t,e){return this[t]=e,this},u.Box.prototype.addEntry=function(t,e){var i=e||"entries";return this[i]||(this[i]=[]),this[i].push(t),this},e.BoxParser=u,u.SampleEntry.prototype.isVideo=function(){return!1},u.SampleEntry.prototype.isAudio=function(){return!1},u.SampleEntry.prototype.isSubtitle=function(){return!1},u.SampleEntry.prototype.isMetadata=function(){return!1},u.SampleEntry.prototype.isHint=function(){return!1},u.SampleEntry.prototype.getCodec=function(){return this.type.replace(".","")},u.SampleEntry.prototype.getWidth=function(){return""},u.SampleEntry.prototype.getHeight=function(){return""},u.SampleEntry.prototype.getChannelCount=function(){return""},u.SampleEntry.prototype.getSampleRate=function(){return""},u.SampleEntry.prototype.getSampleSize=function(){return""},u.VisualSampleEntry.prototype.isVideo=function(){return!0},u.VisualSampleEntry.prototype.getWidth=function(){return this.width},u.VisualSampleEntry.prototype.getHeight=function(){return this.height},u.AudioSampleEntry.prototype.isAudio=function(){return!0},u.AudioSampleEntry.prototype.getChannelCount=function(){return this.channel_count},u.AudioSampleEntry.prototype.getSampleRate=function(){return this.samplerate},u.AudioSampleEntry.prototype.getSampleSize=function(){return this.samplesize},u.SubtitleSampleEntry.prototype.isSubtitle=function(){return!0},u.MetadataSampleEntry.prototype.isMetadata=function(){return!0},u.decimalToHex=function(t,e){var i=Number(t).toString(16);for(e="undefined"==typeof e||null===e?e=2:e;i.length<e;)i="0"+i;return i},u.avc1SampleEntry.prototype.getCodec=function(){var t=u.SampleEntry.prototype.getCodec.call(this);return this.avcC?t+"."+u.decimalToHex(this.avcC.AVCProfileIndication)+u.decimalToHex(this.avcC.profile_compatibility)+u.decimalToHex(this.avcC.AVCLevelIndication):t},u.hvc1SampleEntry.prototype.getCodec=function(){var t,e=u.SampleEntry.prototype.getCodec.call(this);if(this.hvcC){switch(e+=".",this.hvcC.general_profile_space){case 0:e+="";break;case 1:e+="A";break;case 2:e+="B";break;case 3:e+="C"}e+=this.hvcC.general_profile_idc,e+=".";var i=this.hvcC.general_profile_compatibility,r=0;for(t=0;t<32&&(r|=1&i,31!=t);t++)r<<=1,i>>=1;e+=u.decimalToHex(r,0),e+=".",e+=0===this.hvcC.general_tier_flag?"L":"H",e+=this.hvcC.general_level_idc;var n=!1,s="";for(t=5;t>=0;t--)(this.hvcC.general_constraint_indicator[t]||n)&&(s="."+u.decimalToHex(this.hvcC.general_constraint_indicator[t],0)+s,n=!0);e+=s}return e},u.mp4aSampleEntry.prototype.getCodec=function(){var t=u.SampleEntry.prototype.getCodec.call(this);if(this.esds&&this.esds.esd){var e=this.esds.esd.getOTI(),i=this.esds.esd.getAudioConfig();return t+"."+u.decimalToHex(e)+(i?"."+i:"")}return t},u.stxtSampleEntry.prototype.getCodec=function(){var t=u.SampleEntry.prototype.getCodec.call(this);return this.mime_format?t+"."+this.mime_format:t},u.parseOneBox=function(t,e,i){var n,s,o,a=t.getPosition(),f=0;if(t.getEndPosition()-a<8)return r.debug("BoxParser","Not enough data in stream to parse the type and size of the box"),{code:u.ERR_NOT_ENOUGH_DATA};var l=t.readUint32(),p=t.readString(4);if(r.debug("BoxParser","Found box of type "+p+" and size "+l+" at position "+a),f=8,"uuid"==p&&(o=t.readUint8Array(16),f+=16),1==l){if(t.getEndPosition()-t.getPosition()<8)return t.seek(a),r.warn("BoxParser",'Not enough data in stream to parse the extended size of the "'+p+'" box'),{code:u.ERR_NOT_ENOUGH_DATA};l=t.readUint64(),f+=8}else if(0===l&&"mdat"!==p)throw"Unlimited box size not supported";return i&&l>i?(r.error("BoxParser","Box of type "+p+" has a size "+l+" greater than its container size "+i),{code:u.ERR_NOT_ENOUGH_DATA,type:p,size:l,hdr_size:f,start:a}):a+l>t.getEndPosition()?(t.seek(a),r.warn("BoxParser",'Not enough data in stream to parse the entire "'+p+'" box'),{code:u.ERR_NOT_ENOUGH_DATA,type:p,size:l,hdr_size:f,start:a}):e?{code:u.OK,type:p,size:l,hdr_size:f,start:a}:(u[p+"Box"]?n=new u[p+"Box"](l):("uuid"!==p&&r.warn("BoxParser","Unknown box type: "+p),n=new u.Box(p,l),o&&(n.uuid=o)),n.hdr_size=f,n.start=a,n.write===u.Box.prototype.write&&"mdat"!==n.type&&(r.warn("BoxParser",n.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),n.parseDataAndRewind(t)),n.parse(t),s=t.getPosition()-(n.start+n.size),s<0?(r.warn("BoxParser","Parsing of box "+n.type+" did not read the entire indicated box data size (missing "+-s+" bytes), seeking forward"),t.seek(n.start+n.size)):s>0&&(r.error("BoxParser","Parsing of box "+n.type+" read "+s+" more bytes than the indicated box data size, seeking backwards"),t.seek(n.start+n.size)),{code:u.OK,box:n,size:n.size})},u.Box.prototype.parse=function(t){"mdat"!=this.type?this.data=t.readUint8Array(this.size-this.hdr_size):0===this.size?t.seek(t.getEndPosition()):t.seek(this.start+this.size)},u.Box.prototype.parseDataAndRewind=function(t){this.data=t.readUint8Array(this.size-this.hdr_size),t.position-=this.size-this.hdr_size},u.FullBox.prototype.parseDataAndRewind=function(t){this.parseFullHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size),this.hdr_size-=4,t.position-=this.size-this.hdr_size},u.FullBox.prototype.parseFullHeader=function(t){this.version=t.readUint8(),this.flags=t.readUint24(),this.hdr_size+=4},u.FullBox.prototype.parse=function(t){this.parseFullHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size)},u.ContainerBox.prototype.parse=function(t){for(var e,i;t.getPosition()<this.start+this.size;){if(e=u.parseOneBox(t,!1,this.size-(t.getPosition()-this.start)),e.code!==u.OK)return;i=e.box,this.boxes.push(i),this.subBoxNames&&this.subBoxNames.indexOf(i.type)!=-1?this[this.subBoxNames[this.subBoxNames.indexOf(i.type)]+"s"].push(i):this[i.type]=i}},u.Box.prototype.parseLanguage=function(t){this.language=t.readUint16();var e=[];e[0]=this.language>>10&31,e[1]=this.language>>5&31,e[2]=31&this.language,this.languageString=String.fromCharCode(e[0]+96,e[1]+96,e[2]+96)},u.TrackGroupTypeBox.prototype.parse=function(t){this.parseFullHeader(t),this.track_group_id=t.readUint32()},u.TrackReferenceTypeBox=function(t,e,i,r){u.Box.call(this,t,e),this.hdr_size=i,this.start=r},u.TrackReferenceTypeBox.prototype=new u.Box,u.TrackReferenceTypeBox.prototype.parse=function(t){this.track_ids=t.readUint32Array((this.size-this.hdr_size)/4)},u.avcCBox.prototype.parse=function(t){var e,i,r,n;for(this.configurationVersion=t.readUint8(),this.AVCProfileIndication=t.readUint8(),this.profile_compatibility=t.readUint8(),this.AVCLevelIndication=t.readUint8(),this.lengthSizeMinusOne=3&t.readUint8(),i=31&t.readUint8(),n=this.size-this.hdr_size-6,this.SPS=new Array(i),e=0;e<i;e++)r=t.readUint16(),this.SPS[e]=t.readUint8Array(r),n-=2+r;for(i=t.readUint8(),n--,this.PPS=new Array(i),e=0;e<i;e++)r=t.readUint16(),this.PPS[e]=t.readUint8Array(r),n-=2+r;n>0&&(this.ext=t.readUint8Array(n))},u.btrtBox.prototype.parse=function(t){this.bufferSizeDB=t.readUint32(),this.maxBitrate=t.readUint32(),this.avgBitrate=t.readUint32()},u.clapBox.prototype.parse=function(t){this.cleanApertureWidthN=t.readUint32(),this.cleanApertureWidthD=t.readUint32(),this.cleanApertureHeightN=t.readUint32(),this.cleanApertureHeightD=t.readUint32(),this.horizOffN=t.readUin