mp4box
Version:
JavaScript version of GPAC's MP4Box tool
3 lines • 66.3 kB
JavaScript
/*! mp4box 10-04-2015 */
var Log=function(){var a=new Date,b=4,c=3,d=2,e=1,f=b,g={setLogLevel:function(a){f=a==this.d?e:a==this.i?d:a==this.w?c:a==this.e?b:b},d:function(b,c){e>=f&&console.debug("["+Log.getDurationString(new Date-a,1e3)+"]","["+b+"]",c)},i:function(b,c){d>=f&&console.info("["+Log.getDurationString(new Date-a,1e3)+"]","["+b+"]",c)},w:function(b,d){c>=f&&console.warn("["+Log.getDurationString(new Date-a,1e3)+"]","["+b+"]",d)},e:function(c,d){b>=f&&console.error("["+Log.getDurationString(new Date-a,1e3)+"]","["+c+"]",d)}};return g}();Log.getDurationString=function(a,b){function c(a,b){for(var c=""+a,d=c.split(".");d[0].length<b;)d[0]="0"+d[0];return d.join(".")}var d=b||1,e=a/d,f=Math.floor(e/3600);e-=3600*f;var g=Math.floor(e/60);e-=60*g;var h=1e3*e;return e=Math.floor(e),h-=1e3*e,h=Math.floor(h),""+f+":"+c(g,2)+":"+c(e,2)+"."+c(h,3)},Log.printRanges=function(a){var b=a.length;if(b>0){for(var c="",d=0;b>d;d++)d>0&&(c+=","),c+="["+Log.getDurationString(a.start(d))+","+Log.getDurationString(a.end(d))+"]";return c}return"(empty)"};var DataStream=function(a,b,c){this._byteOffset=b||0,a instanceof ArrayBuffer?this.buffer=a:"object"==typeof a?(this.dataView=a,b&&(this._byteOffset+=b)):this.buffer=new ArrayBuffer(a||0),this.position=0,this.endianness=null==c?DataStream.LITTLE_ENDIAN:c};DataStream.prototype={},DataStream.prototype.save=function(a){var b=new Blob([this.buffer]),c=window.webkitURL||window.URL;if(!c||!c.createObjectURL)throw"DataStream.save: Can't create object URL.";var d=c.createObjectURL(b),e=document.createElement("a");e.setAttribute("href",d),e.setAttribute("download",a),e.click(),c.revokeObjectURL(d)},DataStream.BIG_ENDIAN=!1,DataStream.LITTLE_ENDIAN=!0,DataStream.prototype._dynamicSize=!0,Object.defineProperty(DataStream.prototype,"dynamicSize",{get:function(){return this._dynamicSize},set:function(a){a||this._trimAlloc(),this._dynamicSize=a}}),DataStream.prototype._byteLength=0,Object.defineProperty(DataStream.prototype,"byteLength",{get:function(){return this._byteLength-this._byteOffset}}),Object.defineProperty(DataStream.prototype,"buffer",{get:function(){return this._trimAlloc(),this._buffer},set:function(a){this._buffer=a,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}}),Object.defineProperty(DataStream.prototype,"byteOffset",{get:function(){return this._byteOffset},set:function(a){this._byteOffset=a,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}}),Object.defineProperty(DataStream.prototype,"dataView",{get:function(){return this._dataView},set:function(a){this._byteOffset=a.byteOffset,this._buffer=a.buffer,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._byteOffset+a.byteLength}}),DataStream.prototype._realloc=function(a){if(this._dynamicSize){var b=this._byteOffset+this.position+a,c=this._buffer.byteLength;if(c>=b)return void(b>this._byteLength&&(this._byteLength=b));for(1>c&&(c=1);b>c;)c*=2;var d=new ArrayBuffer(c),e=new Uint8Array(this._buffer),f=new Uint8Array(d,0,e.length);f.set(e),this.buffer=d,this._byteLength=b}},DataStream.prototype._trimAlloc=function(){if(this._byteLength!=this._buffer.byteLength){var a=new ArrayBuffer(this._byteLength),b=new Uint8Array(a),c=new Uint8Array(this._buffer,0,b.length);b.set(c),this.buffer=a}},DataStream.prototype.shift=function(a){var b=new ArrayBuffer(this._byteLength-a),c=new Uint8Array(b),d=new Uint8Array(this._buffer,a,c.length);c.set(d),this.buffer=b,this.position-=a},DataStream.prototype.seek=function(a){var b=Math.max(0,Math.min(this.byteLength,a));this.position=isNaN(b)||!isFinite(b)?0:b},DataStream.prototype.isEof=function(){return this.position>=this._byteLength},DataStream.prototype.mapInt32Array=function(a,b){this._realloc(4*a);var c=new Int32Array(this._buffer,this.byteOffset+this.position,a);return DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=4*a,c},DataStream.prototype.mapInt16Array=function(a,b){this._realloc(2*a);var c=new Int16Array(this._buffer,this.byteOffset+this.position,a);return DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=2*a,c},DataStream.prototype.mapInt8Array=function(a){this._realloc(1*a);var b=new Int8Array(this._buffer,this.byteOffset+this.position,a);return this.position+=1*a,b},DataStream.prototype.mapUint32Array=function(a,b){this._realloc(4*a);var c=new Uint32Array(this._buffer,this.byteOffset+this.position,a);return DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=4*a,c},DataStream.prototype.mapUint16Array=function(a,b){this._realloc(2*a);var c=new Uint16Array(this._buffer,this.byteOffset+this.position,a);return DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=2*a,c},DataStream.prototype.mapUint8Array=function(a){this._realloc(1*a);var b=new Uint8Array(this._buffer,this.byteOffset+this.position,a);return this.position+=1*a,b},DataStream.prototype.mapFloat64Array=function(a,b){this._realloc(8*a);var c=new Float64Array(this._buffer,this.byteOffset+this.position,a);return DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=8*a,c},DataStream.prototype.mapFloat32Array=function(a,b){this._realloc(4*a);var c=new Float32Array(this._buffer,this.byteOffset+this.position,a);return DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=4*a,c},DataStream.prototype.readInt32Array=function(a,b){a=null==a?this.byteLength-this.position/4:a;var c=new Int32Array(a);return DataStream.memcpy(c.buffer,0,this.buffer,this.byteOffset+this.position,a*c.BYTES_PER_ELEMENT),DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=c.byteLength,c},DataStream.prototype.readInt16Array=function(a,b){a=null==a?this.byteLength-this.position/2:a;var c=new Int16Array(a);return DataStream.memcpy(c.buffer,0,this.buffer,this.byteOffset+this.position,a*c.BYTES_PER_ELEMENT),DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=c.byteLength,c},DataStream.prototype.readInt8Array=function(a){a=null==a?this.byteLength-this.position:a;var b=new Int8Array(a);return DataStream.memcpy(b.buffer,0,this.buffer,this.byteOffset+this.position,a*b.BYTES_PER_ELEMENT),this.position+=b.byteLength,b},DataStream.prototype.readUint32Array=function(a,b){a=null==a?this.byteLength-this.position/4:a;var c=new Uint32Array(a);return DataStream.memcpy(c.buffer,0,this.buffer,this.byteOffset+this.position,a*c.BYTES_PER_ELEMENT),DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=c.byteLength,c},DataStream.prototype.readUint16Array=function(a,b){a=null==a?this.byteLength-this.position/2:a;var c=new Uint16Array(a);return DataStream.memcpy(c.buffer,0,this.buffer,this.byteOffset+this.position,a*c.BYTES_PER_ELEMENT),DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=c.byteLength,c},DataStream.prototype.readUint8Array=function(a){a=null==a?this.byteLength-this.position:a;var b=new Uint8Array(a);return DataStream.memcpy(b.buffer,0,this.buffer,this.byteOffset+this.position,a*b.BYTES_PER_ELEMENT),this.position+=b.byteLength,b},DataStream.prototype.readFloat64Array=function(a,b){a=null==a?this.byteLength-this.position/8:a;var c=new Float64Array(a);return DataStream.memcpy(c.buffer,0,this.buffer,this.byteOffset+this.position,a*c.BYTES_PER_ELEMENT),DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=c.byteLength,c},DataStream.prototype.readFloat32Array=function(a,b){a=null==a?this.byteLength-this.position/4:a;var c=new Float32Array(a);return DataStream.memcpy(c.buffer,0,this.buffer,this.byteOffset+this.position,a*c.BYTES_PER_ELEMENT),DataStream.arrayToNative(c,null==b?this.endianness:b),this.position+=c.byteLength,c},DataStream.prototype.writeInt32Array=function(a,b){if(this._realloc(4*a.length),a instanceof Int32Array&&this.byteOffset+this.position%a.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,a.buffer,0,a.byteLength),this.mapInt32Array(a.length,b);else for(var c=0;c<a.length;c++)this.writeInt32(a[c],b)},DataStream.prototype.writeInt16Array=function(a,b){if(this._realloc(2*a.length),a instanceof Int16Array&&this.byteOffset+this.position%a.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,a.buffer,0,a.byteLength),this.mapInt16Array(a.length,b);else for(var c=0;c<a.length;c++)this.writeInt16(a[c],b)},DataStream.prototype.writeInt8Array=function(a){if(this._realloc(1*a.length),a instanceof Int8Array&&this.byteOffset+this.position%a.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,a.buffer,0,a.byteLength),this.mapInt8Array(a.length);else for(var b=0;b<a.length;b++)this.writeInt8(a[b])},DataStream.prototype.writeUint32Array=function(a,b){if(this._realloc(4*a.length),a instanceof Uint32Array&&this.byteOffset+this.position%a.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,a.buffer,0,a.byteLength),this.mapUint32Array(a.length,b);else for(var c=0;c<a.length;c++)this.writeUint32(a[c],b)},DataStream.prototype.writeUint16Array=function(a,b){if(this._realloc(2*a.length),a instanceof Uint16Array&&this.byteOffset+this.position%a.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,a.buffer,0,a.byteLength),this.mapUint16Array(a.length,b);else for(var c=0;c<a.length;c++)this.writeUint16(a[c],b)},DataStream.prototype.writeUint8Array=function(a){if(this._realloc(1*a.length),a instanceof Uint8Array&&this.byteOffset+this.position%a.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,a.buffer,0,a.byteLength),this.mapUint8Array(a.length);else for(var b=0;b<a.length;b++)this.writeUint8(a[b])},DataStream.prototype.writeFloat64Array=function(a,b){if(this._realloc(8*a.length),a instanceof Float64Array&&this.byteOffset+this.position%a.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,a.buffer,0,a.byteLength),this.mapFloat64Array(a.length,b);else for(var c=0;c<a.length;c++)this.writeFloat64(a[c],b)},DataStream.prototype.writeFloat32Array=function(a,b){if(this._realloc(4*a.length),a instanceof Float32Array&&this.byteOffset+this.position%a.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,a.buffer,0,a.byteLength),this.mapFloat32Array(a.length,b);else for(var c=0;c<a.length;c++)this.writeFloat32(a[c],b)},DataStream.prototype.readInt32=function(a){var b=this._dataView.getInt32(this.position,null==a?this.endianness:a);return this.position+=4,b},DataStream.prototype.readInt16=function(a){var b=this._dataView.getInt16(this.position,null==a?this.endianness:a);return this.position+=2,b},DataStream.prototype.readInt8=function(){var a=this._dataView.getInt8(this.position);return this.position+=1,a},DataStream.prototype.readUint32=function(a){var b=this._dataView.getUint32(this.position,null==a?this.endianness:a);return this.position+=4,b},DataStream.prototype.readUint16=function(a){var b=this._dataView.getUint16(this.position,null==a?this.endianness:a);return this.position+=2,b},DataStream.prototype.readUint8=function(){var a=this._dataView.getUint8(this.position);return this.position+=1,a},DataStream.prototype.readFloat32=function(a){var b=this._dataView.getFloat32(this.position,null==a?this.endianness:a);return this.position+=4,b},DataStream.prototype.readFloat64=function(a){var b=this._dataView.getFloat64(this.position,null==a?this.endianness:a);return this.position+=8,b},DataStream.prototype.writeInt32=function(a,b){this._realloc(4),this._dataView.setInt32(this.position,a,null==b?this.endianness:b),this.position+=4},DataStream.prototype.writeInt16=function(a,b){this._realloc(2),this._dataView.setInt16(this.position,a,null==b?this.endianness:b),this.position+=2},DataStream.prototype.writeInt8=function(a){this._realloc(1),this._dataView.setInt8(this.position,a),this.position+=1},DataStream.prototype.writeUint32=function(a,b){this._realloc(4),this._dataView.setUint32(this.position,a,null==b?this.endianness:b),this.position+=4},DataStream.prototype.writeUint16=function(a,b){this._realloc(2),this._dataView.setUint16(this.position,a,null==b?this.endianness:b),this.position+=2},DataStream.prototype.writeUint8=function(a){this._realloc(1),this._dataView.setUint8(this.position,a),this.position+=1},DataStream.prototype.writeFloat32=function(a,b){this._realloc(4),this._dataView.setFloat32(this.position,a,null==b?this.endianness:b),this.position+=4},DataStream.prototype.writeFloat64=function(a,b){this._realloc(8),this._dataView.setFloat64(this.position,a,null==b?this.endianness:b),this.position+=8},DataStream.endianness=new Int8Array(new Int16Array([1]).buffer)[0]>0,DataStream.memcpy=function(a,b,c,d,e){var f=new Uint8Array(a,b,e),g=new Uint8Array(c,d,e);f.set(g)},DataStream.arrayToNative=function(a,b){return b==this.endianness?a:this.flipArrayEndianness(a)},DataStream.nativeToEndian=function(a,b){return this.endianness==b?a:this.flipArrayEndianness(a)},DataStream.flipArrayEndianness=function(a){for(var b=new Uint8Array(a.buffer,a.byteOffset,a.byteLength),c=0;c<a.byteLength;c+=a.BYTES_PER_ELEMENT)for(var d=c+a.BYTES_PER_ELEMENT-1,e=c;d>e;d--,e++){var f=b[e];b[e]=b[d],b[d]=f}return a},DataStream.prototype.failurePosition=0,DataStream.prototype.readStruct=function(a){for(var b,c,d={},e=this.position,f=0;f<a.length;f+=2){if(b=a[f+1],c=this.readType(b,d),null==c)return 0===this.failurePosition&&(this.failurePosition=this.position),this.position=e,null;d[a[f]]=c}return d},DataStream.prototype.readUCS2String=function(a,b){return String.fromCharCode.apply(null,this.readUint16Array(a,b))},DataStream.prototype.writeUCS2String=function(a,b,c){null==c&&(c=a.length);for(var d=0;d<a.length&&c>d;d++)this.writeUint16(a.charCodeAt(d),b);for(;c>d;d++)this.writeUint16(0)},DataStream.prototype.readString=function(a,b){return null==b||"ASCII"==b?String.fromCharCode.apply(null,this.mapUint8Array(null==a?this.byteLength-this.position:a)):new TextDecoder(b).decode(this.mapUint8Array(a))},DataStream.prototype.writeString=function(a,b,c){var d=0;if(null==b||"ASCII"==b)if(null!=c){var e=Math.min(a.length,c);for(d=0;e>d;d++)this.writeUint8(a.charCodeAt(d));for(;c>d;d++)this.writeUint8(0)}else for(d=0;d<a.length;d++)this.writeUint8(a.charCodeAt(d));else this.writeUint8Array(new TextEncoder(b).encode(a.substring(0,c)))},DataStream.prototype.readCString=function(a){var b=this.byteLength-this.position,c=new Uint8Array(this._buffer,this._byteOffset+this.position),d=b;null!=a&&(d=Math.min(a,b));for(var e=0;d>e&&0!==c[e];e++);var f=String.fromCharCode.apply(null,this.mapUint8Array(e));return null!=a?this.position+=d-e:e!=b&&(this.position+=1),f},DataStream.prototype.writeCString=function(a,b){var c=0;if(null!=b){var d=Math.min(a.length,b);for(c=0;d>c;c++)this.writeUint8(a.charCodeAt(c));for(;b>c;c++)this.writeUint8(0)}else{for(c=0;c<a.length;c++)this.writeUint8(a.charCodeAt(c));this.writeUint8(0)}},DataStream.prototype.readType=function(a,b){if("function"==typeof a)return a(this,b);if(!("object"!=typeof a||a instanceof Array))return a.get(this,b);if(a instanceof Array&&3!=a.length)return this.readStruct(a,b);var c,d,e,f=null,g=null,h="ASCII",i=this.position;switch("string"==typeof a&&/:/.test(a)&&(c=a.split(":"),a=c[0],g=parseInt(c[1])),"string"==typeof a&&/,/.test(a)&&(c=a.split(","),a=c[0],h=parseInt(c[1])),a){case"uint8":f=this.readUint8();break;case"int8":f=this.readInt8();break;case"uint16":f=this.readUint16(this.endianness);break;case"int16":f=this.readInt16(this.endianness);break;case"uint32":f=this.readUint32(this.endianness);break;case"int32":f=this.readInt32(this.endianness);break;case"float32":f=this.readFloat32(this.endianness);break;case"float64":f=this.readFloat64(this.endianness);break;case"uint16be":f=this.readUint16(DataStream.BIG_ENDIAN);break;case"int16be":f=this.readInt16(DataStream.BIG_ENDIAN);break;case"uint32be":f=this.readUint32(DataStream.BIG_ENDIAN);break;case"int32be":f=this.readInt32(DataStream.BIG_ENDIAN);break;case"float32be":f=this.readFloat32(DataStream.BIG_ENDIAN);break;case"float64be":f=this.readFloat64(DataStream.BIG_ENDIAN);break;case"uint16le":f=this.readUint16(DataStream.LITTLE_ENDIAN);break;case"int16le":f=this.readInt16(DataStream.LITTLE_ENDIAN);break;case"uint32le":f=this.readUint32(DataStream.LITTLE_ENDIAN);break;case"int32le":f=this.readInt32(DataStream.LITTLE_ENDIAN);break;case"float32le":f=this.readFloat32(DataStream.LITTLE_ENDIAN);break;case"float64le":f=this.readFloat64(DataStream.LITTLE_ENDIAN);break;case"cstring":f=this.readCString(g);break;case"string":f=this.readString(g,h);break;case"u16string":f=this.readUCS2String(g,this.endianness);break;case"u16stringle":f=this.readUCS2String(g,DataStream.LITTLE_ENDIAN);break;case"u16stringbe":f=this.readUCS2String(g,DataStream.BIG_ENDIAN);break;default:if(3==a.length){var j=a[1],k=a[2],l=0;if(l="function"==typeof k?k(b,this,a):parseInt("string"==typeof k&&null!=b[k]?b[k]:k),"string"==typeof j){var m=j.replace(/(le|be)$/,""),n=null;switch(/le$/.test(j)?n=DataStream.LITTLE_ENDIAN:/be$/.test(j)&&(n=DataStream.BIG_ENDIAN),"*"==k&&(l=null),m){case"uint8":f=this.readUint8Array(l);break;case"uint16":f=this.readUint16Array(l,n);break;case"uint32":f=this.readUint32Array(l,n);break;case"int8":f=this.readInt8Array(l);break;case"int16":f=this.readInt16Array(l,n);break;case"int32":f=this.readInt32Array(l,n);break;case"float32":f=this.readFloat32Array(l,n);break;case"float64":f=this.readFloat64Array(l,n);break;case"cstring":case"utf16string":case"string":if(null==l)for(f=[];!this.isEof()&&(e=this.readType(j,b),null!=e);)f.push(e);else for(f=new Array(l),d=0;l>d;d++)f[d]=this.readType(j,b)}}else if("*"==k){f=[];for(this.buffer;;){var o=this.position;try{var p=this.readType(j,b);if(null==p){this.position=o;break}f.push(p)}catch(q){this.position=o;break}}}else for(f=new Array(l),d=0;l>d;d++){if(e=this.readType(j,b),null==e)return null;f[d]=e}break}}return null!=g&&(this.position=i+g),f},DataStream.prototype.writeStruct=function(a,b){for(var c=0;c<a.length;c+=2){var d=a[c+1];this.writeType(d,b[a[c]],b)}},DataStream.prototype.writeType=function(a,b,c){var d;if("function"==typeof a)return a(this,b);if("object"==typeof a&&!(a instanceof Array))return a.set(this,b,c);var e=null,f="ASCII",g=this.position;switch("string"==typeof a&&/:/.test(a)&&(d=a.split(":"),a=d[0],e=parseInt(d[1])),"string"==typeof a&&/,/.test(a)&&(d=a.split(","),a=d[0],f=parseInt(d[1])),a){case"uint8":this.writeUint8(b);break;case"int8":this.writeInt8(b);break;case"uint16":this.writeUint16(b,this.endianness);break;case"int16":this.writeInt16(b,this.endianness);break;case"uint32":this.writeUint32(b,this.endianness);break;case"int32":this.writeInt32(b,this.endianness);break;case"float32":this.writeFloat32(b,this.endianness);break;case"float64":this.writeFloat64(b,this.endianness);break;case"uint16be":this.writeUint16(b,DataStream.BIG_ENDIAN);break;case"int16be":this.writeInt16(b,DataStream.BIG_ENDIAN);break;case"uint32be":this.writeUint32(b,DataStream.BIG_ENDIAN);break;case"int32be":this.writeInt32(b,DataStream.BIG_ENDIAN);break;case"float32be":this.writeFloat32(b,DataStream.BIG_ENDIAN);break;case"float64be":this.writeFloat64(b,DataStream.BIG_ENDIAN);break;case"uint16le":this.writeUint16(b,DataStream.LITTLE_ENDIAN);break;case"int16le":this.writeInt16(b,DataStream.LITTLE_ENDIAN);break;case"uint32le":this.writeUint32(b,DataStream.LITTLE_ENDIAN);break;case"int32le":this.writeInt32(b,DataStream.LITTLE_ENDIAN);break;case"float32le":this.writeFloat32(b,DataStream.LITTLE_ENDIAN);break;case"float64le":this.writeFloat64(b,DataStream.LITTLE_ENDIAN);break;case"cstring":this.writeCString(b,e);break;case"string":this.writeString(b,f,e);break;case"u16string":this.writeUCS2String(b,this.endianness,e);break;case"u16stringle":this.writeUCS2String(b,DataStream.LITTLE_ENDIAN,e);break;case"u16stringbe":this.writeUCS2String(b,DataStream.BIG_ENDIAN,e);break;default:if(3==a.length){for(var h=a[1],i=0;i<b.length;i++)this.writeType(h,b[i]);break}this.writeStruct(a,b)}null!=e&&(this.position=g,this._realloc(e),this.position=g+e)};var MAX_SIZE=Math.pow(2,32);DataStream.prototype.readUint64=function(){return this.readUint32()*MAX_SIZE+this.readUint32()},DataStream.prototype.writeUint64=function(a){var b=Math.floor(a/MAX_SIZE);this.writeUint32(b),this.writeUint32(4294967295&a)},DataStream.prototype.readUint24=function(){return(this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8()},DataStream.prototype.writeUint24=function(a){this.writeUint8((16711680&a)>>16),this.writeUint8((65280&a)>>8),this.writeUint8(255&a)},DataStream.prototype.adjustUint32=function(a,b){var c=this.position;this.seek(a),this.writeUint32(b),this.seek(c)};var BoxParser={ERR_NOT_ENOUGH_DATA:0,OK:1,boxCodes:["mdat","avcC","hvcC","ftyp","styp","payl","vttC","vmhd","smhd","hmhd","dref","elst"],fullBoxCodes:["mvhd","tkhd","mdhd","hdlr","smhd","hmhd","nhmd","url ","urn ","ctts","cslg","stco","co64","stsc","stss","stsz","stz2","stts","stsh","mehd","trex","mfhd","tfhd","trun","tfdt","esds","subs","txtC","sidx"],containerBoxCodes:[["moov",["trak"]],["trak"],["edts"],["mdia"],["minf"],["dinf"],["stbl"],["mvex",["trex"]],["moof",["traf"]],["traf",["trun"]],["vttc"],["tref"]],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"]},{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"]}],trackReferenceTypes:["scal"],initialize:function(){var a,b,c;for(BoxParser.FullBox.prototype=new BoxParser.Box,BoxParser.ContainerBox.prototype=new BoxParser.Box,BoxParser.stsdBox.prototype=new BoxParser.FullBox,BoxParser.SampleEntry.prototype=new BoxParser.FullBox,BoxParser.TrackReferenceTypeBox.prototype=new BoxParser.Box,c=BoxParser.boxCodes.length,a=0;c>a;a++)BoxParser[BoxParser.boxCodes[a]+"Box"]=function(a){return function(b){BoxParser.Box.call(this,BoxParser.boxCodes[a],b)}}(a),BoxParser[BoxParser.boxCodes[a]+"Box"].prototype=new BoxParser.Box;for(c=BoxParser.fullBoxCodes.length,a=0;c>a;a++)BoxParser[BoxParser.fullBoxCodes[a]+"Box"]=function(a){return function(b){BoxParser.FullBox.call(this,BoxParser.fullBoxCodes[a],b)}}(a),BoxParser[BoxParser.fullBoxCodes[a]+"Box"].prototype=new BoxParser.FullBox;for(c=BoxParser.containerBoxCodes.length,a=0;c>a;a++)BoxParser[BoxParser.containerBoxCodes[a][0]+"Box"]=function(a,b){return function(c){if(BoxParser.ContainerBox.call(this,BoxParser.containerBoxCodes[a][0],c),b){this.subBoxNames=b;for(var d=b.length,e=0;d>e;e++)this[b[e]+"s"]=[]}}}(a,BoxParser.containerBoxCodes[a][1]),BoxParser[BoxParser.containerBoxCodes[a][0]+"Box"].prototype=new BoxParser.ContainerBox;for(c=BoxParser.sampleEntryCodes.length,b=0;c>b;b++){var d=BoxParser.sampleEntryCodes[b].prefix,e=BoxParser.sampleEntryCodes[b].types,f=e.length;for(BoxParser[d+"SampleEntry"]=function(a,b){BoxParser.SampleEntry.call(this,a,b)},BoxParser[d+"SampleEntry"].prototype=new BoxParser.SampleEntry,a=0;f>a;a++)BoxParser[e[a]+"Box"]=function(a,b){return function(c){BoxParser[BoxParser.sampleEntryCodes[a].prefix+"SampleEntry"].call(this,BoxParser.sampleEntryCodes[a].types[b],c)}}(b,a),BoxParser[e[a]+"Box"].prototype=new BoxParser[d+"SampleEntry"]}for(c=BoxParser.trackReferenceTypes.length,a=0;c>a;a++)BoxParser[BoxParser.trackReferenceTypes[a]+"Box"]=function(a){return function(b){BoxParser.TrackReferenceTypeBox.call(this,BoxParser.trackReferenceTypes[a],b)}}(a),BoxParser[BoxParser.trackReferenceTypes[a]+"Box"].prototype=new BoxParser.Box},Box:function(a,b){this.type=a,this.size=b},FullBox:function(a,b){BoxParser.Box.call(this,a,b),this.flags=0,this.version=0},ContainerBox:function(a,b){BoxParser.Box.call(this,a,b),this.boxes=[]},SampleEntry:function(a,b){BoxParser.Box.call(this,a,b),this.boxes=[]},TrackReferenceTypeBox:function(a,b){BoxParser.Box.call(this,a,b),this.track_ids=[]},stsdBox:function(a){BoxParser.FullBox.call(this,"stsd",a),this.entries=[]},parseOneBox:function(a,b){var c,d=a.position,e=0;if(a.byteLength-a.position<8)return Log.d("BoxParser","Not enough data in stream to parse the type and size of the box"),{code:BoxParser.ERR_NOT_ENOUGH_DATA};var f=a.readUint32(),g=a.readString(4);if(Log.d("BoxParser","Found box of type "+g+" and size "+f+" at position "+d+" in the current buffer ("+(a.buffer.fileStart+d)+" in the file)"),e=8,"uuid"==g&&(uuid=a.readString(16),e+=16),1==f){if(a.byteLength-a.position<8)return a.seek(d),Log.w("BoxParser",'Not enough data in stream to parse the extended size of the "'+g+'" box'),{code:BoxParser.ERR_NOT_ENOUGH_DATA};f=a.readUint64(),e+=8}else if(0===f)throw"Unlimited box size not supported";return d+f>a.byteLength?(a.seek(d),Log.w("BoxParser",'Not enough data in stream to parse the entire "'+g+'" box'),{code:BoxParser.ERR_NOT_ENOUGH_DATA,type:g,size:f,hdr_size:e}):(c=BoxParser[g+"Box"]?new BoxParser[g+"Box"](f-e):b?new BoxParser.SampleEntry(g,f-e):new BoxParser.Box(g,f-e),c.hdr_size=e,c.start=d,c.fileStart=d+a.buffer.fileStart,c.parse(a),{code:BoxParser.OK,box:c,size:f})}};BoxParser.initialize(),BoxParser.TKHD_FLAG_ENABLED=1,BoxParser.TKHD_FLAG_IN_MOVIE=2,BoxParser.TKHD_FLAG_IN_PREVIEW=4,BoxParser.TFHD_FLAG_BASE_DATA_OFFSET=1,BoxParser.TFHD_FLAG_SAMPLE_DESC=2,BoxParser.TFHD_FLAG_SAMPLE_DUR=8,BoxParser.TFHD_FLAG_SAMPLE_SIZE=16,BoxParser.TFHD_FLAG_SAMPLE_FLAGS=32,BoxParser.TFHD_FLAG_DUR_EMPTY=65536,BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF=131072,BoxParser.TRUN_FLAGS_DATA_OFFSET=1,BoxParser.TRUN_FLAGS_FIRST_FLAG=4,BoxParser.TRUN_FLAGS_DURATION=256,BoxParser.TRUN_FLAGS_SIZE=512,BoxParser.TRUN_FLAGS_FLAGS=1024,BoxParser.TRUN_FLAGS_CTS_OFFSET=2048,BoxParser.SampleEntry.prototype.isVideo=function(){return!1},BoxParser.SampleEntry.prototype.isAudio=function(){return!1},BoxParser.SampleEntry.prototype.isSubtitle=function(){return!1},BoxParser.SampleEntry.prototype.isMetadata=function(){return!1},BoxParser.SampleEntry.prototype.isHint=function(){return!1},BoxParser.SampleEntry.prototype.getCodec=function(){return this.type},BoxParser.SampleEntry.prototype.getWidth=function(){return""},BoxParser.SampleEntry.prototype.getHeight=function(){return""},BoxParser.SampleEntry.prototype.getChannelCount=function(){return""},BoxParser.SampleEntry.prototype.getSampleRate=function(){return""},BoxParser.SampleEntry.prototype.getSampleSize=function(){return""},BoxParser.VisualSampleEntry.prototype.isVideo=function(){return!0},BoxParser.VisualSampleEntry.prototype.getWidth=function(){return this.width},BoxParser.VisualSampleEntry.prototype.getHeight=function(){return this.height},BoxParser.AudioSampleEntry.prototype.isAudio=function(){return!0},BoxParser.AudioSampleEntry.prototype.getChannelCount=function(){return this.channel_count},BoxParser.AudioSampleEntry.prototype.getSampleRate=function(){return this.samplerate},BoxParser.AudioSampleEntry.prototype.getSampleSize=function(){return this.samplesize},BoxParser.SubtitleSampleEntry.prototype.isSubtitle=function(){return!0},BoxParser.MetadataSampleEntry.prototype.isMetadata=function(){return!0},BoxParser.decimalToHex=function(a,b){var c=Number(a).toString(16);for(b="undefined"==typeof b||null===b?b=2:b;c.length<b;)c="0"+c;return c},BoxParser.avc1Box.prototype.getCodec=function(){var a=BoxParser.SampleEntry.prototype.getCodec.call(this);return this.avcC?a+"."+BoxParser.decimalToHex(this.avcC.AVCProfileIndication)+BoxParser.decimalToHex(this.avcC.profile_compatibility)+BoxParser.decimalToHex(this.avcC.AVCLevelIndication):a},BoxParser.hvc1Box.prototype.getCodec=function(){var a,b=BoxParser.SampleEntry.prototype.getCodec.call(this);if(this.hvcC){switch(b+=".",this.hvcC.general_profile_space){case 0:b+="";break;case 1:b+="A";break;case 2:b+="B";break;case 3:b+="C"}b+=this.hvcC.general_profile_idc,b+=".";var c=this.hvcC.general_profile_compatibility,d=0;for(a=0;32>a&&(d|=1&c,31!=a);a++)d<<=1,c>>=1;b+=BoxParser.decimalToHex(d,0),b+=".",b+=0===this.hvcC.general_tier_flag?"L":"H",b+=this.hvcC.general_level_idc;var e=!1,f="";for(a=5;a>=0;a--)(this.hvcC.general_constraint_indicator[a]||e)&&(f="."+BoxParser.decimalToHex(this.hvcC.general_constraint_indicator[a],0)+f,e=!0);b+=f}return b},BoxParser.mp4aBox.prototype.getCodec=function(){var a=BoxParser.SampleEntry.prototype.getCodec.call(this);if(this.esds&&this.esds.esd){var b=this.esds.esd.getOTI(),c=this.esds.esd.getAudioConfig();return a+"."+BoxParser.decimalToHex(b)+(c?"."+c:"")}return a},BoxParser.Box.prototype.parse=function(a){"mdat"!=this.type?this.data=a.readUint8Array(this.size):a.seek(this.start+this.size+this.hdr_size)},BoxParser.FullBox.prototype.parseFullHeader=function(a){this.version=a.readUint8(),this.flags=a.readUint24(),this.size-=4},BoxParser.ContainerBox.prototype.parse=function(a){var b,c,d;for(d=a.position;a.position<d+this.size;)b=BoxParser.parseOneBox(a),c=b.box,this.boxes.push(c),this.subBoxNames&&-1!=this.subBoxNames.indexOf(c.type)?this[this.subBoxNames+"s"].push(c):this[c.type]=c},BoxParser.SampleEntry.prototype.parseHeader=function(a){this.start=a.position,a.readUint8Array(6),this.data_reference_index=a.readUint16()},BoxParser.SampleEntry.prototype.parse=function(a){this.parseHeader(a),a.seek(this.start+this.size)},BoxParser.SampleEntry.prototype.parseFooter=function(a){for(var b,c;a.position<this.start+this.size;)b=BoxParser.parseOneBox(a,!1),c=b.box,this.boxes.push(c),this[c.type]=c},BoxParser.VisualSampleEntry.prototype.parse=function(a){this.parseHeader(a),a.readUint16(),a.readUint16(),a.readUint32Array(3),this.width=a.readUint16(),this.height=a.readUint16(),this.horizresolution=a.readUint32(),this.vertresolution=a.readUint32(),a.readUint32(),this.frame_count=a.readUint16(),this.compressorname=a.readString(32),this.depth=a.readUint16(),a.readUint16(),this.parseFooter(a)},BoxParser.AudioSampleEntry.prototype.parse=function(a){this.parseHeader(a),a.readUint32Array(2),this.channel_count=a.readUint16(),this.samplesize=a.readUint16(),a.readUint16(),a.readUint16(),this.samplerate=a.readUint32()/65536,this.parseFooter(a)},BoxParser.SubtitleSampleEntry.prototype.parse=function(a){this.parseHeader(a),this.parseFooter(a)},BoxParser.MetadataSampleEntry.prototype.parse=function(a){this.parseHeader(a),this.parseFooter(a)},BoxParser.TrackReferenceTypeBox.prototype.parse=function(a){this.track_ids=a.readUint8Array(this.size)},BoxParser.metxBox.prototype.parse=function(a){this.parseHeader(a),this.content_encoding=a.readCString(),this.namespace=a.readCString(),this.schema_location=a.readCString(),this.parseFooter(a)},BoxParser.mettBox.prototype.parse=function(a){this.parseHeader(a),this.content_encoding=a.readCString(),this.mime_format=a.readCString(),this.parseFooter(a)},BoxParser.sbttBox.prototype.parse=function(a){this.parseHeader(a),this.content_encoding=a.readCString(),this.mime_format=a.readCString(),this.parseFooter(a)},BoxParser.stxtBox.prototype.parse=function(a){this.parseHeader(a),this.content_encoding=a.readCString(),this.mime_format=a.readCString(),this.parseFooter(a)},BoxParser.stppBox.prototype.parse=function(a){this.parseHeader(a),this.namespace=a.readCString(),this.schema_location=a.readCString(),this.auxiliary_mime_types=a.readCString(),this.parseFooter(a)},BoxParser.tx3gBox.prototype.parse=function(a){this.parseHeader(a),this.displayFlags=a.readUint32(),this.horizontal_justification=a.readInt8(),this.vertical_justification=a.readInt8(),this.bg_color_rgba=a.readUint8Array(4),this.box_record=a.readInt16Array(4),this.style_record=a.readUint8Array(12),this.parseFooter(a)},BoxParser.ftypBox.prototype.parse=function(a){this.major_brand=a.readString(4),this.minor_version=a.readUint32(),this.size-=8,this.compatible_brands=[];for(var b=0;this.size>=4;)this.compatible_brands[b]=a.readString(4),this.size-=4,b++},BoxParser.stypBox.prototype.parse=BoxParser.ftypBox.prototype.parse,BoxParser.mvhdBox.prototype.parse=function(a){this.flags=0,this.parseFullHeader(a),1==this.version?(this.creation_time=a.readUint64(),this.modification_time=a.readUint64(),this.timescale=a.readUint32(),this.duration=a.readUint64()):(this.creation_time=a.readUint32(),this.modification_time=a.readUint32(),this.timescale=a.readUint32(),this.duration=a.readUint32()),this.rate=a.readUint32(),this.volume=a.readUint16()>>8,a.readUint16(),a.readUint32Array(2),this.matrix=a.readUint32Array(9),a.readUint32Array(6),this.next_track_id=a.readUint32()
},BoxParser.tkhdBox.prototype.parse=function(a){this.parseFullHeader(a),1==this.version?(this.creation_time=a.readUint64(),this.modification_time=a.readUint64(),this.track_id=a.readUint32(),a.readUint32(),this.duration=a.readUint64()):(this.creation_time=a.readUint32(),this.modification_time=a.readUint32(),this.track_id=a.readUint32(),a.readUint32(),this.duration=a.readUint32()),a.readUint32Array(2),this.layer=a.readInt16(),this.alternate_group=a.readInt16(),this.volume=a.readInt16()>>8,a.readUint16(),this.matrix=a.readInt32Array(9),this.width=a.readUint32(),this.height=a.readUint32()},BoxParser.mdhdBox.prototype.parse=function(a){this.parseFullHeader(a),1==this.version?(this.creation_time=a.readUint64(),this.modification_time=a.readUint64(),this.timescale=a.readUint32(),this.duration=a.readUint64()):(this.creation_time=a.readUint32(),this.modification_time=a.readUint32(),this.timescale=a.readUint32(),this.duration=a.readUint32()),this.language=a.readUint16();var b=[];b[0]=this.language>>10&31,b[1]=this.language>>5&31,b[2]=31&this.language,this.languageString=String.fromCharCode(b[0]+96,b[1]+96,b[2]+96),a.readUint16()},BoxParser.hdlrBox.prototype.parse=function(a){this.parseFullHeader(a),0===this.version?(a.readUint32(),this.handler=a.readString(4),a.readUint32Array(3),this.name=a.readCString()):this.data=a.readUint8Array(size)},BoxParser.stsdBox.prototype.parse=function(a){var b,c;for(this.parseFullHeader(a),c=a.readUint32(),i=1;c>=i;i++)b=BoxParser.parseOneBox(a,!0),this.entries.push(b.box)},BoxParser.avcCBox.prototype.parse=function(a){var b,c,d;for(this.configurationVersion=a.readUint8(),this.AVCProfileIndication=a.readUint8(),this.profile_compatibility=a.readUint8(),this.AVCLevelIndication=a.readUint8(),this.lengthSizeMinusOne=3&a.readUint8(),c=31&a.readUint8(),this.size-=6,this.SPS=new Array(c),b=0;c>b;b++)d=a.readUint16(),this.SPS[b]=a.readUint8Array(d),this.size-=2+d;for(c=a.readUint8(),this.size--,this.PPS=new Array(c),b=0;c>b;b++)d=a.readUint16(),this.PPS[b]=a.readUint8Array(d),this.size-=2+d;this.size>0&&(this.ext=a.readUint8Array(this.size))},BoxParser.hvcCBox.prototype.parse=function(a){var b,c,d;for(this.configurationVersion=a.readUint8(),d=a.readUint8(),this.general_profile_space=d>>6,this.general_tier_flag=(32&d)>>5,this.general_profile_idc=31&d,this.general_profile_compatibility=a.readUint32(),this.general_constraint_indicator=a.readUint8Array(6),this.general_level_idc=a.readUint8(),this.min_spatial_segmentation_idc=4095&a.readUint16(),this.parallelismType=3&a.readUint8(),this.chromaFormat=3&a.readUint8(),this.bitDepthLumaMinus8=7&a.readUint8(),this.bitDepthChromaMinus8=7&a.readUint8(),this.avgFrameRate=a.readUint16(),d=a.readUint8(),this.constantFrameRate=d>>6,this.numTemporalLayers=(13&d)>>3,this.temporalIdNested=(4&d)>>2,this.lengthSizeMinusOne=3&d,this.nalu_arrays=[],numOfArrays=a.readUint8(),b=0;numOfArrays>b;b++){var e=[];for(this.nalu_arrays.push(e),d=a.readUint8(),e.completeness=(128&d)>>7,e.nalu_type=63&d,numNalus=a.readUint16(),j=0;numNalus>j;j++){var f={};e.push(f),c=a.readUint16(),f.data=a.readUint8Array(c)}}},BoxParser.esdsBox.prototype.parse=function(a){if(this.parseFullHeader(a),this.data=a.readUint8Array(this.size),this.size=0,"undefined"!=typeof MPEG4DescriptorParser){var b=new MPEG4DescriptorParser;this.esd=b.parseOneDescriptor(new DataStream(this.data.buffer,0,DataStream.BIG_ENDIAN))}},BoxParser.txtCBox.prototype.parse=function(a){this.parseFullHeader(a),this.config=a.readCString()},BoxParser.cttsBox.prototype.parse=function(a){var b,c;if(this.parseFullHeader(a),b=a.readUint32(),this.sample_counts=[],this.sample_offsets=[],0===this.version)for(c=0;b>c;c++)this.sample_counts.push(a.readUint32()),this.sample_offsets.push(a.readInt32());else if(1==this.version)for(c=0;b>c;c++)this.sample_counts.push(a.readUint32()),this.sample_offsets.push(a.readInt32());else this.data=a.readUint8Array(this.size-4)},BoxParser.cslgBox.prototype.parse=function(a){this.parseFullHeader(a),0===this.version?(this.compositionToDTSShift=a.readInt32(),this.leastDecodeToDisplayDelta=a.readInt32(),this.greatestDecodeToDisplayDelta=a.readInt32(),this.compositionStartTime=a.readInt32(),this.compositionEndTime=a.readInt32()):this.data=a.readUint8Array(this.size-4)},BoxParser.sttsBox.prototype.parse=function(a){var b,c;if(this.parseFullHeader(a),b=a.readUint32(),this.sample_counts=[],this.sample_deltas=[],0===this.version)for(c=0;b>c;c++)this.sample_counts.push(a.readUint32()),this.sample_deltas.push(a.readUint32());else this.data=a.readUint8Array(this.size-4)},BoxParser.stssBox.prototype.parse=function(a){var b;if(this.parseFullHeader(a),b=a.readUint32(),0===this.version)for(this.sample_numbers=[],i=0;b>i;i++)this.sample_numbers.push(a.readUint32());else this.data=a.readUint8Array(this.size-4)},BoxParser.stshBox.prototype.parse=function(a){var b,c;if(this.parseFullHeader(a),b=a.readUint32(),this.shadowed_sample_numbers=[],this.sync_sample_numbers=[],0===this.version)for(c=0;b>c;c++)this.shadowed_sample_numbers.push(a.readUint32()),this.sync_sample_numbers.push(a.readUint32());else this.data=a.readUint8Array(this.size-4)},BoxParser.stcoBox.prototype.parse=function(a){var b;this.parseFullHeader(a),b=a.readUint32(),0===this.version?this.chunk_offsets=a.readUint32Array(b):this.data=a.readUint8Array(this.size-4)},BoxParser.co64Box.prototype.parse=function(a){var b,c;if(this.parseFullHeader(a),b=a.readUint32(),this.chunk_offsets=[],0===this.version)for(c=0;b>c;c++)this.chunk_offsets.push(a.readUint64());else this.data=a.readUint8Array(this.size-4)},BoxParser.stscBox.prototype.parse=function(a){var b,c;if(this.parseFullHeader(a),b=a.readUint32(),this.first_chunk=[],this.samples_per_chunk=[],this.sample_description_index=[],0===this.version)for(c=0;b>c;c++)this.first_chunk.push(a.readUint32()),this.samples_per_chunk.push(a.readUint32()),this.sample_description_index.push(a.readUint32());else this.data=a.readUint8Array(this.size-4)},BoxParser.stszBox.prototype.parse=function(a){var b,c,d;if(this.parseFullHeader(a),this.sample_sizes=[],0===this.version)if(c=a.readUint32(),d=a.readUint32(),0===c)this.sample_sizes=a.readUint32Array(d);else for(this.sample_sizes=[],b=0;d>b;b++)this.sample_sizes[b]=c;else this.data=a.readUint8Array(this.size)},BoxParser.mehdBox.prototype.parse=function(a){this.parseFullHeader(a),this.fragment_duration=1==this.version?a.readUint64():a.readUint32()},BoxParser.trexBox.prototype.parse=function(a){this.parseFullHeader(a),this.track_id=a.readUint32(),this.default_sample_description_index=a.readUint32(),this.default_sample_duration=a.readUint32(),this.default_sample_size=a.readUint32(),this.default_sample_flags=a.readUint32()},BoxParser.mfhdBox.prototype.parse=function(a){this.parseFullHeader(a),this.sequence_number=a.readUint32()},BoxParser.tfhdBox.prototype.parse=function(a){var b=0;this.parseFullHeader(a),this.track_id=a.readUint32(),this.size>b&&this.flags&BoxParser.TFHD_FLAG_BASE_DATA_OFFSET?(this.base_data_offset=a.readUint64(),b+=8):this.base_data_offset=0,this.size>b&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_DESC?(this.default_sample_description_index=a.readUint32(),b+=4):this.default_sample_description_index=0,this.size>b&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_DUR?(this.default_sample_duration=a.readUint32(),b+=4):this.default_sample_duration=0,this.size>b&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_SIZE?(this.default_sample_size=a.readUint32(),b+=4):this.default_sample_size=0,this.size>b&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_FLAGS?(this.default_sample_flags=a.readUint32(),b+=4):this.default_sample_flags=0},BoxParser.trunBox.prototype.parse=function(a){var b=0;if(this.parseFullHeader(a),this.sample_count=a.readUint32(),b+=4,this.size>b&&this.flags&BoxParser.TRUN_FLAGS_DATA_OFFSET?(this.data_offset=a.readInt32(),b+=4):this.data_offset=0,this.size>b&&this.flags&BoxParser.TRUN_FLAGS_FIRST_FLAG?(this.first_sample_flags=a.readUint32(),b+=4):this.first_sample_flags=0,this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[],this.size>b)for(var c=0;c<this.sample_count;c++)this.flags&BoxParser.TRUN_FLAGS_DURATION&&(this.sample_duration[c]=a.readUint32()),this.flags&BoxParser.TRUN_FLAGS_SIZE&&(this.sample_size[c]=a.readUint32()),this.flags&BoxParser.TRUN_FLAGS_FLAGS&&(this.sample_flags[c]=a.readUint32()),this.flags&BoxParser.TRUN_FLAGS_CTS_OFFSET&&(this.sample_composition_time_offset[c]=0===this.version?a.readUint32():a.readInt32())},BoxParser.tfdtBox.prototype.parse=function(a){this.parseFullHeader(a),this.baseMediaDecodeTime=1==this.version?a.readUint64():a.readUint32()},BoxParser.vttCBox.prototype.parse=function(a){this.text=a.readString(this.size)},BoxParser.paylBox.prototype.parse=function(a){this.text=a.readString(this.size)},BoxParser.subsBox.prototype.parse=function(a){var b,c,d,e;for(this.parseFullHeader(a),d=a.readUint32(),this.samples=[],b=0;d>b;b++){var f={};if(this.samples[b]=f,f.sample_delta=a.readUint32(),f.subsamples=[],e=a.readUint16(),e>0)for(c=0;e>c;c++){var g={};f.subsamples.push(g),g.size=1==this.version?a.readUint32():a.readUint16(),g.priority=a.readUint8(),g.discardable=a.readUint8(),g.reserved=a.readUint32()}}},BoxParser.sidxBox.prototype.parse=function(a){this.parseFullHeader(a),this.reference_ID=a.readUint32(),this.timescale=a.readUint32(),0===this.version?(this.earliest_presentation_time=a.readUint32(),this.first_offset=a.readUint32()):(this.earliest_presentation_time=a.readUint64(),this.first_offset=a.readUint64()),a.readUint16(),this.references=[];for(var b=a.readUint16(),c=0;b>c;c++){var d={};this.references.push(d);var e=a.readUint32();d.type=e>>31&1,d.size=2415919103&e,d.duration=a.readUint32(),e=a.readUint32(),d.starts_with_SAP=e>>31&1,d.SAP_type=e>>28&7,d.SAP_delta_time=268435455&e}};var ISOFile=function(a){this.stream=a,this.boxes=[],this.mdats=[],this.moofs=[],this.isProgressive=!1,this.lastMoofIndex=0,this.lastBoxStartPosition=0,this.parsingMdat=null,this.moovStartFound=!1,this.samplesDataSize=0,this.nextParsePosition=0};ISOFile.prototype.mergeNextBuffer=function(){var a;if(this.stream.bufferIndex+1<this.stream.nextBuffers.length){if(a=this.stream.nextBuffers[this.stream.bufferIndex+1],a.fileStart===this.stream.buffer.fileStart+this.stream.buffer.byteLength){var b=this.stream.buffer.byteLength,c=this.stream.buffer.usedBytes,d=this.stream.buffer.fileStart;return this.stream.nextBuffers[this.stream.bufferIndex]=ArrayBuffer.concat(this.stream.buffer,a),this.stream.buffer=this.stream.nextBuffers[this.stream.bufferIndex],this.stream.nextBuffers.splice(this.stream.bufferIndex+1,1),this.stream.buffer.usedBytes=c,this.stream.buffer.fileStart=d,Log.d("ISOFile","Concatenating buffer for box parsing (length: "+b+"->"+this.stream.buffer.byteLength+")"),!0}return!1}return!1},ISOFile.prototype.parse=function(){var a,b,c;for(Log.d("ISOFile","Starting parsing with buffer #"+this.stream.bufferIndex+" (fileStart: "+this.stream.buffer.fileStart+" - Length: "+this.stream.buffer.byteLength+") from position "+this.lastBoxStartPosition+" ("+(this.stream.buffer.fileStart+this.lastBoxStartPosition)+" in the file)"),this.stream.seek(this.lastBoxStartPosition);;){if(null!==this.parsingMdat){if(c=this.parsingMdat,a=this.reposition(!1,c.fileStart+c.hdr_size+c.size)){Log.d("ISOFile","Found 'mdat' end in buffer #"+this.stream.bufferIndex),this.parsingMdat=null;continue}return void(this.nextParsePosition=this.findEndContiguousBuf(this.stream.bufferIndex))}if(this.lastBoxStartPosition=this.stream.position,b=BoxParser.parseOneBox(this.stream),b.code===BoxParser.ERR_NOT_ENOUGH_DATA){if("mdat"===b.type){if(c=new BoxParser[b.type+"Box"](b.size-b.hdr_size),this.parsingMdat=c,this.boxes.push(c),this.mdats.push(c),c.fileStart=this.stream.buffer.fileStart+this.stream.position,c.hdr_size=b.hdr_size,this.stream.buffer.usedBytes+=b.hdr_size,a=this.reposition(!1,c.fileStart+c.hdr_size+c.size)){this.parsingMdat=null;continue}return void(this.nextParsePosition=this.moovStartFound?this.findEndContiguousBuf(this.stream.bufferIndex):c.fileStart+c.size+c.hdr_size)}if("moov"===b.type&&(this.moovStartFound=!0,0===this.mdats.length&&(this.isProgressive=!0)),merged=this.mergeNextBuffer()){this.nextParsePosition=this.stream.buffer.fileStart+this.stream.buffer.byteLength;continue}return void(this.nextParsePosition=b.type?this.moovStartFound?this.stream.buffer.fileStart+this.stream.buffer.byteLength:this.stream.buffer.fileStart+this.stream.position+b.size:this.stream.buffer.fileStart+this.stream.buffer.byteLength)}switch(c=b.box,this.boxes.push(c),c.type){case"mdat":this.mdats.push(c),c.fileStart=this.stream.buffer.fileStart+c.start;break;case"moof":this.moofs.push(c);break;case"moov":this.moovStartFound=!0,0===this.mdats.length&&(this.isProgressive=!0);default:void 0!==this[c.type]&&Log.w("ISOFile","Duplicate Box of type: "+c.type+", overriding previous occurrence"),this[c.type]=c}this.stream.buffer.usedBytes+="mdat"===c.type?c.hdr_size:b.size}},ISOFile.prototype.reposition=function(a,b){var c;return c=this.findPosition(a,b),-1!==c?(this.stream.buffer=this.stream.nextBuffers[c],this.stream.bufferIndex=c,this.stream.position=b-this.stream.buffer.fileStart,Log.d("ISOFile","Repositioning parser at buffer position: "+this.stream.position),!0):!1},ISOFile.prototype.findPosition=function(a,b){var c,d=null,e=-1;for(c=a===!0?0:this.stream.bufferIndex;c<this.stream.nextBuffers.length&&(d=this.stream.nextBuffers[c],d.fileStart<=b);)e=c,c++;return-1!==e?(d=this.stream.nextBuffers[e],d.fileStart+d.byteLength>=b?(Log.d("ISOFile","Found position in existing buffer #"+e),e):-1):-1},ISOFile.prototype.findEndContiguousBuf=function(a){var b,c,d;if(c=this.stream.nextBuffers[a],this.stream.nextBuffers.length>a+1)for(b=a+1;b<this.stream.nextBuffers.length&&(d=this.stream.nextBuffers[b],d.fileStart===c.fileStart+c.byteLength);b++)c=d;return c.fileStart+c.byteLength},ISOFile.prototype.write=function(a){for(var b=0;b<this.boxes.length;b++)this.boxes[b].write(a)},ISOFile.prototype.writeInitializationSegment=function(a){var b,c,d,e;if(Log.d("ISOFile","Generating initialization segment"),this.ftyp.write(a),this.moov.mvex){for(this.initial_duration=this.moov.mvex.mehd.fragment_duration,c=-1,b=0;b<this.moov.boxes.length;b++)e=this.moov.boxes[b],e===this.moov.mvex&&(c=b);c>-1&&this.moov.boxes.splice(c,1),this.moov.mvex=null}for(this.moov.mvex=new BoxParser.mvexBox,this.moov.boxes.push(this.moov.mvex),this.moov.mvex.mehd=new BoxParser.mehdBox,this.moov.mvex.boxes.push(this.moov.mvex.mehd),this.moov.mvex.mehd.fragment_duration=this.initial_duration,b=0;b<this.moov.traks.length;b++)this.moov.traks[b].ignore||(d=new BoxParser.trexBox,this.moov.mvex.boxes.push(d),d.track_id=this.moov.traks[b].tkhd.track_id,d.default_sample_description_index=1,d.default_sample_duration=this.moov.traks[b].samples.length>0?this.moov.traks[b].samples[0].duration:0,d.default_sample_size=0,d.default_sample_flags=65536);this.moov.write(a)},ISOFile.prototype.resetTables=function(){var a,b,c,d,e,f,g,h;for(this.initial_duration=this.moov.mvhd.duration,this.moov.mvhd.duration=0,a=0;a<this.moov.traks.length;a++){b=this.moov.traks[a],b.tkhd.duration=0,b.mdia.mdhd.duration=0,c=b.mdia.minf.stbl.stco||b.mdia.minf.stbl.co64,c.chunk_offsets=[],d=b.mdia.minf.stbl.stsc,d.first_chunk=[],d.samples_per_chunk=[],d.sample_description_index=[],e=b.mdia.minf.stbl.stsz,e.sample_sizes=[],f=b.mdia.minf.stbl.stts,f.sample_counts=[],f.sample_deltas=[],g=b.mdia.minf.stbl.ctts,g&&(g.sample_counts=[],g.sample_offsets=[]),h=b.mdia.minf.stbl.stss;var i=b.mdia.minf.stbl.boxes.indexOf(h);-1!=i&&(b.mdia.minf.stbl.boxes[i]=null)}},ISOFile.prototype.buildSampleLists=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;for(a=0;a<this.moov.traks.length;a++){for(c=this.moov.traks[a],c.samples=[],d=c.mdia.minf.stbl.stco||c.mdia.minf.stbl.co64,e=c.mdia.minf.stbl.stsc,f=c.mdia.minf.stbl.stsz,g=c.mdia.minf.stbl.stts,h=c.mdia.minf.stbl.ctts,i=c.mdia.minf.stbl.stss,j=c.mdia.minf.stbl.stsd,k=c.mdia.minf.stbl.subs,q=-1,r=-1,s=-1,t=-1,u=0,subs_entry_index=0,last_subs_sample_index=0,b=0;b<f.sample_sizes.length;b++){var v={};v.number=b,v.track_id=c.tkhd.track_id,v.timescale=c.mdia.mdhd.timescale,c.samples[b]=v,v.size=f.sample_sizes[b],0===b?(m=1,l=0,v.chunk_index=m,v.chunk_run_index=l,p=e.samples_per_chunk[l],o=0,n=l+1<e.first_chunk.length?e.first_chunk[l+1]-1:1/0):p>b?(v.chunk_index=m,v.chunk_run_index=l):(m++,v.chunk_index=m,o=0,n>=m||(l++,n=l+1<e.first_chunk.length?e.first_chunk[l+1]-1:1/0),v.chunk_run_index=l,p+=e.samples_per_chunk[l]),v.description=j.entries[e.sample_description_index[v.chunk_run_index]-1],v.offset=d.chunk_offsets[v.chunk_index-1]+o,o+=v.size,b>q&&(r++,0>q&&(q=0),q+=g.sample_counts[r]),b>0?(c.samples[b-1].duration=g.sample_deltas[r],v.dts=c.samples[b-1].dts+c.samples[b-1].duration):v.dts=0,h?(b>s&&(t++,0>s&&(s=0),s+=h.sample_counts[t]),v.cts=c.samples[b].dts+h.sample_offsets[t]):v.cts=v.dts,i?b==i.sample_numbers[u]-1?(v.is_rap=!0,u++):v.is_rap=!1:v.is_rap=!0,k&&k.samples[subs_entry_index].sample_delta+last_subs_sample_index==b&&(v.subsamples=k.samples[subs_entry_index].subsamples,last_subs_sample_index+=k.samples[subs_entry_index].sample_delta)}b>0&&(c.samples[b-1].duration=c.mdia.mdhd.duration-c.samples[b-1].dts)}},ISOFile.prototype.updateSampleLists=function(){for(var a,b,c,d,e,f,g,h,i,j,k,l,m,n;this.lastMoofIndex<this.moofs.length;)if(i=this.moofs[this.lastMoofIndex],this.lastMoofIndex++,"moof"==i.type)for(j=i,a=0;a<j.trafs