xgplayer-mp4 1.2.4 → 2.0.2

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.
Files changed (84) hide show
  1. package/browser/index.js +1 -1
  2. package/browser/index.js.map +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/package.json +5 -4
  6. package/src/constants.js +14 -0
  7. package/src/fmp4/buffer.js +6 -0
  8. package/src/fmp4/mp4.js +181 -84
  9. package/src/gap_jump.js +151 -0
  10. package/src/index.js +550 -315
  11. package/src/media/mse.js +77 -22
  12. package/src/media/task.js +68 -17
  13. package/src/mp4.js +284 -268
  14. package/src/parse/box/MP4DecConfigDescrTag.js +3 -0
  15. package/src/parse/box/MP4DecSpecificDescrTag.js +4 -0
  16. package/src/parse/box/avcC.js +4 -1
  17. package/src/parse/box/elst.js +0 -13
  18. package/src/parse/box/esds.js +9 -4
  19. package/src/parse/box/frma.js +10 -0
  20. package/src/parse/box/golomb.js +88 -0
  21. package/src/parse/box/hvc1.js +30 -0
  22. package/src/parse/box/hvcC.js +55 -0
  23. package/src/parse/box/pasp.js +2 -3
  24. package/src/parse/box/schm.js +18 -0
  25. package/src/parse/box/sps.js +286 -0
  26. package/src/parse/box/stsz.js +6 -1
  27. package/src/parse/box/tfhd.js +43 -0
  28. package/src/parse/box.js +5 -1
  29. package/src/parse/stream.js +4 -0
  30. package/src/util/getHeaders.js +18 -0
  31. package/src/util/index.js +138 -20
  32. package/src/util/intervalTimer.js +36 -0
  33. package/src/util/isSupport.js +20 -0
  34. package/src/util/proxyPromise.js +27 -0
  35. package/src/util/timer.js +46 -0
  36. package/src/util/xhr.js +46 -0
  37. package/version.json +1 -1
  38. package/webpack.config.js +45 -39
  39. package/src/util/download.js +0 -13
  40. package/src/write/box/MP4DecConfigDescrTag.js +0 -21
  41. package/src/write/box/MP4DecSpecificDescrTag.js +0 -19
  42. package/src/write/box/MP4ESDescrTag.js +0 -19
  43. package/src/write/box/SLConfigDescriptor.js +0 -16
  44. package/src/write/box/avc1.js +0 -33
  45. package/src/write/box/avcC.js +0 -32
  46. package/src/write/box/btrt.js +0 -14
  47. package/src/write/box/co64.js +0 -17
  48. package/src/write/box/ctts.js +0 -19
  49. package/src/write/box/dref.js +0 -25
  50. package/src/write/box/elst.js +0 -27
  51. package/src/write/box/esds.js +0 -11
  52. package/src/write/box/ftyp.js +0 -17
  53. package/src/write/box/hdlr.js +0 -15
  54. package/src/write/box/iods.js +0 -14
  55. package/src/write/box/mdat.js +0 -5
  56. package/src/write/box/mdhd.js +0 -27
  57. package/src/write/box/mehd.js +0 -12
  58. package/src/write/box/mfhd.js +0 -12
  59. package/src/write/box/mfro.js +0 -14
  60. package/src/write/box/mp4a.js +0 -26
  61. package/src/write/box/mvhd.js +0 -34
  62. package/src/write/box/pasp.js +0 -10
  63. package/src/write/box/smhd.js +0 -17
  64. package/src/write/box/stco.js +0 -17
  65. package/src/write/box/stsc.js +0 -19
  66. package/src/write/box/stsd.js +0 -23
  67. package/src/write/box/stss.js +0 -17
  68. package/src/write/box/stsz.js +0 -18
  69. package/src/write/box/stts.js +0 -18
  70. package/src/write/box/tfdt.js +0 -16
  71. package/src/write/box/tfhd.js +0 -18
  72. package/src/write/box/tfra.js +0 -29
  73. package/src/write/box/tkhd.js +0 -44
  74. package/src/write/box/trex.js +0 -16
  75. package/src/write/box/trun.js +0 -40
  76. package/src/write/box/udta.js +0 -5
  77. package/src/write/box/url.js +0 -16
  78. package/src/write/box/vmhd.js +0 -19
  79. package/src/write/box/wide.js +0 -12
  80. package/src/write/box.js +0 -37
  81. package/src/write/buffer.js +0 -12
  82. package/src/write/index.js +0 -33
  83. package/src/write/stream.js +0 -99
  84. package/webpack.config.test.js +0 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/parse/box.js","webpack:///./src/parse/stream.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///./node_modules/core-js/modules/_core.js","webpack:///./node_modules/core-js/modules/_an-object.js","webpack:///./node_modules/core-js/modules/_is-object.js","webpack:///./src/error.js","webpack:///./node_modules/core-js/modules/_ctx.js","webpack:///./node_modules/core-js/modules/_a-function.js","webpack:///./node_modules/core-js/modules/_descriptors.js","webpack:///./node_modules/core-js/modules/_cof.js","webpack:///./node_modules/core-js/modules/_object-dp.js","webpack:///./node_modules/event-emitter/index.js","webpack:///./node_modules/es5-ext/object/is-value.js","webpack:///./src/parse/date.js","webpack:///./src/fmp4/buffer.js","webpack:///./node_modules/core-js/modules/_library.js","webpack:///./node_modules/core-js/modules/_classof.js","webpack:///./node_modules/core-js/modules/_shared.js","webpack:///./node_modules/core-js/modules/_uid.js","webpack:///./node_modules/core-js/modules/_export.js","webpack:///./node_modules/core-js/modules/_hide.js","webpack:///./node_modules/core-js/modules/_fails.js","webpack:///./node_modules/core-js/modules/_dom-create.js","webpack:///./node_modules/core-js/modules/_redefine.js","webpack:///./node_modules/core-js/modules/_has.js","webpack:///./node_modules/core-js/modules/_iterators.js","webpack:///./node_modules/core-js/modules/_to-length.js","webpack:///./node_modules/core-js/modules/_to-integer.js","webpack:///./node_modules/core-js/modules/_task.js","webpack:///./node_modules/core-js/modules/_new-promise-capability.js","webpack:///./node_modules/core-js/modules/_user-agent.js","webpack:///./node_modules/core-js/modules/_defined.js","webpack:///external \"Player\"","webpack:///./node_modules/type/value/is.js","webpack:///./node_modules/concat-typed-array/lib/index.js","webpack:///./src/media/task.js","webpack:///./src/index.js","webpack:///./node_modules/core-js/modules/es6.promise.js","webpack:///./node_modules/core-js/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/modules/_to-primitive.js","webpack:///./node_modules/core-js/modules/_property-desc.js","webpack:///./node_modules/core-js/modules/_function-to-string.js","webpack:///./node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/core-js/modules/_species-constructor.js","webpack:///./node_modules/core-js/modules/_invoke.js","webpack:///./node_modules/core-js/modules/_html.js","webpack:///./node_modules/core-js/modules/_microtask.js","webpack:///./node_modules/core-js/modules/_perform.js","webpack:///./node_modules/core-js/modules/_promise-resolve.js","webpack:///./node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/core-js/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/core-js/modules/es7.string.pad-start.js","webpack:///./node_modules/core-js/modules/_string-pad.js","webpack:///./node_modules/core-js/modules/_string-repeat.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:///./node_modules/deepmerge/dist/es.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/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/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/hdlr.js","webpack:///./src/parse/box/ftyp.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/index.js","webpack:///./src/media/mse.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","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","global","window","self","__g","store","require","uid","USE_SYMBOL","core","version","__e","isObject","it","TypeError","_Errors","vid","errd","url","Player","aFunction","fn","that","length","undefined","a","b","apply","arguments","toString","anObject","IE8_DOM_DEFINE","toPrimitive","dP","f","O","P","Attributes","e","on","once","off","emit","methods","descriptors","base","callable","defineProperties","descriptor","configurable","writable","listener","__eeOnceListener__","__ee__","listeners","candidate","splice","args","Array","_undefined","val","UTC","time","Date","setFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setTime","getTime","toLocaleString","Buffer","Uint8Array","forEach","console","error","cof","TAG","ARG","T","B","tryGet","callee","copyright","id","px","random","concat","hide","redefine","ctx","$export","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_PROTO","IS_BIND","target","S","expProto","U","W","R","createDesc","exec","document","is","createElement","has","SRC","$toString","TPL","split","inspectSource","safe","isFunction","join","toInteger","min","ceil","isNaN","defer","channel","port","invoke","html","cel","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","appendChild","removeChild","setTimeout","set","clear","PromiseCapability","C","resolve","reject","promise","$$resolve","$$reject","navigator","userAgent","obj","_concat","_concat2","default","Task","range","withCredentials","callback","xhr","XMLHttpRequest","responseType","open","setRequestHeader","onload","status","response","remove","onerror","message","onabort","update","abort","filter","idx","Queue","sended","wait","max","limit","readyState","send","cancel","install","player","sniffer","util","mainURL","backupURL","preloadTime","config","waiterTimer","rule","pluginRule","typeOf","src","_mainURL","_backupURL","loadData","currentTime","timer","clearTimeout","mp4","seek","then","mse","updating","appendBuffer","init","MP4","Promise","MSE","videoOnly","packMeta","some","browser","isSupported","_start","errorHandle","err","canDownload","bufferCache","_currentTime","switchURL","_replay","clearInterval","mp4ProgressTimer","seekingFunc","pauseFunc","playingFunc","waitingFunc","endedFunc","destroyFunc","errt","play","result","buffered","cut","segment","meta","duration","deepCopy","audioDuration","endTime","videoDuration","write","Blob","mp5","timeRage","curTime","getBufferedRange","removeBuffer","hasClass","root","playNext","video","len","flag","timeupdateFunc","cacheMaxTime","every","center","endOfStream","isEnded","setInterval","hasBuffered","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","LIBRARY","classof","anInstance","forOf","speciesConstructor","task","microtask","newPromiseCapabilityModule","perform","promiseResolve","versions","v8","$Promise","isNode","empty","newPromiseCapability","USE_NATIVE","FakePromise","constructor","PromiseRejectionEvent","indexOf","isThenable","notify","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","handler","fail","domain","_h","onHandleUnhandled","enter","exit","onUnhandled","unhandled","isUnhandled","onunhandledrejection","reason","_a","v","onrejectionhandled","$reject","_d","_w","$resolve","wrapper","executor","onFulfilled","onRejected","capability","x","iter","all","iterable","values","index","remaining","$index","alreadyCalled","race","valueOf","bitmap","Constructor","forbiddenField","isArrayIter","toLength","getIterFn","BREAK","RETURN","entries","ITERATOR","step","iterator","iterFn","next","done","ret","Iterators","ArrayProto","getIteratorMethod","SPECIES","D","un","documentElement","macrotask","Observer","MutationObserver","WebKitMutationObserver","head","flush","parent","standalone","toggle","node","createTextNode","observe","characterData","promiseCapability","def","tag","stat","DESCRIPTORS","KEY","SAFE_CLOSING","riter","from","skipClosing","arr","$pad","WEBKIT_BUG","test","padStart","maxLength","repeat","defined","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","str","Infinity","RangeError","options","chunkSize","pow","FMP4","CHUNK_SIZE","moovParse","cache","Set","moov","moovBox","mvhd","findBox","traks","videoTrak","audioTrak","videoCodec","audioCodec","videoTimeScale","audioTimeScale","sps","pps","profile","width","height","channelCount","sampleRate","decoderConfig","trak","hdlr","mdhd","handleType","elst","empty_duration","timescale","timeScale","time_offset","start_time","codecBox","avcC","tkhd","toHex","profileCompatibility","AVCLevelIndication","sequence","map","Number","esds","mp4a","ESDescriptor","typeID","EScode","mdat","_boxes","seekTrakDuration","mdatStart","vf","videoKeyFrames","videoKeyFramesLength","createTime","modifyTime","pixelRatio","audioConfig","getData","parsed","moovStart","boxes","Parser","nextBox","catch","stsc","stsz","stts","stco","ctts","samples","seekSampleTime","offset","seekSampleOffset","ftyp","timeStart","fragIndex","videoFrames","audioFrames","audioKeyFrames","nowTime","nextTime","MAX_SAFE_INTEGER","startTime","loadFragment","videoFrame","audioFrame","getSamplesByOrders","order","videoNextFrame","audioNextFrame","dat","createFragment","moof","mdatData","resBuffers","add","framesIndex","_samples","addFragment","firstFlags","flags","bufferSize","timeEnd","fragIndexStart","fragIndexEnd","loadFragmentForCut","videoStartFrame","audioStartFrame","videoEndFrame","audioEndFrame","createFragmentForCut","_videoFrames","stss","frames","_audioFrames","audioIndex","videoScale","audioScale","audioStts","entry","seekOrderSampleByTime","isValue","isPlainFunction","assign","normalizeOpts","contains","dscr","w","desc","gs","classRe","functionToString","isPrototype","possibleTypes","foo","bar","trzy","keys","dest","opts1","searchString","isMergeableObject","isNonNullObject","stringValue","$$typeof","REACT_ELEMENT_TYPE","isReactElement","isSpecial","for","cloneUnlessOtherwiseSpecified","clone","deepmerge","isArray","defaultArrayMerge","element","arrayMerge","sourceIsArray","destination","mergeObject","array","Error","reduce","prev","deepmerge_1","bufferLength","ResultConstructor","totalLength","_len","arrays","_key","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_arr","vmhd","graphicsmode","readUint16","opcolor","location","udta","modify","trackID","reserverd","layer","readInt16","alternate_group","volume","matrix","sampleCount","sampleDuration","sampleSize","stsd","entryCount","first_chunk","samples_per_chunk","sample_desc_index","preEntry","chunk_count","first_sample","pre","smhd","balance","readInt8","SLConfigDescriptor","extend","skip","SL","pasp","content","rate","nextTrackID","MP4ESDescrTag","esID","priority","MP4DecConfigDescrTag","MP4DecSpecificDescrTag","dataSize","streamUint","maximum","average","dataReferenceIndex","language","iods","major_brand","minor_version","compatibleBrands","compatible_brands","entry_count","edit_start_index","segment_duration","media_time","readInt32","media_rate_integer","media_rate_fraction","dref","read","co64","btrt","bufferSizeDB","maxBitrate","avgBitrate","configVersion","lengthSizeMinusOne","numOfSequenceParameterSets","sequenceLength","ppsCount","ppsLength","dataviewLength","avc1","horizresolution","vertresolution","frameCount","depth","UINT32_MAX","charCodeAt","writeUint32","trak1","trak2","mvex","upperWordDuration","lowerWordDuration","bytes","mdia","samplerate","mediaTime","minf","extension","dinf","stbl","configlen","hSpacing","vSpacing","avcc","mehd","trex","mfhd","traf","tfhd","tfdt","sdtp","trun","upper","lower","sdtpLength","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","ct","itemDuration","toFixed","codecs","mediaSource","MediaSource","URL","createObjectURL","sourceBuffer","addSourceBuffer","shift","state","isTypeSupported"],"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 = 38);\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 }\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']\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 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","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\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","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'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","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 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","module.exports = false;\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = {};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","module.exports = Player;","\"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;","import EventEmitter from 'event-emitter'\nimport Errors from '../error'\n\nclass Task {\n constructor (url, range, withCredentials, callback) {\n EventEmitter(this)\n this.url = url\n this.range = range\n this.withCredentials = withCredentials\n this.id = range.join('-')\n this.on = false\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 xhr.setRequestHeader('Range', `bytes=${range[0]}-${range[1]}`)\n xhr.onload = function () {\n if (xhr.status === 200 || xhr.status === 206) {\n if (callback && callback instanceof Function) {\n callback(xhr.response)\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 this.xhr = xhr\n Task.queue.push(this)\n this.update()\n }\n cancel () {\n this.xhr.abort()\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.on)\n let wait = Queue.filter(item => !item.on)\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.on = true\n this.xhr.send()\n } else {\n this.remove()\n }\n }\n\n static clear () {\n Task.queue.forEach(item => {\n if (item.on) {\n item.cancel()\n }\n })\n Task.queue.length = 0\n }\n}\n\nTask.queue = []\nTask.limit = 2\nwindow.Task = Task\n\nexport default Task\n","import 'core-js/modules/es6.promise.js'\nimport 'core-js/modules/es7.string.pad-start'\nimport Player from 'xgplayer'\nimport MP4 from './mp4'\nimport MSE from './media/mse'\nimport Task from './media/task'\nimport Buffer from './fmp4/buffer'\n\nlet isEnded = (player, mp4) => {\n if (mp4.meta.endTime - player.currentTime < 2) {\n let range = player.getBufferedRange()\n if (player.currentTime - range[1] < 0.1) {\n player.mse.endOfStream()\n }\n }\n}\n\nlet mp4player = function () {\n let player = this; let sniffer = Player.sniffer; let util = Player.util\n let Errors = Player.Errors; let mainURL; let backupURL\n let preloadTime = player.config.preloadTime || 15\n let waiterTimer\n let url = player.config.url\n let rule = player.config.pluginRule || function () { return true }\n if (!url) {\n player.emit('error', new Errors('other', player.config.vid))\n return\n }\n if (util.typeOf(url) === 'String') {\n mainURL = url\n } else if (util.typeOf(url) === 'Array' && url.length) {\n mainURL = url[0].src\n if(url.length > 1) {\n backupURL = url[1].src\n }\n }\n player.config._mainURL = mainURL\n player.config._backupURL = backupURL\n let loadData = (i = 0, time = player.currentTime) => {\n if (player.timer) {\n clearTimeout(player.timer)\n }\n time = Math.max(time, player.currentTime)\n player.timer = setTimeout(function () {\n player.mp4.seek(time + i * 0.1).then(buffer => {\n if (buffer) {\n let mse = player.mse\n mse.updating = true\n mse.appendBuffer(buffer)\n mse.once('updateend', () => {\n mse.updating = false\n })\n }\n }, () => {\n if (i < 10) {\n setTimeout(function () {\n loadData(i + 1)\n }, 2000)\n }\n })\n }, 50)\n }\n let init = (url) => {\n let mp4 = new MP4(url, player.config)\n let mse\n return new Promise((resolve, reject) => {\n mp4.once('moovReady', () => {\n mse = new MSE(mp4.videoOnly ? 'video/mp4; codecs=\"avc1.64001E\"' : 'video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"')\n mse.on('sourceopen', function () {\n mse.appendBuffer(mp4.packMeta())\n mse.once('updateend', loadData.bind(player))\n })\n resolve([mp4, mse])\n })\n mp4.on('error', (e) => {\n reject(e)\n })\n })\n }\n if (['chrome', 'firfox', 'safari'].some(item => item === sniffer.browser) && MSE.isSupported('video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"')) {\n player._start = player.start\n if (!rule.call(player)) {\n return false\n }\n\n let errorHandle = (player, err) => {\n err.vid = player.config.vid\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()\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('timeupdate', timeupdateFunc)\n clearInterval(player.mp4ProgressTimer)\n player.off('seeking', seekingFunc)\n player.off('pause', pauseFunc)\n player.off('playing', playingFunc)\n player.off('waiting', waitingFunc)\n player.off('ended', endedFunc)\n player.off('destroy', destroyFunc)\n\n if (err.errt === 'network' && player.config._backupURL) {\n player.src = player.config._backupURL\n } else {\n player.src = player.config._mainURL\n }\n player.once('canplay', () => {\n if (player._currentTime) {\n player.currentTime = player._currentTime\n }\n player.play()\n })\n }\n\n player.start = function (url = mainURL) {\n init(url).then((result) => {\n player.once('canplay', () => {\n player.play()\n })\n let mp4 = result[0]; let mse = result[1]\n player._start(mse.url)\n player.mp4 = mp4\n player.mse = mse\n mp4.on('error', err => {\n errorHandle(player, err)\n })\n }, err => {\n player._start(url)\n errorHandle(player, err)\n })\n player.once('canplay', () => {\n // safari decoder time offset\n if (sniffer.browser === 'safari' && player.buffered) {\n let start = player.buffered.start(0)\n player.currentTime = start + 0.1\n }\n })\n }\n\n player.cut = function (start = 0, end) {\n let segment = new Buffer()\n let mp4 = new MP4(url, player.config)\n return new Promise((resolve, reject) => {\n mp4.once('moovReady', () => {\n if (!end || end <= start) {\n end = start + 15\n }\n if (end > mp4.meta.duration) {\n start = mp4.meta.duration - (end - start)\n end = mp4.meta.duration\n }\n mp4.cut(start, end).then(buffer => {\n if (buffer) {\n let meta = Player.util.deepCopy({\n duration: end - start,\n audioDuration: end - start,\n endTime: end - start\n }, mp4.meta)\n meta.duration = end - start\n meta.videoDuration = end - start\n meta.audioDuration = end - start\n meta.endTime = end - start\n segment.write(mp4.packMeta(meta), buffer)\n resolve(new Blob([segment.buffer], {type: 'video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"'}))\n }\n })\n })\n mp4.on('error', (e) => {\n reject(e)\n })\n })\n }\n\n player.switchURL = (url) => {\n let mp5 = new MP4(url, player.config)\n let mp4 = player.mp4\n mp5.on('moovReady', () => {\n let timeRange = mp4.timeRage; let curTime = player.currentTime\n timeRange = mp4.timeRage\n let start = timeRange.find(item => item[0] - curTime > 2)[0]\n let end = player.getBufferedRange()[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())\n })\n mp5.on('error', err => {\n errorHandle(player, err)\n })\n }\n\n player.playNext = (url) => {\n let mp5 = new MP4(url, player.config)\n let mp4 = player.mp4\n mp5.on('moovReady', () => {\n let range = [0, 0]\n let buffered = player.video.buffered\n let currentTime = player.video.currentTime\n let max = 0\n if (buffered) {\n for (let i = 0, len = buffered.length; i < len; i++) {\n range[0] = buffered.start(i)\n range[1] = buffered.end(i)\n if (range[0] <= currentTime && range[1] <= currentTime) {\n max = range[1] > max ? range[1] : max\n player.mse.removeBuffer(range[0], range[1])\n }\n }\n }\n player.mp4 = mp5\n player.mse.appendBuffer(mp5.packMeta())\n let flag = true\n player.on('timeupdate', function () {\n if (flag && mp4.meta.endTime - player.currentTime < 2) {\n let range = player.getBufferedRange()\n if (player.currentTime - range[1] < 0.1) {\n flag = false\n player.currentTime = 0\n buffered = player.video.buffered\n if (buffered) {\n for (let i = 0, len = buffered.length; i < len; i++) {\n range[0] = buffered.start(i)\n range[1] = buffered.end(i)\n if (range[0] >= max) {\n player.mse.removeBuffer(range[0], range[1])\n }\n }\n }\n }\n }\n })\n })\n mp5.on('error', err => {\n errorHandle(player, err)\n })\n }\n\n let timeupdateFunc = function () {\n let mse = player.mse; let mp4 = player.mp4\n if (mse && !mse.updating && mp4.canDownload) {\n let timeRage = mp4.timeRage\n let range = player.getBufferedRange(); let cacheMaxTime = player.currentTime + preloadTime\n if (range[1] - cacheMaxTime > 0) {\n return\n }\n timeRage.every((item, idx) => {\n let start = item[0]; let end = item[1]; let center = (start + end) / 2\n if (range[1] === 0) {\n return false\n } else {\n if (center > range[1] && !mp4.bufferCache.has(idx)) {\n loadData(0, center)\n } else {\n return true\n }\n }\n })\n isEnded(player, mp4)// hack for older webkit\n }\n }\n\n // player.on('timeupdate', timeupdateFunc)\n player.mp4ProgressTimer = setInterval(timeupdateFunc, player.config.mp4ProgressTimer || 300)\n\n let seekingFunc = function () {\n let buffered = player.buffered; let hasBuffered = false; let curTime = player.currentTime\n Task.clear()\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 loadData(0, curTime)\n }\n } else {\n loadData(0, player.currentTime)\n }\n }\n player.on('seeking', seekingFunc)\n\n let pauseFunc = function () {\n Task.clear()\n }\n player.on('pause', pauseFunc)\n\n let playingFunc = function () {\n if (waiterTimer) {\n clearTimeout(waiterTimer)\n }\n }\n player.on('playing', playingFunc)\n\n let waitingFunc = function () {\n let mp4 = player.mp4\n if (!mp4 || !mp4.meta) {\n return\n }\n let range = player.getBufferedRange()\n let duration = mp4.meta.videoDuration\n if (duration - player.currentTime < 0.5 && duration - range[1] < 0.5) {\n player.mse.endOfStream()\n } else {\n loadData(0, range[1] + 1)\n waiterTimer = setTimeout(function () {\n let buffered = player.buffered; let start\n for (let i = 0, len = buffered.length; i < len; i++) {\n start = buffered.start(i)\n if (start >= player.currentTime) {\n player.currentTime = start\n break\n }\n }\n }, 1500)\n }\n }\n player.on('waiting', waitingFunc)\n\n let endedFunc = function () {\n player.off('waiting', waitingFunc)\n // player.off('timeupdate', timeupdateFunc)\n clearInterval(player.mp4ProgressTimer)\n }\n player.on('ended', endedFunc)\n\n let destroyFunc = function () {\n Task.clear()\n if (player.timer) {\n clearTimeout(player.timer)\n }\n }\n player.once('destroy', destroyFunc)\n\n player._replay = function () {\n Task.clear()\n player.mp4.bufferCache.clear()\n init(player.mp4.url).then((result) => {\n let mp4 = result[0]; let mse = result[1]\n player._start(mse.url)\n player.mp4 = mp4\n player.mse = mse\n player.currentTime = 0\n player.play()\n player.once('canplay', () => {\n player.on('waiting', waitingFunc)\n // player.on('timeupdate', timeupdateFunc)\n player.mp4ProgressTimer = setInterval(timeupdateFunc, player.config.mp4ProgressTimer || 300)\n })\n }, err => {\n errorHandle(player, err)\n })\n }\n }\n}\n\nPlayer.install('mp4player', mp4player)\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","import EventEmitter from 'event-emitter'\nimport Merge from 'deepmerge'\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'\n\nclass MP4 {\n /**\n * [constructor 构造函数]\n * @param {String} url [视频地址]\n * @param {Number} [chunk_size=Math.pow(25, 4)] [请求的数据块大小,对于长视频设置的较大些可以避免二次请求]\n */\n constructor (url, options, chunkSize = Math.pow(25, 4)) {\n EventEmitter(this)\n this.url = url\n this.withCredentials = options.withCredentials\n FMP4.videoOnly = this.videoOnly = options.videoOnly || false\n this.CHUNK_SIZE = chunkSize\n this.init(url)\n this.once('moovReady', this.moovParse.bind(this))\n this.cache = new Buffer()\n this.bufferCache = new Set()\n this.timeRage = []\n this.canDownload = true\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) {\n let self = this\n return new Promise((resolve, reject) => {\n let task = new Task(this.url, [\n start, end\n ], this.withCredentials, resolve)\n task.once('error', err => {\n self.emit('error', err)\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 profile,\n width,\n height\n let channelCount,\n sampleRate,\n decoderConfig\n traks = [].concat(traks)\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: 72, handle: '[MP4] moovParse', url: self.url}))\n return\n }\n if(hdlr.handleType === 'vide' && self.videoOnly) {\n let elst = util.findBox(trak, 'elst')\n trak.empty_duration = 0\n if (elst.empty_duration) {\n trak.empty_duration = elst.empty_duration * mdhd.timescale / mvhd.timeScale;\n }\n \n trak.time_offset = elst.start_time - trak.empty_duration;\n }\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 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 && avcC.sequence.map((item) => Number(`0x${item}`))\n pps = avcC.pps && avcC.pps.map((item) => Number(`0x${item}`))\n profile = avcC.profile\n } else {\n videoCodec = `${codecBox.type}`\n }\n if (tkhd) {\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 this.videoTrak = Merge({}, videoTrak)\n if(!audioTrak){\n FMP4.videoOnly = this.videoOnly = true\n }\n if(!this.videoOnly) {\n this.audioTrak = Merge({}, audioTrak)\n }\n let mdat = this._boxes.find(item => item.type === 'mdat')\n let videoDuration = util.seekTrakDuration(videoTrak, videoTimeScale)\n let audioDuration\n if(!this.videoOnly) {\n audioDuration = util.seekTrakDuration(audioTrak, audioTimeScale)\n }\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 createTime: mvhd.createTime,\n modifyTime: mvhd.modifyTime,\n duration: videoDuration,\n timeScale: mvhd.timeScale,\n videoDuration,\n videoTimeScale,\n endTime: videoDuration,\n sps,\n pps,\n width,\n height,\n profile,\n pixelRatio: [\n 1, 1\n ],\n channelCount,\n sampleRate,\n audioConfig: decoderConfig\n }\n if(!this.videoOnly) {\n this.meta.audioCodec = audioCodec\n this.meta.audioDuration = audioDuration\n this.meta.audioTimeScale = audioTimeScale\n this.meta.duration = mvhd.duration / mvhd.timeScale\n this.meta.endTime = Math.min(videoDuration, audioDuration)\n }\n }\n\n /**\n * [init 实例的初始化,主要是获取视频的MOOV元信息]\n */\n init () {\n let self = this\n self.getData().then((res) => {\n let parsed\n\n let moovStart = 0\n\n let moov\n\n let boxes\n try {\n parsed = new Parser(res)\n } catch (e) {\n self.emit('error', e.type ? e : new Errors('parse', '', {line: 176, handle: '[MP4] init', msg: e.message}))\n return false\n }\n self._boxes = boxes = parsed.boxes\n boxes.every(item => {\n moovStart += item.size\n if (item.type === 'moov') {\n moov = item\n self.moovBox = moov\n self.emit('moovReady', moov)\n return false\n } else {\n return true\n }\n })\n if (!moov) {\n let nextBox = parsed.nextBox\n if (nextBox) {\n if (nextBox.type === 'moov') {\n self.getData(moovStart, moovStart + nextBox.size + 28).then(res => {\n let parsed = new Parser(res)\n self._boxes = self._boxes.concat(parsed.boxes)\n moov = parsed.boxes.filter(box => box.type === 'moov')\n if (moov.length) {\n self.moovBox = moov[0]\n self.emit('moovReady', moov)\n } else {\n self.emit('error', new Errors('parse', '', {line: 203, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 207, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n } else {\n self.getData(moovStart, '').then(res => {\n let parsed = new Parser(res)\n if (parsed) {\n self._boxes = self._boxes.concat(parsed.boxes)\n parsed.boxes.every(item => {\n if (item.type === 'moov') {\n moov = item\n self.moovBox = moov\n self.emit('moovReady', moov)\n return false\n } else {\n return true\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 225, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n }\n }\n }).catch(() => {\n self.emit('error', new Errors('network', '', {line: 231, handle: '[MP4] getData', msg: 'getData failed'}))\n })\n }\n\n getSamplesByOrders (type = 'video', start, end) {\n let trak = type === 'video'\n ? this.videoTrak\n : this.audioTrak\n let stsc = util.findBox(trak, 'stsc') // chunk~samples\n let stsz = util.findBox(trak, 'stsz') // sample-size\n let stts = util.findBox(trak, 'stts') // sample-time\n let stco = util.findBox(trak, 'stco') // chunk-offset\n let ctts = util.findBox(trak, 'ctts') // offset-compositime\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, ctts, item, trak.time_offset),\n offset: util.seekSampleOffset(stsc, stco, stsz, item, mdatStart)\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, ctts, i, trak.time_offset),\n offset: util.seekSampleOffset(stsc, stco, stsz, i, mdatStart)\n })\n }\n } else {\n samples = {\n idx: start,\n size: stsz.entries[start],\n time: util.seekSampleTime(stts, ctts, start, trak.time_offset),\n offset: util.seekSampleOffset(stsc, stco, stsz, start, mdatStart)\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 frames = this.getSamplesByOrders('video', stss.entries.map(item => item - 1))\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 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 seek (time) {\n let timeStart = time * this.meta.videoTimeScale\n let fragIndex\n\n let videoFrames = this.videoKeyFrames\n let audioFrames\n if(!this.videoOnly) {\n audioFrames = this.audioKeyFrames\n }\n videoFrames.every((item, idx) => {\n let nowTime = item.time.time\n\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.videoOnly) {\n audioFrames.every((item, idx) => {\n let nowTime = item.startTime\n\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 if (this.bufferCache.has(fragIndex)) {\n return Promise.resolve(null)\n } else {\n return this.loadFragment(fragIndex)\n }\n }\n loadFragment (fragIndex) {\n let start,\n end\n let videoFrame = this.videoKeyFrames[fragIndex]\n let audioFrame\n start = videoFrame.offset\n if(!this.videoOnly) {\n audioFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex].order, 0)\n start = Math.min(videoFrame.offset, audioFrame.offset)\n }\n if (fragIndex < this.videoKeyFrames.length - 1) {\n let videoNextFrame = this.videoKeyFrames[fragIndex + 1]\n let audioNextFrame\n end = videoNextFrame.offset\n if(!this.videoOnly) {\n audioNextFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex + 1].order, 0)\n end = Math.max(videoNextFrame.offset, audioNextFrame.offset)\n }\n }\n let self = this\n if (window.isNaN(start) || (end !== undefined && window.isNaN(end))) {\n self.emit('error', new Errors('parse', '', { line: 366, handle: '[MP4] loadFragment', url: self.url }))\n return false\n }\n if (this.bufferCache.has(fragIndex)) {\n return Promise.resolve(null)\n } else {\n return this.getData(\n start + self.mdatStart, end\n ? self.mdatStart + end\n : '').then((dat) => {\n return self.createFragment(new Uint8Array(dat), start, fragIndex)\n })\n }\n }\n addFragment (data) {\n let buffer = new Buffer()\n buffer.write(FMP4.moof(data))\n buffer.write(FMP4.mdat(data))\n this.cache.write(buffer.buffer)\n return buffer.buffer\n }\n createFragment (mdatData, start, fragIndex) {\n let self = this\n let resBuffers = []\n this.bufferCache.add(fragIndex)\n {\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 }\n })\n resBuffers.push(this.addFragment({id: 1, time: _samples[0].time.time, firstFlags: 0x2000000, flags: 0xf01, samples}))\n }\n if(!this.videoOnly) {\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 resBuffers.push(this.addFragment({id: 2, time: _samples[0].time.time, firstFlags: 0x00, flags: 0x701, samples: samples})) \n }\n \n let bufferSize = 0\n resBuffers.every(item => {\n bufferSize += item.byteLength\n return true\n })\n let buffer = new Uint8Array(bufferSize)\n\n let offset = 0\n resBuffers.every(item => {\n buffer.set(item, offset)\n offset += item.byteLength\n return true\n })\n return Promise.resolve(buffer)\n }\n\n download () {\n // new Download('fmp4.mp4', this.cache.buffer)\n }\n\n cut (start, end) {\n let self = this\n this.bufferCache.clear()\n let timeStart = start * this.meta.videoTimeScale\n let timeEnd = end * this.meta.videoTimeScale\n let fragIndexStart\n let fragIndexEnd\n\n let videoFrames = this.videoKeyFrames\n let audioFrames = this.audioKeyFrames\n videoFrames.every((item, idx) => {\n let nowTime = item.time.time\n\n let nextTime = videoFrames[idx + 1]\n ? videoFrames[idx + 1].time.time\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndexStart = idx\n return true\n } else if (nowTime <= timeEnd && timeEnd < nextTime) {\n fragIndexEnd = idx\n return false\n } else {\n return true\n }\n })\n audioFrames.every((item, idx) => {\n let nowTime = item.startTime\n\n let nextTime = audioFrames[idx + 1]\n ? audioFrames[idx + 1].startTime\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndexStart = Math.min(idx, fragIndexStart)\n return true\n } else if (nowTime <= timeEnd && timeEnd < nextTime) {\n fragIndexEnd = Math.min(idx, fragIndexEnd)\n return false\n } else {\n return true\n }\n })\n if (!fragIndexEnd) {\n fragIndexEnd = videoFrames.length\n }\n return self.loadFragmentForCut(fragIndexStart, fragIndexEnd)\n }\n loadFragmentForCut (fragIndexStart, fragIndexEnd) {\n let start,\n end\n let videoStartFrame = this.videoKeyFrames[fragIndexStart]\n let audioStartFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndexStart].order, 0)\n start = Math.min(videoStartFrame.offset, audioStartFrame.offset)\n let videoEndFrame = this.videoKeyFrames[fragIndexEnd]\n let audioEndFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndexEnd].order, 0)\n end = Math.max(videoEndFrame.offset, audioEndFrame.offset)\n let self = this\n if (window.isNaN(start) || (end !== undefined && window.isNaN(end))) {\n self.emit('error', new Errors('parse', '', { line: 366, handle: '[MP4] loadFragment', url: self.url }))\n return false\n }\n return this.getData(\n start + self.mdatStart, end\n ? self.mdatStart + end\n : '').then((dat) => {\n return self.createFragmentForCut(new Uint8Array(dat), start, fragIndexStart, end, fragIndexEnd)\n })\n }\n createFragmentForCut (mdatData, start, fragIndexStart, end, fragIndexEnd) {\n let self = this\n let resBuffers = []\n {\n let framesIndex = self.videoKeyFrames.map((item) => item.idx)\n let _samples = self.getSamplesByOrders('video', framesIndex[fragIndexStart], framesIndex[fragIndexEnd])\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 resBuffers.push(this.addFragment({id: 1, time: 0, firstFlags: 0x2000000, flags: 0xf01, samples}))\n }\n let _samples = this.getSamplesByOrders(\n 'audio', this.audioKeyFrames[fragIndexStart].order, this.audioKeyFrames[fragIndexEnd]\n ? this.audioKeyFrames[fragIndexEnd].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 resBuffers.push(this.addFragment({id: 2, time: 0, firstFlags: 0x00, flags: 0x701, samples: samples}))\n\n let bufferSize = 0\n resBuffers.every(item => {\n bufferSize += item.byteLength\n return true\n })\n let buffer = new Uint8Array(bufferSize)\n\n let offset = 0\n resBuffers.every(item => {\n buffer.set(item, offset)\n offset += item.byteLength\n return true\n })\n return Promise.resolve(buffer)\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","var isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = deepmerge(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nexport default deepmerge_1;\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.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 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.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'\nBox.pasp = function () {\n let stream = new Stream(this.data)\n this.content = stream.buffer.slice(0, this.size - 8)\n delete this.subBox\n delete this.data\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'\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.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.empty_duration = 0; // empty duration of the first edit list entry\n this.start_time = 0; // start time of the media\n let edit_start_index = 0;\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 if (i === 0 && entry.media_time === -1) {\n /* if empty, the first entry is the start time of the stream\n * relative to the presentation itself */\n this.empty_duration = entry.segment_duration;\n edit_start_index = 1;\n } else if (i === edit_start_index && entry.media_time >= 0) {\n this.start_time = entry.media_time;\n }\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.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'\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(Number(stream.readUint8()).toString(16))\n }\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\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, 0x6D, // isom,\n 0x0, 0x0, 0x00, 0x01, // minor_version: 0x01\n 0x69, 0x73, 0x6F, 0x6D, // isom\n 0x61, 0x76, 0x63, 0x31 // 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 trak1 = FMP4.videoTrak(data)\n let trak2\n if(!FMP4.videoOnly) {\n trak2 = FMP4.audioTrak(data)\n }\n let mvex = FMP4.mvex(data.duration, data.timeScale);\n let moovBoxes = FMP4.videoOnly ? [mvhd, trak1, mvex] : [mvhd, trak1, trak2, mvex];\n moovBoxes.forEach(item => {\n size += item.byteLength\n })\n if(FMP4.videoOnly) {\n buffer.write(FMP4.size(size), FMP4.type('moov'), mvhd, trak1, mvex)\n } else {\n buffer.write(FMP4.size(size), FMP4.type('moov'), mvhd, trak1, trak2, mvex)\n }\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 0x01, // version 1\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // modification_time\n (timescale >> 24) & 0xff,\n (timescale >> 16) & 0xff,\n (timescale >> 8) & 0xff,\n timescale & 0xff, // timescale\n (upperWordDuration >> 24),\n (upperWordDuration >> 16) & 0xff,\n (upperWordDuration >> 8) & 0xff,\n upperWordDuration & 0xff,\n (lowerWordDuration >> 24),\n (lowerWordDuration >> 16) & 0xff,\n (lowerWordDuration >> 8) & 0xff,\n lowerWordDuration & 0xff,\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 0xff, 0xff, 0xff, 0xff // 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 sps: data.sps,\n pps: data.pps,\n pixelRatio: data.pixelRatio,\n width: data.width,\n height: data.height\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 mdia = FMP4.mdia({\n type: 'audio',\n timescale: data.audioTimeScale,\n duration: data.audioDuration,\n channelCount: data.channelCount,\n samplerate: data.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 0x01, // version 1\n 0x00, 0x00, 0x07, // flags\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // 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 (upperWordDuration >> 24),\n (upperWordDuration >> 16) & 0xff,\n (upperWordDuration >> 8) & 0xff,\n upperWordDuration & 0xff,\n (lowerWordDuration >> 24),\n (lowerWordDuration >> 16) & 0xff,\n (lowerWordDuration >> 8) & 0xff,\n lowerWordDuration & 0xff,\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, data.duration)\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, 0x00, 0x00, 0x00, 0x02, // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n (upperWordDuration >> 24),\n (upperWordDuration >> 16) & 0xff,\n (upperWordDuration >> 8) & 0xff,\n upperWordDuration & 0xff,\n (lowerWordDuration >> 24),\n (lowerWordDuration >> 16) & 0xff,\n (lowerWordDuration >> 8) & 0xff,\n lowerWordDuration & 0xff,\n 0x55, 0xc4, // 'und' language\n 0x00, 0x00\n ])\n buffer.write(FMP4.size(12 + content.byteLength), FMP4.type('mdhd'), FMP4.extension(1, 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 [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 return buffer.buffer\n }\n static stsd (data) {\n let buffer = new Buffer(); let content\n if (data.type === 'audio') {\n // if (!data.isAAC && data.codec === 'mp4') {\n // content = FMP4.mp3(data);\n // } else {\n //\n // }\n // 支持mp4a\n content = FMP4.mp4a(data)\n } else {\n content = FMP4.avc1(data)\n }\n buffer.write(FMP4.size(16 + content.byteLength), FMP4.type('stsd'), FMP4.extension(0, 0), new Uint8Array([0x00, 0x00, 0x00, 0x01]), content)\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 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 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.trex(1), FMP4.trex(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 moof (data) {\n let buffer = new Buffer(); let size = 8\n let mfhd = FMP4.mfhd()\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 () {\n let buffer = new Buffer()\n let content = Buffer.writeUint32(FMP4.sequence)\n FMP4.sequence += 1\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.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'), FMP4.extension(0, 0), content)\n return buffer.buffer\n }\n static tfdt (time) {\n let buffer = new Buffer()\n let upper = Math.floor(time / (UINT32_MAX + 1))\n\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(); 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\nFMP4.sequence = 1\n\nexport default FMP4\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) {\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 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) {\n let chunkOffset = util.stscOffset(stsc, order + 1)\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, ctts, order, time_offset=0) {\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 (ctts) {\n let ct = 0\n ctts.entry.every(item => {\n ct += item.count\n if (order < ct) {\n offset = item.offset\n return false\n } else {\n return true\n }\n })\n }\n if (!time) {\n time = startTime + (order - count) * duration\n }\n time -= time_offset\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\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\"') {\n let self = this\n EventEmitter(this)\n this.codecs = codecs\n this.mediaSource = new window.MediaSource()\n this.url = window.URL.createObjectURL(this.mediaSource)\n this.queue = []\n this.updating = false\n this.mediaSource.addEventListener('sourceopen', function () {\n self.sourceBuffer = self.mediaSource.addSourceBuffer(self.codecs)\n self.sourceBuffer.addEventListener('error', function (e) {\n self.emit('error', new Errors('mse', '', {line: 16, handle: '[MSE] constructor sourceopen', msg: e.message}))\n })\n self.sourceBuffer.addEventListener('updateend', function (e) {\n self.emit('updateend')\n let buffer = self.queue.shift()\n if (buffer && self.sourceBuffer && !self.sourceBuffer.updating && self.state === 'open') {\n self.sourceBuffer.appendBuffer(buffer)\n }\n })\n self.emit('sourceopen')\n })\n this.mediaSource.addEventListener('sourceclose', function () {\n self.emit('sourceclose')\n })\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 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 this.sourceBuffer.remove(start, end)\n }\n\n endOfStream () {\n if (this.state === 'open') {\n this.mediaSource.endOfStream()\n }\n }\n\n static isSupported (codecs) {\n return window.MediaSource && window.MediaSource.isTypeSupported(codecs)\n }\n}\n\nexport default MSE\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":""}