xgplayer-mp4 2.0.0 → 2.0.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/parse/box.js","webpack:///./src/parse/stream.js","webpack:///./src/error.js","webpack:///external \"Player\"","webpack:///./node_modules/event-emitter/index.js","webpack:///./node_modules/es5-ext/object/is-value.js","webpack:///./src/parse/date.js","webpack:///./src/parse/box/sps.js","webpack:///./src/constants.js","webpack:///./node_modules/type/value/is.js","webpack:///./node_modules/concat-typed-array/lib/index.js","webpack:///./src/parse/box/golomb.js","webpack:///./src/fmp4/buffer.js","webpack:///./src/media/task.js","webpack:///./src/index.js","webpack:///./src/mp4.js","webpack:///./node_modules/d/index.js","webpack:///./node_modules/type/plain-function/is.js","webpack:///./node_modules/type/function/is.js","webpack:///./node_modules/type/prototype/is.js","webpack:///./node_modules/type/object/is.js","webpack:///./node_modules/es5-ext/object/assign/index.js","webpack:///./node_modules/es5-ext/object/assign/is-implemented.js","webpack:///./node_modules/es5-ext/object/assign/shim.js","webpack:///./node_modules/es5-ext/object/keys/index.js","webpack:///./node_modules/es5-ext/object/keys/is-implemented.js","webpack:///./node_modules/es5-ext/object/keys/shim.js","webpack:///./node_modules/es5-ext/function/noop.js","webpack:///./node_modules/es5-ext/object/valid-value.js","webpack:///./node_modules/es5-ext/object/normalize-options.js","webpack:///./node_modules/es5-ext/string/#/contains/index.js","webpack:///./node_modules/es5-ext/string/#/contains/is-implemented.js","webpack:///./node_modules/es5-ext/string/#/contains/shim.js","webpack:///./node_modules/es5-ext/object/valid-callable.js","webpack:///./src/parse/index.js","webpack:///./node_modules/concat-typed-array/lib/concat.js","webpack:///./src/parse/box/vmhd.js","webpack:///./src/parse/box/url.js","webpack:///./src/parse/box/udta.js","webpack:///./src/parse/box/tkhd.js","webpack:///./src/parse/box/tfhd.js","webpack:///./src/parse/box/stts.js","webpack:///./src/parse/box/stsz.js","webpack:///./src/parse/box/stss.js","webpack:///./src/parse/box/stsd.js","webpack:///./src/parse/box/stsc.js","webpack:///./src/parse/box/stco.js","webpack:///./src/parse/box/smhd.js","webpack:///./src/parse/box/SLConfigDescriptor.js","webpack:///./src/parse/box/schm.js","webpack:///./src/parse/box/pasp.js","webpack:///./src/parse/box/mvhd.js","webpack:///./src/parse/box/MP4ESDescrTag.js","webpack:///./src/parse/box/MP4DecSpecificDescrTag.js","webpack:///./src/parse/box/MP4DecConfigDescrTag.js","webpack:///./src/parse/box/mp4a.js","webpack:///./src/parse/box/mdhd.js","webpack:///./src/parse/box/mdat.js","webpack:///./src/parse/box/iods.js","webpack:///./src/parse/box/hvcC.js","webpack:///./src/parse/box/hvc1.js","webpack:///./src/parse/box/hdlr.js","webpack:///./src/parse/box/ftyp.js","webpack:///./src/parse/box/frma.js","webpack:///./src/parse/box/esds.js","webpack:///./src/parse/box/elst.js","webpack:///./src/parse/box/dref.js","webpack:///./src/parse/box/ctts.js","webpack:///./src/parse/box/co64.js","webpack:///./src/parse/box/btrt.js","webpack:///./src/parse/box/avcC.js","webpack:///./src/parse/box/avc1.js","webpack:///./src/fmp4/mp4.js","webpack:///./src/util/getHeaders.js","webpack:///./src/util/index.js","webpack:///./src/media/mse.js","webpack:///./src/util/isSupport.js","webpack:///./src/util/proxyPromise.js","webpack:///./src/util/timer.js","webpack:///./src/gap_jump.js","webpack:///./src/util/intervalTimer.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","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","this","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","require","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","offsetTime","duration","log","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","root","addClass","removeClass","buffered","initPromise","_addPendingPromise","resolve","_hasInited","_removePendingPromise","mp5","MP4","preloadSize","timeRage","curTime","getBufferedRange","buffered2","removeBuffer","parse","logParams","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","PRELOAD_NEXT","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","audioSenc","videoSenc","hvc1Data","hvcCData","pixelRatio","isArray","trak","hdlr","mdhd","codecBox","handleType","avcC","hvcC","senc","samples","tkhd","toHex","profileCompatibility","AVCLevelIndication","sequence","spsInfo","map","Number","hvc1","profileCompatibilityIndications","esds","mp4a","ESDescriptor","typeID","EScode","enca","mdat","_boxes","videoDuration","seekTrakDuration","audioDuration","mdatStart","vf","videoKeyFrames","videoKeyFramesLength","createTime","modifyTime","timeScale","audioConfig","stss","_stssObj","getData","parsed","moovStart","boxes","Parser","nextBox","concat","catch","stsc","stsz","stts","stco","cttsObj","_cttsObj","stscObj","_stscVideoObj","_stscAudioObj","undefined","entries","seekSampleTime","offset","seekSampleOffset","write","FMP4","ftyp","fragIndex","getFragmentIdx","getFragRange","timeStart","round","videoFrames","nowTime","nextTime","MAX_SAFE_INTEGER","audioFrames","audioKeyFrames","startTime","preloadCacheBuffer","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":[" \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 = Player;","'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 \"PLAYER_LOG\" : \"PLAYER_LOG\",\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 player.log('endoffset time', offsetTime)\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.log('playerId', this._playerId)\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.log('invoke player.src', 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 // player.log('_replay play')\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 player.log('initPromise', 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', JSON.parse(JSON.stringify(player.logParams)))\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 this.log('online hasInit:', this._hasInited)\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 this.log('offline')\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 player.log('player sourceopen appendBuffer')\n const initSeg = mp4.packMeta(mp4.meta);\n mse.appendBuffer(initSeg)\n Player.util.once(mse, 'updateend', function () {\n player.log('player once updateend')\n player._loadData();\n })\n })\n Player.util.on(mse, 'error', function (e) {\n promise.reject(e)\n })\n player.log('moovReady, initMp4 resolve');\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 player.log('loadData, player.mp4 null')\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 player.log('可以预加载了')\n player.emit(PRELOAD_NEXT);\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] || item[1] === -1)) {\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.log('_replay play')\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 player.log('destroy clear')\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 player.log('error task cancel')\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.log('_replay canplay')\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 || item[1] === -1)) {\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.log('player._onTimeUpdate')\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 player.log(`unloadVideo src ${player.video.src}`)\n if (player.video && player.video.src) {\n player.video.removeAttribute('src'); // empty source\n player.video.load();\n }\n } catch (error) {\n player.log('unloadVideo error', error)\n }\n }\n\n _addPendingPromise(p){\n this._pendingPromises.push(p);\n }\n\n _removePendingPromise(p){\n this.log('removePendingPromise', p.id)\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 this.log('player destroyed!!')\n return;\n }\n this._allInitPromise.then(()=>{\n this.log('enableAutoBuffer true')\n this._startProgress();\n })\n }else{\n this._stopProgress();\n this.log('enableAutoBuffer false')\n }\n }\n\n destroy(){\n this.log('destroy', this._playerId)\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.log('initFail, reason:', reason);\n this.emit(CUSTOM_EVENTS.INIT_FAIL, reason);\n }\n\n emitParseError(){\n this.log('parseError');\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.log('MEDIA_EXPIRED')\n self.player && self.player.onMediaExpired();\n });\n\n Player.util.once(task, TASK_ERROR, params => {\n //非403状态或者非200,206状态逻辑\n self.log('task error, reason', params.code, 'url', params.url, 'readyState', params.readyState, status)\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 audioSenc,\n videoSenc\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 if (codecBox.type === 'encv') {\n // 加密非 h265 的视频\n if (!hvcC) {\n this.emit('error', new Errors('parse', '', { line: 112, handle: '[MP4] video is non-h264', url: self.url }))\n return\n }\n const senc = util.findBox(trak, 'senc')\n videoSenc = senc.samples\n }\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 if (enca) {\n let senc = util.findBox(trak, 'senc')\n channelCount = enca.channelCount\n sampleRate = enca.sampleRate\n audioSenc = senc.samples\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 -1\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 videoSenc,\n audioSenc,\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\n this.emit('metaReady', this.meta)\n }\n\n /**\n * [init 实例的初始化,主要是获取视频的MOOV元信息]\n */\n init () {\n let self = this\n self.log('mp4 init')\n self.getData().then(res => {\n self.log('mp4 init success')\n let parsed\n let moovStart = 0\n let moov\n let boxes\n\n try {\n parsed = new Parser(res)\n } catch (e) {\n // console.error(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\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 })\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 this.log('seek: ', time)\n let timeStart = Math.round(time * this.meta.videoTimeScale)\n let fragIndex\n let videoFrames = this.videoKeyFrames\n this.log(timeStart)\n this.log(videoFrames)\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 this.log('seek video fragIndex: ', fragIndex)\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 this.log('seek audio fragIndex: ', fragIndex)\n }\n return fragIndex;\n }\n\n seek (time) {\n let fragIndex = this.getFragmentIdx(time);\n this.timeRage[fragIndex].downloaded = true;\n if(fragIndex < this.preloadCacheBuffer.length) {\n return new Promise((resolve, reject) => {\n resolve(this.preloadCacheBuffer[fragIndex].buffer)\n })\n } else 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 this.log('loadFragment fragIndex: ', 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 // Convert the header string into an array\n // of individual headers\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 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":""}
1
+ {"version":3,"sources":["webpack://Mp4Player/webpack/bootstrap","webpack://Mp4Player/./src/parse/box.js","webpack://Mp4Player/./src/parse/stream.js","webpack://Mp4Player/./src/error.js","webpack://Mp4Player/external \"Player\"","webpack://Mp4Player/./node_modules/event-emitter/index.js","webpack://Mp4Player/./node_modules/es5-ext/object/is-value.js","webpack://Mp4Player/./src/parse/date.js","webpack://Mp4Player/./src/parse/box/sps.js","webpack://Mp4Player/./src/constants.js","webpack://Mp4Player/./node_modules/type/value/is.js","webpack://Mp4Player/./node_modules/concat-typed-array/lib/index.js","webpack://Mp4Player/./src/parse/box/golomb.js","webpack://Mp4Player/./src/fmp4/buffer.js","webpack://Mp4Player/./src/media/task.js","webpack://Mp4Player/./src/index.js","webpack://Mp4Player/./src/mp4.js","webpack://Mp4Player/./node_modules/d/index.js","webpack://Mp4Player/./node_modules/type/plain-function/is.js","webpack://Mp4Player/./node_modules/type/function/is.js","webpack://Mp4Player/./node_modules/type/prototype/is.js","webpack://Mp4Player/./node_modules/type/object/is.js","webpack://Mp4Player/./node_modules/es5-ext/object/assign/index.js","webpack://Mp4Player/./node_modules/es5-ext/object/assign/is-implemented.js","webpack://Mp4Player/./node_modules/es5-ext/object/assign/shim.js","webpack://Mp4Player/./node_modules/es5-ext/object/keys/index.js","webpack://Mp4Player/./node_modules/es5-ext/object/keys/is-implemented.js","webpack://Mp4Player/./node_modules/es5-ext/object/keys/shim.js","webpack://Mp4Player/./node_modules/es5-ext/function/noop.js","webpack://Mp4Player/./node_modules/es5-ext/object/valid-value.js","webpack://Mp4Player/./node_modules/es5-ext/object/normalize-options.js","webpack://Mp4Player/./node_modules/es5-ext/string/#/contains/index.js","webpack://Mp4Player/./node_modules/es5-ext/string/#/contains/is-implemented.js","webpack://Mp4Player/./node_modules/es5-ext/string/#/contains/shim.js","webpack://Mp4Player/./node_modules/es5-ext/object/valid-callable.js","webpack://Mp4Player/./src/parse/index.js","webpack://Mp4Player/./node_modules/concat-typed-array/lib/concat.js","webpack://Mp4Player/./src/parse/box/vmhd.js","webpack://Mp4Player/./src/parse/box/url.js","webpack://Mp4Player/./src/parse/box/udta.js","webpack://Mp4Player/./src/parse/box/tkhd.js","webpack://Mp4Player/./src/parse/box/tfhd.js","webpack://Mp4Player/./src/parse/box/stts.js","webpack://Mp4Player/./src/parse/box/stsz.js","webpack://Mp4Player/./src/parse/box/stss.js","webpack://Mp4Player/./src/parse/box/stsd.js","webpack://Mp4Player/./src/parse/box/stsc.js","webpack://Mp4Player/./src/parse/box/stco.js","webpack://Mp4Player/./src/parse/box/smhd.js","webpack://Mp4Player/./src/parse/box/SLConfigDescriptor.js","webpack://Mp4Player/./src/parse/box/schm.js","webpack://Mp4Player/./src/parse/box/pasp.js","webpack://Mp4Player/./src/parse/box/mvhd.js","webpack://Mp4Player/./src/parse/box/MP4ESDescrTag.js","webpack://Mp4Player/./src/parse/box/MP4DecSpecificDescrTag.js","webpack://Mp4Player/./src/parse/box/MP4DecConfigDescrTag.js","webpack://Mp4Player/./src/parse/box/mp4a.js","webpack://Mp4Player/./src/parse/box/mdhd.js","webpack://Mp4Player/./src/parse/box/mdat.js","webpack://Mp4Player/./src/parse/box/iods.js","webpack://Mp4Player/./src/parse/box/hvcC.js","webpack://Mp4Player/./src/parse/box/hvc1.js","webpack://Mp4Player/./src/parse/box/hdlr.js","webpack://Mp4Player/./src/parse/box/ftyp.js","webpack://Mp4Player/./src/parse/box/frma.js","webpack://Mp4Player/./src/parse/box/esds.js","webpack://Mp4Player/./src/parse/box/elst.js","webpack://Mp4Player/./src/parse/box/dref.js","webpack://Mp4Player/./src/parse/box/ctts.js","webpack://Mp4Player/./src/parse/box/co64.js","webpack://Mp4Player/./src/parse/box/btrt.js","webpack://Mp4Player/./src/parse/box/avcC.js","webpack://Mp4Player/./src/parse/box/avc1.js","webpack://Mp4Player/./src/fmp4/mp4.js","webpack://Mp4Player/./src/util/getHeaders.js","webpack://Mp4Player/./src/util/index.js","webpack://Mp4Player/./src/media/mse.js","webpack://Mp4Player/./src/util/isSupport.js","webpack://Mp4Player/./src/util/proxyPromise.js","webpack://Mp4Player/./src/util/timer.js","webpack://Mp4Player/./src/gap_jump.js","webpack://Mp4Player/./src/util/intervalTimer.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","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","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","Box","this","headSize","size","type","subBox","start","stream","position","readUint32","String","fromCharCode","readUint8","readUint64","Errors","line","handle","msg","uuid","push","version","flags","end","parser","data","buffer","slice","byteLength","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","window","require","callable","apply","defineProperties","descriptor","configurable","writable","on","listener","__ee__","once","self","off","arguments","__eeOnceListener__","listeners","candidate","length","splice","emit","args","Array","methods","descriptors","base","_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","profile_string","readUEG","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","parScale","aspect_ratio_idc","num_units_in_tick","time_scale","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","fpsDen","codecWidth","codecHeight","presentWidth","presentHeight","profile","level","bitDepth","chromaFormat","parRatio","frameRate","fpsNum","refSampleDuration","timescale","CUSTOM_EVENTS","TASK_ERROR","TASK_ERROR_TYPES","ERROR","CODE_ERROR","CANCEL","_concat2","_interopRequireDefault","obj","default","TAG","_buffer","_bufferIndex","_totalBytes","_totalBits","_currentWord","_currentWordBitsLeft","bufferBytesLeft","bytesRead","min","word","set","subarray","bits","valu","Error","_fillCurrentWord","zeroCount","_skipLeadingZero","leadingZeros","Buffer","forEach","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","DESTROYED","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","initPromise","browser","hasClass","root","addClass","removeClass","buffered","_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","cacheMaxTime","canDownload","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","videoDuration","audioDuration","vf","videoKeyFramesLength","moov","moovBox","mvhd","findBox","traks","videoTrak","audioTrak","videoTimeScale","audioTimeScale","sps","pps","vps","channelCount","sampleRate","decoderConfig","hvc1Data","hvcCData","pixelRatio","isArray","trak","codecBox","esds","mp4a","ESDescriptor","hdlr","mdhd","handleType","hvcC","avcC","tkhd","toHex","profileCompatibility","AVCLevelIndication","sequence","spsInfo","map","Number","hvc1","profileCompatibilityIndications","typeID","EScode","mdat","_boxes","seekTrakDuration","mdatStart","videoKeyFrames","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","audioFrames","timeStart","round","videoFrames","nowTime","nextTime","MAX_SAFE_INTEGER","audioKeyFrames","startTime","loadFragment","audioNextFrame","audioFrame","getSamplesByOrders","order","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","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_arr","vmhd","flag","graphicsmode","readUint16","opcolor","location","udta","matrix","modify","trackID","reserverd","layer","readInt16","alternate_group","volume","tfhd","baseDataOffsetPresent","track_id","sampleDescriptionIndexPresent","defaultSampleDurationPresent","defaultSampleSizePresent","defaultSampleFlagsPresent","baseDataOffset","sampleDescriptionIndex","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","sampleDuration","sampleSize","stsd","entryCount","first_chunk","sample_desc_index","preEntry","pre","first_sample","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","compatibleBrands","major_brand","minor_version","compatible_brands","frma","elst","entry_count","segment_duration","media_time","readInt32","media_rate_integer","media_rate_fraction","dref","read","co64","btrt","bufferSizeDB","maxBitrate","avgBitrate","sequenceLength","lengthSizeMinusOne","numOfSequenceParameterSets","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","getResponseHeaders","headerMap","getAllResponseHeaders","trim","split","parts","header","shift","pad","charstr","maxlen","chars","substring","hex","rst","sample_order","chunk_offset_sample","chunk_offset","chunk_start","chunk_index","samples_offset","last_chunk","pop","chunkOffset","stscOffset","sum","itemDuration","arr","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","_endOfStream","state","unshift","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","smallGapLimit","jumpTo","jumpSize","paused","gapDetectionThreshold","_getIndex","BROWSER_GAP_TOLERANCE","disableGapSetPosition","threshold","bufferedInfo","_getBuffered","b","timeID","func","ms","repeatInterval"],"mappings":"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","file":"index.js","sourcesContent":[" \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","(function() { module.exports = window[\"Player\"]; }());","'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\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":""}