xgplayer-mp4 2.0.3 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://xgplayer-mp4/webpack/universalModuleDefinition","webpack://xgplayer-mp4/webpack/bootstrap","webpack://xgplayer-mp4/./src/parse/box.js","webpack://xgplayer-mp4/./src/parse/stream.js","webpack://xgplayer-mp4/./src/error.js","webpack://xgplayer-mp4/external \"xgplayer\"","webpack://xgplayer-mp4/./node_modules/event-emitter/index.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/is-value.js","webpack://xgplayer-mp4/./src/parse/date.js","webpack://xgplayer-mp4/./src/parse/box/sps.js","webpack://xgplayer-mp4/./src/constants.js","webpack://xgplayer-mp4/./node_modules/type/value/is.js","webpack://xgplayer-mp4/./node_modules/concat-typed-array/lib/index.js","webpack://xgplayer-mp4/./src/parse/box/golomb.js","webpack://xgplayer-mp4/./src/fmp4/buffer.js","webpack://xgplayer-mp4/./src/media/task.js","webpack://xgplayer-mp4/./src/index.js","webpack://xgplayer-mp4/./src/mp4.js","webpack://xgplayer-mp4/./node_modules/d/index.js","webpack://xgplayer-mp4/./node_modules/type/plain-function/is.js","webpack://xgplayer-mp4/./node_modules/type/function/is.js","webpack://xgplayer-mp4/./node_modules/type/prototype/is.js","webpack://xgplayer-mp4/./node_modules/type/object/is.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/assign/index.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/assign/is-implemented.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/assign/shim.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/keys/index.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/keys/is-implemented.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/keys/shim.js","webpack://xgplayer-mp4/./node_modules/es5-ext/function/noop.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/valid-value.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/normalize-options.js","webpack://xgplayer-mp4/./node_modules/es5-ext/string/#/contains/index.js","webpack://xgplayer-mp4/./node_modules/es5-ext/string/#/contains/is-implemented.js","webpack://xgplayer-mp4/./node_modules/es5-ext/string/#/contains/shim.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/valid-callable.js","webpack://xgplayer-mp4/./src/parse/index.js","webpack://xgplayer-mp4/./node_modules/concat-typed-array/lib/concat.js","webpack://xgplayer-mp4/./src/parse/box/vmhd.js","webpack://xgplayer-mp4/./src/parse/box/url.js","webpack://xgplayer-mp4/./src/parse/box/udta.js","webpack://xgplayer-mp4/./src/parse/box/tkhd.js","webpack://xgplayer-mp4/./src/parse/box/tfhd.js","webpack://xgplayer-mp4/./src/parse/box/stts.js","webpack://xgplayer-mp4/./src/parse/box/stsz.js","webpack://xgplayer-mp4/./src/parse/box/stss.js","webpack://xgplayer-mp4/./src/parse/box/stsd.js","webpack://xgplayer-mp4/./src/parse/box/stsc.js","webpack://xgplayer-mp4/./src/parse/box/stco.js","webpack://xgplayer-mp4/./src/parse/box/smhd.js","webpack://xgplayer-mp4/./src/parse/box/SLConfigDescriptor.js","webpack://xgplayer-mp4/./src/parse/box/schm.js","webpack://xgplayer-mp4/./src/parse/box/pasp.js","webpack://xgplayer-mp4/./src/parse/box/mvhd.js","webpack://xgplayer-mp4/./src/parse/box/MP4ESDescrTag.js","webpack://xgplayer-mp4/./src/parse/box/MP4DecSpecificDescrTag.js","webpack://xgplayer-mp4/./src/parse/box/MP4DecConfigDescrTag.js","webpack://xgplayer-mp4/./src/parse/box/mp4a.js","webpack://xgplayer-mp4/./src/parse/box/mdhd.js","webpack://xgplayer-mp4/./src/parse/box/mdat.js","webpack://xgplayer-mp4/./src/parse/box/iods.js","webpack://xgplayer-mp4/./src/parse/box/hvcC.js","webpack://xgplayer-mp4/./src/parse/box/hvc1.js","webpack://xgplayer-mp4/./src/parse/box/hdlr.js","webpack://xgplayer-mp4/./src/parse/box/ftyp.js","webpack://xgplayer-mp4/./src/parse/box/frma.js","webpack://xgplayer-mp4/./src/parse/box/esds.js","webpack://xgplayer-mp4/./src/parse/box/elst.js","webpack://xgplayer-mp4/./src/parse/box/dref.js","webpack://xgplayer-mp4/./src/parse/box/ctts.js","webpack://xgplayer-mp4/./src/parse/box/co64.js","webpack://xgplayer-mp4/./src/parse/box/btrt.js","webpack://xgplayer-mp4/./src/parse/box/avcC.js","webpack://xgplayer-mp4/./src/parse/box/avc1.js","webpack://xgplayer-mp4/./src/fmp4/mp4.js","webpack://xgplayer-mp4/./src/util/getHeaders.js","webpack://xgplayer-mp4/./src/util/index.js","webpack://xgplayer-mp4/./src/media/mse.js","webpack://xgplayer-mp4/./src/util/isSupport.js","webpack://xgplayer-mp4/./src/util/proxyPromise.js","webpack://xgplayer-mp4/./src/util/timer.js","webpack://xgplayer-mp4/./src/gap_jump.js","webpack://xgplayer-mp4/./src/util/intervalTimer.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__3__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Box","headSize","size","type","subBox","start","stream","position","readUint32","String","fromCharCode","readUint8","readUint64","Errors","line","handle","msg","uuid","push","version","flags","end","data","buffer","slice","byteLength","parser","containerBox","find","item","containerParser","Function","readHeader","readBody","Stream","box","ArrayBuffer","dataview","DataView","count","loop","Math","floor","last","readByte","sign","res","getInt8","getUint8","getInt16","getUint16","getInt32","getUint32","_Errors","vid","errd","url","Player","on","once","off","emit","methods","descriptors","base","callable","apply","defineProperties","descriptor","configurable","writable","listener","self","arguments","__eeOnceListener__","__ee__","listeners","candidate","length","splice","args","Array","_undefined","val","UTC","time","Date","setFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setTime","getTime","toLocaleString","SPSParser","uint8array","src","srcLength","dst","Uint8Array","dstIdx","rbsp","_ebsp2rbsp","gb","Golomb","profileIdc","levelIdc","readUEG","profile_string","getProfileString","level_string","getLevelString","chroma_format_idc","chroma_format","bit_depth","readBits","readBool","scaling_list_count","_skipScalingList","pic_order_cnt_type","readSEG","num_ref_frames_in_pic_order_cnt_cycle","pic_width_in_mbs_minus1","pic_height_in_map_units_minus1","frame_mbs_only_flag","frame_crop_left_offset","frame_crop_right_offset","frame_crop_top_offset","frame_crop_bottom_offset","par_width","par_height","fps","fps_fixed","fps_num","fps_den","aspect_ratio_idc","num_units_in_tick","time_scale","parScale","crop_unit_x","crop_unit_y","codec_width","codec_height","present_width","ceil","destroy","chroma_format_string","getChromaFormatString","frame_rate","fixed","par_ratio","width","height","codec_size","present_size","last_scale","next_scale","toFixed","chroma","spsConfig","meta","codecWidth","codecHeight","presentWidth","presentHeight","profile","level","bitDepth","chromaFormat","parRatio","frameRate","fpsDen","fpsNum","refSampleDuration","timescale","CUSTOM_EVENTS","TASK_ERROR","TASK_ERROR_TYPES","ERROR","CODE_ERROR","CANCEL","obj","_concat","_concat2","default","TAG","_buffer","_bufferIndex","_totalBytes","_totalBits","_currentWord","_currentWordBitsLeft","bufferBytesLeft","bytesRead","min","word","set","subarray","bits","valu","Error","_fillCurrentWord","zeroCount","_skipLeadingZero","leadingZeros","Buffer","forEach","window","console","error","Task","range","xhrSetup","callback","ext","uniqueTag","playerId","queue","some","JSON","stringify","id","join","running","canceled","initialize","xhr","XMLHttpRequest","target","responseType","withCredentials","open","setRequestHeader","onreadystatechange","e","readyState","headers","status","onload","response","MEDIA_EXPIRED","_emitTaskError","remove","onerror","message","onabort","update","abort","code","filter","idx","Queue","sended","wait","max","limit","run","OPENED","send","cancel","sniffer","isEnded","player","mp4","endTime","currentTime","duration","mse","endOfStream","_stopProgress","Mp4Player","options","hasStartProgress","onlyInit","videoInit","autoplay","_pendingPromises","_allInitPromise","ProxyPromise","_maxBufferLength","maxBufferLength","_playerId","uniqueId","_onBufferedResetFunc","_onBufferedReset","_onSeekingFunc","_onSeeking","_onMp4InitFunc","_onMp4Init","_onWaitingFunc","_onWaiting","_onEndedFunc","_onEnded","_onDestroyFunc","_onDestroy","_replay","_onReplay","_onOnlineHandlerFunc","_onOnlineHandler","_onOfflineHandlerFunc","_onOfflineHandler","_tickInSeconds","tickInSeconds","_hasStartProgress","_hasStartProgressBack","video","addEventListener","BUFFERED_RESET","_bindNetworkStateChange","_initMp4Kernal","gapJumpInst","GapJump","config","util","onSegmentAppend","rule","pluginRule","MSE","isSupported","currentSrc","_init","then","result","proxyOnce","play","proxyOn","_startProgress","_onSuperStart","err","_errorHandle","browser","hasClass","addClass","removeClass","buffered","initPromise","_addPendingPromise","resolve","_hasInited","_removePendingPromise","mp5","MP4","preloadSize","timeRage","curTime","getBufferedRange","buffered2","removeBuffer","appendBuffer","packMeta","downloaded","removeEventListener","promise","_initMp4","isHvc","videoCodec","indexOf","encv","data_format","hasVideo","hasAudio","audioCodec","codec","mediaType","initSeg","_loadData","reject","_initMse","navigator","onLine","seek","updating","setTimeout","canDownload","cacheMaxTime","every","_onInnerWait","_unbindNetworkStateChange","clear","unloadVideo","cancelPendingPromises","errt","errorType","bufferCache","_currentTime","_start","switchURL","iplayer","_onCheckLoad","hasBuffered","len","mp4Init","pause","_requestTimer","stop","Timer","_onTimeUpdate","tickEvery","removeAttribute","load","reason","INIT_FAIL","PARSE_ERROR","isSupportedWithXgmse","isMediaSourceSupported","chunkSize","pow","CHUNK_SIZE","init","moovParse","Promise","task","hasDestroyed","onMediaExpired","params","moov","moovBox","mvhd","findBox","traks","videoTrak","audioTrak","videoTimeScale","audioTimeScale","sps","pps","vps","channelCount","sampleRate","decoderConfig","hvc1Data","hvcCData","pixelRatio","isArray","trak","hdlr","mdhd","codecBox","handleType","avcC","hvcC","tkhd","toHex","profileCompatibility","AVCLevelIndication","sequence","spsInfo","map","Number","hvc1","profileCompatibilityIndications","esds","mp4a","ESDescriptor","typeID","EScode","mdat","_boxes","videoDuration","seekTrakDuration","audioDuration","mdatStart","vf","videoKeyFrames","videoKeyFramesLength","timeScale","createTime","modifyTime","audioConfig","stss","_stssObj","getData","parsed","moovStart","boxes","Parser","nextBox","concat","catch","stsc","stsz","stts","stco","cttsObj","_cttsObj","stscObj","_stscVideoObj","_stscAudioObj","samples","undefined","entries","seekSampleTime","offset","seekSampleOffset","write","FMP4","ftyp","fragIndex","getFragmentIdx","getFragRange","timeStart","round","videoFrames","nowTime","nextTime","MAX_SAFE_INTEGER","audioFrames","audioKeyFrames","startTime","loadFragment","audioFrame","getSamplesByOrders","order","audioNextFrame","isNaN","dat","createFragment","buf","moof","mdatData","framesIndex","_samples","addFragment","firstFlags","sampleOffset","resBuffers","promises","getVideoBuffer","getAudioBuffer","all","buffers","bufferSize","k","_videoFrames","ctts","entry","j","sampleCount","chunk_count","samples_per_chunk","frames","_audioFrames","videoScale","audioScale","audioStts","audioIndex","seekOrderSampleByTime","isValue","isPlainFunction","assign","normalizeOpts","contains","dscr","w","desc","gs","isFunction","classRe","functionToString","toString","test","isPrototype","isObject","constructor","possibleTypes","foo","bar","trzy","keys","dest","TypeError","process","opts1","str","searchString","fn","bufferLength","ResultConstructor","totalLength","_len","arrays","_key","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","iterator","next","done","arr","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_arr","vmhd","flag","graphicsmode","readUint16","opcolor","location","udta","modify","trackID","reserverd","layer","readInt16","alternate_group","volume","matrix","tfhd","track_id","baseDataOffsetPresent","sampleDescriptionIndexPresent","defaultSampleDurationPresent","defaultSampleSizePresent","defaultSampleFlagsPresent","baseDataOffset","sampleDescriptionIndex","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","sampleDuration","sampleSize","stsd","entryCount","first_chunk","sample_desc_index","preEntry","first_sample","pre","smhd","balance","readInt8","SLConfigDescriptor","extend","skip","SL","schm","scheme_version","scheme_type","scheme_uri","hdr_size","pasp","hSpacing","vSpacing","rate","nextTrackID","MP4ESDescrTag","esID","priority","MP4DecConfigDescrTag","MP4DecSpecificDescrTag","dataSize","padStart","streamUint","maximum","average","dataReferenceIndex","language","iods","content","configVersion","constraintIndicatorFlags","bitDepthLumaMinus8","bitDepthChromaMinus8","avgFrameRate","constantFrameRate","numOfArrays","vpsHeader","readUint24","vpsLength","spsHeader","spsLength","ppsHeader","ppsLength","dataviewLength","horizresolution","vertresolution","frameCount","depth","major_brand","minor_version","compatibleBrands","compatible_brands","frma","elst","entry_count","segment_duration","media_time","readInt32","media_rate_integer","media_rate_fraction","dref","read","co64","btrt","bufferSizeDB","maxBitrate","avgBitrate","lengthSizeMinusOne","numOfSequenceParameterSets","sequenceLength","SpsParser","parseSPS","ppsCount","avc1","UINT32_MAX","charCodeAt","writeUint32","mvex","trak1","trak2","bytes","mdia","mediaTime","minf","extension","dinf","stbl","configlen","avcc","stssObj","mehd","trex1","trex2","mfhd","traf","tfdt","sdtp","trun","upper","lower","sdtpLength","headerMap","getAllResponseHeaders","trim","split","parts","header","shift","pad","charstr","maxlen","chars","substring","hex","rst","sample_order","chunk_start","chunk_offset","chunk_offset_sample","chunk_index","samples_offset","last_chunk","pop","chunkOffset","stscOffset","sum","itemDuration","view","parseInt","substr","array","ret","subArray","bin","atob","replace","padding","base64","btoa","encoded","encodeURIComponent","utf8","unescape","toUpperCase","a","codecs","mediaSource","MediaSource","URL","createObjectURL","_hasDestroyed","_hasEndOfStream","_hasEndOfStreamSuccess","_onSourceOpen","_onMediaSourceClose","_onSourceBufferError","_onSourceBufferUpdateEnd","sourceBuffer","addSourceBuffer","state","unshift","_endOfStream","revokeObjectURL","isTypeSupported","isMSBrowser","ua","userAgent","msie","trident","WebKitMediaSource","resolvePromise","rejectPromise","publicPromise","onTick","onTick_","cancelPending_","delayInSeconds","alive","timeoutId","clearTimeout","seconds","tickAfter","mediaElem","timer","IntervalTimer","prevReadyState","didFireLargeGap","seekingEventReceived","segmentAppended","onWaitFunc","onPlayFunc","_onPlay","isSafari","platform","useGapJump","hasPlayed","onGapJump","repeat","HTMLMediaElement","HAVE_NOTHING","seeking","paused","smallGapLimit","gapDetectionThreshold","_getIndex","jumpTo","jumpSize","isGapSmall","BROWSER_GAP_TOLERANCE","disableGapSetPosition","threshold","bufferedInfo","_getBuffered","b","timeID","func","ms","repeatInterval"],"mappings":"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","file":"index.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"xgplayer\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"xgplayer\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"xgplayer-mp4\"] = factory(require(\"xgplayer\"));\n\telse\n\t\troot[\"xgplayer-mp4\"] = factory(root[\"xgplayer\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__3__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 14);\n","import Stream from './stream'\nimport Errors from '../error'\nclass Box {\n constructor () {\n this.headSize = 8\n this.size = 0\n this.type = ''\n this.subBox = []\n this.start = -1\n }\n readHeader (stream) {\n this.start = stream.position\n this.size = stream.readUint32()\n this.type = String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8())\n if (this.size === 1) {\n this.size = stream.readUint64()\n } else if (this.size === 0) {\n if (this.type !== 'mdat') {\n throw new Errors('parse', '', {line: 19, handle: '[Box] readHeader', msg: 'parse mp4 mdat box failed'})\n }\n }\n if (this.type === 'uuid') {\n let uuid = []\n for (let i = 0; i < 16; i++) {\n uuid.push(stream.readUint8())\n }\n }\n if (this.type === 'pssh') {\n this.version = stream.readUint8();\n this.flags = stream.readUint8();\n }\n }\n readBody (stream) {\n let end = this.size - stream.position + this.start\n let type = this.type\n this.data = stream.buffer.slice(stream.position, stream.position + end)\n stream.position += this.data.byteLength\n let parser\n if (Box.containerBox.find(item => item === type)) {\n parser = Box.containerParser\n } else {\n parser = Box[type]\n }\n if (parser && parser instanceof Function) {\n parser.call(this)\n }\n }\n read (stream) {\n this.readHeader(stream)\n this.readBody(stream)\n }\n\n static containerParser () {\n let stream = new Stream(this.data)\n let size = stream.buffer.byteLength\n let self = this\n while (stream.position < size) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n delete self.data\n stream = null\n }\n}\n\nBox.containerBox = ['moov', 'trak', 'edts', 'mdia', 'minf', 'dinf', 'stbl', 'mvex', 'moof', 'traf', 'mfra', 'sinf', 'schi']\n\nexport default Box\n","import Errors from '../error'\nclass Stream {\n constructor (buffer) {\n if (buffer instanceof ArrayBuffer) {\n this.buffer = buffer\n this.dataview = new DataView(buffer)\n this.dataview.position = 0\n } else {\n throw new Errors('parse', '', {line: 9, handle: '[Stream] constructor', msg: 'data is valid'})\n }\n }\n\n set position (value) {\n this.dataview.position = value\n }\n\n get position () {\n return this.dataview.position\n }\n\n skip (count) {\n let loop = Math.floor(count / 4)\n let last = count % 4\n for (let i = 0; i < loop; i++) {\n Stream.readByte(this.dataview, 4)\n }\n if (last > 0) {\n Stream.readByte(this.dataview, last)\n }\n }\n\n /**\n * [readByte 从DataView中读取数据]\n * @param {DataView} buffer [DataView实例]\n * @param {Number} size [读取字节数]\n * @return {Number} [整数]\n */\n static readByte (buffer, size, sign) {\n let res\n switch (size) {\n case 1:\n if (sign) {\n res = buffer.getInt8(buffer.position)\n } else {\n res = buffer.getUint8(buffer.position)\n }\n break\n case 2:\n if (sign) {\n res = buffer.getInt16(buffer.position)\n } else {\n res = buffer.getUint16(buffer.position)\n }\n break\n case 3:\n if (sign) {\n throw 'not supported for readByte 3'\n } else {\n res = buffer.getUint8(buffer.position) << 16\n res |= buffer.getUint8(buffer.position + 1) << 8\n res |= buffer.getUint8(buffer.position + 2)\n }\n break\n case 4:\n if (sign) {\n res = buffer.getInt32(buffer.position)\n } else {\n res = buffer.getUint32(buffer.position)\n }\n break\n case 8:\n if (sign) {\n throw new Errors('parse', '', {line: 73, handle: '[Stream] readByte', msg: 'not supported for readBody 8'})\n } else {\n res = buffer.getUint32(buffer.position) << 32\n res |= buffer.getUint32(buffer.position + 4)\n }\n break\n default:\n res = ''\n }\n buffer.position += size\n return res\n }\n\n readUint8 () {\n return Stream.readByte(this.dataview, 1)\n }\n\n readUint16 () {\n return Stream.readByte(this.dataview, 2)\n }\n \n readUint24 () {\n return Stream.readByte(this.dataview, 3)\n }\n\n readUint32 () {\n return Stream.readByte(this.dataview, 4)\n }\n\n readUint64 () {\n return Stream.readByte(this.dataview, 8)\n }\n\n readInt8 () {\n return Stream.readByte(this.dataview, 1, true)\n }\n readInt16 () {\n return Stream.readByte(this.dataview, 2, true)\n }\n readInt32 () {\n return Stream.readByte(this.dataview, 4, true)\n }\n}\n\nexport default Stream\n","import Player from 'xgplayer'\nimport { version } from '../version.json'\n\nclass _Errors extends Player.Errors {\n constructor (type, vid, errd = {}, url = '') {\n errd.version = version\n super(type, vid, errd)\n this.url = url\n }\n}\n\nexport default _Errors\n","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","'use strict';\n\nvar d = require('d')\n , callable = require('es5-ext/object/valid-callable')\n\n , apply = Function.prototype.apply, call = Function.prototype.call\n , create = Object.create, defineProperty = Object.defineProperty\n , defineProperties = Object.defineProperties\n , hasOwnProperty = Object.prototype.hasOwnProperty\n , descriptor = { configurable: true, enumerable: false, writable: true }\n\n , on, once, off, emit, methods, descriptors, base;\n\non = function (type, listener) {\n\tvar data;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) {\n\t\tdata = descriptor.value = create(null);\n\t\tdefineProperty(this, '__ee__', descriptor);\n\t\tdescriptor.value = null;\n\t} else {\n\t\tdata = this.__ee__;\n\t}\n\tif (!data[type]) data[type] = listener;\n\telse if (typeof data[type] === 'object') data[type].push(listener);\n\telse data[type] = [data[type], listener];\n\n\treturn this;\n};\n\nonce = function (type, listener) {\n\tvar once, self;\n\n\tcallable(listener);\n\tself = this;\n\ton.call(this, type, once = function () {\n\t\toff.call(self, type, once);\n\t\tapply.call(listener, this, arguments);\n\t});\n\n\tonce.__eeOnceListener__ = listener;\n\treturn this;\n};\n\noff = function (type, listener) {\n\tvar data, listeners, candidate, i;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return this;\n\tdata = this.__ee__;\n\tif (!data[type]) return this;\n\tlisteners = data[type];\n\n\tif (typeof listeners === 'object') {\n\t\tfor (i = 0; (candidate = listeners[i]); ++i) {\n\t\t\tif ((candidate === listener) ||\n\t\t\t\t\t(candidate.__eeOnceListener__ === listener)) {\n\t\t\t\tif (listeners.length === 2) data[type] = listeners[i ? 0 : 1];\n\t\t\t\telse listeners.splice(i, 1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif ((listeners === listener) ||\n\t\t\t\t(listeners.__eeOnceListener__ === listener)) {\n\t\t\tdelete data[type];\n\t\t}\n\t}\n\n\treturn this;\n};\n\nemit = function (type) {\n\tvar i, l, listener, listeners, args;\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return;\n\tlisteners = this.__ee__[type];\n\tif (!listeners) return;\n\n\tif (typeof listeners === 'object') {\n\t\tl = arguments.length;\n\t\targs = new Array(l - 1);\n\t\tfor (i = 1; i < l; ++i) args[i - 1] = arguments[i];\n\n\t\tlisteners = listeners.slice();\n\t\tfor (i = 0; (listener = listeners[i]); ++i) {\n\t\t\tapply.call(listener, this, args);\n\t\t}\n\t} else {\n\t\tswitch (arguments.length) {\n\t\tcase 1:\n\t\t\tcall.call(listeners, this);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tcall.call(listeners, this, arguments[1]);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tcall.call(listeners, this, arguments[1], arguments[2]);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tl = arguments.length;\n\t\t\targs = new Array(l - 1);\n\t\t\tfor (i = 1; i < l; ++i) {\n\t\t\t\targs[i - 1] = arguments[i];\n\t\t\t}\n\t\t\tapply.call(listeners, this, args);\n\t\t}\n\t}\n};\n\nmethods = {\n\ton: on,\n\tonce: once,\n\toff: off,\n\temit: emit\n};\n\ndescriptors = {\n\ton: d(on),\n\tonce: d(once),\n\toff: d(off),\n\temit: d(emit)\n};\n\nbase = defineProperties({}, descriptors);\n\nmodule.exports = exports = function (o) {\n\treturn (o == null) ? create(base) : defineProperties(Object(o), descriptors);\n};\nexports.methods = methods;\n","\"use strict\";\n\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\n","class UTC {\n constructor () {\n let time = new Date()\n time.setFullYear(1904)\n time.setMonth(0)\n time.setDate(1)\n time.setHours(0)\n time.setMinutes(0)\n time.setSeconds(0)\n this.time = time\n }\n setTime (value) {\n this.time.setTime(this.time.getTime() + value * 1)\n return this.time.toLocaleString()\n }\n}\n\nexport default UTC\n","/* eslint-disable camelcase */\n/* eslint-disable one-var */\nimport Golomb from './golomb'\n\nclass SPSParser {\n static _ebsp2rbsp (uint8array) {\n let src = uint8array\n let srcLength = src.byteLength\n let dst = new Uint8Array(srcLength)\n let dstIdx = 0\n\n for (let i = 0; i < srcLength; i++) {\n if (i >= 2) {\n if (src[i] === 0x03 && src[i - 1] === 0x00 && src[i - 2] === 0x00) {\n continue\n }\n }\n dst[dstIdx] = src[i]\n dstIdx++\n }\n\n return new Uint8Array(dst.buffer, 0, dstIdx)\n }\n\n static parseSPS (uint8array) {\n let rbsp = SPSParser._ebsp2rbsp(uint8array)\n let gb = new Golomb(rbsp)\n\n gb.readByte()\n let profileIdc = gb.readByte()\n gb.readByte()\n let levelIdc = gb.readByte()\n gb.readUEG()\n\n let profile_string = SPSParser.getProfileString(profileIdc)\n let level_string = SPSParser.getLevelString(levelIdc)\n let chroma_format_idc = 1\n let chroma_format = 420\n let chroma_format_table = [0, 420, 422, 444]\n let bit_depth = 8\n\n if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 ||\n profileIdc === 244 || profileIdc === 44 || profileIdc === 83 ||\n profileIdc === 86 || profileIdc === 118 || profileIdc === 128 ||\n profileIdc === 138 || profileIdc === 144) {\n chroma_format_idc = gb.readUEG()\n if (chroma_format_idc === 3) {\n gb.readBits(1)\n }\n if (chroma_format_idc <= 3) {\n chroma_format = chroma_format_table[chroma_format_idc]\n }\n\n bit_depth = gb.readUEG() + 8\n gb.readUEG()\n gb.readBits(1)\n if (gb.readBool()) {\n let scaling_list_count = (chroma_format_idc !== 3) ? 8 : 12\n for (let i = 0; i < scaling_list_count; i++) {\n if (gb.readBool()) {\n if (i < 6) {\n SPSParser._skipScalingList(gb, 16)\n } else {\n SPSParser._skipScalingList(gb, 64)\n }\n }\n }\n }\n }\n gb.readUEG()\n let pic_order_cnt_type = gb.readUEG()\n if (pic_order_cnt_type === 0) {\n gb.readUEG()\n } else if (pic_order_cnt_type === 1) {\n gb.readBits(1)\n gb.readSEG()\n gb.readSEG()\n let num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG()\n for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {\n gb.readSEG()\n }\n }\n gb.readUEG()\n gb.readBits(1)\n\n let pic_width_in_mbs_minus1 = gb.readUEG()\n let pic_height_in_map_units_minus1 = gb.readUEG()\n\n let frame_mbs_only_flag = gb.readBits(1)\n if (frame_mbs_only_flag === 0) {\n gb.readBits(1)\n }\n gb.readBits(1)\n\n let frame_crop_left_offset = 0\n let frame_crop_right_offset = 0\n let frame_crop_top_offset = 0\n let frame_crop_bottom_offset = 0\n\n let frame_cropping_flag = gb.readBool()\n if (frame_cropping_flag) {\n frame_crop_left_offset = gb.readUEG()\n frame_crop_right_offset = gb.readUEG()\n frame_crop_top_offset = gb.readUEG()\n frame_crop_bottom_offset = gb.readUEG()\n }\n\n let par_width = 1, par_height = 1\n let fps = 0, fps_fixed = true, fps_num = 0, fps_den = 0\n\n let vui_parameters_present_flag = gb.readBool()\n if (vui_parameters_present_flag) {\n if (gb.readBool()) { // aspect_ratio_info_present_flag\n let aspect_ratio_idc = gb.readByte()\n let par_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2]\n let par_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1]\n\n if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n par_width = par_w_table[aspect_ratio_idc - 1]\n par_height = par_h_table[aspect_ratio_idc - 1]\n } else if (aspect_ratio_idc === 255) {\n par_width = gb.readByte() << 8 | gb.readByte()\n par_height = gb.readByte() << 8 | gb.readByte()\n }\n }\n\n if (gb.readBool()) {\n gb.readBool()\n }\n if (gb.readBool()) {\n gb.readBits(4)\n if (gb.readBool()) {\n gb.readBits(24)\n }\n }\n if (gb.readBool()) {\n gb.readUEG()\n gb.readUEG()\n }\n if (gb.readBool()) {\n let num_units_in_tick = gb.readBits(32)\n let time_scale = gb.readBits(32)\n fps_fixed = gb.readBool()\n\n fps_num = time_scale\n fps_den = num_units_in_tick * 2\n fps = fps_num / fps_den\n }\n }\n\n let parScale = 1\n if (par_width !== 1 || par_height !== 1) {\n parScale = par_width / par_height\n }\n\n let crop_unit_x = 0, crop_unit_y = 0\n if (chroma_format_idc === 0) {\n crop_unit_x = 1\n crop_unit_y = 2 - frame_mbs_only_flag\n } else {\n let sub_wc = (chroma_format_idc === 3) ? 1 : 2\n let sub_hc = (chroma_format_idc === 1) ? 2 : 1\n crop_unit_x = sub_wc\n crop_unit_y = sub_hc * (2 - frame_mbs_only_flag)\n }\n\n let codec_width = (pic_width_in_mbs_minus1 + 1) * 16\n let codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16)\n\n codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x\n codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y\n\n let present_width = Math.ceil(codec_width * parScale)\n\n gb.destroy()\n gb = null\n\n return {\n profile_string: profile_string,\n level_string: level_string,\n bit_depth: bit_depth,\n chroma_format: chroma_format,\n chroma_format_string: SPSParser.getChromaFormatString(chroma_format),\n\n frame_rate: {\n fixed: fps_fixed,\n fps: fps,\n fps_den: fps_den,\n fps_num: fps_num\n },\n\n par_ratio: {\n width: par_width,\n height: par_height\n },\n\n codec_size: {\n width: codec_width,\n height: codec_height\n },\n\n present_size: {\n width: present_width,\n height: codec_height\n }\n }\n }\n\n static _skipScalingList (gb, count) {\n let last_scale = 8, next_scale = 8\n let delta_scale = 0\n for (let i = 0; i < count; i++) {\n if (next_scale !== 0) {\n delta_scale = gb.readSEG()\n next_scale = (last_scale + delta_scale + 256) % 256\n }\n last_scale = (next_scale === 0) ? last_scale : next_scale\n }\n }\n\n static getProfileString (profileIdc) {\n switch (profileIdc) {\n case 66:\n return 'Baseline'\n case 77:\n return 'Main'\n case 88:\n return 'Extended'\n case 100:\n return 'High'\n case 110:\n return 'High10'\n case 122:\n return 'High422'\n case 244:\n return 'High444'\n default:\n return 'Unknown'\n }\n }\n\n static getLevelString (levelIdc) {\n return (levelIdc / 10).toFixed(1)\n }\n\n static getChromaFormatString (chroma) {\n switch (chroma) {\n case 420:\n return '4:2:0'\n case 422:\n return '4:2:2'\n case 444:\n return '4:4:4'\n default:\n return 'Unknown'\n }\n }\n\n static toVideoMeta (spsConfig) {\n let meta = {}\n if (spsConfig && spsConfig.codec_size) {\n meta.codecWidth = spsConfig.codec_size.width\n meta.codecHeight = spsConfig.codec_size.height\n meta.presentWidth = spsConfig.present_size.width\n meta.presentHeight = spsConfig.present_size.height\n }\n\n meta.profile = spsConfig.profile_string\n meta.level = spsConfig.level_string\n meta.bitDepth = spsConfig.bit_depth\n meta.chromaFormat = spsConfig.chroma_format\n\n meta.parRatio = {\n width: spsConfig.par_ratio.width,\n height: spsConfig.par_ratio.height\n }\n\n meta.frameRate = spsConfig.frame_rate\n\n let fpsDen = meta.frameRate.fps_den\n let fpsNum = meta.frameRate.fps_num\n meta.refSampleDuration = Math.floor(meta.timescale * (fpsDen / fpsNum))\n }\n}\n\nexport default SPSParser\n","export const CUSTOM_EVENTS = {\n \"MEDIA_EXPIRED\":'MEDIA_EXPIRED',\n \"INIT_FAIL\":\"INIT_FAIL\",\n \"PARSE_ERROR\":\"PARSE_ERROR\",\n \"BUFFERED_RESET\": \"BUFFERED_RESET\"\n}\n\nexport const TASK_ERROR = 'TASK_ERROR';\n\nexport const TASK_ERROR_TYPES = {\n ERROR:\"ERROR\",\n CODE_ERROR:\"CODE_ERROR\",\n CANCEL:\"CANCEL\",\n}\n","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== null; };\n","'use strict';\n\nvar _concat = require('./concat');\n\nvar _concat2 = _interopRequireDefault(_concat);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = _concat2.default;","class Golomb {\n constructor (uint8array) {\n this.TAG = 'Golomb'\n this._buffer = uint8array\n this._bufferIndex = 0\n this._totalBytes = uint8array.byteLength\n this._totalBits = uint8array.byteLength * 8\n this._currentWord = 0\n this._currentWordBitsLeft = 0\n }\n\n destroy () {\n this._buffer = null\n }\n\n _fillCurrentWord () {\n let bufferBytesLeft = this._totalBytes - this._bufferIndex\n if (bufferBytesLeft <= 0) {\n // TODO 异常处理\n }\n\n let bytesRead = Math.min(4, bufferBytesLeft)\n let word = new Uint8Array(4)\n word.set(this._buffer.subarray(this._bufferIndex, this._bufferIndex + bytesRead))\n this._currentWord = new DataView(word.buffer).getUint32(0)\n\n this._bufferIndex += bytesRead\n this._currentWordBitsLeft = bytesRead * 8\n }\n\n readBits (size) {\n let bits = Math.min(this._currentWordBitsLeft, size);// :uint\n let valu = this._currentWord >>> (32 - bits);\n if (size > 32) {\n throw new Error('Cannot read more than 32 bits at a time');\n }\n this._currentWordBitsLeft -= bits;\n if (this._currentWordBitsLeft > 0) {\n this._currentWord <<= bits;\n } else if (this._totalBytes - this._bufferIndex > 0) {\n this._fillCurrentWord();\n }\n\n bits = size - bits;\n if (bits > 0 && this._currentWordBitsLeft) {\n return valu << bits | this.readBits(bits);\n } else {\n return valu;\n }\n }\n\n readBool () {\n return this.readBits(1) === 1\n }\n\n readByte () {\n return this.readBits(8)\n }\n\n _skipLeadingZero () {\n let zeroCount\n for (zeroCount = 0; zeroCount < this._currentWordBitsLeft; zeroCount++) {\n if ((this._currentWord & (0x80000000 >>> zeroCount)) !== 0) {\n this._currentWord <<= zeroCount\n this._currentWordBitsLeft -= zeroCount\n return zeroCount\n }\n }\n this._fillCurrentWord()\n return zeroCount + this._skipLeadingZero()\n }\n\n readUEG () { // unsigned exponential golomb\n let leadingZeros = this._skipLeadingZero()\n return this.readBits(leadingZeros + 1) - 1\n }\n\n readSEG () { // signed exponential golomb\n let value = this.readUEG()\n if (value & 0x01) {\n return (value + 1) >>> 1\n } else {\n return -1 * (value >>> 1)\n }\n }\n}\n\nexport default Golomb\n","import Concat from 'concat-typed-array'\n\nclass Buffer {\n constructor () {\n this.buffer = new Uint8Array(0)\n }\n write (...buffer) {\n let self = this\n buffer.forEach(item => {\n if (item) {\n self.buffer = Concat(Uint8Array, self.buffer, item)\n } else {\n window.console.error(item)\n }\n })\n }\n static writeUint16 (value) {\n return new Uint8Array([\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n static writeUint32 (value) {\n return new Uint8Array([\n value >> 24,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n}\n\nexport default Buffer\n","import EventEmitter from 'event-emitter'\nimport Errors from '../error'\nimport {CUSTOM_EVENTS, TASK_ERROR, TASK_ERROR_TYPES} from '../constants'\nimport getResponseHeaders from '../util/getHeaders';\n\nclass Task {\n constructor (url, range, xhrSetup, callback, ext = {}) {\n EventEmitter(this)\n window.Task = Task\n this.url = url\n this.range = range\n ext.start = range[0]\n ext.end = range[1]\n this.uniqueTag = `${this.url}&range=${range[0]}-${range[1]}`\n this.playerId = ext.playerId;\n //处理重复分片请求,只拦截同一播放器的相同请求\n if (Task.queue.some(item => item.url === url && JSON.stringify(item.range) === JSON.stringify(range) && item.playerId === ext.playerId)) {\n // console.log('task repeat playerid', ext.playerId)\n return;\n }\n this.xhrSetup = xhrSetup\n this.id = this.playerId + range.join('-')\n this.running = false\n this.canceled = false\n this.initialize(url, range, callback);\n }\n initialize(url, range, callback) {\n let xhr = new window.XMLHttpRequest()\n xhr.target = this\n xhr.responseType = 'arraybuffer'\n xhr.withCredentials = this.withCredentials || false\n xhr.open('get', url)\n if(typeof this.xhrSetup === 'function') {\n this.xhrSetup(xhr, url)\n }\n xhr.setRequestHeader('Range', `bytes=${range[0]}-${range[1]}`)\n let self = this;\n xhr.onreadystatechange = function (e) {\n // HEADERS_RECEIVED\n if (xhr.readyState === 2) {\n self.headers = getResponseHeaders(xhr);\n // self.emit('getHeaders', self.headers);\n self.status = xhr.status;\n // self.startDownloadTime = nowTime();\n }\n // OPENED\n if (xhr.readyState === 1) {\n // self.lastTime = nowTime();\n }\n };\n xhr.onload = function () {\n if (xhr.status === 200 || xhr.status === 206) {\n if (callback && callback instanceof Function) {\n callback(xhr.response)\n }\n } else{\n if(xhr.status === 403){\n self.emit(CUSTOM_EVENTS.MEDIA_EXPIRED);\n }else{\n self._emitTaskError(TASK_ERROR_TYPES.CODE_ERROR);\n }\n }\n xhr.target.remove()\n }\n xhr.onerror = function (e) {\n xhr.target.emit('error', new Errors('network', '', {line: 25, handle: '[Task] constructor', msg: e.message, url}))\n xhr.target.remove()\n }\n xhr.onabort = function () {\n xhr.target.remove()\n }\n if (!self.canceled) {\n self.xhr = xhr;\n Task.queue.push(self);\n }\n self.update()\n }\n cancel () {\n this.xhr.abort()\n this._emitTaskError(TASK_ERROR_TYPES.CANCEL);\n this.canceled = true;\n }\n\n _emitTaskError(code){\n this.emit(TASK_ERROR, {code , url: this.uniqueTag, readyState: this.xhr.readyState, status: this.xhr.status})\n }\n\n remove () {\n Task.queue.filter((item, idx) => {\n if (item.url === this.url && item.id === this.id) {\n Task.queue.splice(idx, 1)\n return true\n } else {\n return false\n }\n })\n this.update()\n }\n\n update () {\n let Queue = Task.queue\n let sended = Queue.filter((item) => item.running)\n let wait = Queue.filter(item => !item.running)\n let max = Task.limit - sended.length\n wait.forEach((item, idx) => {\n if (idx < max) {\n item.run()\n }\n })\n }\n\n run () {\n // 兼容有些情况下调用open方法后,readyState为0的问题\n if (this.xhr.readyState === 1 || this.xhr.OPENED === 1) {\n this.running = true\n this.xhr.send()\n } else {\n this.remove()\n }\n }\n\n /***\n * 同时存在多播放器实例,存在问题\n */\n static clear (playerId) {\n let queue = Task.queue;\n for(let i = queue.length - 1; i > -1; i--){\n let item = queue[i];\n if(item.running && item.playerId === playerId){\n item.cancel();\n }\n queue.splice(i, 1)\n }\n }\n}\n\nTask.queue = []\nTask.limit = 2\n\nexport default Task\n","import Player from 'xgplayer'\nimport MP4 from './mp4'\nimport MSE from './media/mse'\nimport Task from './media/task'\nimport { isSupported, isSupportedWithXgmse, isMediaSourceSupported } from './util/isSupport';\nimport ProxyPromise from './util/proxyPromise'\nimport Timer from './util/timer'\nimport { CUSTOM_EVENTS } from './constants'\nimport GapJump from './gap_jump';\n\nconst DESTROYED = 'DESTROYED';\n\nconst sniffer = Player.sniffer;\n\nlet isEnded = (player, mp4) => {\n if (mp4.meta.endTime - player.currentTime < 0.5) {\n // let range = player.getBufferedRange(player.buffered2)\n let offsetTime = player.duration - player.currentTime\n if (offsetTime < 0.5) {\n player.mse.endOfStream()\n player._stopProgress()\n }\n }\n}\n\nclass Mp4Player extends Player {\n constructor (options) {\n let hasStartProgress = true;\n if(options.onlyInit || options.videoInit){\n options.onlyInit = true;\n options.autoplay = false;\n options.videoInit = false;\n hasStartProgress = false;\n }\n super(options);\n\n this._pendingPromises = [];\n this._allInitPromise = new ProxyPromise();\n this._maxBufferLength = options.maxBufferLength || 5\n this._playerId = Mp4Player.uniqueId ++;\n this._onBufferedResetFunc = this._onBufferedReset.bind(this);\n this._onSeekingFunc = this._onSeeking.bind(this);\n this._onMp4InitFunc = this._onMp4Init.bind(this);\n this._onWaitingFunc = this._onWaiting.bind(this);\n this._onEndedFunc = this._onEnded.bind(this);\n this._onDestroyFunc = this._onDestroy.bind(this);\n this._replay = this._onReplay.bind(this);\n this._onOnlineHandlerFunc = this._onOnlineHandler.bind(this);\n this._onOfflineHandlerFunc = this._onOfflineHandler.bind(this);\n this._tickInSeconds = options.tickInSeconds || 0.2;\n this._hasStartProgress = hasStartProgress;\n this._hasStartProgressBack = hasStartProgress;\n this.video.addEventListener(CUSTOM_EVENTS.BUFFERED_RESET, this._onBufferedResetFunc);\n this._bindNetworkStateChange();\n this._initMp4Kernal();\n\n this.once('ready', () => {\n this.gapJumpInst = new GapJump(this, this.config);\n Player.util.on(this, 'addVideoBufferEnd', () => {\n this.gapJumpInst.onSegmentAppend();\n });\n })\n }\n\n _initMp4Kernal(){\n let player = this;\n let rule = player.config.pluginRule || function () { return true }\n if (MSE.isSupported('video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"')) {\n if (!rule.call(player)) {\n return false\n }\n Object.defineProperty(player, 'src', {\n get () {\n return player.currentSrc\n },\n set (url) {\n player.mse.endOfStream()\n player._onDestroy();\n player.config.autoplay = player.autoplay = true\n player.config.url = url\n\n player._init(url).then((result) => {\n let mp4 = result[0]; \n let mse = result[1]\n player.proxyOnce('canplay', () => {\n player.play()\n player.proxyOn('waiting', player._onWaitingFunc)\n })\n player._startProgress();\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n // player.currentTime = 0\n }, err => {\n player._errorHandle(err)\n })\n },\n configurable: true\n })\n \n player.proxyOn('ended', player._onEndedFunc)\n \n player.proxyOnce('destroy', player._onDestroyFunc)\n \n if (player.config.videoInit || player.config.onlyInit){\n player.start(player.config.url)\n }\n }\n }\n\n start(url) {\n let player = this;\n url = url ? url : player.config.url;\n if (player.config.autoplay && Player.sniffer.browser == 'chrome' && !Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.addClass(player.root, 'xgplayer-is-enter')\n }\n player.proxyOnce('error', () => {\n if (Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.removeClass(player.root, 'xgplayer-is-enter')\n }\n })\n player.proxyOn('timeupdate', function () {\n if (Player.util.hasClass(player.root, 'xgplayer-isloading')) {\n Player.util.removeClass(player.root, 'xgplayer-isloading')\n }\n })\n player.proxyOnce('canplay', () => {\n if (Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.removeClass(player.root, 'xgplayer-is-enter')\n }\n // safari decoder time offset\n if (sniffer.browser === 'safari' && player.buffered && player.config.autoplay) {\n let start = player.buffered.start(0)\n player.currentTime = start + 0.1\n }\n })\n\n let initPromise = player._init(url)\n initPromise.id = 'init'\n player._addPendingPromise(initPromise)\n initPromise.then(result => {\n \n player._allInitPromise.resolve();\n player._hasInited = true;\n player._removePendingPromise(initPromise);\n let mp4 = result[0]; let mse = result[1]\n if(player.config.autoplay) {\n player.proxyOnce('canplay', () => {\n player.play()\n })\n }\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n Player.util.on(mp4, 'error', err => {\n player._errorHandle(err)\n })\n player.proxyOn('seeking', player._onSeekingFunc)\n player.proxyOnce('playing', player._onMp4InitFunc)\n player.proxyOn('waiting', player._onWaitingFunc)\n // if(!player.config.onlyInit || player._hasStartProgressBack){\n player._startProgress();\n // }\n }, err => {\n if(err !== DESTROYED){\n player._onSuperStart(url)\n player._errorHandle(err)\n }\n })\n }\n\n switchURL(url){\n let player = this;\n let mp5 = new MP4(url, player.config.xhrSetup, player, player.config.preloadSize, {\n playerId: player._playerId\n })\n let mp4 = player.mp4\n Player.util.on(mp5, 'moovReady', () => {\n let timeRange = mp4.timeRage; \n let curTime = player.currentTime\n timeRange = mp4.timeRage\n let start = timeRange.find(item => item[0] - curTime > 2)[0]\n let end = player.getBufferedRange(player.buffered2)[1]\n if (end - start > 0 && sniffer.browser !== 'safari') {\n player.mse.removeBuffer(start, end)\n }\n if (!Player.util.hasClass(player.root, 'xgplayer-ended')) {\n player.emit('urlchange')\n }\n player.mp4 = mp5\n player.mse.appendBuffer(mp5.packMeta(mp4.meta))\n })\n Player.util.on(mp5, 'error', err => {\n player._errorHandle(err)\n })\n }\n\n _onBufferedReset(){\n if(this.mp4 && this.mp4.timeRage) {\n this.mp4.timeRage.forEach(item => {\n // if(item[0] <= time) item.downloaded = false;\n item.downloaded = false;\n });\n }\n };\n\n _onOnlineHandler(){\n if(!this._hasInited){\n this.src = this.config.url;\n }else{\n if(this._hasStartProgressBack){\n this._startProgress();\n }\n this._hasStartProgressBack = false;\n }\n }\n\n _onOfflineHandler(){\n if(this._hasStartProgress){\n this._stopProgress();\n this._hasStartProgressBack = true;\n }\n }\n\n _bindNetworkStateChange(){\n window.addEventListener('online', this._onOnlineHandlerFunc)\n window.addEventListener('offline', this._onOfflineHandlerFunc)\n }\n\n _unbindNetworkStateChange(){\n window.removeEventListener('online', this._onOnlineHandlerFunc)\n window.removeEventListener('offline', this._onOfflineHandlerFunc)\n }\n\n _onSuperStart(url){\n super.start(url)\n }\n\n _init(url){\n let player = this;\n let promise = new ProxyPromise();\n\n player._initMp4(url, promise);\n return promise;\n }\n\n _initMse(mp4, meta, promise){\n let player = this;\n const isHvc = meta.videoCodec.indexOf('hvc1') > -1 || (meta.encv && meta.encv.data_format.indexOf('hvc1') > -1)\n\n let hasVideo = !!meta.videoCodec\n let hasAudio = !!meta.audioCodec\n let codec\n if(hasVideo && hasAudio){\n codec = isHvc ? 'video/mp4; codecs=\"hev1.1.6.L93.B0, mp4a.40.5\"':'video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"'\n }else if(hasVideo){\n codec = isHvc ? 'video/mp4; codecs=\"hev1.1.6.L93.B0\"':'video/mp4; codecs=\"avc1.64001E\"'\n }else{\n codec = 'video/mp4; codecs=\"mp4a.40.5\"'\n }\n \n let mse = new MSE(codec, player.config.mediaType)\n Player.util.on(mse, 'sourceopen', function () {\n const initSeg = mp4.packMeta(mp4.meta);\n mse.appendBuffer(initSeg)\n Player.util.once(mse, 'updateend', function () {\n player._loadData();\n })\n })\n Player.util.on(mse, 'error', function (e) {\n promise.reject(e)\n })\n promise.resolve([mp4, mse])\n }\n\n _initMp4(url, promise){\n let player = this;\n let mp4 = new MP4(url, player.config.xhrSetup, player, player.config.preloadSize, {\n playerId: player._playerId\n })\n\n Player.util.once(mp4, 'metaReady', meta => {\n this._initMse(mp4, meta, promise)\n })\n \n Player.util.on(mp4, 'error', (e) => {\n promise.reject(e)\n })\n }\n\n _loadData(i = 0, time = null){\n if(!navigator.onLine){\n return;\n }\n let player = this;\n if(!player.mp4){\n return;\n }\n time = time ? time : player.currentTime;\n player.mp4.seek(time + i * 0.1).then(buffer => {\n if (buffer && player.mse) {\n let mse = player.mse\n mse.updating = true\n Player.util.once(mse, 'updateend', () => {\n // if (player.currentTime === 0 && player.video.buffered.length && player.video.buffered.end(player.video.buffered.length - 1) > 0) {\n // player.emit('canplay')\n // }\n mse.updating = false\n player.emit('addVideoBufferEnd');\n })\n mse.appendBuffer(buffer)\n }\n }, () => {\n if (i < 10) {\n setTimeout(function () {\n player._loadData(i + 1)\n }, 2000)\n }\n })\n }\n\n _onTimeUpdate(){\n let player = this;\n let mse = player.mse;\n let mp4 = player.mp4\n if (mse && !mse.updating && mp4 && mp4.canDownload) {\n let timeRage = mp4.timeRage\n let range = player.getBufferedRange(player.buffered2); \n let cacheMaxTime = player.currentTime + player._maxBufferLength\n if (range[1] - cacheMaxTime > 0) {\n return\n }\n timeRage.every((item, idx) => {\n if(item.downloaded) {\n return true;\n } else if (range[1] === 0) { //当前播放时刻无缓存\n if(item[0] <= player.currentTime && (player.currentTime < item[1] || player.duration - item[1] < 0.5)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n } else { //当前播放时刻有缓存\n if (item[0] >= range[1] || item[1] - 1 >= range[1] || (range[1] >= item[0] && range[1] <= item[0] + 1)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n }\n })\n isEnded(player, mp4)// hack for older webkit\n }\n }\n\n\n _onWaiting(){\n let player = this;\n let curTime = player.currentTime\n player._onInnerWait(curTime)\n if(curTime + 2 < player.duration) player._onInnerWait(curTime + 2)\n if(curTime - 2 > 0) player._onInnerWait(curTime - 2)\n }\n\n _onEnded(){\n this.off('waiting', this._onWaitingFunc)\n this._stopProgress();\n }\n\n _onReplay() {\n let player = this;\n player._onDestroy();\n player._init(player.config.url).then((result) => {\n let mp4 = result[0]; \n let mse = result[1]\n player._startProgress();\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n // player.currentTime = 0\n player.proxyOnce('canplay', () => {\n player.play()\n player.proxyOn('waiting', player._onWaitingFunc)\n })\n }, err => {\n player._errorHandle(err)\n })\n }\n\n _onDestroy(){\n let player = this;\n player._hasInited = false;\n player._unbindNetworkStateChange();\n Task.clear(player._playerId)\n if (player.mp4) {\n player.mp4.destroy();\n player.mp4 = null;\n }\n if(player.mse){\n player.mse.destroy();\n }\n player.unloadVideo();\n player._stopProgress();\n player.cancelPendingPromises();\n }\n\n _errorHandle(err){\n if(err.errt === 'network' || err.errorType === 'network'){\n return;\n }\n if(err.errt === 'parse' || err.errorType === 'parse'){\n\n return;\n }\n let player = this;\n err.url = player.src\n if (err.errd && typeof err.errd === 'object') {\n if (player.mp4) {\n err.errd.url = player.mp4.url\n err.url = player.mp4.url\n player.mp4.canDownload = false\n }\n }\n player.emit('DATA_REPORT', err)\n Task.clear(player._playerId)\n if (player.mp4 && player.mp4.bufferCache) {\n player.mp4.bufferCache.clear()\n }\n if (player.currentTime) {\n player._currentTime = player.currentTime\n }\n if (player._start) {\n player.start = player._start\n player._start = null\n }\n player.switchURL = null\n player._replay = null\n\n player.off('seeking', player._onSeekingFunc)\n player.off('playing', player._onMp4InitFunc)\n player.off('waiting', player._onWaitingFunc)\n player.off('ended', player._onEndedFunc)\n player.off('destroy', player._onDestroyFunc)\n\n iplayer.emit('error', err)\n player.src = player.config.url\n player.proxyOnce('canplay', () => {\n if (player._currentTime) {\n player.currentTime = player._currentTime\n }\n player.play()\n })\n \n }\n\n _onSeeking() {\n let curTime = this.currentTime\n this._onCheckLoad(curTime);\n isEnded(this, this.mp4)\n }\n\n _onInnerWait(curTime) {\n this._onCheckLoad(curTime);\n }\n\n _onCheckLoad(curTime){\n let player = this;\n let buffered = player.buffered2 || player.buffered; \n let hasBuffered = false; \n let timeRage = player.mp4.timeRage\n if (buffered.length) {\n for (let i = 0, len = buffered.length; i < len; i++) {\n if (curTime >= buffered.start(i) && curTime <= buffered.end(i)) {\n hasBuffered = true\n break\n }\n }\n if (!hasBuffered) {\n timeRage.every((item, idx) => {\n if (item[0] <= curTime && (item[1] > curTime || player.duration - item[1] < 0.5)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n })\n }\n } else {\n timeRage.every((item, idx) => {\n if (item[0] <= curTime && item[1] > curTime) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n })\n }\n }\n\n _onMp4Init(){\n let player = this;\n if(player.config.mp4Init) {\n player.pause()\n }\n // if(player.config.onlyInit){\n // player._startProgress();\n // }\n }\n\n _stopProgress(){\n let player = this;\n this._hasStartProgress = false;\n if(player._requestTimer){\n player._requestTimer.stop();\n player._requestTimer = null;\n }\n }\n\n _startProgress(){\n let player = this;\n player._stopProgress();\n player._requestTimer = new Timer(()=>{\n if(player._requestTimer) {\n player._onTimeUpdate()\n }\n });\n player._requestTimer.tickEvery(player._tickInSeconds);//200ms\n this._hasStartProgress = true;\n }\n\n unloadVideo() {\n let player = this;\n try {\n if (player.video && player.video.src) {\n player.video.removeAttribute('src'); // empty source\n player.video.load();\n }\n } catch (error) {\n // console.log('unloadVideo error', error)\n }\n }\n\n _addPendingPromise(p){\n this._pendingPromises.push(p);\n }\n\n _removePendingPromise(p){\n let idx = this._pendingPromises.indexOf(p);\n if(idx > -1){\n this._pendingPromises.splice(idx, 1);\n }\n }\n\n onMediaExpired(){\n this._stopProgress();\n this.emit(CUSTOM_EVENTS.MEDIA_EXPIRED);\n }\n\n cancelPendingPromises(){\n if(this._pendingPromises.length > 0){\n this._pendingPromises.forEach(promise => {\n promise.reject(DESTROYED)\n })\n }\n this._pendingPromises = [];\n }\n\n enableAutoBuffer(start){\n if(start){\n if(!this._allInitPromise){\n return;\n }\n this._allInitPromise.then(()=>{\n this._startProgress();\n })\n }else{\n this._stopProgress();\n }\n }\n\n destroy(){\n if(this.mp4){\n this.mp4.destroy();\n }\n if(this.mse){\n this.mse.destroy();\n }\n if(this.video) {\n this.video.removeEventListener(CUSTOM_EVENTS.BUFFERED_RESET, this._onBufferedResetFunc);\n }\n super.destroy();\n }\n\n emitInitFail(reason){\n this.emit(CUSTOM_EVENTS.INIT_FAIL, reason);\n }\n\n emitParseError(){\n this.emit(CUSTOM_EVENTS.PARSE_ERROR);\n }\n\n /***\n * @return Promise\n */\n get ready(){\n return this._allInitPromise;\n }\n}\nMp4Player.uniqueId = 1;\nMp4Player.isSupported = isSupported;\nMp4Player.isSupportedWithXgmse = isSupportedWithXgmse;\nMp4Player.isMediaSourceSupported = isMediaSourceSupported;\nMp4Player.CUSTOM_EVENTS = CUSTOM_EVENTS;\n\nexport default Mp4Player;\n","import EventEmitter from 'event-emitter'\nimport Parser from './parse'\nimport Buffer from './fmp4/buffer'\nimport FMP4 from './fmp4/mp4'\nimport Task from './media/task'\nimport util from './util'\nimport Errors from './error'\nimport {CUSTOM_EVENTS, TASK_ERROR} from './constants'\nimport Player from 'xgplayer'\n\nclass MP4 {\n /**\n * [constructor 构造函数]\n * @param {String} url [视频地址]\n * @param {Number} [chunk_size=Math.pow(25, 4)] [请求的数据块大小,对于长视频设置的较大些可以避免二次请求]\n */\n constructor (url, xhrSetup, player, chunkSize = Math.pow(25, 4), ext = {}) {\n EventEmitter(this)\n this.url = url\n this.xhrSetup = xhrSetup\n this.CHUNK_SIZE = chunkSize\n this.player = player\n this.ext = ext\n this.timeRage = []\n this.canDownload = true\n this.init()\n Player.util.once(this, 'moovReady', this.moovParse.bind(this))\n }\n\n /**\n * [getData 根据字节区间下载二进制数据]\n * @param {Number} [start=0] [起始字节]\n * @param {Number} [end=start + this.CHUNK_SIZE] [截止字节]\n */\n getData (start = 0, end = start + this.CHUNK_SIZE - 1) {\n let self = this\n return new Promise((resolve, reject) => {\n let task = new Task(this.url, [\n start, end\n ], this.xhrSetup, (data)=>{\n if(self.hasDestroyed){\n return;\n }\n resolve(data)\n }, self.ext)\n // Player.util.once(task, 'error', err => {\n // self.emit('error', err)\n // })\n\n Player.util.once(task, CUSTOM_EVENTS.MEDIA_EXPIRED, ()=>{\n self.player && self.player.onMediaExpired();\n });\n\n Player.util.once(task, TASK_ERROR, params => {\n //非403状态或者非200,206状态逻辑\n reject({code: params.code, status: params.status})\n })\n })\n }\n\n /**\n * [moovParse 解析视频信息]\n * @return {[type]} [description]\n */\n moovParse () {\n let self = this\n let moov = this.moovBox\n let mvhd = util.findBox(moov, 'mvhd')\n let traks = util.findBox(moov, 'trak')\n let videoTrak,\n audioTrak\n let videoCodec,\n audioCodec\n let videoTimeScale,\n audioTimeScale\n let sps,\n pps,\n vps,\n profile,\n width,\n height\n let channelCount,\n sampleRate,\n decoderConfig\n let hvc1Data, hvcCData\n let pixelRatio = [1, 1]\n if (!Array.isArray(traks)) {\n traks = [traks]\n }\n traks.forEach(trak => {\n let hdlr = util.findBox(trak, 'hdlr')\n let mdhd = util.findBox(trak, 'mdhd')\n if (!hdlr || !mdhd) {\n self.emit('error', new Errors('parse', '', {line: 101, handle: '[MP4] moovParse', url: self.url}))\n return\n }\n let stsd = util.findBox(trak, 'stsd')\n let codecBox = stsd.subBox[0]\n if (hdlr.handleType === 'vide') {\n let avcC = util.findBox(trak, 'avcC')\n let hvcC\n if(!avcC) {\n hvcC = util.findBox(trak, 'hvcC')\n }\n \n let tkhd = util.findBox(trak, 'tkhd')\n videoTrak = trak\n videoTimeScale = mdhd.timescale\n if (avcC) {\n videoCodec = `${codecBox.type}.` + util.toHex(avcC.profile, avcC.profileCompatibility, avcC.AVCLevelIndication).join('')\n sps = avcC.sequence\n pixelRatio = [avcC.spsInfo.par_ratio.width, avcC.spsInfo.par_ratio.height]\n if (avcC.spsInfo.codec_size) {\n width = avcC.spsInfo.codec_size.width\n height = avcC.spsInfo.codec_size.height\n }\n pps = avcC.pps && avcC.pps.map((item) => Number(`0x${item}`))\n profile = avcC.profile\n } else if(hvcC) {\n hvcCData = hvcC.data\n let hvc1 = util.findBox(trak, 'hvc1')\n if(hvc1) {\n hvc1Data = hvc1.data\n width = hvc1.width\n height = hvc1.height\n }\n videoCodec = `${codecBox.type}.` + util.toHex(hvcC.profile, hvcC.profileCompatibility, hvcC.profileCompatibilityIndications).join('')\n vps = hvcC.vps && hvcC.vps.map((item) => Number(`0x${item}`))\n sps = hvcC.sequence\n // pixelRatio = [hvcC.spsInfo.par_ratio.width, hvcC.spsInfo.par_ratio.height]\n // if (hvcC.spsInfo.codec_size) {\n // width = hvcC.spsInfo.codec_size.width\n // height = hvcC.spsInfo.codec_size.height\n // }\n pps = hvcC.pps && hvcC.pps.map((item) => Number(`0x${item}`))\n profile = hvcC.profile\n } else {\n videoCodec = `${codecBox.type}`\n }\n if (tkhd && !width) {\n width = tkhd.width\n height = tkhd.height\n }\n }\n if (hdlr.handleType === 'soun') {\n audioTrak = trak\n let esds = util.findBox(trak, 'esds')\n let mp4a = util.findBox(trak, 'mp4a')\n let ESDescriptor = util.findBox(trak, 5)\n audioTimeScale = mdhd.timescale\n if (esds) {\n audioCodec = `${codecBox.type}.` + util.toHex(esds.subBox[0].subBox[0].typeID) + `.${esds.subBox[0].subBox[0].subBox[0].type}`\n } else {\n audioCodec = `${codecBox.type}`\n }\n if (ESDescriptor && ESDescriptor.EScode) {\n decoderConfig = ESDescriptor.EScode.map((item) => Number(`0x${item}`))\n }\n if (mp4a) {\n channelCount = mp4a.channelCount\n sampleRate = mp4a.sampleRate\n }\n }\n })\n if (!sps) return\n // this.videoTrak = Merge({}, videoTrak)\n // this.audioTrak = audioTrak ? Merge({}, audioTrak) : null\n this.videoTrak = videoTrak;\n this.audioTrak = audioTrak ? audioTrak : null\n let mdat = this._boxes.find(item => item.type === 'mdat')\n let videoDuration = util.seekTrakDuration(videoTrak, videoTimeScale)\n let audioDuration = audioTrak ? util.seekTrakDuration(audioTrak, audioTimeScale) : videoDuration\n this.mdatStart = mdat.start\n let vf = this.videoKeyFrames\n let videoKeyFramesLength = vf.length - 1\n vf.forEach((item, idx) => {\n if (idx < videoKeyFramesLength) {\n this.timeRage.push([\n item.time.time / videoTimeScale,\n vf[idx + 1].time.time / videoTimeScale\n ])\n } else {\n this.timeRage.push([\n item.time.time / videoTimeScale,\n mvhd.duration / mvhd.timeScale\n ])\n }\n })\n this.meta = {\n videoCodec,\n audioCodec,\n createTime: mvhd.createTime,\n modifyTime: mvhd.modifyTime,\n duration: mvhd.duration / mvhd.timeScale,\n timeScale: mvhd.timeScale,\n videoDuration,\n videoTimeScale,\n audioDuration,\n audioTimeScale,\n endTime: Math.min(videoDuration, audioDuration),\n vps,\n sps,\n pps,\n width,\n height,\n profile,\n pixelRatio,\n channelCount,\n sampleRate,\n audioConfig: decoderConfig,\n hvc1Data,\n hvcCData,\n ext: {\n videoTrak: this.videoTrak,\n audioTrak: this.audioTrak,\n mdatStart: this.mdatStart,\n timeRage: this.timeRage,\n },\n stss: this._stssObj\n }\n this.emit('metaReady', this.meta)\n }\n\n /**\n * [init 实例的初始化,主要是获取视频的MOOV元信息]\n */\n init () {\n let self = this\n self.getData().then(res => {\n let parsed\n let moovStart = 0\n let moov\n let boxes\n try {\n parsed = new Parser(res)\n } catch (e) {\n self.emit('error', e.type ? e : new Errors('parse', '', {line: 176, handle: '[MP4] init', msg: e.message}))\n return false\n }\n self._boxes = boxes = parsed.boxes\n boxes.every(item => {\n moovStart += item.size\n if (item.type === 'moov') {\n moov = item\n self.moovBox = moov\n self.emit('moovReady', moov)\n return false\n } else {\n return true\n }\n })\n if (!moov) {\n let nextBox = parsed.nextBox\n if (nextBox) {\n if (nextBox.type === 'moov') {\n self.getData(moovStart, moovStart + nextBox.size + 28).then(res => {\n let parsed\n // try {\n parsed = new Parser(res)\n // }catch(e) {\n\n // }\n \n self._boxes = self._boxes.concat(parsed.boxes)\n moov = parsed.boxes.filter(box => box.type === 'moov')\n if (moov.length) {\n self.moovBox = moov[0]\n self.emit('moovReady', moov)\n } else {\n self.emit('error', new Errors('parse', '', {line: 203, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 207, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n } else {\n self.getData(moovStart, '').then(res => {\n let parsed = new Parser(res)\n if (parsed) {\n self._boxes = self._boxes.concat(parsed.boxes)\n parsed.boxes.every(item => {\n if (item.type === 'moov') {\n moov = item\n self.moovBox = moov\n self.emit('moovReady', moov)\n return false\n } else {\n return true\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 225, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n }\n }\n }).catch(() => {\n self.emit('error', new Errors('network', '', {line: 231, handle: '[MP4] getData', msg: 'getData failed'}))\n })\n }\n\n getSamplesByOrders (type = 'video', start, end) {\n let trak = type === 'video'\n ? this.videoTrak\n : this.audioTrak\n let stsc = util.findBox(trak, 'stsc') // chunk~samples\n let stsz = util.findBox(trak, 'stsz') // sample-size\n let stts = util.findBox(trak, 'stts') // sample-time\n let stco = util.findBox(trak, 'stco') // chunk-offset\n let cttsObj = type === 'video' ? this._cttsObj : null;\n let stscObj = type === 'video' ? this._stscVideoObj : this._stscAudioObj;\n let mdatStart = this.mdatStart\n let samples = []\n end = end !== undefined\n ? end\n : stsz.entries.length\n if (start instanceof Array) {\n start.forEach((item, idx) => {\n samples.push({\n idx: item,\n size: stsz.entries[item],\n time: util.seekSampleTime(stts, cttsObj, item),\n offset: util.seekSampleOffset(stsc, stco, stsz, item, mdatStart, stscObj)\n })\n })\n } else if (end !== 0) {\n for (let i = start; i < end; i++) {\n samples.push({\n idx: i,\n size: stsz.entries[i],\n time: util.seekSampleTime(stts, cttsObj, i),\n offset: util.seekSampleOffset(stsc, stco, stsz, i, mdatStart, stscObj)\n })\n }\n } else {\n let offset = util.seekSampleOffset(stsc, stco, stsz, start, mdatStart, stscObj)\n samples = {\n idx: start,\n size: stsz.entries[start],\n time: util.seekSampleTime(stts, cttsObj, start),\n offset: offset\n }\n }\n return samples\n }\n\n get videoKeyFrames () {\n if (this._videoFrames) {\n return this._videoFrames\n }\n let videoTrak = this.videoTrak\n let stss = util.findBox(videoTrak, 'stss')\n let stsc = util.findBox(videoTrak, 'stsc') // chunk~samples\n let ctts = util.findBox(videoTrak, 'ctts') // offset-compositime\n this._cttsObj = null;\n if(ctts){\n this._cttsObj = {};\n let count = 0;\n for(let i = 0; i < ctts.entry.length; i++){\n let entry = ctts.entry[i];\n for(let j = 0; j < entry.count; j++){\n this._cttsObj[count] = entry.offset;\n count += 1;\n }\n }\n }\n\n this._stscVideoObj = {};\n let sampleCount = 0;\n for(let i = 0; i < stsc.count - 1; i++){\n let entry = stsc.entries[i];\n for(let j = 0; j < entry.chunk_count * entry.samples_per_chunk; j++){\n sampleCount ++;\n this._stscVideoObj[sampleCount] = entry;\n }\n }\n\n let frames = this.getSamplesByOrders('video', stss.entries.map(item => item - 1))\n this._stssObj = stss;\n this._videoFrames = frames\n return frames\n }\n\n get audioKeyFrames () {\n if (this._audioFrames) {\n return this._audioFrames\n }\n let videoScale = util.findBox(this.videoTrak, 'mdhd').timescale\n let audioScale = util.findBox(this.audioTrak, 'mdhd').timescale\n let audioStts = util.findBox(this.audioTrak, 'stts').entry\n let stsc = util.findBox(this.audioTrak, 'stsc') // chunk~samples\n this._stscAudioObj = {};\n let sampleCount = 0;\n for(let i = 0; i < stsc.count - 1; i++){\n let entry = stsc.entries[i];\n for(let j = 0; j < entry.chunk_count * entry.samples_per_chunk; j++){\n sampleCount ++;\n this._stscAudioObj[sampleCount] = entry;\n }\n }\n let videoFrames = this.videoKeyFrames\n let audioIndex = []\n audioIndex = videoFrames.map(item => {\n return util.seekOrderSampleByTime(audioStts, audioScale, item.time.time / videoScale)\n })\n this._audioFrames = audioIndex\n return this._audioFrames\n }\n\n packMeta() {\n if (!this.meta) {\n return\n }\n let buffer = new Buffer()\n buffer.write(FMP4.ftyp())\n buffer.write(FMP4.moov(this.meta))\n // this.cache.write(buffer.buffer)\n return buffer.buffer\n }\n\n getRangeFromTime(time){\n let fragIndex = this.getFragmentIdx(time);\n let range = this.getFragRange(fragIndex)\n if(range === [0, 0]) return null;\n return {\n range,\n fragIndex,\n }\n }\n\n getFragmentIdx(time){\n let timeStart = Math.round(time * this.meta.videoTimeScale)\n let fragIndex\n let videoFrames = this.videoKeyFrames\n videoFrames.every((item, idx) => {\n let nowTime = item.time.time\n let nextTime = videoFrames[idx + 1]\n ? videoFrames[idx + 1].time.time\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndex = idx\n return false\n } else {\n return true\n }\n })\n if (this.audioTrak) {\n let audioFrames = this.audioKeyFrames\n audioFrames.every((item, idx) => {\n let nowTime = item.startTime\n let nextTime = audioFrames[idx + 1]\n ? audioFrames[idx + 1].startTime\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndex = Math.min(idx, fragIndex)\n return false\n } else {\n return true\n }\n })\n }\n return fragIndex;\n }\n\n seek (time) {\n let fragIndex = this.getFragmentIdx(time);\n this.timeRage[fragIndex].downloaded = true;\n return this.loadFragment(fragIndex)\n }\n\n getFragRange (fragIndex) {\n let videoFrame = this.videoKeyFrames[fragIndex]\n let start = videoFrame.offset\n let end\n if (this.audioTrak) {\n let audioFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex].order, 0)\n start = Math.min(start, audioFrame.offset)\n }\n if (fragIndex < this.videoKeyFrames.length - 1) {\n let videoNextFrame = this.videoKeyFrames[fragIndex + 1]\n end = videoNextFrame.offset\n if (this.audioTrak) {\n let audioNextFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex + 1].order, 0)\n end = Math.max(end, audioNextFrame.offset || 0)\n }\n }\n if (window.isNaN(start) || (end !== undefined && window.isNaN(end))) {\n this.emit('error', new Errors('parse', '', { line: 366, handle: '[MP4] loadFragment', url: this.url }))\n return [0, 0]\n }\n return [start + this.mdatStart, end ? this.mdatStart + end : '']\n }\n loadFragment (fragIndex) {\n let self = this\n let range = this.getFragRange(fragIndex)\n if(range === [0, 0]) {\n debugger\n return false;\n }\n return this.getData(range[0], range[1]).then((dat) => {\n return self.createFragment(new Uint8Array(dat), range[0] - this.mdatStart, fragIndex)\n })\n .then(buf => {\n return buf\n })\n }\n addFragment (data) {\n let buffer = new Buffer()\n return new Promise(resolve => {\n buffer.write(FMP4.moof(data))\n buffer.write(FMP4.mdat(data))\n // this.cache.write(buffer.buffer)\n resolve(buffer.buffer)\n })\n }\n getVideoBuffer(mdatData, start, fragIndex) {\n let self = this\n let videoFlags = 0xf01\n let framesIndex = self.videoKeyFrames.map((item) => item.idx)\n let _samples = self.getSamplesByOrders('video', framesIndex[fragIndex], framesIndex[fragIndex + 1])\n let samples = _samples.map((item, idx) => {\n return {\n size: item.size,\n duration: item.time.duration,\n offset: item.time.offset,\n buffer: new Uint8Array(mdatData.slice(item.offset - start, item.offset - start + item.size)),\n key: idx === 0,\n idx: item.idx\n }\n })\n return this.addFragment({\n id: 1,\n time: _samples[0].time.time,\n firstFlags: 0x2000000,\n flags: videoFlags,\n samples,\n sampleOffset: _samples[0].idx,\n fragIndex\n })\n }\n getAudioBuffer(mdatData, start, fragIndex) {\n\n let self = this\n let audioFlags = 0x701\n\n let _samples = this.getSamplesByOrders(\n 'audio', this.audioKeyFrames[fragIndex].order, this.audioKeyFrames[fragIndex + 1]\n ? this.audioKeyFrames[fragIndex + 1].order\n : undefined)\n let samples = _samples.map((item, idx) => {\n return {\n size: item.size,\n duration: item.time.duration,\n offset: item.time.offset,\n buffer: new Uint8Array(mdatData.slice(item.offset - start, item.offset - start + item.size)),\n key: idx === 0\n }\n })\n return this.addFragment({\n id: 2,\n time: _samples[0].time.time,\n firstFlags: 0x00,\n flags: audioFlags,\n samples,\n sampleOffset: _samples[0].idx,\n fragIndex\n })\n }\n createFragment (mdatData, start, fragIndex) {\n let self = this\n\n let resBuffers = []\n let promises = [\n self.getVideoBuffer(mdatData, start, fragIndex)\n ]\n if (this.audioTrak) {\n promises.push(self.getAudioBuffer(mdatData, start, fragIndex))\n }\n return Promise.all(promises)\n .then(buffers => {\n resBuffers.push(buffers[0])\n if (buffers && buffers[1]) {\n resBuffers.push(buffers[1])\n }\n let bufferSize = 0\n resBuffers.every(item => {\n bufferSize += item.byteLength\n return true\n })\n let buffer = new Uint8Array(bufferSize)\n let offset = 0\n resBuffers.every(item => {\n buffer.set(item, offset)\n offset += item.byteLength\n return true\n })\n return buffer\n })\n }\n\n update(url){\n this.url = url;\n }\n\n destroy(){\n if(this.hasDestroyed){\n return;\n }\n for (let k in this) {\n delete this[k]\n }\n this.hasDestroyed = true;\n }\n}\n\nexport default MP4\n","\"use strict\";\n\nvar isValue = require(\"type/value/is\")\n , isPlainFunction = require(\"type/plain-function/is\")\n , assign = require(\"es5-ext/object/assign\")\n , normalizeOpts = require(\"es5-ext/object/normalize-options\")\n , contains = require(\"es5-ext/string/#/contains\");\n\nvar d = (module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif (arguments.length < 2 || typeof dscr !== \"string\") {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t\tw = contains.call(dscr, \"w\");\n\t} else {\n\t\tc = w = true;\n\t\te = false;\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n});\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== \"string\") {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (!isValue(get)) {\n\t\tget = undefined;\n\t} else if (!isPlainFunction(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (!isValue(set)) {\n\t\tset = undefined;\n\t} else if (!isPlainFunction(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t} else {\n\t\tc = true;\n\t\te = false;\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n","\"use strict\";\n\nvar isFunction = require(\"../function/is\");\n\nvar classRe = /^\\s*class[\\s{/}]/, functionToString = Function.prototype.toString;\n\nmodule.exports = function (value) {\n\tif (!isFunction(value)) return false;\n\tif (classRe.test(functionToString.call(value))) return false;\n\treturn true;\n};\n","\"use strict\";\n\nvar isPrototype = require(\"../prototype/is\");\n\nmodule.exports = function (value) {\n\tif (typeof value !== \"function\") return false;\n\n\tif (!hasOwnProperty.call(value, \"length\")) return false;\n\n\ttry {\n\t\tif (typeof value.length !== \"number\") return false;\n\t\tif (typeof value.call !== \"function\") return false;\n\t\tif (typeof value.apply !== \"function\") return false;\n\t} catch (error) {\n\t\treturn false;\n\t}\n\n\treturn !isPrototype(value);\n};\n","\"use strict\";\n\nvar isObject = require(\"../object/is\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) return false;\n\ttry {\n\t\tif (!value.constructor) return false;\n\t\treturn value.constructor.prototype === value;\n\t} catch (error) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../value/is\");\n\n// prettier-ignore\nvar possibleTypes = { \"object\": true, \"function\": true, \"undefined\": true /* document.all */ };\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) return false;\n\treturn hasOwnProperty.call(possibleTypes, typeof value);\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== \"function\") return false;\n\tobj = { foo: \"raz\" };\n\tassign(obj, { bar: \"dwa\" }, { trzy: \"trzy\" });\n\treturn obj.foo + obj.bar + obj.trzy === \"razdwatrzy\";\n};\n","\"use strict\";\n\nvar keys = require(\"../keys\")\n , value = require(\"../valid-value\")\n , max = Math.max;\n\nmodule.exports = function (dest, src /*, …srcn*/) {\n\tvar error, i, length = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry {\n\t\t\tdest[key] = src[key];\n\t\t} catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < length; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys(\"primitive\");\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../is-value\");\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function (opts1 /*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (!isValue(options)) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\n","\"use strict\";\n\nvar str = \"razdwatrzy\";\n\nmodule.exports = function () {\n\tif (typeof str.contains !== \"function\") return false;\n\treturn str.contains(\"dwa\") === true && str.contains(\"foo\") === false;\n};\n","\"use strict\";\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString /*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n","\"use strict\";\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n","import Box from './box'\nimport Concat from 'concat-typed-array'\nimport Stream from './stream'\nimport * as SubBox from './box/*.js'\n\nclass Parse {\n constructor (buffer) {\n this.buffer = null\n this.boxes = []\n this.nextBox = null\n this.start = 0\n let self = this\n if (self.buffer) {\n Concat(Uint8Array, self.buffer, buffer)\n } else {\n self.buffer = buffer\n }\n let bufferLength = buffer.byteLength\n buffer.position = 0\n let stream = new Stream(buffer)\n while (bufferLength - stream.position >= 8) {\n let box = new Box()\n box.readHeader(stream)\n if (box.size - 8 <= (bufferLength - stream.position)) {\n box.readBody(stream)\n self.boxes.push(box)\n } else {\n if (box.type === 'mdat') {\n box.readBody(stream)\n self.boxes.push(box)\n } else {\n self.nextBox = box\n stream.position -= 8\n break\n }\n }\n }\n self.buffer = new Uint8Array(self.buffer.slice(stream.position))\n }\n}\n\nexport default Parse\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (ResultConstructor) {\n var totalLength = 0;\n\n for (var _len = arguments.length, arrays = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n arrays[_key - 1] = arguments[_key];\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = arrays[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var arr = _step.value;\n\n totalLength += arr.length;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var result = new ResultConstructor(totalLength);\n var offset = 0;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = arrays[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _arr = _step2.value;\n\n result.set(_arr, offset);\n offset += _arr.length;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return result;\n};","import Box from '../box'\nimport Stream from '../stream'\n\nBox.vmhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = [stream.readUint8(), stream.readUint8(), stream.readUint8()]\n this.graphicsmode = stream.readUint16()\n this.opcolor = [stream.readUint16(), stream.readUint16(), stream.readUint16()]\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox['url '] = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = [stream.readUint8(), stream.readUint8(), stream.readUint8()]\n let location = []; let length = stream.buffer.byteLength\n while (stream.position < length) {\n location.push(stream.readUint8())\n }\n this.location = location\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nBox.udta = function () {\n delete this.subBox\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.tkhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3, 0)\n if (this.version === 1) {\n this.create = stream.readUint64()\n this.modify = stream.readUint64()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.trackID = stream.readUint32()\n this.reserverd = stream.readUint32()\n this.duration = stream.readUint64()\n } else {\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.trackID = stream.readUint32()\n this.reserverd = stream.readUint32()\n this.duration = stream.readUint32()\n }\n stream.readUint64()\n this.layer = stream.readInt16()\n this.alternate_group = stream.readInt16()\n this.volume = stream.readInt16() >> 8\n stream.readUint16()\n // 视频转换矩阵\n let matrix = []\n for (let i = 0; i < 9; i++) {\n matrix.push(stream.readUint16() + '.' + stream.readUint16())\n }\n this.matrix = matrix\n this.width = stream.readUint16() + '.' + stream.readUint16()\n this.height = stream.readUint16() + '.' + stream.readUint16()\n delete this.data\n delete this.subBox\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.tfhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n\n // trackId: view.getUint32(4)\n this.track_id = stream.readUint32();\n\n let baseDataOffsetPresent = (this.flag & 0xff) & 0x01;\n let sampleDescriptionIndexPresent = (this.flag & 0xff) & 0x02;\n let defaultSampleDurationPresent = (this.flag & 0xff) & 0x08;\n let defaultSampleSizePresent = (this.flag & 0xff) & 0x10;\n let defaultSampleFlagsPresent = (this.flag & 0xff) & 0x20;\n\n let i = 8;\n if (baseDataOffsetPresent) {\n i += 4; // truncate top 4 bytes\n this.baseDataOffset = stream.readUint32();\n i += 4;\n }\n if (sampleDescriptionIndexPresent) {\n this.sampleDescriptionIndex = stream.readUint32();\n i += 4;\n }\n if (defaultSampleDurationPresent) {\n this.defaultSampleDuration = stream.readUint32();\n i += 4;\n }\n if (defaultSampleSizePresent) {\n this.defaultSampleSize = stream.readUint32();\n i += 4;\n }\n if (defaultSampleFlagsPresent) {\n this.defaultSampleFlags = stream.readUint32();\n }\n\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stts = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entry = []\n for (let i = 0, count = this.count; i < count; i++) {\n entry.push({\n sampleCount: stream.readUint32(),\n sampleDuration: stream.readUint32()\n })\n }\n this.entry = entry\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stsz = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.sampleSize = stream.readUint32()\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n if (this.sampleSize) {\n entries.push(this.sampleSize)\n }\n else {\n entries.push(stream.readUint32())\n }\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stss = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint32())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.stsd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.entryCount = stream.readUint32()\n let box = new Box()\n box.readHeader(stream)\n this.subBox.push(box)\n box.readBody(stream)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stsc = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push({\n first_chunk: stream.readUint32(),\n samples_per_chunk: stream.readUint32(),\n sample_desc_index: stream.readUint32()\n })\n }\n for (let i = 0, count = this.count, entry, preEntry; i < count - 1; i++) {\n entry = entries[i]\n preEntry = entries[i - 1]\n entry.chunk_count = entries[i + 1].first_chunk - entry.first_chunk\n entry.first_sample = i === 0 ? 1 : preEntry.first_sample + preEntry.chunk_count * preEntry.samples_per_chunk\n }\n if (this.count === 1) {\n let entry = entries[0]\n entry.first_sample = 1\n entry.chunk_count = 0\n } else if (this.count > 1) {\n let last = entries[this.count - 1]; let pre = entries[this.count - 2]\n last.first_sample = pre.first_sample + pre.chunk_count * pre.samples_per_chunk\n last.chunk_count = 0\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stco = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint32())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.smhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.balance = stream.readInt8() + '.' + stream.readInt8()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\n\nBox.SLConfigDescriptor = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.SL = stream.readUint8()\n delete box.subBox\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\n\nBox.schm = function () {\n let stream = new Stream(this.data)\n\tthis.scheme_version = stream.readUint32();\n this.scheme_type = '';\n for (var i = 0; i < 4; i++) {\n this.scheme_type += String.fromCharCode(stream.readUint8());\n }\n\tif (this.flags & 0x000001) {\n this.scheme_uri = '';\n for (var i = 0; i < this.size - this.hdr_size - 8; i++) {\n this.scheme_uri += String.fromCharCode(stream.readUint8());\n }\n\t}\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.pasp = function () {\n let stream = new Stream(this.data)\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.mvhd = function () {\n let stream = new Stream(this.data)\n\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timeScale = stream.readUint32()\n this.duration = stream.readUint32()\n this.rate = stream.readUint16() + '.' + stream.readUint16()\n this.volume = stream.readUint8() + '.' + stream.readUint8()\n // 越过保留的10字节\n Stream.readByte(stream.dataview, 8)\n Stream.readByte(stream.dataview, 2)\n // 视频转换矩阵\n let matrix = []\n for (let i = 0; i < 9; i++) {\n matrix.push(stream.readUint16() + '.' + stream.readUint16())\n }\n this.matrix = matrix\n Stream.readByte(stream.dataview, 24)\n this.nextTrackID = stream.readUint32()\n delete this.subBox\n delete this.data\n}\n","import Box from '../box'\n\nBox.MP4ESDescrTag = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.esID = stream.readUint16()\n box.priority = stream.readUint8()\n box.subBox.push(Box.MP4DecConfigDescrTag(stream))\n box.subBox.push(Box.SLConfigDescriptor(stream))\n return box\n}\n","import Box from '../box'\n\nBox.MP4DecSpecificDescrTag = function (stream) {\n let box = new Box()\n let size, dataSize\n box.type = stream.readUint8()\n if (box.type !== 5) {\n stream.position = stream.position - 1\n return box\n }\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n dataSize = size - 5\n } else {\n dataSize = size\n size += 2\n }\n box.size = size\n let EScode = []\n for (let i = 0; i < dataSize; i++) {\n EScode.push(Number(stream.readUint8()).toString(16).padStart(2, '0'))\n }\n box.EScode = EScode\n delete box.subBox\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.MP4DecConfigDescrTag = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n if (box.type !== 4) {\n return box\n }\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.typeID = stream.readUint8()\n // 6 bits stream type,1 bit upstream flag,1 bit reserved flag\n box.streamUint = stream.readUint8()\n box.bufferSize = Stream.readByte(stream.dataview, 3)\n box.maximum = stream.readUint32()\n box.average = stream.readUint32()\n box.subBox.push(Box.MP4DecSpecificDescrTag(stream))\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.mp4a = function () {\n let stream = new Stream(this.data)\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(8)\n this.channelCount = stream.readUint16()\n this.sampleSize = stream.readUint16()\n stream.skip(4)\n this.sampleRate = stream.readUint32() >> 16\n let box = new Box()\n box.readHeader(stream)\n this.subBox.push(box)\n box.readBody(stream)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.mdhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n if (this.version === 1) {\n this.create = stream.readUint64()\n this.modify = stream.readUint64()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timescale = stream.readUint32()\n this.duration = stream.readUint64()\n } else {\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timescale = stream.readUint32()\n this.duration = stream.readUint32()\n }\n this.language = stream.readUint16()\n stream.readUint16()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\n\nBox.mdat = function () {\n delete this.subBox\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.iods = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let content = []\n let length = stream.buffer.byteLength\n while (stream.position < length) {\n content.push(stream.readUint8())\n }\n this.content = content\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport SpsParser from './sps'\n\nBox.hvcC = function () {\n let stream = new Stream(this.data)\n this.configVersion = stream.readUint8()\n this.profile = stream.readUint8()\n this.profileCompatibility = stream.readUint32()\n this.constraintIndicatorFlags = []\n for (let i = 0; i < 6; i++) {\n this.constraintIndicatorFlags.push(Number(stream.readUint8()).toString(16))\n }\n this.levelIdc = stream.readUint8()\n this.profileCompatibilityIndications = stream.readUint32()\n this.bitDepthLumaMinus8 = stream.readUint8()\n this.bitDepthChromaMinus8 = stream.readUint8()\n this.avgFrameRate = stream.readUint16()\n this.constantFrameRate = stream.readUint8()\n this.numOfArrays = stream.readUint8()\n\n this.vpsHeader = stream.readUint24()\n this.vpsLength = stream.readUint16()\n let vps = []\n for (let i = 0; i < this.vpsLength; i++) {\n vps.push(Number(stream.readUint8()).toString(16))\n }\n this.vps = vps\n\n this.spsHeader = stream.readUint24()\n this.spsLength = stream.readUint16()\n let sps = []\n for (let i = 0; i < this.spsLength; i++) {\n sps.push(Number(stream.readUint8()).toString(16))\n }\n // this.spsInfo = SpsParser.parseSPS(new Uint8Array(sps))\n this.sequence = sps\n\n this.ppsHeader = stream.readUint24()\n this.ppsLength = stream.readUint16()\n let pps = []\n for (let i = 0; i < this.ppsLength; i++) {\n pps.push(Number(stream.readUint8()).toString(16))\n }\n this.pps = pps\n\n let last = []; let dataviewLength = stream.dataview.byteLength\n while (stream.position < dataviewLength) {\n last.push(stream.readUint8())\n }\n this.last = last\n delete this.subBox\n // delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.hvc1 = function () {\n let stream = new Stream(this.data)\n let self = this\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(16)\n this.width = stream.readUint16()\n this.height = stream.readUint16()\n this.horizresolution = stream.readUint32()\n this.vertresolution = stream.readUint32()\n stream.skip(4)\n this.frameCount = stream.readUint16()\n stream.skip(1)\n for (let i = 0; i < 31; i++) {\n String.fromCharCode(stream.readUint8())\n }\n this.depth = stream.readUint16()\n stream.skip(2)\n while (stream.position < stream.buffer.byteLength) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n // delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.hdlr = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n stream.skip(4)\n this.handleType = `${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}`\n stream.skip(12)\n let name = []\n while (stream.position < this.size - 8) {\n name.push(String.fromCharCode(stream.readUint8()))\n }\n this.name = name.join('')\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.ftyp = function () {\n let stream = new Stream(this.data)\n this.major_brand = String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8())\n this.minor_version = stream.readUint32()\n let compatibleBrands = []\n for (let i = 0, len = Math.floor((stream.buffer.byteLength - 8) / 4); i < len; i++) {\n compatibleBrands.push(String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8()))\n }\n this.compatible_brands = compatibleBrands\n stream = null\n delete this.subBox\n delete this.data\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.frma = function () {\n let stream = new Stream(this.data)\n this.data_format = '';\n for (var i = 0; i < 4; i++) {\n this.data_format += String.fromCharCode(stream.readUint8());\n }\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.esds = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n try {\n let box = Box.MP4ESDescrTag(stream)\n this.subBox.push(box)\n delete this.data\n stream = null\n }catch(e) {\n console.error(e)\n }\n \n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.elst = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let entries = []\n let entry_count = stream.readUint32()\n this.entries = entries\n for (let i = 0; i < entry_count; i++) {\n let entry = {}\n entries.push(entry)\n if (this.version === 1) {\n entry.segment_duration = stream.readUint64()\n entry.media_time = stream.readUint64()\n } else {\n entry.segment_duration = stream.readUint32()\n entry.media_time = stream.readInt32()\n }\n entry.media_rate_integer = stream.readInt16()\n entry.media_rate_fraction = stream.readInt16()\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.dref = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let entryCount = stream.readUint32()\n this.entryCount = entryCount\n let self = this\n // 暂时不支持离散视频,视频的部分内容由url指定\n for (let i = 0; i < entryCount; i++) {\n let box = new Box()\n self.subBox.push(box)\n box.read(stream)\n }\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.ctts = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n\n this.entryCount = stream.readUint32()\n let entry = []\n this.entry = entry\n for (let i = 0, count = this.entryCount; i < count; i++) {\n entry.push({\n count: stream.readUint32(),\n offset: stream.readUint32()\n })\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.co64 = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint64())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.btrt = function () {\n let stream = new Stream(this.data)\n this.bufferSizeDB = stream.readUint32()\n this.maxBitrate = stream.readUint32()\n this.avgBitrate = stream.readUint32()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport SpsParser from './sps'\n\nBox.avcC = function () {\n let stream = new Stream(this.data)\n this.configVersion = stream.readUint8()\n this.profile = stream.readUint8()\n this.profileCompatibility = stream.readUint8()\n this.AVCLevelIndication = stream.readUint8()\n this.lengthSizeMinusOne = (stream.readUint8() & 3) + 1\n this.numOfSequenceParameterSets = stream.readUint8() & 31\n let sequenceLength = stream.readUint16()\n this.sequenceLength = sequenceLength\n let sequence = []\n for (let i = 0; i < sequenceLength; i++) {\n sequence.push(stream.readUint8())\n }\n this.spsInfo = SpsParser.parseSPS(new Uint8Array(sequence))\n this.ppsCount = stream.readUint8()\n let ppsLength = stream.readUint16()\n this.ppsLength = ppsLength\n let pps = []\n for (let i = 0; i < ppsLength; i++) {\n pps.push(Number(stream.readUint8()).toString(16))\n }\n this.pps = pps\n this.sequence = sequence\n let last = []; let dataviewLength = stream.dataview.byteLength\n while (stream.position < dataviewLength) {\n last.push(stream.readUint8())\n }\n this.last = last\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.avc1 = function () {\n let stream = new Stream(this.data)\n let self = this\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(16)\n this.width = stream.readUint16()\n this.height = stream.readUint16()\n this.horizresolution = stream.readUint32()\n this.vertresolution = stream.readUint32()\n stream.skip(4)\n this.frameCount = stream.readUint16()\n stream.skip(1)\n for (let i = 0; i < 31; i++) {\n String.fromCharCode(stream.readUint8())\n }\n this.depth = stream.readUint16()\n stream.skip(2)\n while (stream.position < stream.buffer.byteLength) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n delete this.data\n stream = null\n}\n","import Buffer from './buffer'\nconst UINT32_MAX = Math.pow(2, 32) - 1\n\nclass FMP4 {\n static type (name) {\n return new Uint8Array([name.charCodeAt(0), name.charCodeAt(1), name.charCodeAt(2), name.charCodeAt(3)])\n }\n static size (value) {\n return Buffer.writeUint32(value)\n }\n static extension (version, flag) {\n return new Uint8Array([\n version,\n (flag >> 16) & 0xff,\n (flag >> 8) & 0xff,\n flag & 0xff\n ])\n }\n static ftyp () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(24), FMP4.type('ftyp'), new Uint8Array([\n 0x69, 0x73, 0x6F, 0x36, // isom,\n 0x0, 0x0, 0x00, 0x01, // minor_version: 0x01\n 0x69, 0x73, 0x6F, 0x36, // isom\n 0x64, 0x61, 0x73, 0x68 // avc1\n ]))\n return buffer.buffer\n }\n static moov (data) {\n let buffer = new Buffer(); let size = 8\n let mvhd = FMP4.mvhd(data.duration, data.timeScale)\n let mvex = FMP4.mvex(data.duration, data.timeScale)\n let trak1 = FMP4.videoTrak(data)\n let trak2 = new Uint8Array([])\n if (data.channelCount) {\n trak2 = FMP4.audioTrak(data);\n }\n [mvhd, mvex, trak1, trak2].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('moov'), mvhd, mvex, trak1, trak2)\n return buffer.buffer\n }\n static mvhd (duration, timescale) {\n let buffer = new Buffer()\n duration *= timescale\n // const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n // const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let bytes = new Uint8Array([\n 0x00, // version 1\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >> 24) & 0xff,\n (timescale >> 16) & 0xff,\n (timescale >> 8) & 0xff,\n timescale & 0xff, // timescale\n (duration >> 24) & 0xff,\n (duration >> 16) & 0xff,\n (duration >> 8) & 0xff,\n duration & 0xff, // duration\n 0x00, 0x01, 0x00, 0x00, // 1.0 rate\n 0x01, 0x00, // 1.0 volume\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x00, 0x00, 0x00, 0x03 // next_track_ID\n ])\n buffer.write(FMP4.size(8 + bytes.length), FMP4.type('mvhd'), new Uint8Array(bytes))\n return buffer.buffer\n }\n static videoTrak (data) {\n let buffer = new Buffer(); let size = 8\n let tkhd = FMP4.tkhd({\n id: 1,\n duration: data.videoDuration,\n timescale: data.videoTimeScale,\n width: data.width,\n height: data.height,\n type: 'video'\n })\n let mdia = FMP4.mdia({\n type: 'video',\n timescale: data.videoTimeScale,\n duration: data.videoDuration,\n vps: data.vps,\n sps: data.sps,\n pps: data.pps,\n pixelRatio: data.pixelRatio,\n width: data.width,\n height: data.height,\n videoCodec: data.videoCodec,\n hvc1Data: data.hvc1Data,\n hvcCData: data.hvcCData,\n stss: data.stss\n });\n [tkhd, mdia].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('trak'), tkhd, mdia)\n return buffer.buffer\n }\n static audioTrak (data) {\n let buffer = new Buffer(); let size = 8\n let tkhd = FMP4.tkhd({\n id: 2,\n duration: data.audioDuration,\n timescale: data.audioTimeScale,\n width: 0,\n height: 0,\n type: 'audio'\n })\n let channelCount = data.channelCount\n let sampleRate = data.sampleRate\n let mdia = FMP4.mdia({\n type: 'audio',\n timescale: data.audioTimeScale,\n duration: data.audioDuration,\n channelCount,\n sampleRate,\n audioConfig: data.audioConfig\n });\n [tkhd, mdia].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('trak'), tkhd, mdia)\n return buffer.buffer\n }\n static tkhd (data) {\n let buffer = new Buffer()\n let id = data.id\n\n let duration = data.duration * data.timeScale\n\n let width = data.width\n\n let height = data.height\n\n let type = data.type\n\n // let upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n\n // let lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let content = new Uint8Array([\n 0x00, // version 1\n 0x00, 0x00, 0x03, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0xD9, 0xAC, 0xEC, 0x56, // modification_time\n (id >> 24) & 0xff,\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n id & 0xff, // track_ID\n 0x00, 0x00, 0x00, 0x00, // reserved\n (duration >> 24) & 0xff,\n (duration >> 16) & 0xff,\n (duration >> 8) & 0xff,\n duration & 0xff, // duration\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, type === 'video' ? 0x01 : 0x00, // alternate_group\n type === 'audio' ? 0x01 : 0x00, 0x00, // non-audio track volume\n 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n (width >> 8) & 0xff,\n width & 0xff,\n 0x00, 0x00, // width\n (height >> 8) & 0xff,\n height & 0xff,\n 0x00, 0x00 // height\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('tkhd'), content)\n return buffer.buffer\n }\n static edts (data) {\n let buffer = new Buffer(); let duration = data.duration; let mediaTime = data.mediaTime\n buffer.write(FMP4.size(36), FMP4.type('edts'))\n // elst\n buffer.write(FMP4.size(28), FMP4.type('elst'))\n buffer.write(new Uint8Array([\n 0x00, 0x00, 0x00, 0x01, // entry count\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,\n (mediaTime >> 24) & 0xff, (mediaTime >> 16) & 0xff, (mediaTime >> 8) & 0xff, mediaTime & 0xff,\n 0x00, 0x00, 0x00, 0x01 // media rate\n ]))\n return buffer.buffer\n }\n static mdia (data) {\n let buffer = new Buffer(); let size = 8\n let mdhd = FMP4.mdhd(data.timescale)\n let hdlr = FMP4.hdlr(data.type)\n let minf = FMP4.minf(data);\n [mdhd, hdlr, minf].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('mdia'), mdhd, hdlr, minf)\n return buffer.buffer\n }\n static mdhd (timescale, duration = 0) {\n let buffer = new Buffer()\n duration *= timescale\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let content = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0xD9, 0x14, 0x25, 0x5A, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n 0x00, 0x00, 0x00, 0x00, // duration\n 0x15, 0xC7, // 'und' language\n 0x00, 0x00\n ])\n buffer.write(FMP4.size(12 + content.byteLength), FMP4.type('mdhd'), FMP4.extension(0, 0), content)\n return buffer.buffer\n }\n static hdlr (type) {\n let buffer = new Buffer()\n let value = [0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65,\n 0x6f, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]\n if (type === 'audio') {\n value.splice(8, 4, ...[0x73, 0x6f, 0x75, 0x6e])\n value.splice(24, 13, ...[0x53, 0x6f, 0x75, 0x6e,\n 0x64, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00])\n }\n buffer.write(FMP4.size(8 + value.length), FMP4.type('hdlr'), new Uint8Array(value))\n return buffer.buffer\n }\n static minf (data) {\n let buffer = new Buffer(); let size = 8\n let vmhd = data.type === 'video' ? FMP4.vmhd() : FMP4.smhd()\n let dinf = FMP4.dinf()\n let stbl = FMP4.stbl(data);\n [vmhd, dinf, stbl].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('minf'), vmhd, dinf, stbl)\n return buffer.buffer\n }\n static vmhd () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(20), FMP4.type('vmhd'), new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphicsmode\n 0x00, 0x00,\n 0x00, 0x00,\n 0x00, 0x00 // opcolor\n ]))\n return buffer.buffer\n }\n static smhd () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(16), FMP4.type('smhd'), new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]))\n return buffer.buffer\n }\n static dinf () {\n let buffer = new Buffer()\n let dref = [0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0c, // entry_size\n 0x75, 0x72, 0x6c, 0x20, // 'url' type\n 0x00, // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]\n buffer.write(FMP4.size(36), FMP4.type('dinf'), FMP4.size(28), FMP4.type('dref'), new Uint8Array(dref))\n return buffer.buffer\n }\n static stbl (data) {\n let buffer = new Buffer(); let size = 8\n let stsd = FMP4.stsd(data)\n let stts = FMP4.stts()\n let stsc = FMP4.stsc()\n let stsz = FMP4.stsz()\n let stco = FMP4.stco();\n if(data.type === 'video') {\n let stss = FMP4.stss(data.stss);\n [stsd, stts, stss, stsc, stsz, stco].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('stbl'), stsd, stts, stss, stsc, stsz, stco)\n } else {\n [stsd, stts, stsc, stsz, stco].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('stbl'), stsd, stts, stsc, stsz, stco)\n }\n \n return buffer.buffer\n }\n static stsd (data) {\n let buffer = new Buffer(); let content\n if (data.type === 'audio') {\n content = FMP4.mp4a(data)\n } else if (data.videoCodec.indexOf('hvc1') > -1) {\n content = FMP4.hvc1(data)\n } else {\n content = FMP4.avc1(data)\n }\n buffer.write(\n FMP4.size(16 + content.byteLength), \n FMP4.type('stsd'), \n FMP4.extension(0, 0), \n new Uint8Array([0x00, 0x00, 0x00, 0x01]),\n content\n )\n return buffer.buffer\n }\n static mp4a (data) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, data.channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n (data.sampleRate >> 8) & 0xff,\n data.sampleRate & 0xff, //\n 0x00, 0x00\n ])\n let esds = FMP4.esds(data.audioConfig)\n buffer.write(FMP4.size(8 + content.byteLength + esds.byteLength), FMP4.type('mp4a'), content, esds)\n return buffer.buffer\n }\n static esds (config = [43, 146, 8, 0]) {\n const configlen = config.length\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n\n 0x03, // descriptor_type\n 0x17 + configlen, // length\n 0x00, 0x01, // es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x0f + configlen, // length\n 0x40, // codec : mpeg4_audio\n 0x15, // stream_type\n 0x00, 0x00, 0x00, // buffer_size\n 0x00, 0x00, 0x00, 0x00, // maxBitrate\n 0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n 0x05 // descriptor_type\n ].concat([configlen]).concat(config).concat([0x06, 0x01, 0x02]))\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('esds'), content)\n return buffer.buffer\n }\n static avc1 (data) {\n let buffer = new Buffer(); let size = 40// 8(avc1)+8(avcc)+8(btrt)+16(pasp)\n let sps = data.sps; let pps = data.pps; let width = data.width; let height = data.height; let hSpacing = data.pixelRatio[0]; let vSpacing = data.pixelRatio[1]\n let avcc = new Uint8Array([\n 0x01, // version\n sps[1], // profile\n sps[2], // profile compatible\n sps[3], // level\n 0xfc | 3,\n 0xE0 | 1 // 目前只处理一个sps\n ].concat([sps.length >>> 8 & 0xff, sps.length & 0xff]).concat(sps).concat(1).concat([pps.length >>> 8 & 0xff, pps.length & 0xff]).concat(pps))\n let avc1 = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (width >> 8) & 0xff,\n width & 0xff, // width\n (height >> 8) & 0xff,\n height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x12,\n 0x64, 0x61, 0x69, 0x6C, // dailymotion/hls.js\n 0x79, 0x6D, 0x6F, 0x74,\n 0x69, 0x6F, 0x6E, 0x2F,\n 0x68, 0x6C, 0x73, 0x2E,\n 0x6A, 0x73, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0x11, 0x11]) // pre_defined = -1\n let btrt = new Uint8Array([\n 0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0 // avgBitrate\n ])\n let pasp = new Uint8Array([\n (hSpacing >> 24), // hSpacing\n (hSpacing >> 16) & 0xff,\n (hSpacing >> 8) & 0xff,\n hSpacing & 0xff,\n (vSpacing >> 24), // vSpacing\n (vSpacing >> 16) & 0xff,\n (vSpacing >> 8) & 0xff,\n vSpacing & 0xff\n ])\n\n buffer.write(\n FMP4.size(size + avc1.byteLength + avcc.byteLength + btrt.byteLength), FMP4.type('avc1'), avc1,\n FMP4.size(8 + avcc.byteLength), FMP4.type('avcC'), avcc,\n FMP4.size(20), FMP4.type('btrt'), btrt,\n FMP4.size(16), FMP4.type('pasp'), pasp\n )\n return buffer.buffer\n }\n static hvc1 (data) {\n const buffer = new Buffer()\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (data.width >> 8) & 0xFF,\n data.width & 0xff, // width\n (data.height >> 8) & 0xFF,\n data.height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x00,\n 0x00, 0x00, 0x00, 0x00, // dailymotion/hls.js\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0xFF, 0xFF,\n ]);\n\n buffer.write(\n FMP4.size(8 + content.byteLength + 8 + data.hvcCData.byteLength + 10), FMP4.type('hvc1'), content,\n FMP4.size(8 + data.hvcCData.byteLength), FMP4.type('hvcC'), new Uint8Array(data.hvcCData),\n FMP4.size(10), FMP4.type('fiel'), new Uint8Array([0x01, 0x00])\n )\n return buffer.buffer\n }\n static stts () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stts'), content)\n return buffer.buffer\n }\n static stss (stssObj) {\n let buffer = new Buffer()\n let entries = [];\n stssObj.entries.forEach(item => {\n entries.push(item >> 24)\n entries.push((item >> 16) & 0xff)\n entries.push((item >> 8) & 0xff)\n entries.push(item & 0xff)\n })\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n (stssObj.count >> 24), // entry_count\n (stssObj.count >> 16) & 0xff,\n (stssObj.count >> 8) & 0xff,\n stssObj.count & 0xff,\n ].concat(entries))\n buffer.write(FMP4.size(8+8+4*stssObj.count), FMP4.type('stss'), content)\n return buffer.buffer\n }\n static stsc () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stsc'), content)\n return buffer.buffer\n }\n static stco () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stco'), content)\n return buffer.buffer\n }\n static stsz () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ])\n buffer.write(FMP4.size(20), FMP4.type('stsz'), content)\n return buffer.buffer\n }\n static mvex (duration, timeScale) {\n let buffer = new Buffer()\n let mehd = Buffer.writeUint32(duration * timeScale)\n buffer.write(FMP4.size(88), FMP4.type('mvex'), FMP4.size(16), FMP4.type('mehd'), FMP4.extension(0, 0), mehd, FMP4.trex1(1), FMP4.trex2(2))\n return buffer.buffer\n }\n static trex (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static trex1 (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x02, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x00 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static trex2 (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x04, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x02, 0x00, 0x00, 0x00 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static moof (data) {\n let buffer = new Buffer(); let size = 8\n let mfhd = FMP4.mfhd(data)\n let traf = FMP4.traf(data);\n [mfhd, traf].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('moof'), mfhd, traf)\n return buffer.buffer\n }\n static mfhd (data) {\n let buffer = new Buffer()\n let content = null;\n if (data.id === 1) {\n content = Buffer.writeUint32((data.fragIndex || 0) + 1)\n }\n else {\n content = Buffer.writeUint32((data.fragIndex || 0) + 1)\n }\n buffer.write(FMP4.size(16), FMP4.type('mfhd'), FMP4.extension(0, 0), content)\n return buffer.buffer\n }\n static traf (data) {\n let buffer = new Buffer(); let size = 8\n let tfhd = FMP4.tfhd(data.id)\n let tfdt = FMP4.tfdt(data, data.time)\n let sdtp = FMP4.sdtp(data)\n let trun = FMP4.trun(data, sdtp.byteLength);\n [tfhd, tfdt, sdtp, trun].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('traf'), tfhd, tfdt, sdtp, trun)\n return buffer.buffer\n }\n static tfhd (id) {\n let buffer = new Buffer()\n let content = Buffer.writeUint32(id)\n buffer.write(FMP4.size(16), FMP4.type('tfhd'), new Uint8Array([\n 0x00, 0x02, 0x00, 0x00\n ]), content)\n return buffer.buffer\n }\n static tfdt (data, time) {\n let buffer = new Buffer()\n let upper = Math.floor(time / (UINT32_MAX + 1))\n let lower = Math.floor(time % (UINT32_MAX + 1))\n buffer.write(FMP4.size(20), FMP4.type('tfdt'), FMP4.extension(1, 0), Buffer.writeUint32(upper), Buffer.writeUint32(lower))\n return buffer.buffer\n }\n static trun (data, sdtpLength) {\n let id = data.id\n let ceil = id === 1 ? 16 : 12\n let buffer = new Buffer()\n let sampleCount = Buffer.writeUint32(data.samples.length)\n // mdat-header 8\n // moof-header 8\n // mfhd 16\n // traf-header 8\n // thhd 16\n // tfdt 20\n // trun-header 12\n // sampleCount 4\n // data-offset 4\n // samples.length\n let offset = Buffer.writeUint32(8 + 8 + 16 + 8 + 16 + 20 + 12 + 4 + 4 + ceil * data.samples.length + sdtpLength)\n buffer.write(FMP4.size(20 + ceil * data.samples.length), FMP4.type('trun'), FMP4.extension(0, data.flags), sampleCount, offset)\n data.samples.forEach((item, idx) => {\n buffer.write(Buffer.writeUint32(item.duration))\n buffer.write(Buffer.writeUint32(item.size))\n if (id === 1) {\n buffer.write(Buffer.writeUint32(item.key ? 0x02000000 : 0x01010000))\n buffer.write(Buffer.writeUint32(item.offset))\n } else {\n buffer.write(Buffer.writeUint32(0x1000000))\n }\n })\n return buffer.buffer\n }\n static sdtp (data) {\n let buffer = new Buffer()\n buffer.write(FMP4.size(12 + data.samples.length), FMP4.type('sdtp'), FMP4.extension(0, 0))\n data.samples.forEach(item => {\n buffer.write(new Uint8Array(data.id === 1 ? [item.key ? 32 : 16] : [16]))\n })\n return buffer.buffer\n }\n static mdat (data) {\n let buffer = new Buffer(); \n let size = 8;\n data.samples.forEach(item => {\n size += item.size\n })\n buffer.write(FMP4.size(size), FMP4.type('mdat'))\n data.samples.forEach(item => {\n buffer.write(item.buffer)\n })\n return buffer.buffer\n }\n}\n\nexport default FMP4","export default function getResponseHeaders(xhr) {\n const headerMap = {};\n if (xhr instanceof window.XMLHttpRequest) {\n try {\n const headers = xhr.getAllResponseHeaders();\n\n const arr = headers.trim().split(/[\\r\\n]+/);\n arr.forEach(function (line) {\n const parts = line.split(': ');\n const header = parts.shift();\n const value = parts.join(': ');\n headerMap[header] = value;\n });\n } catch (error) {\n }\n }\n return headerMap;\n}","let util = {}\n\n/**\n * [使用递归查询指定type的box]\n * var mimeCodec = 'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"';\n * @param {Object} root [JSON对象]\n * @param {String} type [box的类型]\n * @param {?Array} type [box]\n * @return {Object|Array<Object>|undefined} [box]\n */\nutil.findBox = function (root, type, result = []) {\n if (root.type !== type) {\n if (root && root.subBox) {\n let box = root.subBox.filter(item => item.type === type)\n if (box.length) {\n box.forEach(item => result.push(item))\n } else {\n root.subBox.forEach(item => util.findBox(item, type, result))\n }\n }\n } else {\n result.push(root)\n }\n result = [].concat(result)\n return result.length > 1 ? result : result[0]\n}\n\nutil.padStart = function (str, length, pad) {\n let charstr = String(pad); let len = length >> 0; let maxlen = Math.ceil(len / charstr.length)\n let chars = []; let r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\n/**\n * [十进制转十六进制]\n * @param {Number} value [要转换的十进制数字]\n * @return {String} [十六进制]\n */\nutil.toHex = function (...value) {\n let hex = []\n value.forEach(item => {\n hex.push(util.padStart(Number(item).toString(16), 2, 0))\n })\n return hex\n}\n\n/**\n * [求和计算]\n * @param {[type]} rst [description]\n * @return {[type]} [description]\n */\nutil.sum = function (...rst) {\n let count = 0\n rst.forEach(item => { count += item })\n return count\n}\n\n/**\n * [计算音视频数据在Mdat中的偏移量]\n * @param {Array} stsc [块偏移量]\n * @param {Number} sample_order [帧次序]\n * @return {Object} [块的位置和当前帧的偏移数]\n */\nutil.stscOffset = function (stsc, sample_order, stscObj) {\n let chunk_index; let samples_offset = ''\n // let chunk_start = stsc.entries.filter((item) => {\n // return item.first_sample <= sample_order && sample_order < item.first_sample + item.chunk_count * item.samples_per_chunk\n // })[0]\n let chunk_start = stscObj[sample_order];\n if (!chunk_start) {\n let last_chunk = stsc.entries.pop()\n stsc.entries.push(last_chunk)\n let chunk_offset = Math.floor((sample_order - last_chunk.first_sample) / last_chunk.samples_per_chunk)\n let last_chunk_index = last_chunk.first_chunk + chunk_offset\n let last_chunk_first_sample = last_chunk.first_sample + last_chunk.samples_per_chunk * chunk_offset\n return {\n chunk_index: last_chunk_index,\n samples_offset: [last_chunk_first_sample, sample_order]\n }\n } else {\n let chunk_offset = Math.floor((sample_order - chunk_start.first_sample) / chunk_start.samples_per_chunk)\n let chunk_offset_sample = chunk_start.first_sample + chunk_offset * chunk_start.samples_per_chunk\n chunk_index = chunk_start.first_chunk + chunk_offset\n samples_offset = [chunk_offset_sample, sample_order]\n return {\n chunk_index: chunk_index,\n samples_offset\n }\n }\n}\n\nutil.seekSampleOffset = function (stsc, stco, stsz, order, mdatStart, stscObj) {\n let chunkOffset = util.stscOffset(stsc, order + 1, stscObj)\n let sum = util.sum.apply(null, stsz.entries.slice(chunkOffset.samples_offset[0] - 1, chunkOffset.samples_offset[1] - 1))\n let ss = stco.entries[chunkOffset.chunk_index - 1]\n let result = ss + sum - mdatStart\n if (result === undefined) {\n throw `result=${result},stco.length=${stco.entries.length},sum=${util.sum.apply(null, stsz.entries.slice(0, order))}`\n } else if (result < 0) {\n throw `result=${result},stco.length=${stco.entries.length},sum=${util.sum.apply(null, stsz.entries.slice(0, order))}`\n }\n return result\n}\n\nutil.seekSampleTime = function (stts, cttsObj, order) {\n let time; let duration; let count = 0; let startTime = 0; let offset = 0\n stts.entry.every(item => {\n duration = item.sampleDuration\n if (order < count + item.sampleCount) {\n time = startTime + (order - count) * item.sampleDuration\n return false\n } else {\n count += item.sampleCount\n startTime += item.sampleCount * duration\n return true\n }\n })\n if (cttsObj) {\n if(cttsObj[order]){\n offset = cttsObj[order]\n }\n }\n if (!time) {\n time = startTime + (order - count) * duration\n }\n return {time, duration, offset}\n}\n\nutil.seekOrderSampleByTime = function (stts, timeScale, time) {\n let startTime = 0; let order = 0; let count = 0; let itemDuration\n stts.every((item, idx) => {\n itemDuration = item.sampleCount * item.sampleDuration / timeScale\n if (time <= startTime + itemDuration) {\n order = count + Math.ceil((time - startTime) * timeScale / item.sampleDuration)\n startTime = startTime + Math.ceil((time - startTime) * timeScale / item.sampleDuration) * item.sampleDuration / timeScale\n return false\n } else {\n startTime += itemDuration\n count += item.sampleCount\n return true\n }\n })\n return {order, startTime}\n}\n\nutil.seekTrakDuration = function (trak, timeScale) {\n let stts = util.findBox(trak, 'stts'); let duration = 0\n stts.entry.forEach(item => {\n duration += item.sampleCount * item.sampleDuration\n })\n return Number(duration / timeScale).toFixed(4)\n}\n\nutil.StringToArrayBuffer = function (str) {\n let arr = new ArrayBuffer(str.length)\n let view = new Uint8Array(arr)\n for (let i = 0; i < str.length; i++) {\n view[i] = str.charCodeAt(i)\n }\n return arr\n}\n/**\n * Convert a hex string to a Uint8Array.\n * @param {string} str\n * @return {!Uint8Array}\n * @export\n */\nutil.fromHex = function (str) {\n let arr = new Uint8Array(str.length / 2)\n for (let i = 0; i < str.length; i += 2) {\n arr[i / 2] = window.parseInt(str.substr(i, 2), 16)\n }\n return arr\n}\nutil.fromCharCode = function (array) {\n let max = 16000\n let ret = ''\n for (let i = 0; i < array.length; i += max) {\n let subArray = array.subarray(i, i + max)\n ret += String.fromCharCode.apply(null, subArray)\n }\n\n return ret\n}\nutil.ArrayBufferToString = function (arr) {\n let str = ''\n let view = new Uint8Array(arr)\n for (let i = 0; i < view.length; i++) {\n str += String.fromCharCode(view[i])\n }\n return str\n}\nutil.Base64ToHex = function (str) {\n let bin = window.atob(str.replace(/-/g, '+').replace(/_/g, '/'))\n let res = ''\n for (let i = 0; i < bin.length; i++) {\n res += ('0' + bin.charCodeAt(i).toString(16)).substr(-2)\n }\n return res\n}\n\n/**\n * Convert a Uint8Array to a base64 string. The output will always use the\n * alternate encoding/alphabet also known as \"base64url\".\n * @param {!Uint8Array} arr\n * @param {boolean=} padding If true, pad the output with equals signs.\n * Defaults to true.\n * @return {string}\n * @export\n */\nutil.toBase64 = function (arr, padding) {\n // btoa expects a \"raw string\" where each character is interpreted as a byte.\n let bytes = util.fromCharCode(arr)\n padding = (padding === undefined) ? true : padding\n let base64 = window.btoa(bytes).replace(/\\+/g, '-').replace(/\\//g, '_')\n return padding ? base64 : base64.replace(/=*$/, '')\n}\n\nutil.toUTF8 = function (str) {\n // http://stackoverflow.com/a/13691499\n // Converts the given string to a URI encoded string. If a character falls\n // in the ASCII range, it is not converted; otherwise it will be converted to\n // a series of URI escape sequences according to UTF-8.\n // Example: 'g#€' -> 'g#%E3%82%AC'\n let encoded = encodeURIComponent(str)\n // Convert each escape sequence individually into a character. Each escape\n // sequence is interpreted as a code-point, so if an escape sequence happens\n // to be part of a multi-byte sequence, each byte will be converted to a\n // single character.\n // Example: 'g#%E3%82%AC' -> '\\x67\\x35\\xe3\\x82\\xac'\n let utf8 = unescape(encoded)\n\n let result = new Uint8Array(utf8.length)\n for (let i = 0; i < utf8.length; ++i) {\n result[i] = utf8.charCodeAt(i)\n }\n return result.buffer\n}\n\nutil.bufferToString = function (value) {\n return (\"0\"+(Number(value).toString(16))).slice(-2).toUpperCase()\n}\nutil.strToBuf = function (str) {\n let buffer = []\n for(let i = 0; i < str.length; i = i + 2) {\n buffer.push(\n parseInt(str[i] + str[i + 1], 16)\n )\n }\n return new Uint8Array(buffer)\n}\nutil.str2hex = function (str) {\n if(str === \"\") {\n return \"\"\n }\n let arr = [];\n for(let i = 0; i < str.length; i++) {\n arr.push(str.charCodeAt(i))\n }\n return arr\n}\nutil.parse = function (a) {\n if (!Array.isArray(a)) {\n let arr = [];\n let value = '';\n for(let i = 0; i < a.length; i++) {\n if (i % 2) {\n value = a[i - 1] + a[ i ]\n arr.push(parseInt(value, 16))\n value = ''\n }\n }\n return arr\n }\n return a.map(item => {return parseInt(item, 16)})\n}\nexport default util\n","import EventEmitter from 'event-emitter'\nimport Errors from '../error'\n\nclass MSE {\n constructor (codecs = 'video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"', mediaType) {\n EventEmitter(this)\n this.codecs = codecs\n this.mediaSource = new window.MediaSource(mediaType)\n this.url = window.URL.createObjectURL(this.mediaSource)\n this.queue = []\n this.updating = false\n this._hasDestroyed = false;\n this._hasEndOfStream = false;\n this._hasEndOfStreamSuccess = false;\n this._onSourceOpen = this._onSourceOpen.bind(this);\n this._onMediaSourceClose = this._onMediaSourceClose.bind(this);\n this._onSourceBufferError = this._onSourceBufferError.bind(this);\n this._onSourceBufferUpdateEnd = this._onSourceBufferUpdateEnd.bind(this);\n this.mediaSource.addEventListener('sourceopen', this._onSourceOpen);\n this.mediaSource.addEventListener('sourceclose', this._onMediaSourceClose);\n }\n\n _onSourceOpen(){\n let self = this;\n self.sourceBuffer = self.mediaSource.addSourceBuffer(self.codecs);\n self.sourceBuffer.addEventListener('error', this._onSourceBufferError);\n self.sourceBuffer.addEventListener('updateend', this._onSourceBufferUpdateEnd);\n self.emit('sourceopen')\n }\n\n _onSourceBufferError(e){\n this.emit('error', new Errors('mse', '', {line: 16, handle: '[MSE] constructor sourceopen', msg: e.message}))\n }\n\n _onSourceBufferUpdateEnd(){\n let self = this;\n self.emit('updateend');\n if(this._hasEndOfStream && !this._hasEndOfStreamSuccess){\n this._endOfStream();\n return;\n }\n let buffer = self.queue.shift()\n if (buffer && self.sourceBuffer && self.sourceBuffer.updating === false && self.state === 'open') {\n self.sourceBuffer.appendBuffer(buffer)\n } else if(buffer) {\n self.queue.unshift(buffer);\n }\n }\n\n _onMediaSourceClose(){\n this.emit('sourceclose')\n }\n\n get state () {\n return this.mediaSource.readyState\n }\n\n get duration () {\n return this.mediaSource.duration\n }\n\n set duration (value) {\n this.mediaSource.duration = value\n }\n\n appendBuffer (buffer) {\n if(!buffer) return;\n \n let sourceBuffer = this.sourceBuffer\n if (sourceBuffer && !sourceBuffer.updating && this.state === 'open') {\n sourceBuffer.appendBuffer(buffer)\n return true\n } else {\n this.queue.push(buffer)\n return false\n }\n }\n\n removeBuffer (start, end) {\n let sourceBuffer = this.sourceBuffer\n if (sourceBuffer && sourceBuffer.updating === false && this.state === 'open') {\n sourceBuffer.remove(start, end)\n }\n }\n\n endOfStream () {\n this._hasEndOfStream = true;\n if (this.mediaSource.readyState === 'open') {\n if(this.sourceBuffer && !this.sourceBuffer.updating){\n this._hasEndOfStreamSuccess = true;\n this._endOfStream();\n }\n \n }\n }\n\n _endOfStream(){\n this.queue = [];\n if(this.mediaSource.readyState === 'open'){\n this.mediaSource.endOfStream()\n }\n }\n\n static isSupported (codecs) {\n return window.MediaSource && window.MediaSource.isTypeSupported(codecs)\n }\n\n destroy(){\n if(this._hasDestroyed){\n return;\n }\n this._hasDestroyed = true;\n window.URL.revokeObjectURL(this.url);\n if(this.mediaSource) {\n this.mediaSource.removeEventListener('sourceclose', this._onMediaSourceClose);\n this.mediaSource.removeEventListener('sourceopen', this._onSourceOpen);\n }\n if(this.sourceBuffer) {\n this.sourceBuffer.removeEventListener('error', this._onSourceBufferError);\n this.sourceBuffer.removeEventListener('updateend', this._onSourceBufferUpdateEnd);\n }\n }\n}\n\nexport default MSE\n","exports.isMSBrowser = function () {\n let ua = window.navigator.userAgent\n let msie = ua.indexOf('MSIE ')\n let trident = ua.indexOf('Trident/')\n return msie > 0 || trident > 0\n}\n\nexports.isMediaSourceSupported = function () {\n const mediaSource = (window.MediaSource = window.MediaSource || window.WebKitMediaSource)\n return mediaSource && typeof mediaSource.isTypeSupported === 'function'\n}\n\nexports.isSupported = function () {\n return exports.isMediaSourceSupported()\n && !exports.isMSBrowser() \n}\n\nexports.isSupportedWithXgmse = function () {\n return !exports.isMSBrowser() \n}\n","\nexport default class ProxyPromise {\n \n constructor() {\n let resolvePromise;\n let rejectPromise;\n\n const promise = new Promise(((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n }));\n\n const publicPromise = promise\n publicPromise.resolve = resolvePromise;\n publicPromise.reject = rejectPromise;\n\n return publicPromise;\n }\n\n\n /** @param {T=} value */\n resolve(value) {}\n\n\n /** @param {*=} reason */\n reject(reason) {}\n};\n","export default class Timer{\n \n constructor(onTick) {\n this.onTick_ = onTick;\n this.cancelPending_ = null;\n }\n\n tickAfter(delayInSeconds, callback = null) {\n \n this.stop();\n let alive = true;\n let timeoutId = null;\n \n this.cancelPending_ = () => {\n window.clearTimeout(timeoutId);\n alive = false;\n };\n \n const onTick = () => {\n if (alive) {\n this.onTick_();\n if(callback){\n callback();\n }\n }\n };\n \n timeoutId = window.setTimeout(onTick, delayInSeconds * 1000);\n \n return this;\n }\n\n tickEvery(seconds){\n this.tickAfter(seconds, ()=>{\n this.tickEvery(seconds);\n })\n }\n\n\n stop() {\n if (this.cancelPending_) {\n this.cancelPending_();\n this.cancelPending_ = null;\n }\n }\n }\n","/***\n * 音视频源数据不对齐或者 关键视频帧存在cts,导致浏览器播不动场景下\n *\n * reference shakaplayer, 借鉴shakaplayer,根据项目逻辑进行改造\n */\n\nimport IntervalTimer from './util/intervalTimer';\nexport default class GapJump {\n \n constructor(player, config) {\n this.player = player;\n this.mediaElem = player.video;\n this.config = config;\n this.timer = new IntervalTimer();\n\n this.prevReadyState = this.mediaElem.readyState;\n this.didFireLargeGap = false;\n this.seekingEventReceived = false;\n this.segmentAppended = false;\n this.onWaitFunc = this._onWaiting.bind(this);\n this.onPlayFunc = this._onPlay.bind(this);\n this.isSafari = /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n if (this.config.useGapJump !== false) {\n this._start();\n }\n\n this.hasPlayed = false;\n }\n _onWaiting() {\n this.onGapJump('_onWaiting');\n }\n\n _onPlay() {\n this.hasPlayed = true;\n }\n\n _start() {\n this.mediaElem.addEventListener('waiting', this.onWaitFunc);\n this.mediaElem.addEventListener('play', this.onPlayFunc);\n //250ms\n this.timer.repeat(() => {\n this.onGapJump('repeat');\n }, 250);\n }\n\n onSegmentAppend() {\n this.segmentAppended = true;\n this.onGapJump('onSegmentAppend');\n }\n \n onSeeking() {\n this.seekingEventReceived = true;\n this.segmentAppended = false;\n this.didFireLargeGap = false;\n }\n \n onGapJump(type) {\n if (this.mediaElem.readyState === HTMLMediaElement.HAVE_NOTHING) {\n return;\n }\n if (this.mediaElem.seeking) {\n if (!this.seekingEventReceived) { return; }\n } else {\n this.seekingEventReceived = false;\n }\n\n if (this.mediaElem.paused && this.mediaElem.currentTime !== 0 && this.hasPlayed) {\n return;\n }\n if (this.mediaElem.readyState !== this.prevReadyState) {\n this.didFireLargeGap = false;\n this.prevReadyState = this.mediaElem.readyState;\n }\n\n const buffered = this.mediaElem.buffered;\n const smallGapLimit = this.config.smallGapLimit || 0.5;\n const gapDetectionThreshold = this.config.gapDetectionThreshold || 0.1;\n const currentTime = this.mediaElem.currentTime;\n const idx = this._getIndex(buffered, currentTime, gapDetectionThreshold);\n if (idx === null) {\n return;\n }\n if (idx === 0 && !this.segmentAppended) {\n return;\n }\n\n const jumpTo = buffered.start(idx) + 0.1;\n const seekEnd = this.mediaElem.duration;\n\n if (jumpTo > seekEnd) {\n return;\n }\n const jumpSize = jumpTo - currentTime;\n const isGapSmall = jumpSize <= smallGapLimit;\n let jumpLargeGap = false;\n if (jumpSize < GapJump.BROWSER_GAP_TOLERANCE) {\n return;\n }\n //对于分片缺失,目前未处理\n if (isGapSmall) {\n if (this.config.disableGapSetPosition !== true) {\n this.mediaElem.currentTime = this.isSafari ? jumpTo + 0.1 : jumpTo;\n }\n this.player && this.player.emit('detectGap');\n }\n\n }\n \n _getIndex(buffered, time, threshold) {\n if (!buffered || !buffered.length) {\n return null;\n }\n if (buffered.length === 1 && buffered.end(0) - buffered.start(0) < 1e-6) {\n return null;\n }\n const bufferedInfo = this._getBuffered(buffered);\n let idx = null;\n for (let i = 0; i < bufferedInfo.length; i++) {\n let item = bufferedInfo[i];\n if (item.start > time && (i === 0 || bufferedInfo[i - 1].end - time <= threshold)) {\n idx = i;\n break;\n }\n }\n return idx;\n }\n \n _getBuffered(b) {\n if (!b) {\n return [];\n }\n const ret = [];\n for (let i = 0; i < b.length; i++) {\n ret.push({\n start: b.start(i),\n end: b.end(i)\n });\n }\n return ret;\n }\n\n destroy() {\n this.mediaElem.removeEventListener('waiting', this.onWaitFunc);\n this.mediaElem.removeEventListener('play', this.onPlayFunc);\n this.timer.clear();\n this.timer = null;\n }\n }\n \n GapJump.BROWSER_GAP_TOLERANCE = 0.001;\n ","// 替代setInterval\nclass IntervalTimer {\n constructor() {\n this.timeID = null;\n this.func = null;\n }\n\n repeat(func, ms) {\n this.timeID = 1;\n this.repeatInterval(func, ms);\n }\n\n repeatInterval(func, ms) {\n if (!this.timeID) return;\n if (this.func === null) {\n this.func = func;\n }\n\n if (this.func !== func) {\n return;\n }\n if (this.timeID) clearTimeout(this.timeID);\n this.timeID = null;\n this.timeID = setTimeout(() => {\n func();\n this.repeatInterval(func, ms);\n }, ms);\n }\n\n clear() {\n clearTimeout(this.timeID);\n this.timeID = null;\n }\n}\n\nexport default IntervalTimer;\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://xgplayer-mp4/webpack/universalModuleDefinition","webpack://xgplayer-mp4/webpack/bootstrap","webpack://xgplayer-mp4/./src/parse/box.js","webpack://xgplayer-mp4/./src/parse/stream.js","webpack://xgplayer-mp4/./src/error.js","webpack://xgplayer-mp4/external \"xgplayer\"","webpack://xgplayer-mp4/./node_modules/event-emitter/index.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/is-value.js","webpack://xgplayer-mp4/./src/parse/date.js","webpack://xgplayer-mp4/./src/parse/box/sps.js","webpack://xgplayer-mp4/./src/constants.js","webpack://xgplayer-mp4/./node_modules/type/value/is.js","webpack://xgplayer-mp4/./node_modules/concat-typed-array/lib/index.js","webpack://xgplayer-mp4/./src/parse/box/golomb.js","webpack://xgplayer-mp4/./src/fmp4/buffer.js","webpack://xgplayer-mp4/./src/media/task.js","webpack://xgplayer-mp4/./src/index.js","webpack://xgplayer-mp4/./src/mp4.js","webpack://xgplayer-mp4/./node_modules/d/index.js","webpack://xgplayer-mp4/./node_modules/type/plain-function/is.js","webpack://xgplayer-mp4/./node_modules/type/function/is.js","webpack://xgplayer-mp4/./node_modules/type/prototype/is.js","webpack://xgplayer-mp4/./node_modules/type/object/is.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/assign/index.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/assign/is-implemented.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/assign/shim.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/keys/index.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/keys/is-implemented.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/keys/shim.js","webpack://xgplayer-mp4/./node_modules/es5-ext/function/noop.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/valid-value.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/normalize-options.js","webpack://xgplayer-mp4/./node_modules/es5-ext/string/#/contains/index.js","webpack://xgplayer-mp4/./node_modules/es5-ext/string/#/contains/is-implemented.js","webpack://xgplayer-mp4/./node_modules/es5-ext/string/#/contains/shim.js","webpack://xgplayer-mp4/./node_modules/es5-ext/object/valid-callable.js","webpack://xgplayer-mp4/./src/parse/index.js","webpack://xgplayer-mp4/./node_modules/concat-typed-array/lib/concat.js","webpack://xgplayer-mp4/./src/parse/box/vmhd.js","webpack://xgplayer-mp4/./src/parse/box/url.js","webpack://xgplayer-mp4/./src/parse/box/udta.js","webpack://xgplayer-mp4/./src/parse/box/tkhd.js","webpack://xgplayer-mp4/./src/parse/box/tfhd.js","webpack://xgplayer-mp4/./src/parse/box/stts.js","webpack://xgplayer-mp4/./src/parse/box/stsz.js","webpack://xgplayer-mp4/./src/parse/box/stss.js","webpack://xgplayer-mp4/./src/parse/box/stsd.js","webpack://xgplayer-mp4/./src/parse/box/stsc.js","webpack://xgplayer-mp4/./src/parse/box/stco.js","webpack://xgplayer-mp4/./src/parse/box/smhd.js","webpack://xgplayer-mp4/./src/parse/box/SLConfigDescriptor.js","webpack://xgplayer-mp4/./src/parse/box/schm.js","webpack://xgplayer-mp4/./src/parse/box/pasp.js","webpack://xgplayer-mp4/./src/parse/box/mvhd.js","webpack://xgplayer-mp4/./src/parse/box/MP4ESDescrTag.js","webpack://xgplayer-mp4/./src/parse/box/MP4DecSpecificDescrTag.js","webpack://xgplayer-mp4/./src/parse/box/MP4DecConfigDescrTag.js","webpack://xgplayer-mp4/./src/parse/box/mp4a.js","webpack://xgplayer-mp4/./src/parse/box/mdhd.js","webpack://xgplayer-mp4/./src/parse/box/mdat.js","webpack://xgplayer-mp4/./src/parse/box/iods.js","webpack://xgplayer-mp4/./src/parse/box/hvcC.js","webpack://xgplayer-mp4/./src/parse/box/hvc1.js","webpack://xgplayer-mp4/./src/parse/box/hdlr.js","webpack://xgplayer-mp4/./src/parse/box/ftyp.js","webpack://xgplayer-mp4/./src/parse/box/frma.js","webpack://xgplayer-mp4/./src/parse/box/esds.js","webpack://xgplayer-mp4/./src/parse/box/elst.js","webpack://xgplayer-mp4/./src/parse/box/dref.js","webpack://xgplayer-mp4/./src/parse/box/ctts.js","webpack://xgplayer-mp4/./src/parse/box/co64.js","webpack://xgplayer-mp4/./src/parse/box/btrt.js","webpack://xgplayer-mp4/./src/parse/box/avcC.js","webpack://xgplayer-mp4/./src/parse/box/avc1.js","webpack://xgplayer-mp4/./src/fmp4/mp4.js","webpack://xgplayer-mp4/./src/util/getHeaders.js","webpack://xgplayer-mp4/./src/util/index.js","webpack://xgplayer-mp4/./src/media/mse.js","webpack://xgplayer-mp4/./src/util/isSupport.js","webpack://xgplayer-mp4/./src/util/proxyPromise.js","webpack://xgplayer-mp4/./src/util/timer.js","webpack://xgplayer-mp4/./src/gap_jump.js","webpack://xgplayer-mp4/./src/util/intervalTimer.js"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__3__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Box","headSize","size","type","subBox","start","stream","position","readUint32","String","fromCharCode","readUint8","readUint64","Errors","line","handle","msg","uuid","push","version","flags","end","data","buffer","slice","byteLength","parser","containerBox","find","item","containerParser","Function","readHeader","readBody","Stream","box","ArrayBuffer","dataview","DataView","count","loop","Math","floor","last","readByte","sign","res","getInt8","getUint8","getInt16","getUint16","getInt32","getUint32","_Errors","vid","errd","url","Player","on","once","off","emit","methods","descriptors","base","callable","apply","defineProperties","descriptor","configurable","writable","listener","self","arguments","__eeOnceListener__","__ee__","listeners","candidate","length","splice","args","Array","_undefined","val","UTC","time","Date","setFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setTime","getTime","toLocaleString","SPSParser","uint8array","src","srcLength","dst","Uint8Array","dstIdx","rbsp","_ebsp2rbsp","gb","Golomb","profileIdc","levelIdc","readUEG","profile_string","getProfileString","level_string","getLevelString","chroma_format_idc","chroma_format","bit_depth","readBits","readBool","scaling_list_count","_skipScalingList","pic_order_cnt_type","readSEG","num_ref_frames_in_pic_order_cnt_cycle","pic_width_in_mbs_minus1","pic_height_in_map_units_minus1","frame_mbs_only_flag","frame_crop_left_offset","frame_crop_right_offset","frame_crop_top_offset","frame_crop_bottom_offset","par_width","par_height","fps","fps_fixed","fps_num","fps_den","aspect_ratio_idc","num_units_in_tick","time_scale","parScale","crop_unit_x","crop_unit_y","codec_width","codec_height","present_width","ceil","destroy","chroma_format_string","getChromaFormatString","frame_rate","fixed","par_ratio","width","height","codec_size","present_size","last_scale","next_scale","toFixed","chroma","spsConfig","meta","codecWidth","codecHeight","presentWidth","presentHeight","profile","level","bitDepth","chromaFormat","parRatio","frameRate","fpsDen","fpsNum","refSampleDuration","timescale","CUSTOM_EVENTS","TASK_ERROR","TASK_ERROR_TYPES","ERROR","CODE_ERROR","CANCEL","obj","_concat","_concat2","default","TAG","_buffer","_bufferIndex","_totalBytes","_totalBits","_currentWord","_currentWordBitsLeft","bufferBytesLeft","bytesRead","min","word","set","subarray","bits","valu","Error","_fillCurrentWord","zeroCount","_skipLeadingZero","leadingZeros","Buffer","forEach","window","console","error","Task","range","xhrSetup","callback","ext","uniqueTag","playerId","queue","some","JSON","stringify","id","join","running","canceled","initialize","xhr","XMLHttpRequest","target","responseType","withCredentials","open","setRequestHeader","onreadystatechange","e","readyState","headers","status","onload","response","MEDIA_EXPIRED","_emitTaskError","remove","onerror","message","onabort","update","abort","code","filter","idx","Queue","sended","wait","max","limit","run","send","cancel","sniffer","isEnded","player","mp4","endTime","currentTime","duration","mse","endOfStream","_stopProgress","Mp4Player","options","hasStartProgress","onlyInit","videoInit","autoplay","_pendingPromises","_allInitPromise","ProxyPromise","_maxBufferLength","maxBufferLength","_playerId","uniqueId","_onBufferedResetFunc","_onBufferedReset","_onSeekingFunc","_onSeeking","_onMp4InitFunc","_onMp4Init","_onWaitingFunc","_onWaiting","_onEndedFunc","_onEnded","_onDestroyFunc","_onDestroy","_replay","_onReplay","_onOnlineHandlerFunc","_onOnlineHandler","_onOfflineHandlerFunc","_onOfflineHandler","_tickInSeconds","tickInSeconds","_hasStartProgress","_hasStartProgressBack","video","addEventListener","BUFFERED_RESET","_bindNetworkStateChange","_initMp4Kernal","gapJumpInst","GapJump","config","util","onSegmentAppend","rule","pluginRule","MSE","isSupported","currentSrc","_init","then","result","proxyOnce","play","proxyOn","_startProgress","_onSuperStart","err","_errorHandle","browser","hasClass","addClass","removeClass","buffered","initPromise","_addPendingPromise","resolve","_hasInited","_removePendingPromise","mp5","MP4","preloadSize","timeRage","curTime","getBufferedRange","buffered2","removeBuffer","appendBuffer","packMeta","downloaded","removeEventListener","promise","_initMp4","isHvc","videoCodec","indexOf","encv","data_format","hasVideo","hasAudio","audioCodec","codec","mediaType","initSeg","_loadData","reject","_initMse","navigator","onLine","seek","updating","setTimeout","canDownload","cacheMaxTime","every","_onInnerWait","_unbindNetworkStateChange","clear","unloadVideo","cancelPendingPromises","errt","errorType","bufferCache","_currentTime","_start","switchURL","iplayer","_onCheckLoad","hasBuffered","len","mp4Init","pause","_requestTimer","stop","Timer","_onTimeUpdate","tickEvery","removeAttribute","load","reason","INIT_FAIL","PARSE_ERROR","isSupportedWithXgmse","isMediaSourceSupported","chunkSize","pow","CHUNK_SIZE","init","moovParse","Promise","task","hasDestroyed","onMediaExpired","params","moov","moovBox","mvhd","findBox","traks","videoTrak","audioTrak","videoTimeScale","audioTimeScale","sps","pps","vps","channelCount","sampleRate","decoderConfig","hvc1Data","hvcCData","pixelRatio","isArray","trak","hdlr","mdhd","codecBox","handleType","avcC","hvcC","tkhd","toHex","profileCompatibility","AVCLevelIndication","sequence","spsInfo","map","Number","hvc1","profileCompatibilityIndications","esds","mp4a","ESDescriptor","typeID","EScode","mdat","_boxes","videoDuration","seekTrakDuration","audioDuration","mdatStart","vf","videoKeyFrames","videoKeyFramesLength","timeScale","createTime","modifyTime","audioConfig","stss","_stssObj","getData","parsed","moovStart","boxes","Parser","nextBox","concat","catch","stsc","stsz","stts","stco","cttsObj","_cttsObj","stscObj","_stscVideoObj","_stscAudioObj","samples","undefined","entries","seekSampleTime","offset","seekSampleOffset","write","FMP4","ftyp","fragIndex","getFragmentIdx","getFragRange","timeStart","round","videoFrames","nowTime","nextTime","MAX_SAFE_INTEGER","audioFrames","audioKeyFrames","startTime","loadFragment","audioFrame","getSamplesByOrders","order","audioNextFrame","isNaN","dat","createFragment","buf","moof","mdatData","framesIndex","_samples","addFragment","firstFlags","sampleOffset","resBuffers","promises","getVideoBuffer","getAudioBuffer","all","buffers","bufferSize","k","_videoFrames","ctts","entry","j","sampleCount","chunk_count","samples_per_chunk","frames","_audioFrames","videoScale","audioScale","audioStts","audioIndex","seekOrderSampleByTime","isValue","isPlainFunction","assign","normalizeOpts","contains","dscr","w","desc","gs","isFunction","classRe","functionToString","toString","test","isPrototype","isObject","constructor","possibleTypes","foo","bar","trzy","keys","dest","TypeError","process","opts1","str","searchString","fn","bufferLength","ResultConstructor","totalLength","_len","arrays","_key","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","iterator","next","done","arr","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_arr","vmhd","flag","graphicsmode","readUint16","opcolor","location","udta","modify","trackID","reserverd","layer","readInt16","alternate_group","volume","matrix","tfhd","track_id","baseDataOffsetPresent","sampleDescriptionIndexPresent","defaultSampleDurationPresent","defaultSampleSizePresent","defaultSampleFlagsPresent","baseDataOffset","sampleDescriptionIndex","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","sampleDuration","sampleSize","stsd","entryCount","first_chunk","sample_desc_index","preEntry","first_sample","pre","smhd","balance","readInt8","SLConfigDescriptor","extend","skip","SL","schm","scheme_version","scheme_type","scheme_uri","hdr_size","pasp","hSpacing","vSpacing","rate","nextTrackID","MP4ESDescrTag","esID","priority","MP4DecConfigDescrTag","MP4DecSpecificDescrTag","dataSize","padStart","streamUint","maximum","average","dataReferenceIndex","language","iods","content","configVersion","constraintIndicatorFlags","bitDepthLumaMinus8","bitDepthChromaMinus8","avgFrameRate","constantFrameRate","numOfArrays","vpsHeader","readUint24","vpsLength","spsHeader","spsLength","ppsHeader","ppsLength","dataviewLength","horizresolution","vertresolution","frameCount","depth","major_brand","minor_version","compatibleBrands","compatible_brands","frma","elst","entry_count","segment_duration","media_time","readInt32","media_rate_integer","media_rate_fraction","dref","read","co64","btrt","bufferSizeDB","maxBitrate","avgBitrate","lengthSizeMinusOne","numOfSequenceParameterSets","sequenceLength","SpsParser","parseSPS","ppsCount","avc1","UINT32_MAX","charCodeAt","writeUint32","mvex","trak1","trak2","bytes","mdia","mediaTime","minf","extension","dinf","stbl","configlen","avcc","stssObj","mehd","trex1","trex2","mfhd","traf","tfdt","sdtp","trun","upper","lower","sdtpLength","headerMap","getAllResponseHeaders","trim","split","parts","header","shift","pad","charstr","maxlen","chars","substring","hex","rst","sample_order","chunk_start","chunk_offset","chunk_offset_sample","chunk_index","samples_offset","last_chunk","pop","chunkOffset","stscOffset","sum","itemDuration","view","parseInt","substr","array","ret","subArray","bin","atob","replace","padding","base64","btoa","encoded","encodeURIComponent","utf8","unescape","toUpperCase","a","codecs","mediaSource","MediaSource","URL","createObjectURL","_hasDestroyed","_hasEndOfStream","_hasEndOfStreamSuccess","_onSourceOpen","_onMediaSourceClose","_onSourceBufferError","_onSourceBufferUpdateEnd","sourceBuffer","addSourceBuffer","state","unshift","_endOfStream","revokeObjectURL","isTypeSupported","isMSBrowser","ua","userAgent","msie","trident","WebKitMediaSource","resolvePromise","rejectPromise","publicPromise","onTick","onTick_","cancelPending_","delayInSeconds","alive","timeoutId","clearTimeout","seconds","tickAfter","mediaElem","timer","IntervalTimer","prevReadyState","didFireLargeGap","seekingEventReceived","segmentAppended","onWaitFunc","onPlayFunc","_onPlay","isSafari","platform","useGapJump","hasPlayed","onGapJump","repeat","HTMLMediaElement","HAVE_NOTHING","seeking","paused","smallGapLimit","gapDetectionThreshold","_getIndex","jumpTo","jumpSize","isGapSmall","BROWSER_GAP_TOLERANCE","disableGapSetPosition","threshold","bufferedInfo","_getBuffered","b","timeID","func","ms","repeatInterval"],"mappings":"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","file":"index.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"xgplayer\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"xgplayer\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"xgplayer-mp4\"] = factory(require(\"xgplayer\"));\n\telse\n\t\troot[\"xgplayer-mp4\"] = factory(root[\"xgplayer\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__3__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 14);\n","import Stream from './stream'\nimport Errors from '../error'\nclass Box {\n constructor () {\n this.headSize = 8\n this.size = 0\n this.type = ''\n this.subBox = []\n this.start = -1\n }\n readHeader (stream) {\n this.start = stream.position\n this.size = stream.readUint32()\n this.type = String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8())\n if (this.size === 1) {\n this.size = stream.readUint64()\n } else if (this.size === 0) {\n if (this.type !== 'mdat') {\n throw new Errors('parse', '', {line: 19, handle: '[Box] readHeader', msg: 'parse mp4 mdat box failed'})\n }\n }\n if (this.type === 'uuid') {\n let uuid = []\n for (let i = 0; i < 16; i++) {\n uuid.push(stream.readUint8())\n }\n }\n if (this.type === 'pssh') {\n this.version = stream.readUint8();\n this.flags = stream.readUint8();\n }\n }\n readBody (stream) {\n let end = this.size - stream.position + this.start\n let type = this.type\n this.data = stream.buffer.slice(stream.position, stream.position + end)\n stream.position += this.data.byteLength\n let parser\n if (Box.containerBox.find(item => item === type)) {\n parser = Box.containerParser\n } else {\n parser = Box[type]\n }\n if (parser && parser instanceof Function) {\n parser.call(this)\n }\n }\n read (stream) {\n this.readHeader(stream)\n this.readBody(stream)\n }\n\n static containerParser () {\n let stream = new Stream(this.data)\n let size = stream.buffer.byteLength\n let self = this\n while (stream.position < size) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n delete self.data\n stream = null\n }\n}\n\nBox.containerBox = ['moov', 'trak', 'edts', 'mdia', 'minf', 'dinf', 'stbl', 'mvex', 'moof', 'traf', 'mfra', 'sinf', 'schi']\n\nexport default Box\n","import Errors from '../error'\nclass Stream {\n constructor (buffer) {\n if (buffer instanceof ArrayBuffer) {\n this.buffer = buffer\n this.dataview = new DataView(buffer)\n this.dataview.position = 0\n } else {\n throw new Errors('parse', '', {line: 9, handle: '[Stream] constructor', msg: 'data is valid'})\n }\n }\n\n set position (value) {\n this.dataview.position = value\n }\n\n get position () {\n return this.dataview.position\n }\n\n skip (count) {\n let loop = Math.floor(count / 4)\n let last = count % 4\n for (let i = 0; i < loop; i++) {\n Stream.readByte(this.dataview, 4)\n }\n if (last > 0) {\n Stream.readByte(this.dataview, last)\n }\n }\n\n /**\n * [readByte 从DataView中读取数据]\n * @param {DataView} buffer [DataView实例]\n * @param {Number} size [读取字节数]\n * @return {Number} [整数]\n */\n static readByte (buffer, size, sign) {\n let res\n switch (size) {\n case 1:\n if (sign) {\n res = buffer.getInt8(buffer.position)\n } else {\n res = buffer.getUint8(buffer.position)\n }\n break\n case 2:\n if (sign) {\n res = buffer.getInt16(buffer.position)\n } else {\n res = buffer.getUint16(buffer.position)\n }\n break\n case 3:\n if (sign) {\n throw 'not supported for readByte 3'\n } else {\n res = buffer.getUint8(buffer.position) << 16\n res |= buffer.getUint8(buffer.position + 1) << 8\n res |= buffer.getUint8(buffer.position + 2)\n }\n break\n case 4:\n if (sign) {\n res = buffer.getInt32(buffer.position)\n } else {\n res = buffer.getUint32(buffer.position)\n }\n break\n case 8:\n if (sign) {\n throw new Errors('parse', '', {line: 73, handle: '[Stream] readByte', msg: 'not supported for readBody 8'})\n } else {\n res = buffer.getUint32(buffer.position) << 32\n res |= buffer.getUint32(buffer.position + 4)\n }\n break\n default:\n res = ''\n }\n buffer.position += size\n return res\n }\n\n readUint8 () {\n return Stream.readByte(this.dataview, 1)\n }\n\n readUint16 () {\n return Stream.readByte(this.dataview, 2)\n }\n \n readUint24 () {\n return Stream.readByte(this.dataview, 3)\n }\n\n readUint32 () {\n return Stream.readByte(this.dataview, 4)\n }\n\n readUint64 () {\n return Stream.readByte(this.dataview, 8)\n }\n\n readInt8 () {\n return Stream.readByte(this.dataview, 1, true)\n }\n readInt16 () {\n return Stream.readByte(this.dataview, 2, true)\n }\n readInt32 () {\n return Stream.readByte(this.dataview, 4, true)\n }\n}\n\nexport default Stream\n","import Player from 'xgplayer'\nimport { version } from '../version.json'\n\nclass _Errors extends Player.Errors {\n constructor (type, vid, errd = {}, url = '') {\n errd.version = version\n super(type, vid, errd)\n this.url = url\n }\n}\n\nexport default _Errors\n","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","'use strict';\n\nvar d = require('d')\n , callable = require('es5-ext/object/valid-callable')\n\n , apply = Function.prototype.apply, call = Function.prototype.call\n , create = Object.create, defineProperty = Object.defineProperty\n , defineProperties = Object.defineProperties\n , hasOwnProperty = Object.prototype.hasOwnProperty\n , descriptor = { configurable: true, enumerable: false, writable: true }\n\n , on, once, off, emit, methods, descriptors, base;\n\non = function (type, listener) {\n\tvar data;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) {\n\t\tdata = descriptor.value = create(null);\n\t\tdefineProperty(this, '__ee__', descriptor);\n\t\tdescriptor.value = null;\n\t} else {\n\t\tdata = this.__ee__;\n\t}\n\tif (!data[type]) data[type] = listener;\n\telse if (typeof data[type] === 'object') data[type].push(listener);\n\telse data[type] = [data[type], listener];\n\n\treturn this;\n};\n\nonce = function (type, listener) {\n\tvar once, self;\n\n\tcallable(listener);\n\tself = this;\n\ton.call(this, type, once = function () {\n\t\toff.call(self, type, once);\n\t\tapply.call(listener, this, arguments);\n\t});\n\n\tonce.__eeOnceListener__ = listener;\n\treturn this;\n};\n\noff = function (type, listener) {\n\tvar data, listeners, candidate, i;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return this;\n\tdata = this.__ee__;\n\tif (!data[type]) return this;\n\tlisteners = data[type];\n\n\tif (typeof listeners === 'object') {\n\t\tfor (i = 0; (candidate = listeners[i]); ++i) {\n\t\t\tif ((candidate === listener) ||\n\t\t\t\t\t(candidate.__eeOnceListener__ === listener)) {\n\t\t\t\tif (listeners.length === 2) data[type] = listeners[i ? 0 : 1];\n\t\t\t\telse listeners.splice(i, 1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif ((listeners === listener) ||\n\t\t\t\t(listeners.__eeOnceListener__ === listener)) {\n\t\t\tdelete data[type];\n\t\t}\n\t}\n\n\treturn this;\n};\n\nemit = function (type) {\n\tvar i, l, listener, listeners, args;\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return;\n\tlisteners = this.__ee__[type];\n\tif (!listeners) return;\n\n\tif (typeof listeners === 'object') {\n\t\tl = arguments.length;\n\t\targs = new Array(l - 1);\n\t\tfor (i = 1; i < l; ++i) args[i - 1] = arguments[i];\n\n\t\tlisteners = listeners.slice();\n\t\tfor (i = 0; (listener = listeners[i]); ++i) {\n\t\t\tapply.call(listener, this, args);\n\t\t}\n\t} else {\n\t\tswitch (arguments.length) {\n\t\tcase 1:\n\t\t\tcall.call(listeners, this);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tcall.call(listeners, this, arguments[1]);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tcall.call(listeners, this, arguments[1], arguments[2]);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tl = arguments.length;\n\t\t\targs = new Array(l - 1);\n\t\t\tfor (i = 1; i < l; ++i) {\n\t\t\t\targs[i - 1] = arguments[i];\n\t\t\t}\n\t\t\tapply.call(listeners, this, args);\n\t\t}\n\t}\n};\n\nmethods = {\n\ton: on,\n\tonce: once,\n\toff: off,\n\temit: emit\n};\n\ndescriptors = {\n\ton: d(on),\n\tonce: d(once),\n\toff: d(off),\n\temit: d(emit)\n};\n\nbase = defineProperties({}, descriptors);\n\nmodule.exports = exports = function (o) {\n\treturn (o == null) ? create(base) : defineProperties(Object(o), descriptors);\n};\nexports.methods = methods;\n","\"use strict\";\n\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\n","class UTC {\n constructor () {\n let time = new Date()\n time.setFullYear(1904)\n time.setMonth(0)\n time.setDate(1)\n time.setHours(0)\n time.setMinutes(0)\n time.setSeconds(0)\n this.time = time\n }\n setTime (value) {\n this.time.setTime(this.time.getTime() + value * 1)\n return this.time.toLocaleString()\n }\n}\n\nexport default UTC\n","/* eslint-disable camelcase */\n/* eslint-disable one-var */\nimport Golomb from './golomb'\n\nclass SPSParser {\n static _ebsp2rbsp (uint8array) {\n let src = uint8array\n let srcLength = src.byteLength\n let dst = new Uint8Array(srcLength)\n let dstIdx = 0\n\n for (let i = 0; i < srcLength; i++) {\n if (i >= 2) {\n if (src[i] === 0x03 && src[i - 1] === 0x00 && src[i - 2] === 0x00) {\n continue\n }\n }\n dst[dstIdx] = src[i]\n dstIdx++\n }\n\n return new Uint8Array(dst.buffer, 0, dstIdx)\n }\n\n static parseSPS (uint8array) {\n let rbsp = SPSParser._ebsp2rbsp(uint8array)\n let gb = new Golomb(rbsp)\n\n gb.readByte()\n let profileIdc = gb.readByte()\n gb.readByte()\n let levelIdc = gb.readByte()\n gb.readUEG()\n\n let profile_string = SPSParser.getProfileString(profileIdc)\n let level_string = SPSParser.getLevelString(levelIdc)\n let chroma_format_idc = 1\n let chroma_format = 420\n let chroma_format_table = [0, 420, 422, 444]\n let bit_depth = 8\n\n if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 ||\n profileIdc === 244 || profileIdc === 44 || profileIdc === 83 ||\n profileIdc === 86 || profileIdc === 118 || profileIdc === 128 ||\n profileIdc === 138 || profileIdc === 144) {\n chroma_format_idc = gb.readUEG()\n if (chroma_format_idc === 3) {\n gb.readBits(1)\n }\n if (chroma_format_idc <= 3) {\n chroma_format = chroma_format_table[chroma_format_idc]\n }\n\n bit_depth = gb.readUEG() + 8\n gb.readUEG()\n gb.readBits(1)\n if (gb.readBool()) {\n let scaling_list_count = (chroma_format_idc !== 3) ? 8 : 12\n for (let i = 0; i < scaling_list_count; i++) {\n if (gb.readBool()) {\n if (i < 6) {\n SPSParser._skipScalingList(gb, 16)\n } else {\n SPSParser._skipScalingList(gb, 64)\n }\n }\n }\n }\n }\n gb.readUEG()\n let pic_order_cnt_type = gb.readUEG()\n if (pic_order_cnt_type === 0) {\n gb.readUEG()\n } else if (pic_order_cnt_type === 1) {\n gb.readBits(1)\n gb.readSEG()\n gb.readSEG()\n let num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG()\n for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {\n gb.readSEG()\n }\n }\n gb.readUEG()\n gb.readBits(1)\n\n let pic_width_in_mbs_minus1 = gb.readUEG()\n let pic_height_in_map_units_minus1 = gb.readUEG()\n\n let frame_mbs_only_flag = gb.readBits(1)\n if (frame_mbs_only_flag === 0) {\n gb.readBits(1)\n }\n gb.readBits(1)\n\n let frame_crop_left_offset = 0\n let frame_crop_right_offset = 0\n let frame_crop_top_offset = 0\n let frame_crop_bottom_offset = 0\n\n let frame_cropping_flag = gb.readBool()\n if (frame_cropping_flag) {\n frame_crop_left_offset = gb.readUEG()\n frame_crop_right_offset = gb.readUEG()\n frame_crop_top_offset = gb.readUEG()\n frame_crop_bottom_offset = gb.readUEG()\n }\n\n let par_width = 1, par_height = 1\n let fps = 0, fps_fixed = true, fps_num = 0, fps_den = 0\n\n let vui_parameters_present_flag = gb.readBool()\n if (vui_parameters_present_flag) {\n if (gb.readBool()) { // aspect_ratio_info_present_flag\n let aspect_ratio_idc = gb.readByte()\n let par_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2]\n let par_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1]\n\n if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n par_width = par_w_table[aspect_ratio_idc - 1]\n par_height = par_h_table[aspect_ratio_idc - 1]\n } else if (aspect_ratio_idc === 255) {\n par_width = gb.readByte() << 8 | gb.readByte()\n par_height = gb.readByte() << 8 | gb.readByte()\n }\n }\n\n if (gb.readBool()) {\n gb.readBool()\n }\n if (gb.readBool()) {\n gb.readBits(4)\n if (gb.readBool()) {\n gb.readBits(24)\n }\n }\n if (gb.readBool()) {\n gb.readUEG()\n gb.readUEG()\n }\n if (gb.readBool()) {\n let num_units_in_tick = gb.readBits(32)\n let time_scale = gb.readBits(32)\n fps_fixed = gb.readBool()\n\n fps_num = time_scale\n fps_den = num_units_in_tick * 2\n fps = fps_num / fps_den\n }\n }\n\n let parScale = 1\n if (par_width !== 1 || par_height !== 1) {\n parScale = par_width / par_height\n }\n\n let crop_unit_x = 0, crop_unit_y = 0\n if (chroma_format_idc === 0) {\n crop_unit_x = 1\n crop_unit_y = 2 - frame_mbs_only_flag\n } else {\n let sub_wc = (chroma_format_idc === 3) ? 1 : 2\n let sub_hc = (chroma_format_idc === 1) ? 2 : 1\n crop_unit_x = sub_wc\n crop_unit_y = sub_hc * (2 - frame_mbs_only_flag)\n }\n\n let codec_width = (pic_width_in_mbs_minus1 + 1) * 16\n let codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16)\n\n codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x\n codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y\n\n let present_width = Math.ceil(codec_width * parScale)\n\n gb.destroy()\n gb = null\n\n return {\n profile_string: profile_string,\n level_string: level_string,\n bit_depth: bit_depth,\n chroma_format: chroma_format,\n chroma_format_string: SPSParser.getChromaFormatString(chroma_format),\n\n frame_rate: {\n fixed: fps_fixed,\n fps: fps,\n fps_den: fps_den,\n fps_num: fps_num\n },\n\n par_ratio: {\n width: par_width,\n height: par_height\n },\n\n codec_size: {\n width: codec_width,\n height: codec_height\n },\n\n present_size: {\n width: present_width,\n height: codec_height\n }\n }\n }\n\n static _skipScalingList (gb, count) {\n let last_scale = 8, next_scale = 8\n let delta_scale = 0\n for (let i = 0; i < count; i++) {\n if (next_scale !== 0) {\n delta_scale = gb.readSEG()\n next_scale = (last_scale + delta_scale + 256) % 256\n }\n last_scale = (next_scale === 0) ? last_scale : next_scale\n }\n }\n\n static getProfileString (profileIdc) {\n switch (profileIdc) {\n case 66:\n return 'Baseline'\n case 77:\n return 'Main'\n case 88:\n return 'Extended'\n case 100:\n return 'High'\n case 110:\n return 'High10'\n case 122:\n return 'High422'\n case 244:\n return 'High444'\n default:\n return 'Unknown'\n }\n }\n\n static getLevelString (levelIdc) {\n return (levelIdc / 10).toFixed(1)\n }\n\n static getChromaFormatString (chroma) {\n switch (chroma) {\n case 420:\n return '4:2:0'\n case 422:\n return '4:2:2'\n case 444:\n return '4:4:4'\n default:\n return 'Unknown'\n }\n }\n\n static toVideoMeta (spsConfig) {\n let meta = {}\n if (spsConfig && spsConfig.codec_size) {\n meta.codecWidth = spsConfig.codec_size.width\n meta.codecHeight = spsConfig.codec_size.height\n meta.presentWidth = spsConfig.present_size.width\n meta.presentHeight = spsConfig.present_size.height\n }\n\n meta.profile = spsConfig.profile_string\n meta.level = spsConfig.level_string\n meta.bitDepth = spsConfig.bit_depth\n meta.chromaFormat = spsConfig.chroma_format\n\n meta.parRatio = {\n width: spsConfig.par_ratio.width,\n height: spsConfig.par_ratio.height\n }\n\n meta.frameRate = spsConfig.frame_rate\n\n let fpsDen = meta.frameRate.fps_den\n let fpsNum = meta.frameRate.fps_num\n meta.refSampleDuration = Math.floor(meta.timescale * (fpsDen / fpsNum))\n }\n}\n\nexport default SPSParser\n","export const CUSTOM_EVENTS = {\n \"MEDIA_EXPIRED\":'MEDIA_EXPIRED',\n \"INIT_FAIL\":\"INIT_FAIL\",\n \"PARSE_ERROR\":\"PARSE_ERROR\",\n \"BUFFERED_RESET\": \"BUFFERED_RESET\"\n}\n\nexport const TASK_ERROR = 'TASK_ERROR';\n\nexport const TASK_ERROR_TYPES = {\n ERROR:\"ERROR\",\n CODE_ERROR:\"CODE_ERROR\",\n CANCEL:\"CANCEL\",\n}\n","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== null; };\n","'use strict';\n\nvar _concat = require('./concat');\n\nvar _concat2 = _interopRequireDefault(_concat);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = _concat2.default;","class Golomb {\n constructor (uint8array) {\n this.TAG = 'Golomb'\n this._buffer = uint8array\n this._bufferIndex = 0\n this._totalBytes = uint8array.byteLength\n this._totalBits = uint8array.byteLength * 8\n this._currentWord = 0\n this._currentWordBitsLeft = 0\n }\n\n destroy () {\n this._buffer = null\n }\n\n _fillCurrentWord () {\n let bufferBytesLeft = this._totalBytes - this._bufferIndex\n if (bufferBytesLeft <= 0) {\n // TODO 异常处理\n }\n\n let bytesRead = Math.min(4, bufferBytesLeft)\n let word = new Uint8Array(4)\n word.set(this._buffer.subarray(this._bufferIndex, this._bufferIndex + bytesRead))\n this._currentWord = new DataView(word.buffer).getUint32(0)\n\n this._bufferIndex += bytesRead\n this._currentWordBitsLeft = bytesRead * 8\n }\n\n readBits (size) {\n let bits = Math.min(this._currentWordBitsLeft, size);// :uint\n let valu = this._currentWord >>> (32 - bits);\n if (size > 32) {\n throw new Error('Cannot read more than 32 bits at a time');\n }\n this._currentWordBitsLeft -= bits;\n if (this._currentWordBitsLeft > 0) {\n this._currentWord <<= bits;\n } else if (this._totalBytes - this._bufferIndex > 0) {\n this._fillCurrentWord();\n }\n\n bits = size - bits;\n if (bits > 0 && this._currentWordBitsLeft) {\n return valu << bits | this.readBits(bits);\n } else {\n return valu;\n }\n }\n\n readBool () {\n return this.readBits(1) === 1\n }\n\n readByte () {\n return this.readBits(8)\n }\n\n _skipLeadingZero () {\n let zeroCount\n for (zeroCount = 0; zeroCount < this._currentWordBitsLeft; zeroCount++) {\n if ((this._currentWord & (0x80000000 >>> zeroCount)) !== 0) {\n this._currentWord <<= zeroCount\n this._currentWordBitsLeft -= zeroCount\n return zeroCount\n }\n }\n this._fillCurrentWord()\n return zeroCount + this._skipLeadingZero()\n }\n\n readUEG () { // unsigned exponential golomb\n let leadingZeros = this._skipLeadingZero()\n return this.readBits(leadingZeros + 1) - 1\n }\n\n readSEG () { // signed exponential golomb\n let value = this.readUEG()\n if (value & 0x01) {\n return (value + 1) >>> 1\n } else {\n return -1 * (value >>> 1)\n }\n }\n}\n\nexport default Golomb\n","import Concat from 'concat-typed-array'\n\nclass Buffer {\n constructor () {\n this.buffer = new Uint8Array(0)\n }\n write (...buffer) {\n let self = this\n buffer.forEach(item => {\n if (item) {\n self.buffer = Concat(Uint8Array, self.buffer, item)\n } else {\n window.console.error(item)\n }\n })\n }\n static writeUint16 (value) {\n return new Uint8Array([\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n static writeUint32 (value) {\n return new Uint8Array([\n value >> 24,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n}\n\nexport default Buffer\n","import EventEmitter from 'event-emitter'\nimport Errors from '../error'\nimport {CUSTOM_EVENTS, TASK_ERROR, TASK_ERROR_TYPES} from '../constants'\nimport getResponseHeaders from '../util/getHeaders';\n\nclass Task {\n constructor (url, range, xhrSetup, callback, ext = {}) {\n EventEmitter(this)\n window.Task = Task\n this.url = url\n this.range = range\n ext.start = range[0]\n ext.end = range[1]\n this.uniqueTag = `${this.url}&range=${range[0]}-${range[1]}`\n this.playerId = ext.playerId;\n //处理重复分片请求,只拦截同一播放器的相同请求\n if (Task.queue.some(item => item.url === url && JSON.stringify(item.range) === JSON.stringify(range) && item.playerId === ext.playerId)) {\n // console.log('task repeat playerid', ext.playerId)\n return;\n }\n this.xhrSetup = xhrSetup\n this.id = this.playerId + range.join('-')\n this.running = false\n this.canceled = false\n this.initialize(url, range, callback);\n }\n initialize(url, range, callback) {\n let xhr = new window.XMLHttpRequest()\n xhr.target = this\n xhr.responseType = 'arraybuffer'\n xhr.withCredentials = this.withCredentials || false\n xhr.open('get', url)\n if(typeof this.xhrSetup === 'function') {\n this.xhrSetup(xhr, url)\n }\n xhr.setRequestHeader('Range', `bytes=${range[0]}-${range[1]}`)\n let self = this;\n xhr.onreadystatechange = function (e) {\n // HEADERS_RECEIVED\n if (xhr.readyState === 2) {\n self.headers = getResponseHeaders(xhr);\n // self.emit('getHeaders', self.headers);\n self.status = xhr.status;\n // self.startDownloadTime = nowTime();\n }\n // OPENED\n if (xhr.readyState === 1) {\n // self.lastTime = nowTime();\n }\n };\n xhr.onload = function () {\n if (xhr.status === 200 || xhr.status === 206) {\n if (callback && callback instanceof Function) {\n callback(xhr.response)\n }\n } else{\n if(xhr.status === 403){\n self.emit(CUSTOM_EVENTS.MEDIA_EXPIRED);\n }else{\n self._emitTaskError(TASK_ERROR_TYPES.CODE_ERROR);\n }\n }\n xhr.target.remove()\n }\n xhr.onerror = function (e) {\n xhr.target.emit('error', new Errors('network', '', {line: 25, handle: '[Task] constructor', msg: e.message, url}))\n xhr.target.remove()\n }\n xhr.onabort = function () {\n xhr.target.remove()\n }\n if (!self.canceled) {\n self.xhr = xhr;\n Task.queue.push(self);\n }\n self.update()\n }\n cancel () {\n this.xhr.abort()\n this._emitTaskError(TASK_ERROR_TYPES.CANCEL);\n this.canceled = true;\n }\n\n _emitTaskError(code){\n this.emit(TASK_ERROR, {code , url: this.uniqueTag, readyState: this.xhr.readyState, status: this.xhr.status})\n }\n\n remove () {\n Task.queue.filter((item, idx) => {\n if (item.url === this.url && item.id === this.id) {\n Task.queue.splice(idx, 1)\n return true\n } else {\n return false\n }\n })\n this.update()\n }\n\n update () {\n let Queue = Task.queue\n let sended = Queue.filter((item) => item.running)\n let wait = Queue.filter(item => !item.running)\n let max = Task.limit - sended.length\n wait.forEach((item, idx) => {\n if (idx < max) {\n item.run()\n }\n })\n }\n\n run () {\n if (this.xhr.readyState === 1) {\n this.running = true\n this.xhr.send()\n } else {\n this.remove()\n }\n }\n\n /***\n * 同时存在多播放器实例,存在问题\n */\n static clear (playerId) {\n let queue = Task.queue;\n for(let i = queue.length - 1; i > -1; i--){\n let item = queue[i];\n if(item.running && item.playerId === playerId){\n item.cancel();\n }\n queue.splice(i, 1)\n }\n }\n}\n\nTask.queue = []\nTask.limit = 2\n\nexport default Task\n","import Player from 'xgplayer'\nimport MP4 from './mp4'\nimport MSE from './media/mse'\nimport Task from './media/task'\nimport { isSupported, isSupportedWithXgmse, isMediaSourceSupported } from './util/isSupport';\nimport ProxyPromise from './util/proxyPromise'\nimport Timer from './util/timer'\nimport { CUSTOM_EVENTS } from './constants'\nimport GapJump from './gap_jump';\n\nconst DESTROYED = 'DESTROYED';\n\nconst sniffer = Player.sniffer;\n\nlet isEnded = (player, mp4) => {\n if (mp4.meta.endTime - player.currentTime < 0.5) {\n // let range = player.getBufferedRange(player.buffered2)\n let offsetTime = player.duration - player.currentTime\n if (offsetTime < 0.5) {\n player.mse.endOfStream()\n player._stopProgress()\n }\n }\n}\n\nclass Mp4Player extends Player {\n constructor (options) {\n let hasStartProgress = true;\n if(options.onlyInit || options.videoInit){\n options.onlyInit = true;\n options.autoplay = false;\n options.videoInit = false;\n hasStartProgress = false;\n }\n super(options);\n\n this._pendingPromises = [];\n this._allInitPromise = new ProxyPromise();\n this._maxBufferLength = options.maxBufferLength || 5\n this._playerId = Mp4Player.uniqueId ++;\n this._onBufferedResetFunc = this._onBufferedReset.bind(this);\n this._onSeekingFunc = this._onSeeking.bind(this);\n this._onMp4InitFunc = this._onMp4Init.bind(this);\n this._onWaitingFunc = this._onWaiting.bind(this);\n this._onEndedFunc = this._onEnded.bind(this);\n this._onDestroyFunc = this._onDestroy.bind(this);\n this._replay = this._onReplay.bind(this);\n this._onOnlineHandlerFunc = this._onOnlineHandler.bind(this);\n this._onOfflineHandlerFunc = this._onOfflineHandler.bind(this);\n this._tickInSeconds = options.tickInSeconds || 0.2;\n this._hasStartProgress = hasStartProgress;\n this._hasStartProgressBack = hasStartProgress;\n this.video.addEventListener(CUSTOM_EVENTS.BUFFERED_RESET, this._onBufferedResetFunc);\n this._bindNetworkStateChange();\n this._initMp4Kernal();\n\n this.once('ready', () => {\n this.gapJumpInst = new GapJump(this, this.config);\n Player.util.on(this, 'addVideoBufferEnd', () => {\n this.gapJumpInst.onSegmentAppend();\n });\n })\n }\n\n _initMp4Kernal(){\n let player = this;\n let rule = player.config.pluginRule || function () { return true }\n if (MSE.isSupported('video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"')) {\n if (!rule.call(player)) {\n return false\n }\n Object.defineProperty(player, 'src', {\n get () {\n return player.currentSrc\n },\n set (url) {\n player.mse.endOfStream()\n player._onDestroy();\n player.config.autoplay = player.autoplay = true\n player.config.url = url\n\n player._init(url).then((result) => {\n let mp4 = result[0]; \n let mse = result[1]\n player.proxyOnce('canplay', () => {\n player.play()\n player.proxyOn('waiting', player._onWaitingFunc)\n })\n player._startProgress();\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n // player.currentTime = 0\n }, err => {\n player._errorHandle(err)\n })\n },\n configurable: true\n })\n \n player.proxyOn('ended', player._onEndedFunc)\n \n player.proxyOnce('destroy', player._onDestroyFunc)\n \n if (player.config.videoInit || player.config.onlyInit){\n player.start(player.config.url)\n }\n }\n }\n\n start(url) {\n let player = this;\n url = url ? url : player.config.url;\n if (player.config.autoplay && Player.sniffer.browser == 'chrome' && !Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.addClass(player.root, 'xgplayer-is-enter')\n }\n player.proxyOnce('error', () => {\n if (Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.removeClass(player.root, 'xgplayer-is-enter')\n }\n })\n player.proxyOn('timeupdate', function () {\n if (Player.util.hasClass(player.root, 'xgplayer-isloading')) {\n Player.util.removeClass(player.root, 'xgplayer-isloading')\n }\n })\n player.proxyOnce('canplay', () => {\n if (Player.util.hasClass(player.root, 'xgplayer-is-enter')) {\n Player.util.removeClass(player.root, 'xgplayer-is-enter')\n }\n // safari decoder time offset\n if (sniffer.browser === 'safari' && player.buffered && player.config.autoplay) {\n let start = player.buffered.start(0)\n player.currentTime = start + 0.1\n }\n })\n\n let initPromise = player._init(url)\n initPromise.id = 'init'\n player._addPendingPromise(initPromise)\n initPromise.then(result => {\n \n player._allInitPromise.resolve();\n player._hasInited = true;\n player._removePendingPromise(initPromise);\n let mp4 = result[0]; let mse = result[1]\n if(player.config.autoplay) {\n player.proxyOnce('canplay', () => {\n player.play()\n })\n }\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n Player.util.on(mp4, 'error', err => {\n player._errorHandle(err)\n })\n player.proxyOn('seeking', player._onSeekingFunc)\n player.proxyOnce('playing', player._onMp4InitFunc)\n player.proxyOn('waiting', player._onWaitingFunc)\n // if(!player.config.onlyInit || player._hasStartProgressBack){\n player._startProgress();\n // }\n }, err => {\n if(err !== DESTROYED){\n player._onSuperStart(url)\n player._errorHandle(err)\n }\n })\n }\n\n switchURL(url){\n let player = this;\n let mp5 = new MP4(url, player.config.xhrSetup, player, player.config.preloadSize, {\n playerId: player._playerId\n })\n let mp4 = player.mp4\n Player.util.on(mp5, 'moovReady', () => {\n let timeRange = mp4.timeRage; \n let curTime = player.currentTime\n timeRange = mp4.timeRage\n let start = timeRange.find(item => item[0] - curTime > 2)[0]\n let end = player.getBufferedRange(player.buffered2)[1]\n if (end - start > 0 && sniffer.browser !== 'safari') {\n player.mse.removeBuffer(start, end)\n }\n if (!Player.util.hasClass(player.root, 'xgplayer-ended')) {\n player.emit('urlchange')\n }\n player.mp4 = mp5\n player.mse.appendBuffer(mp5.packMeta(mp4.meta))\n })\n Player.util.on(mp5, 'error', err => {\n player._errorHandle(err)\n })\n }\n\n _onBufferedReset(){\n if(this.mp4 && this.mp4.timeRage) {\n this.mp4.timeRage.forEach(item => {\n // if(item[0] <= time) item.downloaded = false;\n item.downloaded = false;\n });\n }\n };\n\n _onOnlineHandler(){\n if(!this._hasInited){\n this.src = this.config.url;\n }else{\n if(this._hasStartProgressBack){\n this._startProgress();\n }\n this._hasStartProgressBack = false;\n }\n }\n\n _onOfflineHandler(){\n if(this._hasStartProgress){\n this._stopProgress();\n this._hasStartProgressBack = true;\n }\n }\n\n _bindNetworkStateChange(){\n window.addEventListener('online', this._onOnlineHandlerFunc)\n window.addEventListener('offline', this._onOfflineHandlerFunc)\n }\n\n _unbindNetworkStateChange(){\n window.removeEventListener('online', this._onOnlineHandlerFunc)\n window.removeEventListener('offline', this._onOfflineHandlerFunc)\n }\n\n _onSuperStart(url){\n super.start(url)\n }\n\n _init(url){\n let player = this;\n let promise = new ProxyPromise();\n\n player._initMp4(url, promise);\n return promise;\n }\n\n _initMse(mp4, meta, promise){\n let player = this;\n const isHvc = meta.videoCodec.indexOf('hvc1') > -1 || (meta.encv && meta.encv.data_format.indexOf('hvc1') > -1)\n\n let hasVideo = !!meta.videoCodec\n let hasAudio = !!meta.audioCodec\n let codec\n if(hasVideo && hasAudio){\n codec = isHvc ? 'video/mp4; codecs=\"hev1.1.6.L93.B0, mp4a.40.5\"':'video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"'\n }else if(hasVideo){\n codec = isHvc ? 'video/mp4; codecs=\"hev1.1.6.L93.B0\"':'video/mp4; codecs=\"avc1.64001E\"'\n }else{\n codec = 'video/mp4; codecs=\"mp4a.40.5\"'\n }\n \n let mse = new MSE(codec, player.config.mediaType)\n Player.util.on(mse, 'sourceopen', function () {\n const initSeg = mp4.packMeta(mp4.meta);\n mse.appendBuffer(initSeg)\n Player.util.once(mse, 'updateend', function () {\n player._loadData();\n })\n })\n Player.util.on(mse, 'error', function (e) {\n promise.reject(e)\n })\n promise.resolve([mp4, mse])\n }\n\n _initMp4(url, promise){\n let player = this;\n let mp4 = new MP4(url, player.config.xhrSetup, player, player.config.preloadSize, {\n playerId: player._playerId\n })\n\n Player.util.once(mp4, 'metaReady', meta => {\n this._initMse(mp4, meta, promise)\n })\n \n Player.util.on(mp4, 'error', (e) => {\n promise.reject(e)\n })\n }\n\n _loadData(i = 0, time = null){\n if(!navigator.onLine){\n return;\n }\n let player = this;\n if(!player.mp4){\n return;\n }\n time = time ? time : player.currentTime;\n player.mp4.seek(time + i * 0.1).then(buffer => {\n if (buffer && player.mse) {\n let mse = player.mse\n mse.updating = true\n Player.util.once(mse, 'updateend', () => {\n // if (player.currentTime === 0 && player.video.buffered.length && player.video.buffered.end(player.video.buffered.length - 1) > 0) {\n // player.emit('canplay')\n // }\n mse.updating = false\n player.emit('addVideoBufferEnd');\n })\n mse.appendBuffer(buffer)\n }\n }, () => {\n if (i < 10) {\n setTimeout(function () {\n player._loadData(i + 1)\n }, 2000)\n }\n })\n }\n\n _onTimeUpdate(){\n let player = this;\n let mse = player.mse;\n let mp4 = player.mp4\n if (mse && !mse.updating && mp4 && mp4.canDownload) {\n let timeRage = mp4.timeRage\n let range = player.getBufferedRange(player.buffered2); \n let cacheMaxTime = player.currentTime + player._maxBufferLength\n if (range[1] - cacheMaxTime > 0) {\n return\n }\n timeRage.every((item, idx) => {\n if(item.downloaded) {\n return true;\n } else if (range[1] === 0) { //当前播放时刻无缓存\n if(item[0] <= player.currentTime && (player.currentTime < item[1] || player.duration - item[1] < 0.5)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n } else { //当前播放时刻有缓存\n if (item[0] >= range[1] || item[1] - 1 >= range[1] || (range[1] >= item[0] && range[1] <= item[0] + 1)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n }\n })\n isEnded(player, mp4)// hack for older webkit\n }\n }\n\n\n _onWaiting(){\n let player = this;\n let curTime = player.currentTime\n player._onInnerWait(curTime)\n if(curTime + 2 < player.duration) player._onInnerWait(curTime + 2)\n if(curTime - 2 > 0) player._onInnerWait(curTime - 2)\n }\n\n _onEnded(){\n this.off('waiting', this._onWaitingFunc)\n this._stopProgress();\n }\n\n _onReplay() {\n let player = this;\n player._onDestroy();\n player._init(player.config.url).then((result) => {\n let mp4 = result[0]; \n let mse = result[1]\n player._startProgress();\n player._onSuperStart(mse.url)\n player.mp4 = mp4\n player.mse = mse\n // player.currentTime = 0\n player.proxyOnce('canplay', () => {\n player.play()\n player.proxyOn('waiting', player._onWaitingFunc)\n })\n }, err => {\n player._errorHandle(err)\n })\n }\n\n _onDestroy(){\n let player = this;\n player._hasInited = false;\n player._unbindNetworkStateChange();\n Task.clear(player._playerId)\n if (player.mp4) {\n player.mp4.destroy();\n player.mp4 = null;\n }\n if(player.mse){\n player.mse.destroy();\n }\n player.unloadVideo();\n player._stopProgress();\n player.cancelPendingPromises();\n }\n\n _errorHandle(err){\n if(err.errt === 'network' || err.errorType === 'network'){\n return;\n }\n if(err.errt === 'parse' || err.errorType === 'parse'){\n\n return;\n }\n let player = this;\n err.url = player.src\n if (err.errd && typeof err.errd === 'object') {\n if (player.mp4) {\n err.errd.url = player.mp4.url\n err.url = player.mp4.url\n player.mp4.canDownload = false\n }\n }\n player.emit('DATA_REPORT', err)\n Task.clear(player._playerId)\n if (player.mp4 && player.mp4.bufferCache) {\n player.mp4.bufferCache.clear()\n }\n if (player.currentTime) {\n player._currentTime = player.currentTime\n }\n if (player._start) {\n player.start = player._start\n player._start = null\n }\n player.switchURL = null\n player._replay = null\n\n player.off('seeking', player._onSeekingFunc)\n player.off('playing', player._onMp4InitFunc)\n player.off('waiting', player._onWaitingFunc)\n player.off('ended', player._onEndedFunc)\n player.off('destroy', player._onDestroyFunc)\n\n iplayer.emit('error', err)\n player.src = player.config.url\n player.proxyOnce('canplay', () => {\n if (player._currentTime) {\n player.currentTime = player._currentTime\n }\n player.play()\n })\n \n }\n\n _onSeeking() {\n let curTime = this.currentTime\n this._onCheckLoad(curTime);\n isEnded(this, this.mp4)\n }\n\n _onInnerWait(curTime) {\n this._onCheckLoad(curTime);\n }\n\n _onCheckLoad(curTime){\n let player = this;\n let buffered = player.buffered2 || player.buffered; \n let hasBuffered = false; \n let timeRage = player.mp4.timeRage\n if (buffered.length) {\n for (let i = 0, len = buffered.length; i < len; i++) {\n if (curTime >= buffered.start(i) && curTime <= buffered.end(i)) {\n hasBuffered = true\n break\n }\n }\n if (!hasBuffered) {\n timeRage.every((item, idx) => {\n if (item[0] <= curTime && (item[1] > curTime || player.duration - item[1] < 0.5)) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n })\n }\n } else {\n timeRage.every((item, idx) => {\n if (item[0] <= curTime && item[1] > curTime) {\n player._loadData(0, item[0])\n return false\n } else {\n return true\n }\n })\n }\n }\n\n _onMp4Init(){\n let player = this;\n if(player.config.mp4Init) {\n player.pause()\n }\n // if(player.config.onlyInit){\n // player._startProgress();\n // }\n }\n\n _stopProgress(){\n let player = this;\n this._hasStartProgress = false;\n if(player._requestTimer){\n player._requestTimer.stop();\n player._requestTimer = null;\n }\n }\n\n _startProgress(){\n let player = this;\n player._stopProgress();\n player._requestTimer = new Timer(()=>{\n if(player._requestTimer) {\n player._onTimeUpdate()\n }\n });\n player._requestTimer.tickEvery(player._tickInSeconds);//200ms\n this._hasStartProgress = true;\n }\n\n unloadVideo() {\n let player = this;\n try {\n if (player.video && player.video.src) {\n player.video.removeAttribute('src'); // empty source\n player.video.load();\n }\n } catch (error) {\n // console.log('unloadVideo error', error)\n }\n }\n\n _addPendingPromise(p){\n this._pendingPromises.push(p);\n }\n\n _removePendingPromise(p){\n let idx = this._pendingPromises.indexOf(p);\n if(idx > -1){\n this._pendingPromises.splice(idx, 1);\n }\n }\n\n onMediaExpired(){\n this._stopProgress();\n this.emit(CUSTOM_EVENTS.MEDIA_EXPIRED);\n }\n\n cancelPendingPromises(){\n if(this._pendingPromises.length > 0){\n this._pendingPromises.forEach(promise => {\n promise.reject(DESTROYED)\n })\n }\n this._pendingPromises = [];\n }\n\n enableAutoBuffer(start){\n if(start){\n if(!this._allInitPromise){\n return;\n }\n this._allInitPromise.then(()=>{\n this._startProgress();\n })\n }else{\n this._stopProgress();\n }\n }\n\n destroy(){\n if(this.mp4){\n this.mp4.destroy();\n }\n if(this.mse){\n this.mse.destroy();\n }\n if(this.video) {\n this.video.removeEventListener(CUSTOM_EVENTS.BUFFERED_RESET, this._onBufferedResetFunc);\n }\n super.destroy();\n }\n\n emitInitFail(reason){\n this.emit(CUSTOM_EVENTS.INIT_FAIL, reason);\n }\n\n emitParseError(){\n this.emit(CUSTOM_EVENTS.PARSE_ERROR);\n }\n\n /***\n * @return Promise\n */\n get ready(){\n return this._allInitPromise;\n }\n}\nMp4Player.uniqueId = 1;\nMp4Player.isSupported = isSupported;\nMp4Player.isSupportedWithXgmse = isSupportedWithXgmse;\nMp4Player.isMediaSourceSupported = isMediaSourceSupported;\nMp4Player.CUSTOM_EVENTS = CUSTOM_EVENTS;\n\nexport default Mp4Player;\n","import EventEmitter from 'event-emitter'\nimport Parser from './parse'\nimport Buffer from './fmp4/buffer'\nimport FMP4 from './fmp4/mp4'\nimport Task from './media/task'\nimport util from './util'\nimport Errors from './error'\nimport {CUSTOM_EVENTS, TASK_ERROR} from './constants'\nimport Player from 'xgplayer'\n\nclass MP4 {\n /**\n * [constructor 构造函数]\n * @param {String} url [视频地址]\n * @param {Number} [chunk_size=Math.pow(25, 4)] [请求的数据块大小,对于长视频设置的较大些可以避免二次请求]\n */\n constructor (url, xhrSetup, player, chunkSize = Math.pow(25, 4), ext = {}) {\n EventEmitter(this)\n this.url = url\n this.xhrSetup = xhrSetup\n this.CHUNK_SIZE = chunkSize\n this.player = player\n this.ext = ext\n this.timeRage = []\n this.canDownload = true\n this.init()\n Player.util.once(this, 'moovReady', this.moovParse.bind(this))\n }\n\n /**\n * [getData 根据字节区间下载二进制数据]\n * @param {Number} [start=0] [起始字节]\n * @param {Number} [end=start + this.CHUNK_SIZE] [截止字节]\n */\n getData (start = 0, end = start + this.CHUNK_SIZE - 1) {\n let self = this\n return new Promise((resolve, reject) => {\n let task = new Task(this.url, [\n start, end\n ], this.xhrSetup, (data)=>{\n if(self.hasDestroyed){\n return;\n }\n resolve(data)\n }, self.ext)\n // Player.util.once(task, 'error', err => {\n // self.emit('error', err)\n // })\n\n Player.util.once(task, CUSTOM_EVENTS.MEDIA_EXPIRED, ()=>{\n self.player && self.player.onMediaExpired();\n });\n\n Player.util.once(task, TASK_ERROR, params => {\n //非403状态或者非200,206状态逻辑\n reject({code: params.code, status: params.status})\n })\n })\n }\n\n /**\n * [moovParse 解析视频信息]\n * @return {[type]} [description]\n */\n moovParse () {\n let self = this\n let moov = this.moovBox\n let mvhd = util.findBox(moov, 'mvhd')\n let traks = util.findBox(moov, 'trak')\n let videoTrak,\n audioTrak\n let videoCodec,\n audioCodec\n let videoTimeScale,\n audioTimeScale\n let sps,\n pps,\n vps,\n profile,\n width,\n height\n let channelCount,\n sampleRate,\n decoderConfig\n let hvc1Data, hvcCData\n let pixelRatio = [1, 1]\n if (!Array.isArray(traks)) {\n traks = [traks]\n }\n traks.forEach(trak => {\n let hdlr = util.findBox(trak, 'hdlr')\n let mdhd = util.findBox(trak, 'mdhd')\n if (!hdlr || !mdhd) {\n self.emit('error', new Errors('parse', '', {line: 101, handle: '[MP4] moovParse', url: self.url}))\n return\n }\n let stsd = util.findBox(trak, 'stsd')\n let codecBox = stsd.subBox[0]\n if (hdlr.handleType === 'vide') {\n let avcC = util.findBox(trak, 'avcC')\n let hvcC\n if(!avcC) {\n hvcC = util.findBox(trak, 'hvcC')\n }\n \n let tkhd = util.findBox(trak, 'tkhd')\n videoTrak = trak\n videoTimeScale = mdhd.timescale\n if (avcC) {\n videoCodec = `${codecBox.type}.` + util.toHex(avcC.profile, avcC.profileCompatibility, avcC.AVCLevelIndication).join('')\n sps = avcC.sequence\n pixelRatio = [avcC.spsInfo.par_ratio.width, avcC.spsInfo.par_ratio.height]\n if (avcC.spsInfo.codec_size) {\n width = avcC.spsInfo.codec_size.width\n height = avcC.spsInfo.codec_size.height\n }\n pps = avcC.pps && avcC.pps.map((item) => Number(`0x${item}`))\n profile = avcC.profile\n } else if(hvcC) {\n hvcCData = hvcC.data\n let hvc1 = util.findBox(trak, 'hvc1')\n if(hvc1) {\n hvc1Data = hvc1.data\n width = hvc1.width\n height = hvc1.height\n }\n videoCodec = `${codecBox.type}.` + util.toHex(hvcC.profile, hvcC.profileCompatibility, hvcC.profileCompatibilityIndications).join('')\n vps = hvcC.vps && hvcC.vps.map((item) => Number(`0x${item}`))\n sps = hvcC.sequence\n // pixelRatio = [hvcC.spsInfo.par_ratio.width, hvcC.spsInfo.par_ratio.height]\n // if (hvcC.spsInfo.codec_size) {\n // width = hvcC.spsInfo.codec_size.width\n // height = hvcC.spsInfo.codec_size.height\n // }\n pps = hvcC.pps && hvcC.pps.map((item) => Number(`0x${item}`))\n profile = hvcC.profile\n } else {\n videoCodec = `${codecBox.type}`\n }\n if (tkhd && !width) {\n width = tkhd.width\n height = tkhd.height\n }\n }\n if (hdlr.handleType === 'soun') {\n audioTrak = trak\n let esds = util.findBox(trak, 'esds')\n let mp4a = util.findBox(trak, 'mp4a')\n let ESDescriptor = util.findBox(trak, 5)\n audioTimeScale = mdhd.timescale\n if (esds) {\n audioCodec = `${codecBox.type}.` + util.toHex(esds.subBox[0].subBox[0].typeID) + `.${esds.subBox[0].subBox[0].subBox[0].type}`\n } else {\n audioCodec = `${codecBox.type}`\n }\n if (ESDescriptor && ESDescriptor.EScode) {\n decoderConfig = ESDescriptor.EScode.map((item) => Number(`0x${item}`))\n }\n if (mp4a) {\n channelCount = mp4a.channelCount\n sampleRate = mp4a.sampleRate\n }\n }\n })\n if (!sps) return\n // this.videoTrak = Merge({}, videoTrak)\n // this.audioTrak = audioTrak ? Merge({}, audioTrak) : null\n this.videoTrak = videoTrak;\n this.audioTrak = audioTrak ? audioTrak : null\n let mdat = this._boxes.find(item => item.type === 'mdat')\n let videoDuration = util.seekTrakDuration(videoTrak, videoTimeScale)\n let audioDuration = audioTrak ? util.seekTrakDuration(audioTrak, audioTimeScale) : videoDuration\n this.mdatStart = mdat.start\n let vf = this.videoKeyFrames\n let videoKeyFramesLength = vf.length - 1\n vf.forEach((item, idx) => {\n if (idx < videoKeyFramesLength) {\n this.timeRage.push([\n item.time.time / videoTimeScale,\n vf[idx + 1].time.time / videoTimeScale\n ])\n } else {\n this.timeRage.push([\n item.time.time / videoTimeScale,\n mvhd.duration / mvhd.timeScale\n ])\n }\n })\n this.meta = {\n videoCodec,\n audioCodec,\n createTime: mvhd.createTime,\n modifyTime: mvhd.modifyTime,\n duration: mvhd.duration / mvhd.timeScale,\n timeScale: mvhd.timeScale,\n videoDuration,\n videoTimeScale,\n audioDuration,\n audioTimeScale,\n endTime: Math.min(videoDuration, audioDuration),\n vps,\n sps,\n pps,\n width,\n height,\n profile,\n pixelRatio,\n channelCount,\n sampleRate,\n audioConfig: decoderConfig,\n hvc1Data,\n hvcCData,\n ext: {\n videoTrak: this.videoTrak,\n audioTrak: this.audioTrak,\n mdatStart: this.mdatStart,\n timeRage: this.timeRage,\n },\n stss: this._stssObj\n }\n this.emit('metaReady', this.meta)\n }\n\n /**\n * [init 实例的初始化,主要是获取视频的MOOV元信息]\n */\n init () {\n let self = this\n self.getData().then(res => {\n let parsed\n let moovStart = 0\n let moov\n let boxes\n try {\n parsed = new Parser(res)\n } catch (e) {\n self.emit('error', e.type ? e : new Errors('parse', '', {line: 176, handle: '[MP4] init', msg: e.message}))\n return false\n }\n self._boxes = boxes = parsed.boxes\n boxes.every(item => {\n moovStart += item.size\n if (item.type === 'moov') {\n moov = item\n self.moovBox = moov\n self.emit('moovReady', moov)\n return false\n } else {\n return true\n }\n })\n if (!moov) {\n let nextBox = parsed.nextBox\n if (nextBox) {\n if (nextBox.type === 'moov') {\n self.getData(moovStart, moovStart + nextBox.size + 28).then(res => {\n let parsed = new Parser(res)\n self._boxes = self._boxes.concat(parsed.boxes)\n moov = parsed.boxes.filter(box => box.type === 'moov')\n if (moov.length) {\n self.moovBox = moov[0]\n self.emit('moovReady', moov)\n } else {\n self.emit('error', new Errors('parse', '', {line: 203, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 207, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n } else {\n self.getData(moovStart, '').then(res => {\n let parsed = new Parser(res)\n if (parsed) {\n self._boxes = self._boxes.concat(parsed.boxes)\n parsed.boxes.every(item => {\n if (item.type === 'moov') {\n moov = item\n self.moovBox = moov\n self.emit('moovReady', moov)\n return false\n } else {\n return true\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 225, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n }\n }\n }).catch(() => {\n self.emit('error', new Errors('network', '', {line: 231, handle: '[MP4] getData', msg: 'getData failed'}))\n })\n }\n\n getSamplesByOrders (type = 'video', start, end) {\n let trak = type === 'video'\n ? this.videoTrak\n : this.audioTrak\n let stsc = util.findBox(trak, 'stsc') // chunk~samples\n let stsz = util.findBox(trak, 'stsz') // sample-size\n let stts = util.findBox(trak, 'stts') // sample-time\n let stco = util.findBox(trak, 'stco') // chunk-offset\n\n let cttsObj = type === 'video' ? this._cttsObj : null;\n let stscObj = type === 'video' ? this._stscVideoObj : this._stscAudioObj;\n let mdatStart = this.mdatStart\n let samples = []\n end = end !== undefined\n ? end\n : stsz.entries.length\n if (start instanceof Array) {\n start.forEach((item, idx) => {\n samples.push({\n idx: item,\n size: stsz.entries[item],\n time: util.seekSampleTime(stts, cttsObj, item),\n offset: util.seekSampleOffset(stsc, stco, stsz, item, mdatStart, stscObj)\n })\n })\n } else if (end !== 0) {\n for (let i = start; i < end; i++) {\n samples.push({\n idx: i,\n size: stsz.entries[i],\n time: util.seekSampleTime(stts, cttsObj, i),\n offset: util.seekSampleOffset(stsc, stco, stsz, i, mdatStart, stscObj)\n })\n }\n } else {\n samples = {\n idx: start,\n size: stsz.entries[start],\n time: util.seekSampleTime(stts, cttsObj, start),\n offset: util.seekSampleOffset(stsc, stco, stsz, start, mdatStart, stscObj)\n }\n }\n return samples\n }\n\n get videoKeyFrames () {\n if (this._videoFrames) {\n return this._videoFrames\n }\n let videoTrak = this.videoTrak\n let stss = util.findBox(videoTrak, 'stss')\n let stsc = util.findBox(videoTrak, 'stsc') // chunk~samples\n let ctts = util.findBox(videoTrak, 'ctts') // offset-compositime\n this._cttsObj = null;\n if(ctts){\n this._cttsObj = {};\n let count = 0;\n for(let i = 0; i < ctts.entry.length; i++){\n let entry = ctts.entry[i];\n for(let j = 0; j < entry.count; j++){\n this._cttsObj[count] = entry.offset;\n count += 1;\n }\n }\n }\n\n this._stscVideoObj = {};\n let sampleCount = 0;\n for(let i = 0; i < stsc.count - 1; i++){\n let entry = stsc.entries[i];\n for(let j = 0; j < entry.chunk_count * entry.samples_per_chunk; j++){\n sampleCount ++;\n this._stscVideoObj[sampleCount] = entry;\n }\n }\n\n let frames = this.getSamplesByOrders('video', stss.entries.map(item => item - 1))\n this._stssObj = stss;\n this._videoFrames = frames\n return frames\n }\n\n get audioKeyFrames () {\n if (this._audioFrames) {\n return this._audioFrames\n }\n let videoScale = util.findBox(this.videoTrak, 'mdhd').timescale\n let audioScale = util.findBox(this.audioTrak, 'mdhd').timescale\n let audioStts = util.findBox(this.audioTrak, 'stts').entry\n let stsc = util.findBox(this.audioTrak, 'stsc') // chunk~samples\n this._stscAudioObj = {};\n let sampleCount = 0;\n for(let i = 0; i < stsc.count - 1; i++){\n let entry = stsc.entries[i];\n for(let j = 0; j < entry.chunk_count * entry.samples_per_chunk; j++){\n sampleCount ++;\n this._stscAudioObj[sampleCount] = entry;\n }\n }\n let videoFrames = this.videoKeyFrames\n let audioIndex = []\n audioIndex = videoFrames.map(item => {\n return util.seekOrderSampleByTime(audioStts, audioScale, item.time.time / videoScale)\n })\n this._audioFrames = audioIndex\n return this._audioFrames\n }\n\n packMeta() {\n if (!this.meta) {\n return\n }\n let buffer = new Buffer()\n buffer.write(FMP4.ftyp())\n buffer.write(FMP4.moov(this.meta))\n // this.cache.write(buffer.buffer)\n return buffer.buffer\n }\n\n getRangeFromTime(time){\n let fragIndex = this.getFragmentIdx(time);\n let range = this.getFragRange(fragIndex)\n if(range === [0, 0]) return null;\n return {\n range,\n fragIndex,\n }\n }\n\n getFragmentIdx(time){\n let timeStart = Math.round(time * this.meta.videoTimeScale)\n let fragIndex\n let videoFrames = this.videoKeyFrames\n videoFrames.every((item, idx) => {\n let nowTime = item.time.time\n let nextTime = videoFrames[idx + 1]\n ? videoFrames[idx + 1].time.time\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndex = idx\n return false\n } else {\n return true\n }\n })\n if (this.audioTrak) {\n let audioFrames = this.audioKeyFrames\n audioFrames.every((item, idx) => {\n let nowTime = item.startTime\n let nextTime = audioFrames[idx + 1]\n ? audioFrames[idx + 1].startTime\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndex = Math.min(idx, fragIndex)\n return false\n } else {\n return true\n }\n })\n }\n return fragIndex;\n }\n\n seek (time) {\n let fragIndex = this.getFragmentIdx(time);\n this.timeRage[fragIndex].downloaded = true;\n return this.loadFragment(fragIndex)\n }\n\n getFragRange (fragIndex) {\n let videoFrame = this.videoKeyFrames[fragIndex]\n let start = videoFrame.offset\n let end\n if (this.audioTrak) {\n let audioFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex].order, 0)\n start = Math.min(start, audioFrame.offset)\n }\n if (fragIndex < this.videoKeyFrames.length - 1) {\n let videoNextFrame = this.videoKeyFrames[fragIndex + 1]\n end = videoNextFrame.offset\n if (this.audioTrak) {\n let audioNextFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex + 1].order, 0)\n end = Math.max(end, audioNextFrame.offset)\n }\n }\n if (window.isNaN(start) || (end !== undefined && window.isNaN(end))) {\n this.emit('error', new Errors('parse', '', { line: 366, handle: '[MP4] loadFragment', url: this.url }))\n return [0, 0]\n }\n return [start + this.mdatStart, end ? this.mdatStart + end : '']\n }\n loadFragment (fragIndex) {\n let self = this\n let range = this.getFragRange(fragIndex)\n if(range === [0, 0]) return false;\n return this.getData(range[0], range[1]).then((dat) => {\n return self.createFragment(new Uint8Array(dat), range[0] - this.mdatStart, fragIndex)\n })\n .then(buf => {\n return buf\n })\n }\n addFragment (data) {\n let buffer = new Buffer()\n return new Promise(resolve => {\n buffer.write(FMP4.moof(data))\n buffer.write(FMP4.mdat(data))\n // this.cache.write(buffer.buffer)\n resolve(buffer.buffer)\n })\n }\n getVideoBuffer(mdatData, start, fragIndex) {\n let self = this\n let videoFlags = 0xf01\n let framesIndex = self.videoKeyFrames.map((item) => item.idx)\n let _samples = self.getSamplesByOrders('video', framesIndex[fragIndex], framesIndex[fragIndex + 1])\n let samples = _samples.map((item, idx) => {\n return {\n size: item.size,\n duration: item.time.duration,\n offset: item.time.offset,\n buffer: new Uint8Array(mdatData.slice(item.offset - start, item.offset - start + item.size)),\n key: idx === 0,\n idx: item.idx\n }\n })\n return this.addFragment({\n id: 1,\n time: _samples[0].time.time,\n firstFlags: 0x2000000,\n flags: videoFlags,\n samples,\n sampleOffset: _samples[0].idx,\n fragIndex\n })\n }\n getAudioBuffer(mdatData, start, fragIndex) {\n\n let self = this\n let audioFlags = 0x701\n\n let _samples = this.getSamplesByOrders(\n 'audio', this.audioKeyFrames[fragIndex].order, this.audioKeyFrames[fragIndex + 1]\n ? this.audioKeyFrames[fragIndex + 1].order\n : undefined)\n let samples = _samples.map((item, idx) => {\n return {\n size: item.size,\n duration: item.time.duration,\n offset: item.time.offset,\n buffer: new Uint8Array(mdatData.slice(item.offset - start, item.offset - start + item.size)),\n key: idx === 0\n }\n })\n return this.addFragment({\n id: 2,\n time: _samples[0].time.time,\n firstFlags: 0x00,\n flags: audioFlags,\n samples,\n sampleOffset: _samples[0].idx,\n fragIndex\n })\n }\n createFragment (mdatData, start, fragIndex) {\n let self = this\n\n let resBuffers = []\n let promises = [\n self.getVideoBuffer(mdatData, start, fragIndex)\n ]\n if (this.audioTrak) {\n promises.push(self.getAudioBuffer(mdatData, start, fragIndex))\n }\n return Promise.all(promises)\n .then(buffers => {\n resBuffers.push(buffers[0])\n if (buffers && buffers[1]) {\n resBuffers.push(buffers[1])\n }\n let bufferSize = 0\n resBuffers.every(item => {\n bufferSize += item.byteLength\n return true\n })\n let buffer = new Uint8Array(bufferSize)\n let offset = 0\n resBuffers.every(item => {\n buffer.set(item, offset)\n offset += item.byteLength\n return true\n })\n return buffer\n })\n }\n\n update(url){\n this.url = url;\n }\n\n destroy(){\n if(this.hasDestroyed){\n return;\n }\n for (let k in this) {\n delete this[k]\n }\n this.hasDestroyed = true;\n }\n}\n\nexport default MP4\n","\"use strict\";\n\nvar isValue = require(\"type/value/is\")\n , isPlainFunction = require(\"type/plain-function/is\")\n , assign = require(\"es5-ext/object/assign\")\n , normalizeOpts = require(\"es5-ext/object/normalize-options\")\n , contains = require(\"es5-ext/string/#/contains\");\n\nvar d = (module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif (arguments.length < 2 || typeof dscr !== \"string\") {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t\tw = contains.call(dscr, \"w\");\n\t} else {\n\t\tc = w = true;\n\t\te = false;\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n});\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== \"string\") {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (!isValue(get)) {\n\t\tget = undefined;\n\t} else if (!isPlainFunction(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (!isValue(set)) {\n\t\tset = undefined;\n\t} else if (!isPlainFunction(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t} else {\n\t\tc = true;\n\t\te = false;\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n","\"use strict\";\n\nvar isFunction = require(\"../function/is\");\n\nvar classRe = /^\\s*class[\\s{/}]/, functionToString = Function.prototype.toString;\n\nmodule.exports = function (value) {\n\tif (!isFunction(value)) return false;\n\tif (classRe.test(functionToString.call(value))) return false;\n\treturn true;\n};\n","\"use strict\";\n\nvar isPrototype = require(\"../prototype/is\");\n\nmodule.exports = function (value) {\n\tif (typeof value !== \"function\") return false;\n\n\tif (!hasOwnProperty.call(value, \"length\")) return false;\n\n\ttry {\n\t\tif (typeof value.length !== \"number\") return false;\n\t\tif (typeof value.call !== \"function\") return false;\n\t\tif (typeof value.apply !== \"function\") return false;\n\t} catch (error) {\n\t\treturn false;\n\t}\n\n\treturn !isPrototype(value);\n};\n","\"use strict\";\n\nvar isObject = require(\"../object/is\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) return false;\n\ttry {\n\t\tif (!value.constructor) return false;\n\t\treturn value.constructor.prototype === value;\n\t} catch (error) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../value/is\");\n\n// prettier-ignore\nvar possibleTypes = { \"object\": true, \"function\": true, \"undefined\": true /* document.all */ };\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) return false;\n\treturn hasOwnProperty.call(possibleTypes, typeof value);\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== \"function\") return false;\n\tobj = { foo: \"raz\" };\n\tassign(obj, { bar: \"dwa\" }, { trzy: \"trzy\" });\n\treturn obj.foo + obj.bar + obj.trzy === \"razdwatrzy\";\n};\n","\"use strict\";\n\nvar keys = require(\"../keys\")\n , value = require(\"../valid-value\")\n , max = Math.max;\n\nmodule.exports = function (dest, src /*, …srcn*/) {\n\tvar error, i, length = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry {\n\t\t\tdest[key] = src[key];\n\t\t} catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < length; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys(\"primitive\");\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../is-value\");\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function (opts1 /*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (!isValue(options)) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\n","\"use strict\";\n\nvar str = \"razdwatrzy\";\n\nmodule.exports = function () {\n\tif (typeof str.contains !== \"function\") return false;\n\treturn str.contains(\"dwa\") === true && str.contains(\"foo\") === false;\n};\n","\"use strict\";\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString /*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n","\"use strict\";\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n","import Box from './box'\nimport Concat from 'concat-typed-array'\nimport Stream from './stream'\nimport * as SubBox from './box/*.js'\n\nclass Parse {\n constructor (buffer) {\n this.buffer = null\n this.boxes = []\n this.nextBox = null\n this.start = 0\n let self = this\n if (self.buffer) {\n Concat(Uint8Array, self.buffer, buffer)\n } else {\n self.buffer = buffer\n }\n let bufferLength = buffer.byteLength\n buffer.position = 0\n let stream = new Stream(buffer)\n while (bufferLength - stream.position >= 8) {\n let box = new Box()\n box.readHeader(stream)\n if (box.size - 8 <= (bufferLength - stream.position)) {\n box.readBody(stream)\n self.boxes.push(box)\n } else {\n if (box.type === 'mdat') {\n box.readBody(stream)\n self.boxes.push(box)\n } else {\n self.nextBox = box\n stream.position -= 8\n break\n }\n }\n }\n self.buffer = new Uint8Array(self.buffer.slice(stream.position))\n }\n}\n\nexport default Parse\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (ResultConstructor) {\n var totalLength = 0;\n\n for (var _len = arguments.length, arrays = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n arrays[_key - 1] = arguments[_key];\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = arrays[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var arr = _step.value;\n\n totalLength += arr.length;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var result = new ResultConstructor(totalLength);\n var offset = 0;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = arrays[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _arr = _step2.value;\n\n result.set(_arr, offset);\n offset += _arr.length;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return result;\n};","import Box from '../box'\nimport Stream from '../stream'\n\nBox.vmhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = [stream.readUint8(), stream.readUint8(), stream.readUint8()]\n this.graphicsmode = stream.readUint16()\n this.opcolor = [stream.readUint16(), stream.readUint16(), stream.readUint16()]\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox['url '] = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = [stream.readUint8(), stream.readUint8(), stream.readUint8()]\n let location = []; let length = stream.buffer.byteLength\n while (stream.position < length) {\n location.push(stream.readUint8())\n }\n this.location = location\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nBox.udta = function () {\n delete this.subBox\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.tkhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3, 0)\n if (this.version === 1) {\n this.create = stream.readUint64()\n this.modify = stream.readUint64()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.trackID = stream.readUint32()\n this.reserverd = stream.readUint32()\n this.duration = stream.readUint64()\n } else {\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.trackID = stream.readUint32()\n this.reserverd = stream.readUint32()\n this.duration = stream.readUint32()\n }\n stream.readUint64()\n this.layer = stream.readInt16()\n this.alternate_group = stream.readInt16()\n this.volume = stream.readInt16() >> 8\n stream.readUint16()\n // 视频转换矩阵\n let matrix = []\n for (let i = 0; i < 9; i++) {\n matrix.push(stream.readUint16() + '.' + stream.readUint16())\n }\n this.matrix = matrix\n this.width = stream.readUint16() + '.' + stream.readUint16()\n this.height = stream.readUint16() + '.' + stream.readUint16()\n delete this.data\n delete this.subBox\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.tfhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n\n // trackId: view.getUint32(4)\n this.track_id = stream.readUint32();\n\n let baseDataOffsetPresent = (this.flag & 0xff) & 0x01;\n let sampleDescriptionIndexPresent = (this.flag & 0xff) & 0x02;\n let defaultSampleDurationPresent = (this.flag & 0xff) & 0x08;\n let defaultSampleSizePresent = (this.flag & 0xff) & 0x10;\n let defaultSampleFlagsPresent = (this.flag & 0xff) & 0x20;\n\n let i = 8;\n if (baseDataOffsetPresent) {\n i += 4; // truncate top 4 bytes\n this.baseDataOffset = stream.readUint32();\n i += 4;\n }\n if (sampleDescriptionIndexPresent) {\n this.sampleDescriptionIndex = stream.readUint32();\n i += 4;\n }\n if (defaultSampleDurationPresent) {\n this.defaultSampleDuration = stream.readUint32();\n i += 4;\n }\n if (defaultSampleSizePresent) {\n this.defaultSampleSize = stream.readUint32();\n i += 4;\n }\n if (defaultSampleFlagsPresent) {\n this.defaultSampleFlags = stream.readUint32();\n }\n\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stts = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entry = []\n for (let i = 0, count = this.count; i < count; i++) {\n entry.push({\n sampleCount: stream.readUint32(),\n sampleDuration: stream.readUint32()\n })\n }\n this.entry = entry\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stsz = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.sampleSize = stream.readUint32()\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n if (this.sampleSize) {\n entries.push(this.sampleSize)\n }\n else {\n entries.push(stream.readUint32())\n }\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stss = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint32())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.stsd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.entryCount = stream.readUint32()\n let box = new Box()\n box.readHeader(stream)\n this.subBox.push(box)\n box.readBody(stream)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stsc = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push({\n first_chunk: stream.readUint32(),\n samples_per_chunk: stream.readUint32(),\n sample_desc_index: stream.readUint32()\n })\n }\n for (let i = 0, count = this.count, entry, preEntry; i < count - 1; i++) {\n entry = entries[i]\n preEntry = entries[i - 1]\n entry.chunk_count = entries[i + 1].first_chunk - entry.first_chunk\n entry.first_sample = i === 0 ? 1 : preEntry.first_sample + preEntry.chunk_count * preEntry.samples_per_chunk\n }\n if (this.count === 1) {\n let entry = entries[0]\n entry.first_sample = 1\n entry.chunk_count = 0\n } else if (this.count > 1) {\n let last = entries[this.count - 1]; let pre = entries[this.count - 2]\n last.first_sample = pre.first_sample + pre.chunk_count * pre.samples_per_chunk\n last.chunk_count = 0\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stco = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint32())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.smhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.balance = stream.readInt8() + '.' + stream.readInt8()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\n\nBox.SLConfigDescriptor = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.SL = stream.readUint8()\n delete box.subBox\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\n\nBox.schm = function () {\n let stream = new Stream(this.data)\n\tthis.scheme_version = stream.readUint32();\n this.scheme_type = '';\n for (var i = 0; i < 4; i++) {\n this.scheme_type += String.fromCharCode(stream.readUint8());\n }\n\tif (this.flags & 0x000001) {\n this.scheme_uri = '';\n for (var i = 0; i < this.size - this.hdr_size - 8; i++) {\n this.scheme_uri += String.fromCharCode(stream.readUint8());\n }\n\t}\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.pasp = function () {\n let stream = new Stream(this.data)\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.mvhd = function () {\n let stream = new Stream(this.data)\n\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timeScale = stream.readUint32()\n this.duration = stream.readUint32()\n this.rate = stream.readUint16() + '.' + stream.readUint16()\n this.volume = stream.readUint8() + '.' + stream.readUint8()\n // 越过保留的10字节\n Stream.readByte(stream.dataview, 8)\n Stream.readByte(stream.dataview, 2)\n // 视频转换矩阵\n let matrix = []\n for (let i = 0; i < 9; i++) {\n matrix.push(stream.readUint16() + '.' + stream.readUint16())\n }\n this.matrix = matrix\n Stream.readByte(stream.dataview, 24)\n this.nextTrackID = stream.readUint32()\n delete this.subBox\n delete this.data\n}\n","import Box from '../box'\n\nBox.MP4ESDescrTag = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.esID = stream.readUint16()\n box.priority = stream.readUint8()\n box.subBox.push(Box.MP4DecConfigDescrTag(stream))\n box.subBox.push(Box.SLConfigDescriptor(stream))\n return box\n}\n","import Box from '../box'\n\nBox.MP4DecSpecificDescrTag = function (stream) {\n let box = new Box()\n let size, dataSize\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n dataSize = size - 5\n } else {\n dataSize = size\n size += 2\n }\n box.size = size\n let EScode = []\n for (let i = 0; i < dataSize; i++) {\n EScode.push(Number(stream.readUint8()).toString(16).padStart(2, '0'))\n }\n box.EScode = EScode\n delete box.subBox\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.MP4DecConfigDescrTag = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.typeID = stream.readUint8()\n // 6 bits stream type,1 bit upstream flag,1 bit reserved flag\n box.streamUint = stream.readUint8()\n box.bufferSize = Stream.readByte(stream.dataview, 3)\n box.maximum = stream.readUint32()\n box.average = stream.readUint32()\n box.subBox.push(Box.MP4DecSpecificDescrTag(stream))\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.mp4a = function () {\n let stream = new Stream(this.data)\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(8)\n this.channelCount = stream.readUint16()\n this.sampleSize = stream.readUint16()\n stream.skip(4)\n this.sampleRate = stream.readUint32() >> 16\n let box = new Box()\n box.readHeader(stream)\n this.subBox.push(box)\n box.readBody(stream)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.mdhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n if (this.version === 1) {\n this.create = stream.readUint64()\n this.modify = stream.readUint64()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timescale = stream.readUint32()\n this.duration = stream.readUint64()\n } else {\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timescale = stream.readUint32()\n this.duration = stream.readUint32()\n }\n this.language = stream.readUint16()\n stream.readUint16()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\n\nBox.mdat = function () {\n delete this.subBox\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.iods = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let content = []\n let length = stream.buffer.byteLength\n while (stream.position < length) {\n content.push(stream.readUint8())\n }\n this.content = content\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport SpsParser from './sps'\n\nBox.hvcC = function () {\n let stream = new Stream(this.data)\n this.configVersion = stream.readUint8()\n this.profile = stream.readUint8()\n this.profileCompatibility = stream.readUint32()\n this.constraintIndicatorFlags = []\n for (let i = 0; i < 6; i++) {\n this.constraintIndicatorFlags.push(Number(stream.readUint8()).toString(16))\n }\n this.levelIdc = stream.readUint8()\n this.profileCompatibilityIndications = stream.readUint32()\n this.bitDepthLumaMinus8 = stream.readUint8()\n this.bitDepthChromaMinus8 = stream.readUint8()\n this.avgFrameRate = stream.readUint16()\n this.constantFrameRate = stream.readUint8()\n this.numOfArrays = stream.readUint8()\n\n this.vpsHeader = stream.readUint24()\n this.vpsLength = stream.readUint16()\n let vps = []\n for (let i = 0; i < this.vpsLength; i++) {\n vps.push(Number(stream.readUint8()).toString(16))\n }\n this.vps = vps\n\n this.spsHeader = stream.readUint24()\n this.spsLength = stream.readUint16()\n let sps = []\n for (let i = 0; i < this.spsLength; i++) {\n sps.push(Number(stream.readUint8()).toString(16))\n }\n // this.spsInfo = SpsParser.parseSPS(new Uint8Array(sps))\n this.sequence = sps\n\n this.ppsHeader = stream.readUint24()\n this.ppsLength = stream.readUint16()\n let pps = []\n for (let i = 0; i < this.ppsLength; i++) {\n pps.push(Number(stream.readUint8()).toString(16))\n }\n this.pps = pps\n\n let last = []; let dataviewLength = stream.dataview.byteLength\n while (stream.position < dataviewLength) {\n last.push(stream.readUint8())\n }\n this.last = last\n delete this.subBox\n // delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.hvc1 = function () {\n let stream = new Stream(this.data)\n let self = this\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(16)\n this.width = stream.readUint16()\n this.height = stream.readUint16()\n this.horizresolution = stream.readUint32()\n this.vertresolution = stream.readUint32()\n stream.skip(4)\n this.frameCount = stream.readUint16()\n stream.skip(1)\n for (let i = 0; i < 31; i++) {\n String.fromCharCode(stream.readUint8())\n }\n this.depth = stream.readUint16()\n stream.skip(2)\n while (stream.position < stream.buffer.byteLength) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n // delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.hdlr = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n stream.skip(4)\n this.handleType = `${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}`\n stream.skip(12)\n let name = []\n while (stream.position < this.size - 8) {\n name.push(String.fromCharCode(stream.readUint8()))\n }\n this.name = name.join('')\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.ftyp = function () {\n let stream = new Stream(this.data)\n this.major_brand = String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8())\n this.minor_version = stream.readUint32()\n let compatibleBrands = []\n for (let i = 0, len = Math.floor((stream.buffer.byteLength - 8) / 4); i < len; i++) {\n compatibleBrands.push(String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8()))\n }\n this.compatible_brands = compatibleBrands\n stream = null\n delete this.subBox\n delete this.data\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.frma = function () {\n let stream = new Stream(this.data)\n this.data_format = '';\n for (var i = 0; i < 4; i++) {\n this.data_format += String.fromCharCode(stream.readUint8());\n }\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.esds = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let box = Box.MP4ESDescrTag(stream)\n this.subBox.push(box)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.elst = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let entries = []\n let entry_count = stream.readUint32()\n this.entries = entries\n for (let i = 0; i < entry_count; i++) {\n let entry = {}\n entries.push(entry)\n if (this.version === 1) {\n entry.segment_duration = stream.readUint64()\n entry.media_time = stream.readUint64()\n } else {\n entry.segment_duration = stream.readUint32()\n entry.media_time = stream.readInt32()\n }\n entry.media_rate_integer = stream.readInt16()\n entry.media_rate_fraction = stream.readInt16()\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.dref = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let entryCount = stream.readUint32()\n this.entryCount = entryCount\n let self = this\n // 暂时不支持离散视频,视频的部分内容由url指定\n for (let i = 0; i < entryCount; i++) {\n let box = new Box()\n self.subBox.push(box)\n box.read(stream)\n }\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.ctts = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n\n this.entryCount = stream.readUint32()\n let entry = []\n this.entry = entry\n for (let i = 0, count = this.entryCount; i < count; i++) {\n entry.push({\n count: stream.readUint32(),\n offset: stream.readUint32()\n })\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.co64 = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint64())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.btrt = function () {\n let stream = new Stream(this.data)\n this.bufferSizeDB = stream.readUint32()\n this.maxBitrate = stream.readUint32()\n this.avgBitrate = stream.readUint32()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport SpsParser from './sps'\n\nBox.avcC = function () {\n let stream = new Stream(this.data)\n this.configVersion = stream.readUint8()\n this.profile = stream.readUint8()\n this.profileCompatibility = stream.readUint8()\n this.AVCLevelIndication = stream.readUint8()\n this.lengthSizeMinusOne = (stream.readUint8() & 3) + 1\n this.numOfSequenceParameterSets = stream.readUint8() & 31\n let sequenceLength = stream.readUint16()\n this.sequenceLength = sequenceLength\n let sequence = []\n for (let i = 0; i < sequenceLength; i++) {\n sequence.push(stream.readUint8())\n }\n this.spsInfo = SpsParser.parseSPS(new Uint8Array(sequence))\n this.ppsCount = stream.readUint8()\n let ppsLength = stream.readUint16()\n this.ppsLength = ppsLength\n let pps = []\n for (let i = 0; i < ppsLength; i++) {\n pps.push(Number(stream.readUint8()).toString(16))\n }\n this.pps = pps\n this.sequence = sequence\n let last = []; let dataviewLength = stream.dataview.byteLength\n while (stream.position < dataviewLength) {\n last.push(stream.readUint8())\n }\n this.last = last\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.avc1 = function () {\n let stream = new Stream(this.data)\n let self = this\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(16)\n this.width = stream.readUint16()\n this.height = stream.readUint16()\n this.horizresolution = stream.readUint32()\n this.vertresolution = stream.readUint32()\n stream.skip(4)\n this.frameCount = stream.readUint16()\n stream.skip(1)\n for (let i = 0; i < 31; i++) {\n String.fromCharCode(stream.readUint8())\n }\n this.depth = stream.readUint16()\n stream.skip(2)\n while (stream.position < stream.buffer.byteLength) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n delete this.data\n stream = null\n}\n","import Buffer from './buffer'\nconst UINT32_MAX = Math.pow(2, 32) - 1\n\nclass FMP4 {\n static type (name) {\n return new Uint8Array([name.charCodeAt(0), name.charCodeAt(1), name.charCodeAt(2), name.charCodeAt(3)])\n }\n static size (value) {\n return Buffer.writeUint32(value)\n }\n static extension (version, flag) {\n return new Uint8Array([\n version,\n (flag >> 16) & 0xff,\n (flag >> 8) & 0xff,\n flag & 0xff\n ])\n }\n static ftyp () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(24), FMP4.type('ftyp'), new Uint8Array([\n 0x69, 0x73, 0x6F, 0x36, // isom,\n 0x0, 0x0, 0x00, 0x01, // minor_version: 0x01\n 0x69, 0x73, 0x6F, 0x36, // isom\n 0x64, 0x61, 0x73, 0x68 // avc1\n ]))\n return buffer.buffer\n }\n static moov (data) {\n let buffer = new Buffer(); let size = 8\n let mvhd = FMP4.mvhd(data.duration, data.timeScale)\n let mvex = FMP4.mvex(data.duration, data.timeScale)\n let trak1 = FMP4.videoTrak(data)\n let trak2 = new Uint8Array([])\n if (data.channelCount) {\n trak2 = FMP4.audioTrak(data);\n }\n [mvhd, mvex, trak1, trak2].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('moov'), mvhd, mvex, trak1, trak2)\n return buffer.buffer\n }\n static mvhd (duration, timescale) {\n let buffer = new Buffer()\n duration *= timescale\n // const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n // const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let bytes = new Uint8Array([\n 0x00, // version 1\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >> 24) & 0xff,\n (timescale >> 16) & 0xff,\n (timescale >> 8) & 0xff,\n timescale & 0xff, // timescale\n (duration >> 24) & 0xff,\n (duration >> 16) & 0xff,\n (duration >> 8) & 0xff,\n duration & 0xff, // duration\n 0x00, 0x01, 0x00, 0x00, // 1.0 rate\n 0x01, 0x00, // 1.0 volume\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x00, 0x00, 0x00, 0x03 // next_track_ID\n ])\n buffer.write(FMP4.size(8 + bytes.length), FMP4.type('mvhd'), new Uint8Array(bytes))\n return buffer.buffer\n }\n static videoTrak (data) {\n let buffer = new Buffer(); let size = 8\n let tkhd = FMP4.tkhd({\n id: 1,\n duration: data.videoDuration,\n timescale: data.videoTimeScale,\n width: data.width,\n height: data.height,\n type: 'video'\n })\n let mdia = FMP4.mdia({\n type: 'video',\n timescale: data.videoTimeScale,\n duration: data.videoDuration,\n vps: data.vps,\n sps: data.sps,\n pps: data.pps,\n pixelRatio: data.pixelRatio,\n width: data.width,\n height: data.height,\n videoCodec: data.videoCodec,\n hvc1Data: data.hvc1Data,\n hvcCData: data.hvcCData,\n stss: data.stss\n });\n [tkhd, mdia].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('trak'), tkhd, mdia)\n return buffer.buffer\n }\n static audioTrak (data) {\n let buffer = new Buffer(); let size = 8\n let tkhd = FMP4.tkhd({\n id: 2,\n duration: data.audioDuration,\n timescale: data.audioTimeScale,\n width: 0,\n height: 0,\n type: 'audio'\n })\n let channelCount = data.channelCount\n let sampleRate = data.sampleRate\n let mdia = FMP4.mdia({\n type: 'audio',\n timescale: data.audioTimeScale,\n duration: data.audioDuration,\n channelCount,\n sampleRate,\n audioConfig: data.audioConfig\n });\n [tkhd, mdia].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('trak'), tkhd, mdia)\n return buffer.buffer\n }\n static tkhd (data) {\n let buffer = new Buffer()\n let id = data.id\n\n let duration = data.duration * data.timeScale\n\n let width = data.width\n\n let height = data.height\n\n let type = data.type\n\n // let upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n\n // let lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let content = new Uint8Array([\n 0x00, // version 1\n 0x00, 0x00, 0x03, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0xD9, 0xAC, 0xEC, 0x56, // modification_time\n (id >> 24) & 0xff,\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n id & 0xff, // track_ID\n 0x00, 0x00, 0x00, 0x00, // reserved\n (duration >> 24) & 0xff,\n (duration >> 16) & 0xff,\n (duration >> 8) & 0xff,\n duration & 0xff, // duration\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, type === 'video' ? 0x01 : 0x00, // alternate_group\n type === 'audio' ? 0x01 : 0x00, 0x00, // non-audio track volume\n 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n (width >> 8) & 0xff,\n width & 0xff,\n 0x00, 0x00, // width\n (height >> 8) & 0xff,\n height & 0xff,\n 0x00, 0x00 // height\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('tkhd'), content)\n return buffer.buffer\n }\n static edts (data) {\n let buffer = new Buffer(); let duration = data.duration; let mediaTime = data.mediaTime\n buffer.write(FMP4.size(36), FMP4.type('edts'))\n // elst\n buffer.write(FMP4.size(28), FMP4.type('elst'))\n buffer.write(new Uint8Array([\n 0x00, 0x00, 0x00, 0x01, // entry count\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,\n (mediaTime >> 24) & 0xff, (mediaTime >> 16) & 0xff, (mediaTime >> 8) & 0xff, mediaTime & 0xff,\n 0x00, 0x00, 0x00, 0x01 // media rate\n ]))\n return buffer.buffer\n }\n static mdia (data) {\n let buffer = new Buffer(); let size = 8\n let mdhd = FMP4.mdhd(data.timescale)\n let hdlr = FMP4.hdlr(data.type)\n let minf = FMP4.minf(data);\n [mdhd, hdlr, minf].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('mdia'), mdhd, hdlr, minf)\n return buffer.buffer\n }\n static mdhd (timescale, duration = 0) {\n let buffer = new Buffer()\n duration *= timescale\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let content = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0xD9, 0x14, 0x25, 0x5A, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n 0x00, 0x00, 0x00, 0x00, // duration\n 0x15, 0xC7, // 'und' language\n 0x00, 0x00\n ])\n buffer.write(FMP4.size(12 + content.byteLength), FMP4.type('mdhd'), FMP4.extension(0, 0), content)\n return buffer.buffer\n }\n static hdlr (type) {\n let buffer = new Buffer()\n let value = [0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65,\n 0x6f, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]\n if (type === 'audio') {\n value.splice(8, 4, ...[0x73, 0x6f, 0x75, 0x6e])\n value.splice(24, 13, ...[0x53, 0x6f, 0x75, 0x6e,\n 0x64, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00])\n }\n buffer.write(FMP4.size(8 + value.length), FMP4.type('hdlr'), new Uint8Array(value))\n return buffer.buffer\n }\n static minf (data) {\n let buffer = new Buffer(); let size = 8\n let vmhd = data.type === 'video' ? FMP4.vmhd() : FMP4.smhd()\n let dinf = FMP4.dinf()\n let stbl = FMP4.stbl(data);\n [vmhd, dinf, stbl].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('minf'), vmhd, dinf, stbl)\n return buffer.buffer\n }\n static vmhd () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(20), FMP4.type('vmhd'), new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphicsmode\n 0x00, 0x00,\n 0x00, 0x00,\n 0x00, 0x00 // opcolor\n ]))\n return buffer.buffer\n }\n static smhd () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(16), FMP4.type('smhd'), new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]))\n return buffer.buffer\n }\n static dinf () {\n let buffer = new Buffer()\n let dref = [0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0c, // entry_size\n 0x75, 0x72, 0x6c, 0x20, // 'url' type\n 0x00, // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]\n buffer.write(FMP4.size(36), FMP4.type('dinf'), FMP4.size(28), FMP4.type('dref'), new Uint8Array(dref))\n return buffer.buffer\n }\n static stbl (data) {\n let buffer = new Buffer(); let size = 8\n let stsd = FMP4.stsd(data)\n let stts = FMP4.stts()\n let stsc = FMP4.stsc()\n let stsz = FMP4.stsz()\n let stco = FMP4.stco();\n if(data.type === 'video') {\n let stss = FMP4.stss(data.stss);\n [stsd, stts, stss, stsc, stsz, stco].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('stbl'), stsd, stts, stss, stsc, stsz, stco)\n } else {\n [stsd, stts, stsc, stsz, stco].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('stbl'), stsd, stts, stsc, stsz, stco)\n }\n \n return buffer.buffer\n }\n static stsd (data) {\n let buffer = new Buffer(); let content\n if (data.type === 'audio') {\n content = FMP4.mp4a(data)\n } else if (data.videoCodec.indexOf('hvc1') > -1) {\n content = FMP4.hvc1(data)\n } else {\n content = FMP4.avc1(data)\n }\n buffer.write(\n FMP4.size(16 + content.byteLength), \n FMP4.type('stsd'), \n FMP4.extension(0, 0), \n new Uint8Array([0x00, 0x00, 0x00, 0x01]),\n content\n )\n return buffer.buffer\n }\n static mp4a (data) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, data.channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n (data.sampleRate >> 8) & 0xff,\n data.sampleRate & 0xff, //\n 0x00, 0x00\n ])\n let esds = FMP4.esds(data.audioConfig)\n buffer.write(FMP4.size(8 + content.byteLength + esds.byteLength), FMP4.type('mp4a'), content, esds)\n return buffer.buffer\n }\n static esds (config = [43, 146, 8, 0]) {\n const configlen = config.length\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n\n 0x03, // descriptor_type\n 0x17 + configlen, // length\n 0x00, 0x01, // es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x0f + configlen, // length\n 0x40, // codec : mpeg4_audio\n 0x15, // stream_type\n 0x00, 0x00, 0x00, // buffer_size\n 0x00, 0x00, 0x00, 0x00, // maxBitrate\n 0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n 0x05 // descriptor_type\n ].concat([configlen]).concat(config).concat([0x06, 0x01, 0x02]))\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('esds'), content)\n return buffer.buffer\n }\n static avc1 (data) {\n let buffer = new Buffer(); let size = 40// 8(avc1)+8(avcc)+8(btrt)+16(pasp)\n let sps = data.sps; let pps = data.pps; let width = data.width; let height = data.height; let hSpacing = data.pixelRatio[0]; let vSpacing = data.pixelRatio[1]\n let avcc = new Uint8Array([\n 0x01, // version\n sps[1], // profile\n sps[2], // profile compatible\n sps[3], // level\n 0xfc | 3,\n 0xE0 | 1 // 目前只处理一个sps\n ].concat([sps.length >>> 8 & 0xff, sps.length & 0xff]).concat(sps).concat(1).concat([pps.length >>> 8 & 0xff, pps.length & 0xff]).concat(pps))\n let avc1 = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (width >> 8) & 0xff,\n width & 0xff, // width\n (height >> 8) & 0xff,\n height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x12,\n 0x64, 0x61, 0x69, 0x6C, // dailymotion/hls.js\n 0x79, 0x6D, 0x6F, 0x74,\n 0x69, 0x6F, 0x6E, 0x2F,\n 0x68, 0x6C, 0x73, 0x2E,\n 0x6A, 0x73, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0x11, 0x11]) // pre_defined = -1\n let btrt = new Uint8Array([\n 0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0 // avgBitrate\n ])\n let pasp = new Uint8Array([\n (hSpacing >> 24), // hSpacing\n (hSpacing >> 16) & 0xff,\n (hSpacing >> 8) & 0xff,\n hSpacing & 0xff,\n (vSpacing >> 24), // vSpacing\n (vSpacing >> 16) & 0xff,\n (vSpacing >> 8) & 0xff,\n vSpacing & 0xff\n ])\n\n buffer.write(\n FMP4.size(size + avc1.byteLength + avcc.byteLength + btrt.byteLength), FMP4.type('avc1'), avc1,\n FMP4.size(8 + avcc.byteLength), FMP4.type('avcC'), avcc,\n FMP4.size(20), FMP4.type('btrt'), btrt,\n FMP4.size(16), FMP4.type('pasp'), pasp\n )\n return buffer.buffer\n }\n static hvc1 (data) {\n const buffer = new Buffer()\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (data.width >> 8) & 0xFF,\n data.width & 0xff, // width\n (data.height >> 8) & 0xFF,\n data.height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x00,\n 0x00, 0x00, 0x00, 0x00, // dailymotion/hls.js\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0xFF, 0xFF,\n ]);\n\n buffer.write(\n FMP4.size(8 + content.byteLength + 8 + data.hvcCData.byteLength + 10), FMP4.type('hvc1'), content,\n FMP4.size(8 + data.hvcCData.byteLength), FMP4.type('hvcC'), new Uint8Array(data.hvcCData),\n FMP4.size(10), FMP4.type('fiel'), new Uint8Array([0x01, 0x00])\n )\n return buffer.buffer\n }\n static stts () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stts'), content)\n return buffer.buffer\n }\n static stss (stssObj) {\n let buffer = new Buffer()\n let entries = [];\n stssObj.entries.forEach(item => {\n entries.push(item >> 24)\n entries.push((item >> 16) & 0xff)\n entries.push((item >> 8) & 0xff)\n entries.push(item & 0xff)\n })\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n (stssObj.count >> 24), // entry_count\n (stssObj.count >> 16) & 0xff,\n (stssObj.count >> 8) & 0xff,\n stssObj.count & 0xff,\n ].concat(entries))\n buffer.write(FMP4.size(8+8+4*stssObj.count), FMP4.type('stss'), content)\n return buffer.buffer\n }\n static stsc () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stsc'), content)\n return buffer.buffer\n }\n static stco () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stco'), content)\n return buffer.buffer\n }\n static stsz () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ])\n buffer.write(FMP4.size(20), FMP4.type('stsz'), content)\n return buffer.buffer\n }\n static mvex (duration, timeScale) {\n let buffer = new Buffer()\n let mehd = Buffer.writeUint32(duration * timeScale)\n buffer.write(FMP4.size(88), FMP4.type('mvex'), FMP4.size(16), FMP4.type('mehd'), FMP4.extension(0, 0), mehd, FMP4.trex1(1), FMP4.trex2(2))\n return buffer.buffer\n }\n static trex (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static trex1 (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x02, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x00 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static trex2 (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x04, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x02, 0x00, 0x00, 0x00 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static moof (data) {\n let buffer = new Buffer(); let size = 8\n let mfhd = FMP4.mfhd(data)\n let traf = FMP4.traf(data);\n [mfhd, traf].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('moof'), mfhd, traf)\n return buffer.buffer\n }\n static mfhd (data) {\n let buffer = new Buffer()\n let content = null;\n if (data.id === 1) {\n content = Buffer.writeUint32((data.fragIndex || 0) + 1)\n }\n else {\n content = Buffer.writeUint32((data.fragIndex || 0) + 1)\n }\n buffer.write(FMP4.size(16), FMP4.type('mfhd'), FMP4.extension(0, 0), content)\n return buffer.buffer\n }\n static traf (data) {\n let buffer = new Buffer(); let size = 8\n let tfhd = FMP4.tfhd(data.id)\n let tfdt = FMP4.tfdt(data, data.time)\n let sdtp = FMP4.sdtp(data)\n let trun = FMP4.trun(data, sdtp.byteLength);\n [tfhd, tfdt, sdtp, trun].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('traf'), tfhd, tfdt, sdtp, trun)\n return buffer.buffer\n }\n static tfhd (id) {\n let buffer = new Buffer()\n let content = Buffer.writeUint32(id)\n buffer.write(FMP4.size(16), FMP4.type('tfhd'), new Uint8Array([\n 0x00, 0x02, 0x00, 0x00\n ]), content)\n return buffer.buffer\n }\n static tfdt (data, time) {\n let buffer = new Buffer()\n let upper = Math.floor(time / (UINT32_MAX + 1))\n let lower = Math.floor(time % (UINT32_MAX + 1))\n buffer.write(FMP4.size(20), FMP4.type('tfdt'), FMP4.extension(1, 0), Buffer.writeUint32(upper), Buffer.writeUint32(lower))\n return buffer.buffer\n }\n static trun (data, sdtpLength) {\n let id = data.id\n let ceil = id === 1 ? 16 : 12\n let buffer = new Buffer()\n let sampleCount = Buffer.writeUint32(data.samples.length)\n // mdat-header 8\n // moof-header 8\n // mfhd 16\n // traf-header 8\n // thhd 16\n // tfdt 20\n // trun-header 12\n // sampleCount 4\n // data-offset 4\n // samples.length\n let offset = Buffer.writeUint32(8 + 8 + 16 + 8 + 16 + 20 + 12 + 4 + 4 + ceil * data.samples.length + sdtpLength)\n buffer.write(FMP4.size(20 + ceil * data.samples.length), FMP4.type('trun'), FMP4.extension(0, data.flags), sampleCount, offset)\n data.samples.forEach((item, idx) => {\n buffer.write(Buffer.writeUint32(item.duration))\n buffer.write(Buffer.writeUint32(item.size))\n if (id === 1) {\n buffer.write(Buffer.writeUint32(item.key ? 0x02000000 : 0x01010000))\n buffer.write(Buffer.writeUint32(item.offset))\n } else {\n buffer.write(Buffer.writeUint32(0x1000000))\n }\n })\n return buffer.buffer\n }\n static sdtp (data) {\n let buffer = new Buffer()\n buffer.write(FMP4.size(12 + data.samples.length), FMP4.type('sdtp'), FMP4.extension(0, 0))\n data.samples.forEach(item => {\n buffer.write(new Uint8Array(data.id === 1 ? [item.key ? 32 : 16] : [16]))\n })\n return buffer.buffer\n }\n static mdat (data) {\n let buffer = new Buffer(); \n let size = 8;\n data.samples.forEach(item => {\n size += item.size\n })\n buffer.write(FMP4.size(size), FMP4.type('mdat'))\n data.samples.forEach(item => {\n buffer.write(item.buffer)\n })\n return buffer.buffer\n }\n}\n\nexport default FMP4","export default function getResponseHeaders(xhr) {\n const headerMap = {};\n if (xhr instanceof window.XMLHttpRequest) {\n try {\n const headers = xhr.getAllResponseHeaders();\n\n const arr = headers.trim().split(/[\\r\\n]+/);\n arr.forEach(function (line) {\n const parts = line.split(': ');\n const header = parts.shift();\n const value = parts.join(': ');\n headerMap[header] = value;\n });\n } catch (error) {\n }\n }\n return headerMap;\n}","let util = {}\n\n/**\n * [使用递归查询指定type的box]\n * var mimeCodec = 'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"';\n * @param {Object} root [JSON对象]\n * @param {String} type [box的类型]\n * @param {?Array} type [box]\n * @return {Object|Array<Object>|undefined} [box]\n */\nutil.findBox = function (root, type, result = []) {\n if (root.type !== type) {\n if (root && root.subBox) {\n let box = root.subBox.filter(item => item.type === type)\n if (box.length) {\n box.forEach(item => result.push(item))\n } else {\n root.subBox.forEach(item => util.findBox(item, type, result))\n }\n }\n } else {\n result.push(root)\n }\n result = [].concat(result)\n return result.length > 1 ? result : result[0]\n}\n\nutil.padStart = function (str, length, pad) {\n let charstr = String(pad); let len = length >> 0; let maxlen = Math.ceil(len / charstr.length)\n let chars = []; let r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\n/**\n * [十进制转十六进制]\n * @param {Number} value [要转换的十进制数字]\n * @return {String} [十六进制]\n */\nutil.toHex = function (...value) {\n let hex = []\n value.forEach(item => {\n hex.push(util.padStart(Number(item).toString(16), 2, 0))\n })\n return hex\n}\n\n/**\n * [求和计算]\n * @param {[type]} rst [description]\n * @return {[type]} [description]\n */\nutil.sum = function (...rst) {\n let count = 0\n rst.forEach(item => { count += item })\n return count\n}\n\n/**\n * [计算音视频数据在Mdat中的偏移量]\n * @param {Array} stsc [块偏移量]\n * @param {Number} sample_order [帧次序]\n * @return {Object} [块的位置和当前帧的偏移数]\n */\nutil.stscOffset = function (stsc, sample_order, stscObj) {\n let chunk_index; let samples_offset = ''\n // let chunk_start = stsc.entries.filter((item) => {\n // return item.first_sample <= sample_order && sample_order < item.first_sample + item.chunk_count * item.samples_per_chunk\n // })[0]\n let chunk_start = stscObj[sample_order]\n if (!chunk_start) {\n let last_chunk = stsc.entries.pop()\n stsc.entries.push(last_chunk)\n let chunk_offset = Math.floor((sample_order - last_chunk.first_sample) / last_chunk.samples_per_chunk)\n chunk_offset = Math.min(chunk_offset, last_chunk.chunk_count)\n let last_chunk_index = last_chunk.first_chunk + chunk_offset\n let last_chunk_first_sample = last_chunk.first_sample + last_chunk.samples_per_chunk * chunk_offset\n return {\n chunk_index: last_chunk_index,\n samples_offset: [last_chunk_first_sample, sample_order]\n }\n } else {\n let chunk_offset = Math.floor((sample_order - chunk_start.first_sample) / chunk_start.samples_per_chunk)\n let chunk_offset_sample = chunk_start.first_sample + chunk_offset * chunk_start.samples_per_chunk\n chunk_index = chunk_start.first_chunk + chunk_offset\n samples_offset = [chunk_offset_sample, sample_order]\n return {\n chunk_index: chunk_index,\n samples_offset\n }\n }\n}\n\nutil.seekSampleOffset = function (stsc, stco, stsz, order, mdatStart, stscObj) {\n let chunkOffset = util.stscOffset(stsc, order + 1, stscObj)\n let result = stco.entries[chunkOffset.chunk_index - 1] + util.sum.apply(null, stsz.entries.slice(chunkOffset.samples_offset[0] - 1, chunkOffset.samples_offset[1] - 1)) - mdatStart\n if (result === undefined) {\n throw `result=${result},stco.length=${stco.entries.length},sum=${util.sum.apply(null, stsz.entries.slice(0, order))}`\n } else if (result < 0) {\n throw `result=${result},stco.length=${stco.entries.length},sum=${util.sum.apply(null, stsz.entries.slice(0, order))}`\n }\n return result\n}\n\nutil.seekSampleTime = function (stts, cttsObj, order) {\n let time; let duration; let count = 0; let startTime = 0; let offset = 0\n stts.entry.every(item => {\n duration = item.sampleDuration\n if (order < count + item.sampleCount) {\n time = startTime + (order - count) * item.sampleDuration\n return false\n } else {\n count += item.sampleCount\n startTime += item.sampleCount * duration\n return true\n }\n })\n if (cttsObj) {\n if (cttsObj[order]) {\n offset = cttsObj[order]\n }\n }\n if (!time) {\n time = startTime + (order - count) * duration\n }\n return {time, duration, offset}\n}\n\nutil.seekOrderSampleByTime = function (stts, timeScale, time) {\n let startTime = 0; let order = 0; let count = 0; let itemDuration\n stts.every((item, idx) => {\n itemDuration = item.sampleCount * item.sampleDuration / timeScale\n if (time <= startTime + itemDuration) {\n order = count + Math.ceil((time - startTime) * timeScale / item.sampleDuration)\n startTime = startTime + Math.ceil((time - startTime) * timeScale / item.sampleDuration) * item.sampleDuration / timeScale\n return false\n } else {\n startTime += itemDuration\n count += item.sampleCount\n return true\n }\n })\n return {order, startTime}\n}\n\nutil.seekTrakDuration = function (trak, timeScale) {\n let stts = util.findBox(trak, 'stts'); let duration = 0\n stts.entry.forEach(item => {\n duration += item.sampleCount * item.sampleDuration\n })\n return Number(duration / timeScale).toFixed(4)\n}\n\nutil.StringToArrayBuffer = function (str) {\n let arr = new ArrayBuffer(str.length)\n let view = new Uint8Array(arr)\n for (let i = 0; i < str.length; i++) {\n view[i] = str.charCodeAt(i)\n }\n return arr\n}\n/**\n * Convert a hex string to a Uint8Array.\n * @param {string} str\n * @return {!Uint8Array}\n * @export\n */\nutil.fromHex = function (str) {\n let arr = new Uint8Array(str.length / 2)\n for (let i = 0; i < str.length; i += 2) {\n arr[i / 2] = window.parseInt(str.substr(i, 2), 16)\n }\n return arr\n}\nutil.fromCharCode = function (array) {\n let max = 16000\n let ret = ''\n for (let i = 0; i < array.length; i += max) {\n let subArray = array.subarray(i, i + max)\n ret += String.fromCharCode.apply(null, subArray)\n }\n\n return ret\n}\nutil.ArrayBufferToString = function (arr) {\n let str = ''\n let view = new Uint8Array(arr)\n for (let i = 0; i < view.length; i++) {\n str += String.fromCharCode(view[i])\n }\n return str\n}\nutil.Base64ToHex = function (str) {\n let bin = window.atob(str.replace(/-/g, '+').replace(/_/g, '/'))\n let res = ''\n for (let i = 0; i < bin.length; i++) {\n res += ('0' + bin.charCodeAt(i).toString(16)).substr(-2)\n }\n return res\n}\n\n/**\n * Convert a Uint8Array to a base64 string. The output will always use the\n * alternate encoding/alphabet also known as \"base64url\".\n * @param {!Uint8Array} arr\n * @param {boolean=} padding If true, pad the output with equals signs.\n * Defaults to true.\n * @return {string}\n * @export\n */\nutil.toBase64 = function (arr, padding) {\n // btoa expects a \"raw string\" where each character is interpreted as a byte.\n let bytes = util.fromCharCode(arr)\n padding = (padding === undefined) ? true : padding\n let base64 = window.btoa(bytes).replace(/\\+/g, '-').replace(/\\//g, '_')\n return padding ? base64 : base64.replace(/=*$/, '')\n}\n\nutil.toUTF8 = function (str) {\n // http://stackoverflow.com/a/13691499\n // Converts the given string to a URI encoded string. If a character falls\n // in the ASCII range, it is not converted; otherwise it will be converted to\n // a series of URI escape sequences according to UTF-8.\n // Example: 'g#€' -> 'g#%E3%82%AC'\n let encoded = encodeURIComponent(str)\n // Convert each escape sequence individually into a character. Each escape\n // sequence is interpreted as a code-point, so if an escape sequence happens\n // to be part of a multi-byte sequence, each byte will be converted to a\n // single character.\n // Example: 'g#%E3%82%AC' -> '\\x67\\x35\\xe3\\x82\\xac'\n let utf8 = unescape(encoded)\n\n let result = new Uint8Array(utf8.length)\n for (let i = 0; i < utf8.length; ++i) {\n result[i] = utf8.charCodeAt(i)\n }\n return result.buffer\n}\n\nutil.bufferToString = function (value) {\n return ('0' + (Number(value).toString(16))).slice(-2).toUpperCase()\n}\nutil.strToBuf = function (str) {\n let buffer = []\n for (let i = 0; i < str.length; i = i + 2) {\n buffer.push(\n parseInt(str[i] + str[i + 1], 16)\n )\n }\n return new Uint8Array(buffer)\n}\nutil.str2hex = function (str) {\n if (str === '') {\n return ''\n }\n let arr = []\n for (let i = 0; i < str.length; i++) {\n arr.push(str.charCodeAt(i))\n }\n return arr\n}\nutil.parse = function (a) {\n if (!Array.isArray(a)) {\n let arr = []\n let value = ''\n for (let i = 0; i < a.length; i++) {\n if (i % 2) {\n value = a[i - 1] + a[ i ]\n arr.push(parseInt(value, 16))\n value = ''\n }\n }\n return arr\n }\n return a.map(item => { return parseInt(item, 16) })\n}\nexport default util\n","import EventEmitter from 'event-emitter'\nimport Errors from '../error'\n\nclass MSE {\n constructor (codecs = 'video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"', mediaType) {\n EventEmitter(this)\n this.codecs = codecs\n this.mediaSource = new window.MediaSource(mediaType)\n this.url = window.URL.createObjectURL(this.mediaSource)\n this.queue = []\n this.updating = false\n this._hasDestroyed = false;\n this._hasEndOfStream = false;\n this._hasEndOfStreamSuccess = false;\n this._onSourceOpen = this._onSourceOpen.bind(this);\n this._onMediaSourceClose = this._onMediaSourceClose.bind(this);\n this._onSourceBufferError = this._onSourceBufferError.bind(this);\n this._onSourceBufferUpdateEnd = this._onSourceBufferUpdateEnd.bind(this);\n this.mediaSource.addEventListener('sourceopen', this._onSourceOpen);\n this.mediaSource.addEventListener('sourceclose', this._onMediaSourceClose);\n }\n\n _onSourceOpen(){\n let self = this;\n self.sourceBuffer = self.mediaSource.addSourceBuffer(self.codecs);\n self.sourceBuffer.addEventListener('error', this._onSourceBufferError);\n self.sourceBuffer.addEventListener('updateend', this._onSourceBufferUpdateEnd);\n self.emit('sourceopen')\n }\n\n _onSourceBufferError(e){\n this.emit('error', new Errors('mse', '', {line: 16, handle: '[MSE] constructor sourceopen', msg: e.message}))\n }\n\n _onSourceBufferUpdateEnd(){\n let self = this;\n self.emit('updateend');\n if(this._hasEndOfStream && !this._hasEndOfStreamSuccess){\n this._endOfStream();\n return;\n }\n let buffer = self.queue.shift()\n if (buffer && self.sourceBuffer && self.sourceBuffer.updating === false && self.state === 'open') {\n self.sourceBuffer.appendBuffer(buffer)\n } else if(buffer) {\n self.queue.unshift(buffer);\n }\n }\n\n _onMediaSourceClose(){\n this.emit('sourceclose')\n }\n\n get state () {\n return this.mediaSource.readyState\n }\n\n get duration () {\n return this.mediaSource.duration\n }\n\n set duration (value) {\n this.mediaSource.duration = value\n }\n\n appendBuffer (buffer) {\n if(!buffer) return;\n \n let sourceBuffer = this.sourceBuffer\n if (sourceBuffer && !sourceBuffer.updating && this.state === 'open') {\n sourceBuffer.appendBuffer(buffer)\n return true\n } else {\n this.queue.push(buffer)\n return false\n }\n }\n\n removeBuffer (start, end) {\n let sourceBuffer = this.sourceBuffer\n if (sourceBuffer && sourceBuffer.updating === false && this.state === 'open') {\n sourceBuffer.remove(start, end)\n }\n }\n\n endOfStream () {\n this._hasEndOfStream = true;\n if (this.mediaSource.readyState === 'open') {\n if(this.sourceBuffer && !this.sourceBuffer.updating){\n this._hasEndOfStreamSuccess = true;\n this._endOfStream();\n }\n \n }\n }\n\n _endOfStream(){\n this.queue = [];\n if(this.mediaSource.readyState === 'open'){\n this.mediaSource.endOfStream()\n }\n }\n\n static isSupported (codecs) {\n return window.MediaSource && window.MediaSource.isTypeSupported(codecs)\n }\n\n destroy(){\n if(this._hasDestroyed){\n return;\n }\n this._hasDestroyed = true;\n window.URL.revokeObjectURL(this.url);\n if(this.mediaSource) {\n this.mediaSource.removeEventListener('sourceclose', this._onMediaSourceClose);\n this.mediaSource.removeEventListener('sourceopen', this._onSourceOpen);\n }\n if(this.sourceBuffer) {\n this.sourceBuffer.removeEventListener('error', this._onSourceBufferError);\n this.sourceBuffer.removeEventListener('updateend', this._onSourceBufferUpdateEnd);\n }\n }\n}\n\nexport default MSE\n","exports.isMSBrowser = function () {\n let ua = window.navigator.userAgent\n let msie = ua.indexOf('MSIE ')\n let trident = ua.indexOf('Trident/')\n return msie > 0 || trident > 0\n}\n\nexports.isMediaSourceSupported = function () {\n const mediaSource = (window.MediaSource = window.MediaSource || window.WebKitMediaSource)\n return mediaSource && typeof mediaSource.isTypeSupported === 'function'\n}\n\nexports.isSupported = function () {\n return exports.isMediaSourceSupported()\n && !exports.isMSBrowser() \n}\n\nexports.isSupportedWithXgmse = function () {\n return !exports.isMSBrowser() \n}\n","\nexport default class ProxyPromise {\n \n constructor() {\n let resolvePromise;\n let rejectPromise;\n\n const promise = new Promise(((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n }));\n\n const publicPromise = promise\n publicPromise.resolve = resolvePromise;\n publicPromise.reject = rejectPromise;\n\n return publicPromise;\n }\n\n\n /** @param {T=} value */\n resolve(value) {}\n\n\n /** @param {*=} reason */\n reject(reason) {}\n};\n","export default class Timer{\n \n constructor(onTick) {\n this.onTick_ = onTick;\n this.cancelPending_ = null;\n }\n\n tickAfter(delayInSeconds, callback = null) {\n \n this.stop();\n let alive = true;\n let timeoutId = null;\n \n this.cancelPending_ = () => {\n window.clearTimeout(timeoutId);\n alive = false;\n };\n \n const onTick = () => {\n if (alive) {\n this.onTick_();\n if(callback){\n callback();\n }\n }\n };\n \n timeoutId = window.setTimeout(onTick, delayInSeconds * 1000);\n \n return this;\n }\n\n tickEvery(seconds){\n this.tickAfter(seconds, ()=>{\n this.tickEvery(seconds);\n })\n }\n\n\n stop() {\n if (this.cancelPending_) {\n this.cancelPending_();\n this.cancelPending_ = null;\n }\n }\n }\n","/***\n * 音视频源数据不对齐或者 关键视频帧存在cts,导致浏览器播不动场景下\n *\n * reference shakaplayer, 借鉴shakaplayer,根据项目逻辑进行改造\n */\n\nimport IntervalTimer from './util/intervalTimer';\nexport default class GapJump {\n \n constructor(player, config) {\n this.player = player;\n this.mediaElem = player.video;\n this.config = config;\n this.timer = new IntervalTimer();\n\n this.prevReadyState = this.mediaElem.readyState;\n this.didFireLargeGap = false;\n this.seekingEventReceived = false;\n this.segmentAppended = false;\n this.onWaitFunc = this._onWaiting.bind(this);\n this.onPlayFunc = this._onPlay.bind(this);\n this.isSafari = /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n if (this.config.useGapJump !== false) {\n this._start();\n }\n\n this.hasPlayed = false;\n }\n _onWaiting() {\n this.onGapJump('_onWaiting');\n }\n\n _onPlay() {\n this.hasPlayed = true;\n }\n\n _start() {\n this.mediaElem.addEventListener('waiting', this.onWaitFunc);\n this.mediaElem.addEventListener('play', this.onPlayFunc);\n //250ms\n this.timer.repeat(() => {\n this.onGapJump('repeat');\n }, 250);\n }\n\n onSegmentAppend() {\n this.segmentAppended = true;\n this.onGapJump('onSegmentAppend');\n }\n \n onSeeking() {\n this.seekingEventReceived = true;\n this.segmentAppended = false;\n this.didFireLargeGap = false;\n }\n \n onGapJump(type) {\n if (this.mediaElem.readyState === HTMLMediaElement.HAVE_NOTHING) {\n return;\n }\n if (this.mediaElem.seeking) {\n if (!this.seekingEventReceived) { return; }\n } else {\n this.seekingEventReceived = false;\n }\n\n if (this.mediaElem.paused && this.mediaElem.currentTime !== 0 && this.hasPlayed) {\n return;\n }\n if (this.mediaElem.readyState !== this.prevReadyState) {\n this.didFireLargeGap = false;\n this.prevReadyState = this.mediaElem.readyState;\n }\n\n const buffered = this.mediaElem.buffered;\n const smallGapLimit = this.config.smallGapLimit || 0.5;\n const gapDetectionThreshold = this.config.gapDetectionThreshold || 0.1;\n const currentTime = this.mediaElem.currentTime;\n const idx = this._getIndex(buffered, currentTime, gapDetectionThreshold);\n if (idx === null) {\n return;\n }\n if (idx === 0 && !this.segmentAppended) {\n return;\n }\n\n const jumpTo = buffered.start(idx) + 0.1;\n const seekEnd = this.mediaElem.duration;\n\n if (jumpTo > seekEnd) {\n return;\n }\n const jumpSize = jumpTo - currentTime;\n const isGapSmall = jumpSize <= smallGapLimit;\n let jumpLargeGap = false;\n if (jumpSize < GapJump.BROWSER_GAP_TOLERANCE) {\n return;\n }\n //对于分片缺失,目前未处理\n if (isGapSmall) {\n if (this.config.disableGapSetPosition !== true) {\n this.mediaElem.currentTime = this.isSafari ? jumpTo + 0.1 : jumpTo;\n }\n this.player && this.player.emit('detectGap');\n }\n\n }\n \n _getIndex(buffered, time, threshold) {\n if (!buffered || !buffered.length) {\n return null;\n }\n if (buffered.length === 1 && buffered.end(0) - buffered.start(0) < 1e-6) {\n return null;\n }\n const bufferedInfo = this._getBuffered(buffered);\n let idx = null;\n for (let i = 0; i < bufferedInfo.length; i++) {\n let item = bufferedInfo[i];\n if (item.start > time && (i === 0 || bufferedInfo[i - 1].end - time <= threshold)) {\n idx = i;\n break;\n }\n }\n return idx;\n }\n \n _getBuffered(b) {\n if (!b) {\n return [];\n }\n const ret = [];\n for (let i = 0; i < b.length; i++) {\n ret.push({\n start: b.start(i),\n end: b.end(i)\n });\n }\n return ret;\n }\n\n destroy() {\n this.mediaElem.removeEventListener('waiting', this.onWaitFunc);\n this.mediaElem.removeEventListener('play', this.onPlayFunc);\n this.timer.clear();\n this.timer = null;\n }\n }\n \n GapJump.BROWSER_GAP_TOLERANCE = 0.001;\n ","// 替代setInterval\nclass IntervalTimer {\n constructor() {\n this.timeID = null;\n this.func = null;\n }\n\n repeat(func, ms) {\n this.timeID = 1;\n this.repeatInterval(func, ms);\n }\n\n repeatInterval(func, ms) {\n if (!this.timeID) return;\n if (this.func === null) {\n this.func = func;\n }\n\n if (this.func !== func) {\n return;\n }\n if (this.timeID) clearTimeout(this.timeID);\n this.timeID = null;\n this.timeID = setTimeout(() => {\n func();\n this.repeatInterval(func, ms);\n }, ms);\n }\n\n clear() {\n clearTimeout(this.timeID);\n this.timeID = null;\n }\n}\n\nexport default IntervalTimer;\n"],"sourceRoot":""}