xgplayer-mp4 2.0.2 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/index.js +1 -2
- package/browser/index.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/src/mp4.js +5 -14
- package/src/parse/box/MP4DecConfigDescrTag.js +0 -3
- package/src/parse/box/MP4DecSpecificDescrTag.js +0 -4
- package/src/parse/box/esds.js +4 -9
- package/src/util/index.js +14 -15
- package/version.json +1 -1
- package/webpack.config.js +1 -1
package/browser/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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":""}
|
|
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","module","i","l","exports","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 = new Parser(res)\n self._boxes = self._boxes.concat(parsed.boxes)\n moov = parsed.boxes.filter(box => box.type === 'moov')\n if (moov.length) {\n self.moovBox = moov[0]\n self.emit('moovReady', moov)\n } else {\n self.emit('error', new Errors('parse', '', {line: 203, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 207, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n } else {\n self.getData(moovStart, '').then(res => {\n let parsed = new Parser(res)\n if (parsed) {\n self._boxes = self._boxes.concat(parsed.boxes)\n parsed.boxes.every(item => {\n if (item.type === 'moov') {\n moov = item\n self.moovBox = moov\n self.emit('moovReady', moov)\n return false\n } else {\n return true\n }\n })\n } else {\n self.emit('error', new Errors('parse', '', {line: 225, handle: '[MP4] init', msg: 'not find moov box'}))\n }\n })\n }\n }\n }).catch(() => {\n self.emit('error', new Errors('network', '', {line: 231, handle: '[MP4] getData', msg: 'getData failed'}))\n })\n }\n\n getSamplesByOrders (type = 'video', start, end) {\n let trak = type === 'video'\n ? this.videoTrak\n : this.audioTrak\n let stsc = util.findBox(trak, 'stsc') // chunk~samples\n let stsz = util.findBox(trak, 'stsz') // sample-size\n let stts = util.findBox(trak, 'stts') // sample-time\n let stco = util.findBox(trak, 'stco') // chunk-offset\n\n let cttsObj = type === 'video' ? this._cttsObj : null;\n let stscObj = type === 'video' ? this._stscVideoObj : this._stscAudioObj;\n let mdatStart = this.mdatStart\n let samples = []\n end = end !== undefined\n ? end\n : stsz.entries.length\n if (start instanceof Array) {\n start.forEach((item, idx) => {\n samples.push({\n idx: item,\n size: stsz.entries[item],\n time: util.seekSampleTime(stts, cttsObj, item),\n offset: util.seekSampleOffset(stsc, stco, stsz, item, mdatStart, stscObj)\n })\n })\n } else if (end !== 0) {\n for (let i = start; i < end; i++) {\n samples.push({\n idx: i,\n size: stsz.entries[i],\n time: util.seekSampleTime(stts, cttsObj, i),\n offset: util.seekSampleOffset(stsc, stco, stsz, i, mdatStart, stscObj)\n })\n }\n } else {\n samples = {\n idx: start,\n size: stsz.entries[start],\n time: util.seekSampleTime(stts, cttsObj, start),\n offset: util.seekSampleOffset(stsc, stco, stsz, start, mdatStart, stscObj)\n }\n }\n return samples\n }\n\n get videoKeyFrames () {\n if (this._videoFrames) {\n return this._videoFrames\n }\n let videoTrak = this.videoTrak\n let stss = util.findBox(videoTrak, 'stss')\n let stsc = util.findBox(videoTrak, 'stsc') // chunk~samples\n let ctts = util.findBox(videoTrak, 'ctts') // offset-compositime\n this._cttsObj = null;\n if(ctts){\n this._cttsObj = {};\n let count = 0;\n for(let i = 0; i < ctts.entry.length; i++){\n let entry = ctts.entry[i];\n for(let j = 0; j < entry.count; j++){\n this._cttsObj[count] = entry.offset;\n count += 1;\n }\n }\n }\n\n this._stscVideoObj = {};\n let sampleCount = 0;\n for(let i = 0; i < stsc.count - 1; i++){\n let entry = stsc.entries[i];\n for(let j = 0; j < entry.chunk_count * entry.samples_per_chunk; j++){\n sampleCount ++;\n this._stscVideoObj[sampleCount] = entry;\n }\n }\n\n let frames = this.getSamplesByOrders('video', stss.entries.map(item => item - 1))\n this._stssObj = stss;\n this._videoFrames = frames\n return frames\n }\n\n get audioKeyFrames () {\n if (this._audioFrames) {\n return this._audioFrames\n }\n let videoScale = util.findBox(this.videoTrak, 'mdhd').timescale\n let audioScale = util.findBox(this.audioTrak, 'mdhd').timescale\n let audioStts = util.findBox(this.audioTrak, 'stts').entry\n let stsc = util.findBox(this.audioTrak, 'stsc') // chunk~samples\n this._stscAudioObj = {};\n let sampleCount = 0;\n for(let i = 0; i < stsc.count - 1; i++){\n let entry = stsc.entries[i];\n for(let j = 0; j < entry.chunk_count * entry.samples_per_chunk; j++){\n sampleCount ++;\n this._stscAudioObj[sampleCount] = entry;\n }\n }\n let videoFrames = this.videoKeyFrames\n let audioIndex = []\n audioIndex = videoFrames.map(item => {\n return util.seekOrderSampleByTime(audioStts, audioScale, item.time.time / videoScale)\n })\n this._audioFrames = audioIndex\n return this._audioFrames\n }\n\n packMeta() {\n if (!this.meta) {\n return\n }\n let buffer = new Buffer()\n buffer.write(FMP4.ftyp())\n buffer.write(FMP4.moov(this.meta))\n // this.cache.write(buffer.buffer)\n return buffer.buffer\n }\n\n getRangeFromTime(time){\n let fragIndex = this.getFragmentIdx(time);\n let range = this.getFragRange(fragIndex)\n if(range === [0, 0]) return null;\n return {\n range,\n fragIndex,\n }\n }\n\n getFragmentIdx(time){\n let timeStart = Math.round(time * this.meta.videoTimeScale)\n let fragIndex\n let videoFrames = this.videoKeyFrames\n videoFrames.every((item, idx) => {\n let nowTime = item.time.time\n let nextTime = videoFrames[idx + 1]\n ? videoFrames[idx + 1].time.time\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndex = idx\n return false\n } else {\n return true\n }\n })\n if (this.audioTrak) {\n let audioFrames = this.audioKeyFrames\n audioFrames.every((item, idx) => {\n let nowTime = item.startTime\n let nextTime = audioFrames[idx + 1]\n ? audioFrames[idx + 1].startTime\n : Number.MAX_SAFE_INTEGER\n if (nowTime <= timeStart && timeStart < nextTime) {\n fragIndex = Math.min(idx, fragIndex)\n return false\n } else {\n return true\n }\n })\n }\n return fragIndex;\n }\n\n seek (time) {\n let fragIndex = this.getFragmentIdx(time);\n this.timeRage[fragIndex].downloaded = true;\n return this.loadFragment(fragIndex)\n }\n\n getFragRange (fragIndex) {\n let videoFrame = this.videoKeyFrames[fragIndex]\n let start = videoFrame.offset\n let end\n if (this.audioTrak) {\n let audioFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex].order, 0)\n start = Math.min(start, audioFrame.offset)\n }\n if (fragIndex < this.videoKeyFrames.length - 1) {\n let videoNextFrame = this.videoKeyFrames[fragIndex + 1]\n end = videoNextFrame.offset\n if (this.audioTrak) {\n let audioNextFrame = this.getSamplesByOrders('audio', this.audioKeyFrames[fragIndex + 1].order, 0)\n end = Math.max(end, audioNextFrame.offset)\n }\n }\n if (window.isNaN(start) || (end !== undefined && window.isNaN(end))) {\n this.emit('error', new Errors('parse', '', { line: 366, handle: '[MP4] loadFragment', url: this.url }))\n return [0, 0]\n }\n return [start + this.mdatStart, end ? this.mdatStart + end : '']\n }\n loadFragment (fragIndex) {\n let self = this\n let range = this.getFragRange(fragIndex)\n if(range === [0, 0]) return false;\n return this.getData(range[0], range[1]).then((dat) => {\n return self.createFragment(new Uint8Array(dat), range[0] - this.mdatStart, fragIndex)\n })\n .then(buf => {\n return buf\n })\n }\n addFragment (data) {\n let buffer = new Buffer()\n return new Promise(resolve => {\n buffer.write(FMP4.moof(data))\n buffer.write(FMP4.mdat(data))\n // this.cache.write(buffer.buffer)\n resolve(buffer.buffer)\n })\n }\n getVideoBuffer(mdatData, start, fragIndex) {\n let self = this\n let videoFlags = 0xf01\n let framesIndex = self.videoKeyFrames.map((item) => item.idx)\n let _samples = self.getSamplesByOrders('video', framesIndex[fragIndex], framesIndex[fragIndex + 1])\n let samples = _samples.map((item, idx) => {\n return {\n size: item.size,\n duration: item.time.duration,\n offset: item.time.offset,\n buffer: new Uint8Array(mdatData.slice(item.offset - start, item.offset - start + item.size)),\n key: idx === 0,\n idx: item.idx\n }\n })\n return this.addFragment({\n id: 1,\n time: _samples[0].time.time,\n firstFlags: 0x2000000,\n flags: videoFlags,\n samples,\n sampleOffset: _samples[0].idx,\n fragIndex\n })\n }\n getAudioBuffer(mdatData, start, fragIndex) {\n\n let self = this\n let audioFlags = 0x701\n\n let _samples = this.getSamplesByOrders(\n 'audio', this.audioKeyFrames[fragIndex].order, this.audioKeyFrames[fragIndex + 1]\n ? this.audioKeyFrames[fragIndex + 1].order\n : undefined)\n let samples = _samples.map((item, idx) => {\n return {\n size: item.size,\n duration: item.time.duration,\n offset: item.time.offset,\n buffer: new Uint8Array(mdatData.slice(item.offset - start, item.offset - start + item.size)),\n key: idx === 0\n }\n })\n return this.addFragment({\n id: 2,\n time: _samples[0].time.time,\n firstFlags: 0x00,\n flags: audioFlags,\n samples,\n sampleOffset: _samples[0].idx,\n fragIndex\n })\n }\n createFragment (mdatData, start, fragIndex) {\n let self = this\n\n let resBuffers = []\n let promises = [\n self.getVideoBuffer(mdatData, start, fragIndex)\n ]\n if (this.audioTrak) {\n promises.push(self.getAudioBuffer(mdatData, start, fragIndex))\n }\n return Promise.all(promises)\n .then(buffers => {\n resBuffers.push(buffers[0])\n if (buffers && buffers[1]) {\n resBuffers.push(buffers[1])\n }\n let bufferSize = 0\n resBuffers.every(item => {\n bufferSize += item.byteLength\n return true\n })\n let buffer = new Uint8Array(bufferSize)\n let offset = 0\n resBuffers.every(item => {\n buffer.set(item, offset)\n offset += item.byteLength\n return true\n })\n return buffer\n })\n }\n\n update(url){\n this.url = url;\n }\n\n destroy(){\n if(this.hasDestroyed){\n return;\n }\n for (let k in this) {\n delete this[k]\n }\n this.hasDestroyed = true;\n }\n}\n\nexport default MP4\n","\"use strict\";\n\nvar isValue = require(\"type/value/is\")\n , isPlainFunction = require(\"type/plain-function/is\")\n , assign = require(\"es5-ext/object/assign\")\n , normalizeOpts = require(\"es5-ext/object/normalize-options\")\n , contains = require(\"es5-ext/string/#/contains\");\n\nvar d = (module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif (arguments.length < 2 || typeof dscr !== \"string\") {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t\tw = contains.call(dscr, \"w\");\n\t} else {\n\t\tc = w = true;\n\t\te = false;\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n});\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== \"string\") {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (!isValue(get)) {\n\t\tget = undefined;\n\t} else if (!isPlainFunction(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (!isValue(set)) {\n\t\tset = undefined;\n\t} else if (!isPlainFunction(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t} else {\n\t\tc = true;\n\t\te = false;\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n","\"use strict\";\n\nvar isFunction = require(\"../function/is\");\n\nvar classRe = /^\\s*class[\\s{/}]/, functionToString = Function.prototype.toString;\n\nmodule.exports = function (value) {\n\tif (!isFunction(value)) return false;\n\tif (classRe.test(functionToString.call(value))) return false;\n\treturn true;\n};\n","\"use strict\";\n\nvar isPrototype = require(\"../prototype/is\");\n\nmodule.exports = function (value) {\n\tif (typeof value !== \"function\") return false;\n\n\tif (!hasOwnProperty.call(value, \"length\")) return false;\n\n\ttry {\n\t\tif (typeof value.length !== \"number\") return false;\n\t\tif (typeof value.call !== \"function\") return false;\n\t\tif (typeof value.apply !== \"function\") return false;\n\t} catch (error) {\n\t\treturn false;\n\t}\n\n\treturn !isPrototype(value);\n};\n","\"use strict\";\n\nvar isObject = require(\"../object/is\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) return false;\n\ttry {\n\t\tif (!value.constructor) return false;\n\t\treturn value.constructor.prototype === value;\n\t} catch (error) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../value/is\");\n\n// prettier-ignore\nvar possibleTypes = { \"object\": true, \"function\": true, \"undefined\": true /* document.all */ };\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) return false;\n\treturn hasOwnProperty.call(possibleTypes, typeof value);\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== \"function\") return false;\n\tobj = { foo: \"raz\" };\n\tassign(obj, { bar: \"dwa\" }, { trzy: \"trzy\" });\n\treturn obj.foo + obj.bar + obj.trzy === \"razdwatrzy\";\n};\n","\"use strict\";\n\nvar keys = require(\"../keys\")\n , value = require(\"../valid-value\")\n , max = Math.max;\n\nmodule.exports = function (dest, src /*, …srcn*/) {\n\tvar error, i, length = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry {\n\t\t\tdest[key] = src[key];\n\t\t} catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < length; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\n","\"use strict\";\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys(\"primitive\");\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n","\"use strict\";\n\nvar isValue = require(\"../is-value\");\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\n};\n","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function (opts1 /*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (!isValue(options)) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\n","\"use strict\";\n\nvar str = \"razdwatrzy\";\n\nmodule.exports = function () {\n\tif (typeof str.contains !== \"function\") return false;\n\treturn str.contains(\"dwa\") === true && str.contains(\"foo\") === false;\n};\n","\"use strict\";\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString /*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n","\"use strict\";\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n","import Box from './box'\nimport Concat from 'concat-typed-array'\nimport Stream from './stream'\nimport * as SubBox from './box/*.js'\n\nclass Parse {\n constructor (buffer) {\n this.buffer = null\n this.boxes = []\n this.nextBox = null\n this.start = 0\n let self = this\n if (self.buffer) {\n Concat(Uint8Array, self.buffer, buffer)\n } else {\n self.buffer = buffer\n }\n let bufferLength = buffer.byteLength\n buffer.position = 0\n let stream = new Stream(buffer)\n while (bufferLength - stream.position >= 8) {\n let box = new Box()\n box.readHeader(stream)\n if (box.size - 8 <= (bufferLength - stream.position)) {\n box.readBody(stream)\n self.boxes.push(box)\n } else {\n if (box.type === 'mdat') {\n box.readBody(stream)\n self.boxes.push(box)\n } else {\n self.nextBox = box\n stream.position -= 8\n break\n }\n }\n }\n self.buffer = new Uint8Array(self.buffer.slice(stream.position))\n }\n}\n\nexport default Parse\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (ResultConstructor) {\n var totalLength = 0;\n\n for (var _len = arguments.length, arrays = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n arrays[_key - 1] = arguments[_key];\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = arrays[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var arr = _step.value;\n\n totalLength += arr.length;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var result = new ResultConstructor(totalLength);\n var offset = 0;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = arrays[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _arr = _step2.value;\n\n result.set(_arr, offset);\n offset += _arr.length;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return result;\n};","import Box from '../box'\nimport Stream from '../stream'\n\nBox.vmhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = [stream.readUint8(), stream.readUint8(), stream.readUint8()]\n this.graphicsmode = stream.readUint16()\n this.opcolor = [stream.readUint16(), stream.readUint16(), stream.readUint16()]\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox['url '] = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = [stream.readUint8(), stream.readUint8(), stream.readUint8()]\n let location = []; let length = stream.buffer.byteLength\n while (stream.position < length) {\n location.push(stream.readUint8())\n }\n this.location = location\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nBox.udta = function () {\n delete this.subBox\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.tkhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3, 0)\n if (this.version === 1) {\n this.create = stream.readUint64()\n this.modify = stream.readUint64()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.trackID = stream.readUint32()\n this.reserverd = stream.readUint32()\n this.duration = stream.readUint64()\n } else {\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.trackID = stream.readUint32()\n this.reserverd = stream.readUint32()\n this.duration = stream.readUint32()\n }\n stream.readUint64()\n this.layer = stream.readInt16()\n this.alternate_group = stream.readInt16()\n this.volume = stream.readInt16() >> 8\n stream.readUint16()\n // 视频转换矩阵\n let matrix = []\n for (let i = 0; i < 9; i++) {\n matrix.push(stream.readUint16() + '.' + stream.readUint16())\n }\n this.matrix = matrix\n this.width = stream.readUint16() + '.' + stream.readUint16()\n this.height = stream.readUint16() + '.' + stream.readUint16()\n delete this.data\n delete this.subBox\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.tfhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n\n // trackId: view.getUint32(4)\n this.track_id = stream.readUint32();\n\n let baseDataOffsetPresent = (this.flag & 0xff) & 0x01;\n let sampleDescriptionIndexPresent = (this.flag & 0xff) & 0x02;\n let defaultSampleDurationPresent = (this.flag & 0xff) & 0x08;\n let defaultSampleSizePresent = (this.flag & 0xff) & 0x10;\n let defaultSampleFlagsPresent = (this.flag & 0xff) & 0x20;\n\n let i = 8;\n if (baseDataOffsetPresent) {\n i += 4; // truncate top 4 bytes\n this.baseDataOffset = stream.readUint32();\n i += 4;\n }\n if (sampleDescriptionIndexPresent) {\n this.sampleDescriptionIndex = stream.readUint32();\n i += 4;\n }\n if (defaultSampleDurationPresent) {\n this.defaultSampleDuration = stream.readUint32();\n i += 4;\n }\n if (defaultSampleSizePresent) {\n this.defaultSampleSize = stream.readUint32();\n i += 4;\n }\n if (defaultSampleFlagsPresent) {\n this.defaultSampleFlags = stream.readUint32();\n }\n\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stts = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entry = []\n for (let i = 0, count = this.count; i < count; i++) {\n entry.push({\n sampleCount: stream.readUint32(),\n sampleDuration: stream.readUint32()\n })\n }\n this.entry = entry\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stsz = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.sampleSize = stream.readUint32()\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n if (this.sampleSize) {\n entries.push(this.sampleSize)\n }\n else {\n entries.push(stream.readUint32())\n }\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stss = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint32())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.stsd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.entryCount = stream.readUint32()\n let box = new Box()\n box.readHeader(stream)\n this.subBox.push(box)\n box.readBody(stream)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stsc = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push({\n first_chunk: stream.readUint32(),\n samples_per_chunk: stream.readUint32(),\n sample_desc_index: stream.readUint32()\n })\n }\n for (let i = 0, count = this.count, entry, preEntry; i < count - 1; i++) {\n entry = entries[i]\n preEntry = entries[i - 1]\n entry.chunk_count = entries[i + 1].first_chunk - entry.first_chunk\n entry.first_sample = i === 0 ? 1 : preEntry.first_sample + preEntry.chunk_count * preEntry.samples_per_chunk\n }\n if (this.count === 1) {\n let entry = entries[0]\n entry.first_sample = 1\n entry.chunk_count = 0\n } else if (this.count > 1) {\n let last = entries[this.count - 1]; let pre = entries[this.count - 2]\n last.first_sample = pre.first_sample + pre.chunk_count * pre.samples_per_chunk\n last.chunk_count = 0\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.stco = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint32())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.smhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.balance = stream.readInt8() + '.' + stream.readInt8()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\n\nBox.SLConfigDescriptor = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.SL = stream.readUint8()\n delete box.subBox\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\n\nBox.schm = function () {\n let stream = new Stream(this.data)\n\tthis.scheme_version = stream.readUint32();\n this.scheme_type = '';\n for (var i = 0; i < 4; i++) {\n this.scheme_type += String.fromCharCode(stream.readUint8());\n }\n\tif (this.flags & 0x000001) {\n this.scheme_uri = '';\n for (var i = 0; i < this.size - this.hdr_size - 8; i++) {\n this.scheme_uri += String.fromCharCode(stream.readUint8());\n }\n\t}\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.pasp = function () {\n let stream = new Stream(this.data)\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.mvhd = function () {\n let stream = new Stream(this.data)\n\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timeScale = stream.readUint32()\n this.duration = stream.readUint32()\n this.rate = stream.readUint16() + '.' + stream.readUint16()\n this.volume = stream.readUint8() + '.' + stream.readUint8()\n // 越过保留的10字节\n Stream.readByte(stream.dataview, 8)\n Stream.readByte(stream.dataview, 2)\n // 视频转换矩阵\n let matrix = []\n for (let i = 0; i < 9; i++) {\n matrix.push(stream.readUint16() + '.' + stream.readUint16())\n }\n this.matrix = matrix\n Stream.readByte(stream.dataview, 24)\n this.nextTrackID = stream.readUint32()\n delete this.subBox\n delete this.data\n}\n","import Box from '../box'\n\nBox.MP4ESDescrTag = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.esID = stream.readUint16()\n box.priority = stream.readUint8()\n box.subBox.push(Box.MP4DecConfigDescrTag(stream))\n box.subBox.push(Box.SLConfigDescriptor(stream))\n return box\n}\n","import Box from '../box'\n\nBox.MP4DecSpecificDescrTag = function (stream) {\n let box = new Box()\n let size, dataSize\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n dataSize = size - 5\n } else {\n dataSize = size\n size += 2\n }\n box.size = size\n let EScode = []\n for (let i = 0; i < dataSize; i++) {\n EScode.push(Number(stream.readUint8()).toString(16).padStart(2, '0'))\n }\n box.EScode = EScode\n delete box.subBox\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.MP4DecConfigDescrTag = function (stream) {\n let box = new Box()\n let size\n box.type = stream.readUint8()\n size = stream.readUint8()\n if (size === 0x80) {\n box.extend = true\n stream.skip(2)\n size = stream.readUint8() + 5\n } else {\n size += 2\n }\n box.size = size\n box.typeID = stream.readUint8()\n // 6 bits stream type,1 bit upstream flag,1 bit reserved flag\n box.streamUint = stream.readUint8()\n box.bufferSize = Stream.readByte(stream.dataview, 3)\n box.maximum = stream.readUint32()\n box.average = stream.readUint32()\n box.subBox.push(Box.MP4DecSpecificDescrTag(stream))\n return box\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.mp4a = function () {\n let stream = new Stream(this.data)\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(8)\n this.channelCount = stream.readUint16()\n this.sampleSize = stream.readUint16()\n stream.skip(4)\n this.sampleRate = stream.readUint32() >> 16\n let box = new Box()\n box.readHeader(stream)\n this.subBox.push(box)\n box.readBody(stream)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport UTC from '../date'\n\nBox.mdhd = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n if (this.version === 1) {\n this.create = stream.readUint64()\n this.modify = stream.readUint64()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timescale = stream.readUint32()\n this.duration = stream.readUint64()\n } else {\n this.create = stream.readUint32()\n this.modify = stream.readUint32()\n this.createTime = new UTC().setTime(this.create * 1000)\n this.modifyTime = new UTC().setTime(this.modify * 1000)\n this.timescale = stream.readUint32()\n this.duration = stream.readUint32()\n }\n this.language = stream.readUint16()\n stream.readUint16()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\n\nBox.mdat = function () {\n delete this.subBox\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.iods = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let content = []\n let length = stream.buffer.byteLength\n while (stream.position < length) {\n content.push(stream.readUint8())\n }\n this.content = content\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport SpsParser from './sps'\n\nBox.hvcC = function () {\n let stream = new Stream(this.data)\n this.configVersion = stream.readUint8()\n this.profile = stream.readUint8()\n this.profileCompatibility = stream.readUint32()\n this.constraintIndicatorFlags = []\n for (let i = 0; i < 6; i++) {\n this.constraintIndicatorFlags.push(Number(stream.readUint8()).toString(16))\n }\n this.levelIdc = stream.readUint8()\n this.profileCompatibilityIndications = stream.readUint32()\n this.bitDepthLumaMinus8 = stream.readUint8()\n this.bitDepthChromaMinus8 = stream.readUint8()\n this.avgFrameRate = stream.readUint16()\n this.constantFrameRate = stream.readUint8()\n this.numOfArrays = stream.readUint8()\n\n this.vpsHeader = stream.readUint24()\n this.vpsLength = stream.readUint16()\n let vps = []\n for (let i = 0; i < this.vpsLength; i++) {\n vps.push(Number(stream.readUint8()).toString(16))\n }\n this.vps = vps\n\n this.spsHeader = stream.readUint24()\n this.spsLength = stream.readUint16()\n let sps = []\n for (let i = 0; i < this.spsLength; i++) {\n sps.push(Number(stream.readUint8()).toString(16))\n }\n // this.spsInfo = SpsParser.parseSPS(new Uint8Array(sps))\n this.sequence = sps\n\n this.ppsHeader = stream.readUint24()\n this.ppsLength = stream.readUint16()\n let pps = []\n for (let i = 0; i < this.ppsLength; i++) {\n pps.push(Number(stream.readUint8()).toString(16))\n }\n this.pps = pps\n\n let last = []; let dataviewLength = stream.dataview.byteLength\n while (stream.position < dataviewLength) {\n last.push(stream.readUint8())\n }\n this.last = last\n delete this.subBox\n // delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.hvc1 = function () {\n let stream = new Stream(this.data)\n let self = this\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(16)\n this.width = stream.readUint16()\n this.height = stream.readUint16()\n this.horizresolution = stream.readUint32()\n this.vertresolution = stream.readUint32()\n stream.skip(4)\n this.frameCount = stream.readUint16()\n stream.skip(1)\n for (let i = 0; i < 31; i++) {\n String.fromCharCode(stream.readUint8())\n }\n this.depth = stream.readUint16()\n stream.skip(2)\n while (stream.position < stream.buffer.byteLength) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n // delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.hdlr = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n stream.skip(4)\n this.handleType = `${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}${String.fromCharCode(stream.readUint8())}`\n stream.skip(12)\n let name = []\n while (stream.position < this.size - 8) {\n name.push(String.fromCharCode(stream.readUint8()))\n }\n this.name = name.join('')\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.ftyp = function () {\n let stream = new Stream(this.data)\n this.major_brand = String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8())\n this.minor_version = stream.readUint32()\n let compatibleBrands = []\n for (let i = 0, len = Math.floor((stream.buffer.byteLength - 8) / 4); i < len; i++) {\n compatibleBrands.push(String.fromCharCode(stream.readUint8(), stream.readUint8(), stream.readUint8(), stream.readUint8()))\n }\n this.compatible_brands = compatibleBrands\n stream = null\n delete this.subBox\n delete this.data\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.frma = function () {\n let stream = new Stream(this.data)\n this.data_format = '';\n for (var i = 0; i < 4; i++) {\n this.data_format += String.fromCharCode(stream.readUint8());\n }\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.esds = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let box = Box.MP4ESDescrTag(stream)\n this.subBox.push(box)\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.elst = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let entries = []\n let entry_count = stream.readUint32()\n this.entries = entries\n for (let i = 0; i < entry_count; i++) {\n let entry = {}\n entries.push(entry)\n if (this.version === 1) {\n entry.segment_duration = stream.readUint64()\n entry.media_time = stream.readUint64()\n } else {\n entry.segment_duration = stream.readUint32()\n entry.media_time = stream.readInt32()\n }\n entry.media_rate_integer = stream.readInt16()\n entry.media_rate_fraction = stream.readInt16()\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.dref = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n let entryCount = stream.readUint32()\n this.entryCount = entryCount\n let self = this\n // 暂时不支持离散视频,视频的部分内容由url指定\n for (let i = 0; i < entryCount; i++) {\n let box = new Box()\n self.subBox.push(box)\n box.read(stream)\n }\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.ctts = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n\n this.entryCount = stream.readUint32()\n let entry = []\n this.entry = entry\n for (let i = 0, count = this.entryCount; i < count; i++) {\n entry.push({\n count: stream.readUint32(),\n offset: stream.readUint32()\n })\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.co64 = function () {\n let stream = new Stream(this.data)\n this.version = stream.readUint8()\n this.flag = Stream.readByte(stream.dataview, 3)\n this.count = stream.readUint32()\n let entries = []\n this.entries = entries\n for (let i = 0, count = this.count; i < count; i++) {\n entries.push(stream.readUint64())\n }\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nBox.btrt = function () {\n let stream = new Stream(this.data)\n this.bufferSizeDB = stream.readUint32()\n this.maxBitrate = stream.readUint32()\n this.avgBitrate = stream.readUint32()\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\nimport SpsParser from './sps'\n\nBox.avcC = function () {\n let stream = new Stream(this.data)\n this.configVersion = stream.readUint8()\n this.profile = stream.readUint8()\n this.profileCompatibility = stream.readUint8()\n this.AVCLevelIndication = stream.readUint8()\n this.lengthSizeMinusOne = (stream.readUint8() & 3) + 1\n this.numOfSequenceParameterSets = stream.readUint8() & 31\n let sequenceLength = stream.readUint16()\n this.sequenceLength = sequenceLength\n let sequence = []\n for (let i = 0; i < sequenceLength; i++) {\n sequence.push(stream.readUint8())\n }\n this.spsInfo = SpsParser.parseSPS(new Uint8Array(sequence))\n this.ppsCount = stream.readUint8()\n let ppsLength = stream.readUint16()\n this.ppsLength = ppsLength\n let pps = []\n for (let i = 0; i < ppsLength; i++) {\n pps.push(Number(stream.readUint8()).toString(16))\n }\n this.pps = pps\n this.sequence = sequence\n let last = []; let dataviewLength = stream.dataview.byteLength\n while (stream.position < dataviewLength) {\n last.push(stream.readUint8())\n }\n this.last = last\n delete this.subBox\n delete this.data\n stream = null\n}\n","import Box from '../box'\nimport Stream from '../stream'\n\nBox.avc1 = function () {\n let stream = new Stream(this.data)\n let self = this\n stream.skip(6)\n this.dataReferenceIndex = stream.readUint16()\n stream.skip(16)\n this.width = stream.readUint16()\n this.height = stream.readUint16()\n this.horizresolution = stream.readUint32()\n this.vertresolution = stream.readUint32()\n stream.skip(4)\n this.frameCount = stream.readUint16()\n stream.skip(1)\n for (let i = 0; i < 31; i++) {\n String.fromCharCode(stream.readUint8())\n }\n this.depth = stream.readUint16()\n stream.skip(2)\n while (stream.position < stream.buffer.byteLength) {\n let box = new Box()\n box.readHeader(stream)\n self.subBox.push(box)\n box.readBody(stream)\n }\n delete this.data\n stream = null\n}\n","import Buffer from './buffer'\nconst UINT32_MAX = Math.pow(2, 32) - 1\n\nclass FMP4 {\n static type (name) {\n return new Uint8Array([name.charCodeAt(0), name.charCodeAt(1), name.charCodeAt(2), name.charCodeAt(3)])\n }\n static size (value) {\n return Buffer.writeUint32(value)\n }\n static extension (version, flag) {\n return new Uint8Array([\n version,\n (flag >> 16) & 0xff,\n (flag >> 8) & 0xff,\n flag & 0xff\n ])\n }\n static ftyp () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(24), FMP4.type('ftyp'), new Uint8Array([\n 0x69, 0x73, 0x6F, 0x36, // isom,\n 0x0, 0x0, 0x00, 0x01, // minor_version: 0x01\n 0x69, 0x73, 0x6F, 0x36, // isom\n 0x64, 0x61, 0x73, 0x68 // avc1\n ]))\n return buffer.buffer\n }\n static moov (data) {\n let buffer = new Buffer(); let size = 8\n let mvhd = FMP4.mvhd(data.duration, data.timeScale)\n let mvex = FMP4.mvex(data.duration, data.timeScale)\n let trak1 = FMP4.videoTrak(data)\n let trak2 = new Uint8Array([])\n if (data.channelCount) {\n trak2 = FMP4.audioTrak(data);\n }\n [mvhd, mvex, trak1, trak2].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('moov'), mvhd, mvex, trak1, trak2)\n return buffer.buffer\n }\n static mvhd (duration, timescale) {\n let buffer = new Buffer()\n duration *= timescale\n // const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n // const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let bytes = new Uint8Array([\n 0x00, // version 1\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >> 24) & 0xff,\n (timescale >> 16) & 0xff,\n (timescale >> 8) & 0xff,\n timescale & 0xff, // timescale\n (duration >> 24) & 0xff,\n (duration >> 16) & 0xff,\n (duration >> 8) & 0xff,\n duration & 0xff, // duration\n 0x00, 0x01, 0x00, 0x00, // 1.0 rate\n 0x01, 0x00, // 1.0 volume\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x00, 0x00, 0x00, 0x03 // next_track_ID\n ])\n buffer.write(FMP4.size(8 + bytes.length), FMP4.type('mvhd'), new Uint8Array(bytes))\n return buffer.buffer\n }\n static videoTrak (data) {\n let buffer = new Buffer(); let size = 8\n let tkhd = FMP4.tkhd({\n id: 1,\n duration: data.videoDuration,\n timescale: data.videoTimeScale,\n width: data.width,\n height: data.height,\n type: 'video'\n })\n let mdia = FMP4.mdia({\n type: 'video',\n timescale: data.videoTimeScale,\n duration: data.videoDuration,\n vps: data.vps,\n sps: data.sps,\n pps: data.pps,\n pixelRatio: data.pixelRatio,\n width: data.width,\n height: data.height,\n videoCodec: data.videoCodec,\n hvc1Data: data.hvc1Data,\n hvcCData: data.hvcCData,\n stss: data.stss\n });\n [tkhd, mdia].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('trak'), tkhd, mdia)\n return buffer.buffer\n }\n static audioTrak (data) {\n let buffer = new Buffer(); let size = 8\n let tkhd = FMP4.tkhd({\n id: 2,\n duration: data.audioDuration,\n timescale: data.audioTimeScale,\n width: 0,\n height: 0,\n type: 'audio'\n })\n let channelCount = data.channelCount\n let sampleRate = data.sampleRate\n let mdia = FMP4.mdia({\n type: 'audio',\n timescale: data.audioTimeScale,\n duration: data.audioDuration,\n channelCount,\n sampleRate,\n audioConfig: data.audioConfig\n });\n [tkhd, mdia].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('trak'), tkhd, mdia)\n return buffer.buffer\n }\n static tkhd (data) {\n let buffer = new Buffer()\n let id = data.id\n\n let duration = data.duration * data.timeScale\n\n let width = data.width\n\n let height = data.height\n\n let type = data.type\n\n // let upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n\n // let lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let content = new Uint8Array([\n 0x00, // version 1\n 0x00, 0x00, 0x03, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0xD9, 0xAC, 0xEC, 0x56, // modification_time\n (id >> 24) & 0xff,\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n id & 0xff, // track_ID\n 0x00, 0x00, 0x00, 0x00, // reserved\n (duration >> 24) & 0xff,\n (duration >> 16) & 0xff,\n (duration >> 8) & 0xff,\n duration & 0xff, // duration\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, type === 'video' ? 0x01 : 0x00, // alternate_group\n type === 'audio' ? 0x01 : 0x00, 0x00, // non-audio track volume\n 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n (width >> 8) & 0xff,\n width & 0xff,\n 0x00, 0x00, // width\n (height >> 8) & 0xff,\n height & 0xff,\n 0x00, 0x00 // height\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('tkhd'), content)\n return buffer.buffer\n }\n static edts (data) {\n let buffer = new Buffer(); let duration = data.duration; let mediaTime = data.mediaTime\n buffer.write(FMP4.size(36), FMP4.type('edts'))\n // elst\n buffer.write(FMP4.size(28), FMP4.type('elst'))\n buffer.write(new Uint8Array([\n 0x00, 0x00, 0x00, 0x01, // entry count\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,\n (mediaTime >> 24) & 0xff, (mediaTime >> 16) & 0xff, (mediaTime >> 8) & 0xff, mediaTime & 0xff,\n 0x00, 0x00, 0x00, 0x01 // media rate\n ]))\n return buffer.buffer\n }\n static mdia (data) {\n let buffer = new Buffer(); let size = 8\n let mdhd = FMP4.mdhd(data.timescale)\n let hdlr = FMP4.hdlr(data.type)\n let minf = FMP4.minf(data);\n [mdhd, hdlr, minf].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('mdia'), mdhd, hdlr, minf)\n return buffer.buffer\n }\n static mdhd (timescale, duration = 0) {\n let buffer = new Buffer()\n duration *= timescale\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1))\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1))\n let content = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0xD9, 0x14, 0x25, 0x5A, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n 0x00, 0x00, 0x00, 0x00, // duration\n 0x15, 0xC7, // 'und' language\n 0x00, 0x00\n ])\n buffer.write(FMP4.size(12 + content.byteLength), FMP4.type('mdhd'), FMP4.extension(0, 0), content)\n return buffer.buffer\n }\n static hdlr (type) {\n let buffer = new Buffer()\n let value = [0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65,\n 0x6f, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]\n if (type === 'audio') {\n value.splice(8, 4, ...[0x73, 0x6f, 0x75, 0x6e])\n value.splice(24, 13, ...[0x53, 0x6f, 0x75, 0x6e,\n 0x64, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00])\n }\n buffer.write(FMP4.size(8 + value.length), FMP4.type('hdlr'), new Uint8Array(value))\n return buffer.buffer\n }\n static minf (data) {\n let buffer = new Buffer(); let size = 8\n let vmhd = data.type === 'video' ? FMP4.vmhd() : FMP4.smhd()\n let dinf = FMP4.dinf()\n let stbl = FMP4.stbl(data);\n [vmhd, dinf, stbl].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('minf'), vmhd, dinf, stbl)\n return buffer.buffer\n }\n static vmhd () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(20), FMP4.type('vmhd'), new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphicsmode\n 0x00, 0x00,\n 0x00, 0x00,\n 0x00, 0x00 // opcolor\n ]))\n return buffer.buffer\n }\n static smhd () {\n let buffer = new Buffer()\n buffer.write(FMP4.size(16), FMP4.type('smhd'), new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]))\n return buffer.buffer\n }\n static dinf () {\n let buffer = new Buffer()\n let dref = [0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0c, // entry_size\n 0x75, 0x72, 0x6c, 0x20, // 'url' type\n 0x00, // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]\n buffer.write(FMP4.size(36), FMP4.type('dinf'), FMP4.size(28), FMP4.type('dref'), new Uint8Array(dref))\n return buffer.buffer\n }\n static stbl (data) {\n let buffer = new Buffer(); let size = 8\n let stsd = FMP4.stsd(data)\n let stts = FMP4.stts()\n let stsc = FMP4.stsc()\n let stsz = FMP4.stsz()\n let stco = FMP4.stco();\n if(data.type === 'video') {\n let stss = FMP4.stss(data.stss);\n [stsd, stts, stss, stsc, stsz, stco].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('stbl'), stsd, stts, stss, stsc, stsz, stco)\n } else {\n [stsd, stts, stsc, stsz, stco].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('stbl'), stsd, stts, stsc, stsz, stco)\n }\n \n return buffer.buffer\n }\n static stsd (data) {\n let buffer = new Buffer(); let content\n if (data.type === 'audio') {\n content = FMP4.mp4a(data)\n } else if (data.videoCodec.indexOf('hvc1') > -1) {\n content = FMP4.hvc1(data)\n } else {\n content = FMP4.avc1(data)\n }\n buffer.write(\n FMP4.size(16 + content.byteLength), \n FMP4.type('stsd'), \n FMP4.extension(0, 0), \n new Uint8Array([0x00, 0x00, 0x00, 0x01]),\n content\n )\n return buffer.buffer\n }\n static mp4a (data) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, data.channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n (data.sampleRate >> 8) & 0xff,\n data.sampleRate & 0xff, //\n 0x00, 0x00\n ])\n let esds = FMP4.esds(data.audioConfig)\n buffer.write(FMP4.size(8 + content.byteLength + esds.byteLength), FMP4.type('mp4a'), content, esds)\n return buffer.buffer\n }\n static esds (config = [43, 146, 8, 0]) {\n const configlen = config.length\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n\n 0x03, // descriptor_type\n 0x17 + configlen, // length\n 0x00, 0x01, // es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x0f + configlen, // length\n 0x40, // codec : mpeg4_audio\n 0x15, // stream_type\n 0x00, 0x00, 0x00, // buffer_size\n 0x00, 0x00, 0x00, 0x00, // maxBitrate\n 0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n 0x05 // descriptor_type\n ].concat([configlen]).concat(config).concat([0x06, 0x01, 0x02]))\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('esds'), content)\n return buffer.buffer\n }\n static avc1 (data) {\n let buffer = new Buffer(); let size = 40// 8(avc1)+8(avcc)+8(btrt)+16(pasp)\n let sps = data.sps; let pps = data.pps; let width = data.width; let height = data.height; let hSpacing = data.pixelRatio[0]; let vSpacing = data.pixelRatio[1]\n let avcc = new Uint8Array([\n 0x01, // version\n sps[1], // profile\n sps[2], // profile compatible\n sps[3], // level\n 0xfc | 3,\n 0xE0 | 1 // 目前只处理一个sps\n ].concat([sps.length >>> 8 & 0xff, sps.length & 0xff]).concat(sps).concat(1).concat([pps.length >>> 8 & 0xff, pps.length & 0xff]).concat(pps))\n let avc1 = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (width >> 8) & 0xff,\n width & 0xff, // width\n (height >> 8) & 0xff,\n height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x12,\n 0x64, 0x61, 0x69, 0x6C, // dailymotion/hls.js\n 0x79, 0x6D, 0x6F, 0x74,\n 0x69, 0x6F, 0x6E, 0x2F,\n 0x68, 0x6C, 0x73, 0x2E,\n 0x6A, 0x73, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0x11, 0x11]) // pre_defined = -1\n let btrt = new Uint8Array([\n 0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0 // avgBitrate\n ])\n let pasp = new Uint8Array([\n (hSpacing >> 24), // hSpacing\n (hSpacing >> 16) & 0xff,\n (hSpacing >> 8) & 0xff,\n hSpacing & 0xff,\n (vSpacing >> 24), // vSpacing\n (vSpacing >> 16) & 0xff,\n (vSpacing >> 8) & 0xff,\n vSpacing & 0xff\n ])\n\n buffer.write(\n FMP4.size(size + avc1.byteLength + avcc.byteLength + btrt.byteLength), FMP4.type('avc1'), avc1,\n FMP4.size(8 + avcc.byteLength), FMP4.type('avcC'), avcc,\n FMP4.size(20), FMP4.type('btrt'), btrt,\n FMP4.size(16), FMP4.type('pasp'), pasp\n )\n return buffer.buffer\n }\n static hvc1 (data) {\n const buffer = new Buffer()\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (data.width >> 8) & 0xFF,\n data.width & 0xff, // width\n (data.height >> 8) & 0xFF,\n data.height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x00,\n 0x00, 0x00, 0x00, 0x00, // dailymotion/hls.js\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0xFF, 0xFF,\n ]);\n\n buffer.write(\n FMP4.size(8 + content.byteLength + 8 + data.hvcCData.byteLength + 10), FMP4.type('hvc1'), content,\n FMP4.size(8 + data.hvcCData.byteLength), FMP4.type('hvcC'), new Uint8Array(data.hvcCData),\n FMP4.size(10), FMP4.type('fiel'), new Uint8Array([0x01, 0x00])\n )\n return buffer.buffer\n }\n static stts () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stts'), content)\n return buffer.buffer\n }\n static stss (stssObj) {\n let buffer = new Buffer()\n let entries = [];\n stssObj.entries.forEach(item => {\n entries.push(item >> 24)\n entries.push((item >> 16) & 0xff)\n entries.push((item >> 8) & 0xff)\n entries.push(item & 0xff)\n })\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n (stssObj.count >> 24), // entry_count\n (stssObj.count >> 16) & 0xff,\n (stssObj.count >> 8) & 0xff,\n stssObj.count & 0xff,\n ].concat(entries))\n buffer.write(FMP4.size(8+8+4*stssObj.count), FMP4.type('stss'), content)\n return buffer.buffer\n }\n static stsc () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stsc'), content)\n return buffer.buffer\n }\n static stco () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n buffer.write(FMP4.size(16), FMP4.type('stco'), content)\n return buffer.buffer\n }\n static stsz () {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ])\n buffer.write(FMP4.size(20), FMP4.type('stsz'), content)\n return buffer.buffer\n }\n static mvex (duration, timeScale) {\n let buffer = new Buffer()\n let mehd = Buffer.writeUint32(duration * timeScale)\n buffer.write(FMP4.size(88), FMP4.type('mvex'), FMP4.size(16), FMP4.type('mehd'), FMP4.extension(0, 0), mehd, FMP4.trex1(1), FMP4.trex2(2))\n return buffer.buffer\n }\n static trex (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static trex1 (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x02, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x00 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static trex2 (id) {\n let buffer = new Buffer()\n let content = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x04, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x02, 0x00, 0x00, 0x00 // default_sample_flags\n ])\n buffer.write(FMP4.size(8 + content.byteLength), FMP4.type('trex'), content)\n return buffer.buffer\n }\n static moof (data) {\n let buffer = new Buffer(); let size = 8\n let mfhd = FMP4.mfhd(data)\n let traf = FMP4.traf(data);\n [mfhd, traf].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('moof'), mfhd, traf)\n return buffer.buffer\n }\n static mfhd (data) {\n let buffer = new Buffer()\n let content = null;\n if (data.id === 1) {\n content = Buffer.writeUint32((data.fragIndex || 0) + 1)\n }\n else {\n content = Buffer.writeUint32((data.fragIndex || 0) + 1)\n }\n buffer.write(FMP4.size(16), FMP4.type('mfhd'), FMP4.extension(0, 0), content)\n return buffer.buffer\n }\n static traf (data) {\n let buffer = new Buffer(); let size = 8\n let tfhd = FMP4.tfhd(data.id)\n let tfdt = FMP4.tfdt(data, data.time)\n let sdtp = FMP4.sdtp(data)\n let trun = FMP4.trun(data, sdtp.byteLength);\n [tfhd, tfdt, sdtp, trun].forEach(item => {\n size += item.byteLength\n })\n buffer.write(FMP4.size(size), FMP4.type('traf'), tfhd, tfdt, sdtp, trun)\n return buffer.buffer\n }\n static tfhd (id) {\n let buffer = new Buffer()\n let content = Buffer.writeUint32(id)\n buffer.write(FMP4.size(16), FMP4.type('tfhd'), new Uint8Array([\n 0x00, 0x02, 0x00, 0x00\n ]), content)\n return buffer.buffer\n }\n static tfdt (data, time) {\n let buffer = new Buffer()\n let upper = Math.floor(time / (UINT32_MAX + 1))\n let lower = Math.floor(time % (UINT32_MAX + 1))\n buffer.write(FMP4.size(20), FMP4.type('tfdt'), FMP4.extension(1, 0), Buffer.writeUint32(upper), Buffer.writeUint32(lower))\n return buffer.buffer\n }\n static trun (data, sdtpLength) {\n let id = data.id\n let ceil = id === 1 ? 16 : 12\n let buffer = new Buffer()\n let sampleCount = Buffer.writeUint32(data.samples.length)\n // mdat-header 8\n // moof-header 8\n // mfhd 16\n // traf-header 8\n // thhd 16\n // tfdt 20\n // trun-header 12\n // sampleCount 4\n // data-offset 4\n // samples.length\n let offset = Buffer.writeUint32(8 + 8 + 16 + 8 + 16 + 20 + 12 + 4 + 4 + ceil * data.samples.length + sdtpLength)\n buffer.write(FMP4.size(20 + ceil * data.samples.length), FMP4.type('trun'), FMP4.extension(0, data.flags), sampleCount, offset)\n data.samples.forEach((item, idx) => {\n buffer.write(Buffer.writeUint32(item.duration))\n buffer.write(Buffer.writeUint32(item.size))\n if (id === 1) {\n buffer.write(Buffer.writeUint32(item.key ? 0x02000000 : 0x01010000))\n buffer.write(Buffer.writeUint32(item.offset))\n } else {\n buffer.write(Buffer.writeUint32(0x1000000))\n }\n })\n return buffer.buffer\n }\n static sdtp (data) {\n let buffer = new Buffer()\n buffer.write(FMP4.size(12 + data.samples.length), FMP4.type('sdtp'), FMP4.extension(0, 0))\n data.samples.forEach(item => {\n buffer.write(new Uint8Array(data.id === 1 ? [item.key ? 32 : 16] : [16]))\n })\n return buffer.buffer\n }\n static mdat (data) {\n let buffer = new Buffer(); \n let size = 8;\n data.samples.forEach(item => {\n size += item.size\n })\n buffer.write(FMP4.size(size), FMP4.type('mdat'))\n data.samples.forEach(item => {\n buffer.write(item.buffer)\n })\n return buffer.buffer\n }\n}\n\nexport default FMP4","export default function getResponseHeaders(xhr) {\n const headerMap = {};\n if (xhr instanceof window.XMLHttpRequest) {\n try {\n const headers = xhr.getAllResponseHeaders();\n\n const arr = headers.trim().split(/[\\r\\n]+/);\n arr.forEach(function (line) {\n const parts = line.split(': ');\n const header = parts.shift();\n const value = parts.join(': ');\n headerMap[header] = value;\n });\n } catch (error) {\n }\n }\n return headerMap;\n}","let util = {}\n\n/**\n * [使用递归查询指定type的box]\n * var mimeCodec = 'video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"';\n * @param {Object} root [JSON对象]\n * @param {String} type [box的类型]\n * @param {?Array} type [box]\n * @return {Object|Array<Object>|undefined} [box]\n */\nutil.findBox = function (root, type, result = []) {\n if (root.type !== type) {\n if (root && root.subBox) {\n let box = root.subBox.filter(item => item.type === type)\n if (box.length) {\n box.forEach(item => result.push(item))\n } else {\n root.subBox.forEach(item => util.findBox(item, type, result))\n }\n }\n } else {\n result.push(root)\n }\n result = [].concat(result)\n return result.length > 1 ? result : result[0]\n}\n\nutil.padStart = function (str, length, pad) {\n let charstr = String(pad); let len = length >> 0; let maxlen = Math.ceil(len / charstr.length)\n let chars = []; let r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\n/**\n * [十进制转十六进制]\n * @param {Number} value [要转换的十进制数字]\n * @return {String} [十六进制]\n */\nutil.toHex = function (...value) {\n let hex = []\n value.forEach(item => {\n hex.push(util.padStart(Number(item).toString(16), 2, 0))\n })\n return hex\n}\n\n/**\n * [求和计算]\n * @param {[type]} rst [description]\n * @return {[type]} [description]\n */\nutil.sum = function (...rst) {\n let count = 0\n rst.forEach(item => { count += item })\n return count\n}\n\n/**\n * [计算音视频数据在Mdat中的偏移量]\n * @param {Array} stsc [块偏移量]\n * @param {Number} sample_order [帧次序]\n * @return {Object} [块的位置和当前帧的偏移数]\n */\nutil.stscOffset = function (stsc, sample_order, stscObj) {\n let chunk_index; let samples_offset = ''\n // let chunk_start = stsc.entries.filter((item) => {\n // return item.first_sample <= sample_order && sample_order < item.first_sample + item.chunk_count * item.samples_per_chunk\n // })[0]\n let chunk_start = stscObj[sample_order]\n if (!chunk_start) {\n let last_chunk = stsc.entries.pop()\n stsc.entries.push(last_chunk)\n let chunk_offset = Math.floor((sample_order - last_chunk.first_sample) / last_chunk.samples_per_chunk)\n chunk_offset = Math.min(chunk_offset, last_chunk.chunk_count)\n let last_chunk_index = last_chunk.first_chunk + chunk_offset\n let last_chunk_first_sample = last_chunk.first_sample + last_chunk.samples_per_chunk * chunk_offset\n return {\n chunk_index: last_chunk_index,\n samples_offset: [last_chunk_first_sample, sample_order]\n }\n } else {\n let chunk_offset = Math.floor((sample_order - chunk_start.first_sample) / chunk_start.samples_per_chunk)\n let chunk_offset_sample = chunk_start.first_sample + chunk_offset * chunk_start.samples_per_chunk\n chunk_index = chunk_start.first_chunk + chunk_offset\n samples_offset = [chunk_offset_sample, sample_order]\n return {\n chunk_index: chunk_index,\n samples_offset\n }\n }\n}\n\nutil.seekSampleOffset = function (stsc, stco, stsz, order, mdatStart, stscObj) {\n let chunkOffset = util.stscOffset(stsc, order + 1, stscObj)\n let result = stco.entries[chunkOffset.chunk_index - 1] + util.sum.apply(null, stsz.entries.slice(chunkOffset.samples_offset[0] - 1, chunkOffset.samples_offset[1] - 1)) - mdatStart\n if (result === undefined) {\n throw `result=${result},stco.length=${stco.entries.length},sum=${util.sum.apply(null, stsz.entries.slice(0, order))}`\n } else if (result < 0) {\n throw `result=${result},stco.length=${stco.entries.length},sum=${util.sum.apply(null, stsz.entries.slice(0, order))}`\n }\n return result\n}\n\nutil.seekSampleTime = function (stts, cttsObj, order) {\n let time; let duration; let count = 0; let startTime = 0; let offset = 0\n stts.entry.every(item => {\n duration = item.sampleDuration\n if (order < count + item.sampleCount) {\n time = startTime + (order - count) * item.sampleDuration\n return false\n } else {\n count += item.sampleCount\n startTime += item.sampleCount * duration\n return true\n }\n })\n if (cttsObj) {\n if (cttsObj[order]) {\n offset = cttsObj[order]\n }\n }\n if (!time) {\n time = startTime + (order - count) * duration\n }\n return {time, duration, offset}\n}\n\nutil.seekOrderSampleByTime = function (stts, timeScale, time) {\n let startTime = 0; let order = 0; let count = 0; let itemDuration\n stts.every((item, idx) => {\n itemDuration = item.sampleCount * item.sampleDuration / timeScale\n if (time <= startTime + itemDuration) {\n order = count + Math.ceil((time - startTime) * timeScale / item.sampleDuration)\n startTime = startTime + Math.ceil((time - startTime) * timeScale / item.sampleDuration) * item.sampleDuration / timeScale\n return false\n } else {\n startTime += itemDuration\n count += item.sampleCount\n return true\n }\n })\n return {order, startTime}\n}\n\nutil.seekTrakDuration = function (trak, timeScale) {\n let stts = util.findBox(trak, 'stts'); let duration = 0\n stts.entry.forEach(item => {\n duration += item.sampleCount * item.sampleDuration\n })\n return Number(duration / timeScale).toFixed(4)\n}\n\nutil.StringToArrayBuffer = function (str) {\n let arr = new ArrayBuffer(str.length)\n let view = new Uint8Array(arr)\n for (let i = 0; i < str.length; i++) {\n view[i] = str.charCodeAt(i)\n }\n return arr\n}\n/**\n * Convert a hex string to a Uint8Array.\n * @param {string} str\n * @return {!Uint8Array}\n * @export\n */\nutil.fromHex = function (str) {\n let arr = new Uint8Array(str.length / 2)\n for (let i = 0; i < str.length; i += 2) {\n arr[i / 2] = window.parseInt(str.substr(i, 2), 16)\n }\n return arr\n}\nutil.fromCharCode = function (array) {\n let max = 16000\n let ret = ''\n for (let i = 0; i < array.length; i += max) {\n let subArray = array.subarray(i, i + max)\n ret += String.fromCharCode.apply(null, subArray)\n }\n\n return ret\n}\nutil.ArrayBufferToString = function (arr) {\n let str = ''\n let view = new Uint8Array(arr)\n for (let i = 0; i < view.length; i++) {\n str += String.fromCharCode(view[i])\n }\n return str\n}\nutil.Base64ToHex = function (str) {\n let bin = window.atob(str.replace(/-/g, '+').replace(/_/g, '/'))\n let res = ''\n for (let i = 0; i < bin.length; i++) {\n res += ('0' + bin.charCodeAt(i).toString(16)).substr(-2)\n }\n return res\n}\n\n/**\n * Convert a Uint8Array to a base64 string. The output will always use the\n * alternate encoding/alphabet also known as \"base64url\".\n * @param {!Uint8Array} arr\n * @param {boolean=} padding If true, pad the output with equals signs.\n * Defaults to true.\n * @return {string}\n * @export\n */\nutil.toBase64 = function (arr, padding) {\n // btoa expects a \"raw string\" where each character is interpreted as a byte.\n let bytes = util.fromCharCode(arr)\n padding = (padding === undefined) ? true : padding\n let base64 = window.btoa(bytes).replace(/\\+/g, '-').replace(/\\//g, '_')\n return padding ? base64 : base64.replace(/=*$/, '')\n}\n\nutil.toUTF8 = function (str) {\n // http://stackoverflow.com/a/13691499\n // Converts the given string to a URI encoded string. If a character falls\n // in the ASCII range, it is not converted; otherwise it will be converted to\n // a series of URI escape sequences according to UTF-8.\n // Example: 'g#€' -> 'g#%E3%82%AC'\n let encoded = encodeURIComponent(str)\n // Convert each escape sequence individually into a character. Each escape\n // sequence is interpreted as a code-point, so if an escape sequence happens\n // to be part of a multi-byte sequence, each byte will be converted to a\n // single character.\n // Example: 'g#%E3%82%AC' -> '\\x67\\x35\\xe3\\x82\\xac'\n let utf8 = unescape(encoded)\n\n let result = new Uint8Array(utf8.length)\n for (let i = 0; i < utf8.length; ++i) {\n result[i] = utf8.charCodeAt(i)\n }\n return result.buffer\n}\n\nutil.bufferToString = function (value) {\n return ('0' + (Number(value).toString(16))).slice(-2).toUpperCase()\n}\nutil.strToBuf = function (str) {\n let buffer = []\n for (let i = 0; i < str.length; i = i + 2) {\n buffer.push(\n parseInt(str[i] + str[i + 1], 16)\n )\n }\n return new Uint8Array(buffer)\n}\nutil.str2hex = function (str) {\n if (str === '') {\n return ''\n }\n let arr = []\n for (let i = 0; i < str.length; i++) {\n arr.push(str.charCodeAt(i))\n }\n return arr\n}\nutil.parse = function (a) {\n if (!Array.isArray(a)) {\n let arr = []\n let value = ''\n for (let i = 0; i < a.length; i++) {\n if (i % 2) {\n value = a[i - 1] + a[ i ]\n arr.push(parseInt(value, 16))\n value = ''\n }\n }\n return arr\n }\n return a.map(item => { return parseInt(item, 16) })\n}\nexport default util\n","import EventEmitter from 'event-emitter'\nimport Errors from '../error'\n\nclass MSE {\n constructor (codecs = 'video/mp4; codecs=\"avc1.64001E, mp4a.40.5\"', mediaType) {\n EventEmitter(this)\n this.codecs = codecs\n this.mediaSource = new window.MediaSource(mediaType)\n this.url = window.URL.createObjectURL(this.mediaSource)\n this.queue = []\n this.updating = false\n this._hasDestroyed = false;\n this._hasEndOfStream = false;\n this._hasEndOfStreamSuccess = false;\n this._onSourceOpen = this._onSourceOpen.bind(this);\n this._onMediaSourceClose = this._onMediaSourceClose.bind(this);\n this._onSourceBufferError = this._onSourceBufferError.bind(this);\n this._onSourceBufferUpdateEnd = this._onSourceBufferUpdateEnd.bind(this);\n this.mediaSource.addEventListener('sourceopen', this._onSourceOpen);\n this.mediaSource.addEventListener('sourceclose', this._onMediaSourceClose);\n }\n\n _onSourceOpen(){\n let self = this;\n self.sourceBuffer = self.mediaSource.addSourceBuffer(self.codecs);\n self.sourceBuffer.addEventListener('error', this._onSourceBufferError);\n self.sourceBuffer.addEventListener('updateend', this._onSourceBufferUpdateEnd);\n self.emit('sourceopen')\n }\n\n _onSourceBufferError(e){\n this.emit('error', new Errors('mse', '', {line: 16, handle: '[MSE] constructor sourceopen', msg: e.message}))\n }\n\n _onSourceBufferUpdateEnd(){\n let self = this;\n self.emit('updateend');\n if(this._hasEndOfStream && !this._hasEndOfStreamSuccess){\n this._endOfStream();\n return;\n }\n let buffer = self.queue.shift()\n if (buffer && self.sourceBuffer && self.sourceBuffer.updating === false && self.state === 'open') {\n self.sourceBuffer.appendBuffer(buffer)\n } else if(buffer) {\n self.queue.unshift(buffer);\n }\n }\n\n _onMediaSourceClose(){\n this.emit('sourceclose')\n }\n\n get state () {\n return this.mediaSource.readyState\n }\n\n get duration () {\n return this.mediaSource.duration\n }\n\n set duration (value) {\n this.mediaSource.duration = value\n }\n\n appendBuffer (buffer) {\n if(!buffer) return;\n \n let sourceBuffer = this.sourceBuffer\n if (sourceBuffer && !sourceBuffer.updating && this.state === 'open') {\n sourceBuffer.appendBuffer(buffer)\n return true\n } else {\n this.queue.push(buffer)\n return false\n }\n }\n\n removeBuffer (start, end) {\n let sourceBuffer = this.sourceBuffer\n if (sourceBuffer && sourceBuffer.updating === false && this.state === 'open') {\n sourceBuffer.remove(start, end)\n }\n }\n\n endOfStream () {\n this._hasEndOfStream = true;\n if (this.mediaSource.readyState === 'open') {\n if(this.sourceBuffer && !this.sourceBuffer.updating){\n this._hasEndOfStreamSuccess = true;\n this._endOfStream();\n }\n \n }\n }\n\n _endOfStream(){\n this.queue = [];\n if(this.mediaSource.readyState === 'open'){\n this.mediaSource.endOfStream()\n }\n }\n\n static isSupported (codecs) {\n return window.MediaSource && window.MediaSource.isTypeSupported(codecs)\n }\n\n destroy(){\n if(this._hasDestroyed){\n return;\n }\n this._hasDestroyed = true;\n window.URL.revokeObjectURL(this.url);\n if(this.mediaSource) {\n this.mediaSource.removeEventListener('sourceclose', this._onMediaSourceClose);\n this.mediaSource.removeEventListener('sourceopen', this._onSourceOpen);\n }\n if(this.sourceBuffer) {\n this.sourceBuffer.removeEventListener('error', this._onSourceBufferError);\n this.sourceBuffer.removeEventListener('updateend', this._onSourceBufferUpdateEnd);\n }\n }\n}\n\nexport default MSE\n","exports.isMSBrowser = function () {\n let ua = window.navigator.userAgent\n let msie = ua.indexOf('MSIE ')\n let trident = ua.indexOf('Trident/')\n return msie > 0 || trident > 0\n}\n\nexports.isMediaSourceSupported = function () {\n const mediaSource = (window.MediaSource = window.MediaSource || window.WebKitMediaSource)\n return mediaSource && typeof mediaSource.isTypeSupported === 'function'\n}\n\nexports.isSupported = function () {\n return exports.isMediaSourceSupported()\n && !exports.isMSBrowser() \n}\n\nexports.isSupportedWithXgmse = function () {\n return !exports.isMSBrowser() \n}\n","\nexport default class ProxyPromise {\n \n constructor() {\n let resolvePromise;\n let rejectPromise;\n\n const promise = new Promise(((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n }));\n\n const publicPromise = promise\n publicPromise.resolve = resolvePromise;\n publicPromise.reject = rejectPromise;\n\n return publicPromise;\n }\n\n\n /** @param {T=} value */\n resolve(value) {}\n\n\n /** @param {*=} reason */\n reject(reason) {}\n};\n","export default class Timer{\n \n constructor(onTick) {\n this.onTick_ = onTick;\n this.cancelPending_ = null;\n }\n\n tickAfter(delayInSeconds, callback = null) {\n \n this.stop();\n let alive = true;\n let timeoutId = null;\n \n this.cancelPending_ = () => {\n window.clearTimeout(timeoutId);\n alive = false;\n };\n \n const onTick = () => {\n if (alive) {\n this.onTick_();\n if(callback){\n callback();\n }\n }\n };\n \n timeoutId = window.setTimeout(onTick, delayInSeconds * 1000);\n \n return this;\n }\n\n tickEvery(seconds){\n this.tickAfter(seconds, ()=>{\n this.tickEvery(seconds);\n })\n }\n\n\n stop() {\n if (this.cancelPending_) {\n this.cancelPending_();\n this.cancelPending_ = null;\n }\n }\n }\n","/***\n * 音视频源数据不对齐或者 关键视频帧存在cts,导致浏览器播不动场景下\n *\n * reference shakaplayer, 借鉴shakaplayer,根据项目逻辑进行改造\n */\n\nimport IntervalTimer from './util/intervalTimer';\nexport default class GapJump {\n \n constructor(player, config) {\n this.player = player;\n this.mediaElem = player.video;\n this.config = config;\n this.timer = new IntervalTimer();\n\n this.prevReadyState = this.mediaElem.readyState;\n this.didFireLargeGap = false;\n this.seekingEventReceived = false;\n this.segmentAppended = false;\n this.onWaitFunc = this._onWaiting.bind(this);\n this.onPlayFunc = this._onPlay.bind(this);\n this.isSafari = /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);\n if (this.config.useGapJump !== false) {\n this._start();\n }\n\n this.hasPlayed = false;\n }\n _onWaiting() {\n this.onGapJump('_onWaiting');\n }\n\n _onPlay() {\n this.hasPlayed = true;\n }\n\n _start() {\n this.mediaElem.addEventListener('waiting', this.onWaitFunc);\n this.mediaElem.addEventListener('play', this.onPlayFunc);\n //250ms\n this.timer.repeat(() => {\n this.onGapJump('repeat');\n }, 250);\n }\n\n onSegmentAppend() {\n this.segmentAppended = true;\n this.onGapJump('onSegmentAppend');\n }\n \n onSeeking() {\n this.seekingEventReceived = true;\n this.segmentAppended = false;\n this.didFireLargeGap = false;\n }\n \n onGapJump(type) {\n if (this.mediaElem.readyState === HTMLMediaElement.HAVE_NOTHING) {\n return;\n }\n if (this.mediaElem.seeking) {\n if (!this.seekingEventReceived) { return; }\n } else {\n this.seekingEventReceived = false;\n }\n\n if (this.mediaElem.paused && this.mediaElem.currentTime !== 0 && this.hasPlayed) {\n return;\n }\n if (this.mediaElem.readyState !== this.prevReadyState) {\n this.didFireLargeGap = false;\n this.prevReadyState = this.mediaElem.readyState;\n }\n\n const buffered = this.mediaElem.buffered;\n const smallGapLimit = this.config.smallGapLimit || 0.5;\n const gapDetectionThreshold = this.config.gapDetectionThreshold || 0.1;\n const currentTime = this.mediaElem.currentTime;\n const idx = this._getIndex(buffered, currentTime, gapDetectionThreshold);\n if (idx === null) {\n return;\n }\n if (idx === 0 && !this.segmentAppended) {\n return;\n }\n\n const jumpTo = buffered.start(idx) + 0.1;\n const seekEnd = this.mediaElem.duration;\n\n if (jumpTo > seekEnd) {\n return;\n }\n const jumpSize = jumpTo - currentTime;\n const isGapSmall = jumpSize <= smallGapLimit;\n let jumpLargeGap = false;\n if (jumpSize < GapJump.BROWSER_GAP_TOLERANCE) {\n return;\n }\n //对于分片缺失,目前未处理\n if (isGapSmall) {\n if (this.config.disableGapSetPosition !== true) {\n this.mediaElem.currentTime = this.isSafari ? jumpTo + 0.1 : jumpTo;\n }\n this.player && this.player.emit('detectGap');\n }\n\n }\n \n _getIndex(buffered, time, threshold) {\n if (!buffered || !buffered.length) {\n return null;\n }\n if (buffered.length === 1 && buffered.end(0) - buffered.start(0) < 1e-6) {\n return null;\n }\n const bufferedInfo = this._getBuffered(buffered);\n let idx = null;\n for (let i = 0; i < bufferedInfo.length; i++) {\n let item = bufferedInfo[i];\n if (item.start > time && (i === 0 || bufferedInfo[i - 1].end - time <= threshold)) {\n idx = i;\n break;\n }\n }\n return idx;\n }\n \n _getBuffered(b) {\n if (!b) {\n return [];\n }\n const ret = [];\n for (let i = 0; i < b.length; i++) {\n ret.push({\n start: b.start(i),\n end: b.end(i)\n });\n }\n return ret;\n }\n\n destroy() {\n this.mediaElem.removeEventListener('waiting', this.onWaitFunc);\n this.mediaElem.removeEventListener('play', this.onPlayFunc);\n this.timer.clear();\n this.timer = null;\n }\n }\n \n GapJump.BROWSER_GAP_TOLERANCE = 0.001;\n ","// 替代setInterval\nclass IntervalTimer {\n constructor() {\n this.timeID = null;\n this.func = null;\n }\n\n repeat(func, ms) {\n this.timeID = 1;\n this.repeatInterval(func, ms);\n }\n\n repeatInterval(func, ms) {\n if (!this.timeID) return;\n if (this.func === null) {\n this.func = func;\n }\n\n if (this.func !== func) {\n return;\n }\n if (this.timeID) clearTimeout(this.timeID);\n this.timeID = null;\n this.timeID = setTimeout(() => {\n func();\n this.repeatInterval(func, ms);\n }, ms);\n }\n\n clear() {\n clearTimeout(this.timeID);\n this.timeID = null;\n }\n}\n\nexport default IntervalTimer;\n"],"sourceRoot":""}
|