xgplayer-mp4-loader 3.0.0 → 3.0.3-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/es/loader.d.ts +5 -3
- package/package.json +4 -4
package/dist/index.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.min.js","sources":["../../xgplayer-streaming-shared/src/utils.js","../../xgplayer-streaming-shared/src/buffer.js","../../xgplayer-streaming-shared/src/error.js","../../xgplayer-streaming-shared/src/env.js","../../xgplayer-streaming-shared/src/logger.js","../../xgplayer-streaming-shared/src/mse.js","../../xgplayer-streaming-shared/src/net/types.js","../../xgplayer-streaming-shared/src/net/error.js","../../xgplayer-streaming-shared/src/is.js","../../xgplayer-streaming-shared/src/net/helper.js","../../xgplayer-streaming-shared/src/event.js","../../../node_modules/eventemitter3/index.js","../../xgplayer-streaming-shared/src/net/fetch.js","../../xgplayer-streaming-shared/src/net/xhr.js","../../xgplayer-streaming-shared/src/net/task.js","../../xgplayer-streaming-shared/src/streaming-helper.js","../../xgplayer-streaming-shared/src/net/index.js","../../xgplayer-streaming-shared/src/net/config.js","../../xgplayer-transmuxer/src/model/types.js","../../xgplayer-transmuxer/src/model/video-track.js","../../xgplayer-transmuxer/src/model/audio-track.js","../../xgplayer-transmuxer/src/model/video-sample.js","../../xgplayer-transmuxer/src/model/audio-sample.js","../../xgplayer-transmuxer/src/model/metadata-track.js","../../xgplayer-transmuxer/src/utils/exp-golomb.js","../../xgplayer-transmuxer/src/utils/logger.js","../../xgplayer-transmuxer/src/utils/utf8.js","../../xgplayer-transmuxer/src/utils/env.js","../../xgplayer-transmuxer/src/utils/index.js","../../xgplayer-transmuxer/src/codec/nalu.js","../../xgplayer-transmuxer/src/codec/avc.js","../../xgplayer-transmuxer/src/codec/aac.js","../../xgplayer-transmuxer/src/codec/hevc.js","../../xgplayer-transmuxer/src/flv/fixer.js","../../xgplayer-transmuxer/src/flv/amf.js","../../xgplayer-transmuxer/src/flv/index.js","../../xgplayer-transmuxer/src/mpeg-ts/index.js","../../xgplayer-transmuxer/src/mp4/mp4-parser.js","../../xgplayer-transmuxer/src/mp4/buffer.js","../../xgplayer-transmuxer/src/mp4/mp4.js","../../xgplayer-transmuxer/src/mp4/logger.js","../../../node_modules/crypto-es/lib/md5.js","../../../node_modules/crypto-es/lib/core.js","../../../node_modules/crypto-es/lib/enc-base64.js","../../../node_modules/crypto-es/lib/evpkdf.js","../../../node_modules/crypto-es/lib/cipher-core.js","../../../node_modules/crypto-es/lib/aes.js","../../../node_modules/crypto-es/lib/mode-ctr.js","../src/error.js","../src/cache.js","../src/utils.js","../src/loader.js","../src/config.js"],"sourcesContent":["export function createPublicPromise () {\n let res, rej\n const promise = new Promise((resolve, reject) => {\n res = resolve\n rej = reject\n })\n promise.used = false\n promise.resolve = (...args) => {\n promise.used = true\n return res(...args)\n }\n promise.reject = (...args) => {\n promise.used = true\n return rej(...args)\n }\n return promise\n}\n\nexport function nowTime () {\n try {\n return parseInt(performance.now(), 10)\n } catch (e) {\n return new Date().getTime()\n }\n}\n","export class Buffer {\n /**\n * @param {TimeRanges} buf\n * @returns {number}\n */\n static start (buf) {\n if (!buf || !buf.length) return 0\n\n // Safari bug: https://bit.ly/2trx6O8\n if (buf.length === 1 && buf.end(0) - buf.start(0) < 1e-6) return 0\n // Edge bug: https://bit.ly/2JYLPeB\n if (buf.length === 1 && buf.start(0) < 0) return 0\n\n return buf.start(0)\n }\n\n /**\n * @param {TimeRanges} buf\n * @returns {number}\n */\n static end (buf) {\n if (!buf || !buf.length) return 0\n\n // Safari bug: https://bit.ly/2trx6O8\n if (buf.length === 1 && buf.end(0) - buf.start(0) < 1e-6) return 0\n\n return buf.end(buf.length - 1)\n }\n\n /**\n * @param {{buffered?: TimeRanges}} b\n * @returns {TimeRanges | void}\n */\n static get (b) {\n if (!b) return\n try {\n return b.buffered\n } catch (error) {\n // ignore\n }\n }\n\n /**\n * @param {TimeRanges} buf\n * @param {number} [maxHole]\n * @returns {[number,number][]}\n */\n static buffers (buf, maxHole) {\n if (!buf || !buf.length) return []\n\n const buffers = []\n for (let i = 0, l = buf.length; i < l; i++) {\n const bufLen = buffers.length\n if (!bufLen || !maxHole) {\n buffers.push([buf.start(i), buf.end(i)])\n } else {\n const last = buffers[bufLen - 1]\n const lastEnd = last[1]\n const start = buf.start(i)\n if (start - lastEnd <= maxHole) {\n const end = buf.end(i)\n if (end > lastEnd) {\n last[1] = end\n }\n } else {\n buffers.push([buf.start(i), buf.end(i)])\n }\n }\n }\n return buffers\n }\n\n /**\n * @param {TimeRanges} buf\n * @param {number} [maxHole]\n * @returns {{buffers:[number,number][],length:number}}\n */\n static totalLength (buffers) {\n if (!buffers || !buffers.length) return 0\n return buffers.reduce((a, c) => (a += (c[1] - c[0])), 0)\n }\n\n /**\n *\n * @param {TimeRanges} buf\n * @param {number} [pos=0]\n * @param {number} [maxHole=0]\n * @returns {{start:number,end:number,buffers:[number,number][],remaining:number,index?:number,nextStart?:number,nextEnd?:number,prevStart?:number,prevEnd?:number}}\n */\n static info (buf, pos = 0, maxHole = 0) {\n if (!buf || !buf.length) return { start: 0, end: 0, buffers: [] }\n\n let start = 0\n let end = 0\n let index = 0\n let nextStart = 0\n let nextEnd = 0\n let prevStart = 0\n let prevEnd = 0\n const buffers = Buffer.buffers(buf, maxHole)\n\n for (let i = 0, l = buffers.length; i < l; i++) {\n const item = buffers[i]\n if (pos + maxHole >= item[0] && pos < item[1]) {\n start = item[0]\n end = item[1]\n index = i\n } else if (pos + maxHole < item[0]) {\n nextStart = item[0]\n nextEnd = item[1]\n break\n } else if (pos + maxHole > item[1]) {\n prevStart = item[0]\n prevEnd = item[1]\n }\n }\n\n return {\n start,\n end,\n index,\n buffers,\n nextStart,\n nextEnd,\n prevStart,\n prevEnd,\n currentTime: pos,\n behind: pos - start,\n remaining: end ? end - pos : 0,\n length: Buffer.totalLength && Buffer.totalLength(buffers)\n }\n }\n}\n","export const ERR = {\n MANIFEST: 'manifest',\n NETWORK: 'network',\n NETWORK_TIMEOUT: 'network_timeout',\n NETWORK_FORBIDDEN:'network_forbidden',\n NETWROK_RANGE_NOT_SATISFIABLE:'network_range_not_satisfiable',\n DEMUX: 'demux',\n REMUX: 'remux',\n MEDIA: 'media',\n DRM: 'drm',\n OTHER: 'other',\n RUNTIME:'runtime',\n\n SUB_TYPES: {\n FLV: 'FLV',\n HLS: 'HLS',\n MP4: 'MP4',\n FMP4: 'FMP4',\n MSE_ADD_SB: 'MSE_ADD_SB',\n MSE_APPEND_BUFFER: 'MSE_APPEND_BUFFER',\n MSE_OTHER: 'MSE_OTHER',\n MSE_FULL: 'MSE_FULL',\n OPTION: 'OPTION',\n DASH:'DASH',\n LICENSE:'LICENSE',\n CUSTOM_LICENSE:'CUSTOM_LICENSE',\n MSE_HIJACK:'MSE_HIJACK',\n EME_HIJACK:'EME_HIJACK',\n SIDX:'SIDX',\n NO_CANPLAY_ERROR:'NO_CANPLAY_ERROR',\n BUFFERBREAK_ERROR:'BUFFERBREAK_ERROR',\n MEDIA_ERR_ABORTED:'MEDIA_ERR_ABORTED',\n MEDIA_ERR_NETWORK:'MEDIA_ERR_NETWORK',\n MEDIA_ERR_DECODE:'MEDIA_ERR_DECODE',\n MEDIA_ERR_SRC_NOT_SUPPORTED:'MEDIA_ERR_SRC_NOT_SUPPORTED',\n MEDIA_ERR_CODEC_NOT_SUPPORTED:'MEDIA_ERR_CODEC_NOT_SUPPORTED',\n MEDIA_ERR_URL_EMPTY:'MEDIA_ERR_URL_EMPTY'\n }\n}\n\nexport const ERR_CODE = {\n [ERR.MANIFEST]: {\n HLS: 1100,\n DASH:1200\n },\n [ERR.NETWORK]: 2100,\n [ERR.NETWORK_TIMEOUT]: 2101,\n [ERR.NETWORK_FORBIDDEN]:2103,\n [ERR.NETWROK_RANGE_NOT_SATISFIABLE]:2116,\n [ERR.DEMUX]: {\n FLV: 3100,\n HLS: 3200,\n MP4: 3300,\n FMP4: 3400,\n SIDX: 3410\n },\n [ERR.REMUX]: {\n FMP4: 4100,\n MP4: 4200\n },\n [ERR.MEDIA]: {\n MEDIA_ERR_ABORTED: 5101,\n MEDIA_ERR_NETWORK: 5102,\n MEDIA_ERR_DECODE: 5103,\n MEDIA_ERR_SRC_NOT_SUPPORTED: 5104,\n MEDIA_ERR_CODEC_NOT_SUPPORTED: 5105,\n MEDIA_ERR_URL_EMPTY: 5106,\n MSE_ADD_SB: 5200,\n MSE_APPEND_BUFFER: 5201,\n MSE_OTHER: 5202,\n MSE_FULL: 5203,\n MSE_HIJACK:5204,\n EME_HIJACK:5301\n },\n [ERR.DRM]:{\n LICENSE:7100,\n CUSTOM_LICENSE:7200\n },\n [ERR.OTHER]: 8000,\n [ERR.RUNTIME]:{\n NO_CANPLAY_ERROR:9001,\n BUFFERBREAK_ERROR:9002\n }\n}\n\nexport class StreamingError extends Error {\n constructor (type, subType, origin, payload, msg) {\n super(msg || origin?.message)\n this.errorType = type === ERR.NETWORK_TIMEOUT ? ERR.NETWORK : type\n this.originError = origin\n this.ext = payload\n this.errorCode = ERR_CODE[type][subType] || ERR_CODE[type]\n this.errorMessage = this.message\n if (!this.errorCode) {\n this.errorType = ERR.OTHER\n this.errorCode = ERR_CODE[this.errorType]\n }\n }\n\n static create (type, subType, origin, payload, msg) {\n if (type instanceof StreamingError) {\n return type\n } else if (type instanceof Error) {\n origin = type\n type = ''\n }\n\n if (!type) type = ERR.OTHER\n\n return new StreamingError(type, subType, origin, payload, msg)\n }\n\n static network (error) {\n return new StreamingError(\n error?.isTimeout ? ERR.NETWORK_TIMEOUT : ERR.NETWORK,\n null,\n error instanceof Error ? error : null,\n {\n url: error?.url,\n response: error?.response,\n httpCode: error?.response?.status\n }\n )\n }\n}\n","export const isBrowser = typeof window !== 'undefined'\n","\nexport const LogCacheLevel = {\n 'DEBUG': 1,\n 'LOG': 2,\n 'WARN': 3,\n 'ERROR': 4\n}\nconst LOG_MAX_SIZE = 200 * 1024\nconst SIMPLE_TYPE = ['Boolean', 'Number' ,'String', 'Undefined','Null', 'Date','Object']\nexport class Logger {\n constructor (name,config) {\n this.name = name || ''\n this._prefix = `[${this.name}]`\n Logger.disabled = config?.disabled || true\n this.logCacheLevel = config?.logCacheLevel || 3\n this.logMaxSize = config?.logMaxSize || LOG_MAX_SIZE\n this.logSize = 0\n this.logTextArray = []\n }\n\n debug (...args) {\n this.logCache(LogCacheLevel.DEBUG,...args)\n if (Logger.disabled) return\n console.debug(this._prefix, nowTime(), ...args)\n }\n\n log (...args) {\n this.logCache(LogCacheLevel.LOG,...args)\n if (Logger.disabled) return\n console.log(this._prefix, nowTime(), ...args)\n }\n\n warn (...args) {\n this.logCache(LogCacheLevel.WARN,...args)\n if (Logger.disabled) return\n console.warn(this._prefix, nowTime(), ...args)\n }\n\n error (...args) {\n this.logCache(LogCacheLevel.ERROR,...args)\n if (Logger.disabled) return\n console.error(this._prefix, nowTime(), ...args)\n }\n\n logCache (logCacheLevel, ...logText) {\n if (logCacheLevel < this.logCacheLevel) return\n let text = ''\n try {\n const finLogText = logText.map( item => logable(item))\n text = this._prefix + nowTime() + (JSON.stringify(finLogText))\n } catch (e) {\n return\n }\n if (logCacheLevel >= this.logCacheLevel) {\n this.logSize += text.length\n this.logTextArray.push(text)\n }\n if (this.logSize > this.logMaxSize) {\n const delLog = this.logTextArray.shift()\n this.logSize -= delLog.length\n }\n }\n\n getLogCache () {\n const logText = this.logTextArray.join('\\n')\n this.reset()\n return logText\n }\n\n reset () {\n this.logTextArray = []\n this.logSize = 0\n }\n\n table (...args) {\n if (Logger.disabled) return\n console.group(this._prefix)\n console.table(...args)\n console.groupEnd()\n }\n\n static disabled = true\n\n static enable () {\n Logger.disabled = false\n }\n\n static disable () {\n Logger.disabled = true\n }\n\n setLogLevel (val) {\n this.logCacheLevel = val\n }\n}\nfunction nowTime () {\n return new Date().toLocaleString()\n}\n\nfunction reduceDepth (val) {\n if (typeof val !== 'object') {\n return val\n }\n const objType = Object.prototype.toString.call(val).slice(8, -1)\n switch (objType) {\n case 'Array':\n case 'Uint8Array':\n case 'ArrayBuffer':\n\n return objType + '[' + val.length + ']'\n case 'Object':\n return '{}'\n default:\n return objType\n }\n}\n\nfunction logable (obj, maxDepth, depth) {\n if (!depth) depth = 1\n if (!maxDepth) maxDepth = 2\n const result = {}\n\n if (!obj || typeof obj !== 'object') {\n return obj\n }\n\n const objType = Object.prototype.toString.call(obj).slice(8, -1)\n if (!SIMPLE_TYPE.includes(objType)) {\n return objType\n }\n\n if (depth > maxDepth) {\n return undefined\n }\n\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (depth === maxDepth) {\n result[key] = reduceDepth(obj[key])\n } else if (typeof obj[key] === 'object') {\n result[key] = logable(obj[key], maxDepth, depth + 1)\n } else {\n result[key] = obj[key]\n }\n }\n }\n return result\n}\n\n","/* eslint-disable no-undef */\nimport { createPublicPromise, nowTime } from './utils'\nimport { Buffer } from './buffer'\nimport { StreamingError, ERR } from './error'\nimport { isBrowser } from './env'\nimport { Logger } from './logger'\n\nfunction getMediaSource () {\n try {\n return isBrowser ? window.MediaSource : null\n } catch (e) {}\n}\n\nconst MediaSource = getMediaSource()\n\n/** @enum {string} */\nexport const MSEErrorType = {\n UPDATE_ERROR: 'updateError'\n}\n\nconst OP_NAME = {\n APPEND: 'appendBuffer',\n REMOVE: 'removeBuffer'\n}\n\nexport class MSEError extends Error {\n /**\n * @param {MSEErrorType} type\n * @param {any} [msg]\n */\n constructor (type, msg) {\n super(msg || type)\n this.type = type\n this.msg = msg\n }\n}\n\nexport class MSE {\n /** @type { HTMLMediaElement | null } */\n media = null\n\n /** @type { MediaSource | null } */\n mediaSource = null\n\n _openPromise = createPublicPromise()\n\n _queue = Object.create(null)\n\n _sourceBuffer = Object.create(null)\n\n static VIDEO = 'video'\n\n static AUDIO = 'audio'\n\n _mseFullFlag = {}\n\n _st = 0\n\n _opst = 0\n\n _logger = null\n\n _config = null\n _url = null\n\n\n static getDefaultConfig () {\n return {\n openLog: false\n }\n }\n\n /**\n * @param {HTMLMediaElement} [media]\n */\n constructor (media, config) {\n this._config = Object.assign(MSE.getDefaultConfig(), config)\n if (media) this.bindMedia(media)\n this._logger = new Logger('MSE')\n if (this._config.openLog) {\n Logger.enable()\n }\n }\n\n get isOpened () {\n return this.mediaSource?.readyState === 'open'\n }\n\n get url () {\n return this._url\n }\n\n get duration () {\n return this.mediaSource?.duration || -1\n }\n\n get isEnded () {\n return this.mediaSource ? this.mediaSource.readyState === 'ended' : false\n }\n\n isFull (type) {\n return type ? this._mseFullFlag[type] : this._mseFullFlag[MSE.VIDEO]\n }\n\n /**\n * @param { number } duration\n * @return { Promise }\n */\n updateDuration (duration) {\n // 设置值比当前值小,会导致异常\n if (this.mediaSource && this.mediaSource.duration > duration) {\n return Promise.resolve()\n }\n\n return this._enqueueBlockingOp(() => {\n if (this.isEnded) {\n this._logger.debug('[debug mse] setDuration ended')\n return\n }\n if (this.mediaSource) {\n this.mediaSource.duration = duration\n this._logger.debug('[debug mse] setDuration')\n }\n }, 'updateDuration')\n }\n\n /** @return { Promise } */\n open () {\n if (this._openPromise.used && !this.isOpened && this.mediaSource) {\n const ms = this.mediaSource\n const onOpen = () => {\n const costtime = nowTime() - this._st\n this._logger.debug('MSE OPEN', costtime)\n ms.removeEventListener('sourceopen', onOpen)\n this._openPromise.resolve({costtime})\n }\n ms.addEventListener('sourceopen', onOpen)\n this._openPromise = createPublicPromise()\n }\n\n return this._openPromise\n }\n\n /**\n * @param { HTMLMediaElement } media\n * @return { Promise }\n */\n async bindMedia (media) {\n if (this.mediaSource || this.media) await this.unbindMedia()\n if (!media || !MediaSource) throw new Error('Param media or MediaSource does not exist')\n this.media = media\n const ms = this.mediaSource = new MediaSource()\n this._st = nowTime()\n\n const onOpen = () => {\n const costtime = nowTime() - this._st\n this._logger.debug('MSE OPEN')\n ms.removeEventListener('sourceopen', onOpen)\n URL.revokeObjectURL(media.src)\n this._openPromise.resolve({costtime})\n }\n ms.addEventListener('sourceopen', onOpen)\n this._url = URL.createObjectURL(ms)\n media.src = this._url\n return this._openPromise\n }\n\n /** @return { Promise } */\n async unbindMedia () {\n if (!this._openPromise.used) this._openPromise.resolve()\n const ms = this.mediaSource\n\n if (ms) {\n Object.keys(this._queue).forEach((t) => {\n const queue = this._queue[t]\n if (queue) {\n queue.forEach(x => x.promise.resolve)\n }\n })\n\n const hasMetadata = !!this.media && this.media.readyState >= 1\n const mseOpen = ms.readyState === 'open'\n\n if (hasMetadata && mseOpen) {\n try {\n ms.endOfStream()\n } catch (error) {\n // ignore\n }\n }\n\n Object.keys(this._sourceBuffer).forEach(k => {\n try {\n ms.removeSourceBuffer(this._sourceBuffer[k])\n } catch (error) {\n // ignore\n }\n })\n }\n\n if (this.media) {\n this.media.removeAttribute('src')\n try {\n this.media.load()\n } catch (error) {\n // ignore\n }\n this.media = null\n }\n\n this.mediaSource = null\n this._openPromise = createPublicPromise()\n this._queue = Object.create(null)\n this._sourceBuffer = Object.create(null)\n }\n\n /**\n * @param { string } type\n * @param { string } mimeType\n */\n createSource (type, mimeType) {\n if (this._sourceBuffer[type] || !this.mediaSource) return\n let sb\n try {\n sb = this._sourceBuffer[type] = this.mediaSource.addSourceBuffer(mimeType)\n } catch (error) {\n throw new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_ADD_SB, error)\n }\n sb.mimeType = mimeType\n sb.addEventListener('updateend', this._onSBUpdateEnd.bind(this, type))\n sb.addEventListener('error', this._onSBUpdateError.bind(this, type))\n }\n\n /**\n * @param { string } type\n * @param { string } mimeType\n * @return { Promise }\n */\n changeType (type, mimeType) {\n const sb = this._sourceBuffer[type]\n if (!this.mediaSource || !sb || sb.mimeType === mimeType || typeof sb.changeType !== 'function') return Promise.resolve()\n\n return this._enqueueOp(type, () => {\n sb.changeType(mimeType)\n sb.mimeType = mimeType\n this._onSBUpdateEnd(type)\n })\n }\n\n /**\n * @param { string } type\n * @param { string } mimeType\n * @return { Promise }\n */\n createOrChangeSource (type, mimeType) {\n this.createSource(type, mimeType)\n return this.changeType(type, mimeType)\n }\n\n /**\n * @param { string } type\n * @param { BufferSource } buffer\n * @return { Promise }\n */\n append (type, buffer, context) {\n if (!buffer || !buffer.byteLength) {\n return Promise.resolve()\n }\n\n if (!this._sourceBuffer[type]) return Promise.resolve()\n\n return this._enqueueOp(type, () => {\n if (!this.mediaSource) return\n this._logger.debug('MSE APPEND START', context)\n this._opst = nowTime()\n this._sourceBuffer[type]?.appendBuffer(buffer)\n }, OP_NAME.APPEND, context)\n\n }\n\n /**\n * @param { string } type\n * @param { number } startTime\n * @param { number } endTime\n * @return { Promise }\n */\n remove (type, startTime, endTime, context) {\n // if (Object.keys(this._sourceBuffer).length === 1) return Promise.resolve()\n let isInsertHead = false\n if (this._mseFullFlag[type]) {\n isInsertHead = true\n }\n return this._enqueueOp(type, () => {\n if (!this.mediaSource) return\n const sb = this._sourceBuffer[type]\n if (startTime >= endTime || !sb) {\n this._onSBUpdateEnd(type)\n return\n }\n this._opst = nowTime()\n this._logger.debug('MSE REMOVE START', type, startTime, endTime, context)\n sb.remove(startTime, endTime)\n }, OP_NAME.REMOVE, context, isInsertHead)\n }\n\n clearBuffer (startTime, endTime) {\n let p\n Object.keys(this._sourceBuffer).forEach(k => {\n p = this._enqueueOp(k, () => {\n if (!this.mediaSource) return\n const sb = this._sourceBuffer[k]\n this._logger.debug('MSE clearBuffer START', k, startTime, endTime)\n sb.remove(startTime, endTime)\n })\n })\n return p\n }\n\n clearAllBuffer () {\n let p\n Object.keys(this._sourceBuffer).forEach(k => {\n p = this._enqueueOp(k, () => {\n if (!this.mediaSource) return\n const sb = this._sourceBuffer[k]\n this._logger.debug('MSE clearAllBuffer START', k)\n sb.remove(0, Buffer.end(Buffer.get(sb)))\n })\n })\n return p\n }\n\n clearOpQueues (type) {\n this._logger.debug('MSE clearOpQueue START')\n const queue = this._queue[type]\n if (!queue || !queue[type] || queue.length < 5) return\n const initOpque = []\n queue.forEach(op => {\n if (op.context && op.context.isinit) {\n initOpque.push(op)\n }\n })\n this._queue[type] = queue.slice(0, 2)\n initOpque.length > 0 && this._queue[type].push(...initOpque)\n }\n\n /**\n * @param {EndOfStreamError} [reason]\n * @returns {Promise}\n */\n endOfStream (reason) {\n if (!this.mediaSource || this.mediaSource.readyState !== 'open') return Promise.resolve()\n return this._enqueueBlockingOp(() => {\n const ms = this.mediaSource\n if (!ms || ms.readyState !== 'open') return\n this._logger.debug('MSE endOfStream START')\n if (reason) {\n ms.endOfStream(reason)\n } else {\n ms.endOfStream()\n }\n }, 'endOfStream')\n }\n\n setLiveSeekableRange (start, end) {\n const ms = this.mediaSource\n if (start < 0 || end < start || !ms?.setLiveSeekableRange || ms.readyState !== 'open') return\n ms.setLiveSeekableRange(start, end)\n }\n\n /**\n * @param {string} type\n * @returns {?SourceBuffer}\n */\n getSourceBuffer (type) {\n return this._sourceBuffer[type]\n }\n\n /**\n * @param { string } type\n * @return { TimeRanges | void }\n */\n buffered (type) {\n return Buffer.get(this._sourceBuffer[type])\n }\n\n /**\n * @param { string } type\n * @return { number }\n */\n bufferStart (type) {\n return Buffer.start(this.buffered(type))\n }\n\n /**\n * @param { string } type\n * @return { number }\n */\n bufferEnd (type) {\n return Buffer.end(this.buffered(type))\n }\n\n _enqueueOp (type, exec, opName, context, isInsertHead) {\n if (!this.mediaSource) return Promise.resolve()\n const queue = this._queue[type] = this._queue[type] || []\n const op = {\n exec,\n promise: createPublicPromise(),\n opName,\n context\n }\n\n if (isInsertHead) {\n queue.splice(0, 0, op)\n this._mseFullFlag[type] = false\n this._startQueue(type)\n } else {\n queue.push(op)\n }\n\n if (this.isOpened) {\n if (queue.length === 1) {\n this._startQueue(type)\n }\n } else {\n this._openPromise.then(() => {\n if (queue.length === 1) {\n this._startQueue(type)\n }\n })\n }\n\n\n return op.promise\n }\n\n async _enqueueBlockingOp (exec, opName) {\n if (!this.mediaSource) return Promise.resolve()\n const types = Object.keys(this._sourceBuffer)\n if (!types.length) {\n return exec()\n }\n\n const waiters = []\n types.forEach(t => {\n const queue = this._queue[t]\n const prom = createPublicPromise()\n waiters.push(prom)\n queue.push({exec: () => prom.resolve(), promise: prom, opName})\n if (queue.length === 1) {\n this._startQueue(t)\n }\n })\n\n return Promise.all(waiters).then(() => {\n try {\n return exec()\n } finally {\n types.forEach(t => {\n const queue = this._queue[t]\n const sb = this._sourceBuffer[t]\n queue?.shift()\n if (!sb || !sb.updating) {\n this._startQueue(t)\n }\n })\n }\n })\n }\n\n _startQueue (type) {\n const queue = this._queue[type]\n if (queue) {\n const op = queue[0]\n if (op && !this._mseFullFlag[type]) {\n try {\n op.exec()\n } catch (error) {\n if (error && error.message && error.message.indexOf('SourceBuffer is full') >= 0) {\n this._mseFullFlag[type] = true\n this._logger.error('[MSE error], context,', op.context, ' ,name,', op.opName, ',err,SourceBuffer is full')\n op.promise.reject(new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_FULL, error))\n } else {\n this._logger.error(error)\n op.promise.reject(new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_OTHER, error))\n queue.shift()\n this._startQueue(type)\n }\n }\n }\n }\n }\n\n _onSBUpdateEnd = (type) => {\n const queue = this._queue[type]\n if (queue) {\n const op = queue.shift()\n if (op) {\n const costtime = nowTime() - this._opst\n this._logger.debug('UpdateEnd', op.opName, costtime, op.context)\n op.promise.resolve({name: op.opName, context: op.context, costtime})\n this._startQueue(type)\n }\n }\n }\n\n _onSBUpdateError = (type, event) => {\n const queue = this._queue[type]\n if (queue) {\n const op = queue[0]\n if (op) {\n this._logger.error('UpdateError', type, op.opName, op.context)\n op.promise.reject(new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_APPEND_BUFFER, event))\n // Do not shift from queue, 'updateend' event will fire next\n }\n }\n }\n\n /**\n * @param {string} [mime='video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"']\n * @returns {boolean}\n */\n static isSupported (mime = 'video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"') {\n if (!MediaSource) return false\n try {\n return MediaSource.isTypeSupported(mime)\n } catch (error) {\n this._logger.error(mime, error)\n return false\n }\n }\n\n setTimeoffset (type, timestampOffset, context) {\n return this._enqueueOp(type, () => {\n if (timestampOffset < 0) {\n timestampOffset += 0.001\n }\n this._sourceBuffer[type].timestampOffset = timestampOffset\n this._onSBUpdateEnd(type)\n }, 'setTimeoffset', context)\n }\n\n /** *重置decode时间戳 */\n abort (type, context) {\n if (!this.isOpened) {\n return Promise.resolve()\n }\n return this._enqueueOp(type, () => {\n this._sourceBuffer[type].abort()\n this._onSBUpdateEnd(type)\n }, 'abort', context)\n }\n}\n","export const LoaderType = {\n FETCH: 'fetch',\n XHR: 'xhr'\n}\n\nexport const ResponseType = {\n ARRAY_BUFFER: 'arraybuffer',\n TEXT: 'text',\n JSON: 'json'\n}\n","import { LoaderType } from './types'\n\nexport class NetError extends Error {\n retryCount = 0\n isTimeout = false\n loaderType = LoaderType.FETCH\n startTime = 0\n endTime = 0\n options = {}\n\n constructor (url, request, response, msg) {\n super(msg)\n this.url = url\n this.request = request\n this.response = response\n }\n}\n","const toString = Object.prototype.toString\n\nexport function isObject (a) {\n return a !== null && typeof a === 'object'\n}\n\nexport function isPlainObject (val) {\n if (toString.call(val) !== '[object Object]') {\n return false\n }\n\n const prototype = Object.getPrototypeOf(val)\n return prototype === null || prototype === Object.prototype\n}\n\nexport function isDate (a) {\n return toString.call(a) === '[object Date]'\n}\n\nexport function isNumber (n) {\n return typeof n === 'number' && !Number.isNaN(n)\n}\n","import { isDate, isObject } from '../is'\n\nexport function getRangeValue (value) {\n if (!value || value[0] === null || value[0] === undefined || (value[0] === 0 && (value[1] === null || value[1] === undefined))) {\n return\n }\n let ret = 'bytes=' + value[0] + '-'\n if (value[1]) ret += value[1]\n return ret\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nexport function setUrlParams (url, params) {\n if (!url) return\n if (!params) return url\n let v\n const str = Object.keys(params).map(k => {\n v = params[k]\n if (v === null || v === undefined) return\n if (Array.isArray(v)) {\n k = k + '[]'\n } else {\n v = [v]\n }\n\n return v.map(x => {\n if (isDate(x)) {\n x = x.toISOString()\n } else if (isObject(x)) {\n x = JSON.stringify(x)\n }\n return `${encode(k)}=${encode(x)}`\n }).join('&')\n }).filter(Boolean).join('&')\n\n if (str) {\n const hashIndex = url.indexOf('#')\n if (hashIndex !== -1) {\n url = url.slice(0, hashIndex)\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + str\n }\n\n return url\n}\n\nexport function createResponse (\n data,\n done,\n response,\n contentLength,\n age,\n startTime,\n firstByteTime,\n index,\n range,\n vid,\n priOptions\n) {\n age = (age !== null && age !== undefined) ? parseFloat(age) : null\n contentLength = parseInt(contentLength || '0', 10)\n if (Number.isNaN(contentLength)) contentLength = 0\n const option = { range, vid, index, contentLength, age, startTime, firstByteTime, endTime: Date.now(), priOptions }\n return { data, done, option, response }\n}\n\nexport function calculateSpeed (byteLen, millisec) {\n return Math.round(byteLen * 8 * 1000 / millisec / 1024)\n}\n","export const EVENT = {\n ERROR: 'error',\n\n TTFB: 'core.ttfb',\n LOAD_START: 'core.loadstart',\n LOAD_RESPONSE_HEADERS: 'core.loadresponseheaders',\n LOAD_COMPLETE: 'core.loadcomplete',\n LOAD_RETRY: 'core.loadretry',\n SOURCEBUFFER_CREATED: 'core.sourcebuffercreated',\n ANALYZE_DURATION_EXCEEDED: 'core.analyzedurationexceeded',\n REMOVE_BUFFER: 'core.removebuffer',\n BUFFEREOS: 'core.buffereos',\n KEYFRAME: 'core.keyframe',\n METADATA_PARSED: 'core.metadataparsed',\n SEI: 'core.sei',\n SEI_IN_TIME: 'core.seiintime',\n FLV_SCRIPT_DATA: 'core.flvscriptdata',\n LOWDECODE: 'core.lowdecode',\n SWITCH_URL_SUCCESS: 'core.switchurlsuccess',\n SWITCH_URL_FAILED: 'core.switchurlfailed',\n SPEED: 'core.speed',\n HLS_MANIFEST_LOADED: 'core.hlsmanifestloaded',\n HLS_LEVEL_LOADED: 'core.hlslevelloaded',\n DEMUXED_TRACK:'demuxedtrack',\n\n STREAM_EXCEPTION: 'core.streamexception',\n LARGE_AV_FIRST_FRAME_GAP_DETECT: 'LARGE_AV_FIRST_FRAME_GAP_DETECT',\n LARGE_VIDEO_DTS_GAP_DETECT: 'LARGE_VIDEO_DTS_GAP_DETECT',\n LARGE_AUDIO_DTS_GAP_DETECT: 'LARGE_AUDIO_DTS_GAP_DETECT',\n AUDIO_GAP_DETECT: 'AUDIO_GAP_DETECT',\n AUDIO_OVERLAP_DETECT: 'AUDIO_OVERLAP_DETECT',\n MAX_DTS_DELTA_WITH_NEXT_SEGMENT_DETECT: 'MAX_DTS_DELTA_WITH_NEXT_SEGMENT_DETECT',\n REAL_TIME_SPEED: 'real_time_speed'\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import { NetError } from './error'\nimport { createResponse, getRangeValue, setUrlParams, calculateSpeed } from './helper'\nimport { ResponseType } from './types'\nimport { EVENT } from '../event'\nimport EventEmitter from 'eventemitter3'\nconst CACHESIZE = 2 * 1024 * 1024\nexport class FetchLoader extends EventEmitter {\n _abortController = null\n _timeoutTimer = null\n _reader = null\n _response = null\n _aborted = false\n _index = -1\n _range = null\n _receivedLength = 0\n _running = false\n _logger = null\n _vid = ''\n _onProcessMinLen = 0\n _onCancel = null\n _priOptions = null // 比较私有化的参数传递,回调时候透传\n\n constructor () {\n super()\n }\n\n load ({\n url,\n vid,\n timeout, // ms\n responseType,\n onProgress,\n index,\n onTimeout,\n onCancel,\n range,\n transformResponse,\n request,\n params,\n logger,\n\n method,\n headers,\n body,\n mode,\n credentials,\n cache,\n redirect,\n referrer,\n referrerPolicy,\n onProcessMinLen,\n priOptions\n }) {\n this._logger = logger\n this._aborted = false\n this._onProcessMinLen = onProcessMinLen\n this._onCancel = onCancel\n this._abortController = typeof AbortController !== 'undefined' && new AbortController()\n this._running = true\n this._index = index\n this._range = range || [0, 0]\n this._vid = vid || url\n this._priOptions = priOptions || {}\n const init = {\n method,\n headers,\n body,\n mode,\n credentials,\n cache,\n redirect,\n referrer,\n referrerPolicy,\n signal: this._abortController?.signal\n }\n\n let isTimeout = false\n clearTimeout(this._timeoutTimer)\n\n url = setUrlParams(url, params)\n\n const rangeValue = getRangeValue(range)\n if (rangeValue) {\n if (request) {\n headers = request.headers\n } else {\n headers = init.headers = init.headers || (Headers ? new Headers() : {})\n }\n if (Headers && headers instanceof Headers) {\n headers.append('Range', rangeValue)\n } else {\n headers.Range = rangeValue\n }\n }\n\n if (timeout) {\n this._timeoutTimer = setTimeout(() => {\n isTimeout = true\n this.cancel()\n if (onTimeout) {\n const error = new NetError(url, init, null, 'timeout')\n error.isTimeout = true\n onTimeout(error, {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions})\n }\n }, timeout)\n }\n\n const startTime = Date.now()\n this._logger.debug('[fetch load start], index,', index, ',range,', range)\n return new Promise((resolve, reject) => {\n fetch(request || url, request ? undefined : init).then(async (response) => {\n clearTimeout(this._timeoutTimer)\n this._response = response\n if (this._aborted || !this._running) return\n if (transformResponse) {\n response = transformResponse(response, url) || response\n }\n if (!response.ok) {\n throw new NetError(url, init, response, 'bad network response')\n }\n\n const firstByteTime = Date.now()\n let data\n if (responseType === ResponseType.TEXT) {\n data = await response.text()\n this._running = false\n } else if (responseType === ResponseType.JSON) {\n data = await response.json()\n this._running = false\n } else {\n if (onProgress) {\n this.resolve = resolve\n this.reject = reject\n this._loadChunk(response, onProgress, startTime, firstByteTime)\n return\n } else {\n data = await response.arrayBuffer()\n data = new Uint8Array(data)\n this._running = false\n const costTime = Date.now() - startTime\n const speed = calculateSpeed(data.byteLength, costTime)\n this.emit(EVENT.REAL_TIME_SPEED, {speed,len: data.byteLength, time: costTime, vid: this._vid, index: this._index, range: this._range, priOptions: this._priOptions})\n }\n }\n this._logger.debug('[fetch load end], index,', index, ',range,', range)\n resolve(createResponse(\n data,\n true,\n response,\n response.headers.get('Content-Length'),\n response.headers.get('age'),\n startTime,\n firstByteTime,\n index,\n range,\n this._vid,\n this._priOptions\n ))\n }).catch((error) => {\n clearTimeout(this._timeoutTimer)\n this._running = false\n if (this._aborted && !isTimeout) return\n error = error instanceof NetError ? error : new NetError(url, init, null, error?.message)\n error.startTime = startTime\n error.endTime = Date.now()\n error.isTimeout = isTimeout\n error.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n reject(error)\n })\n })\n }\n\n async cancel () {\n if (this._aborted) return\n this._aborted = true\n this._running = false\n if (this._response) {\n try {\n // await this._response.body.cancel()\n if (this._reader) {\n await this._reader.cancel()\n }\n } catch (error) {\n // ignore\n }\n this._response = this._reader = null\n }\n\n if (this._abortController) {\n try {\n this._abortController.abort()\n } catch (error) {\n // ignore\n }\n this._abortController = null\n }\n if (this._onCancel) {\n this._onCancel({index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions})\n }\n }\n\n _loadChunk (response, onProgress, st, firstByteTime) {\n if (!response.body || !response.body.getReader) {\n this._running = false\n const err = new NetError(response.url, '', response, 'onProgress of bad response.body.getReader')\n err.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n this.reject(err)\n return\n }\n if (this._onProcessMinLen > 0) {\n this._cache = new Uint8Array(CACHESIZE)\n this._writeIdx = 0\n }\n const reader = this._reader = response.body.getReader()\n let data\n\n let startTime\n let endTime\n const pump = async () => {\n startTime = Date.now()\n try {\n data = await reader.read()\n endTime = Date.now()\n } catch (e) {\n // request aborted\n endTime = Date.now()\n if (!this._aborted) {\n this._running = false\n e.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n this.reject(e)\n }\n return\n }\n const startRange = this._range?.length > 0 ? this._range[0] : 0\n const startByte = startRange + this._receivedLength\n if (this._aborted) {\n this._running = false\n onProgress(undefined, false, { range: [startByte, startByte], vid: this._vid, index: this._index, startTime, endTime, st, firstByteTime, priOptions:this._priOptions }, response)\n return\n }\n const curLen = data.value ? data.value.byteLength : 0\n this._receivedLength += curLen\n this._logger.debug('【fetchLoader,onProgress call】,task,', this._range, ', start,', startByte, ', end,', startRange + this._receivedLength, ', done,', data.done)\n let retData\n if (this._onProcessMinLen > 0) {\n if (this._writeIdx + curLen >= this._onProcessMinLen || data.done) {\n retData = new Uint8Array(this._writeIdx + curLen)\n retData.set(this._cache.slice(0, this._writeIdx), 0)\n curLen > 0 && retData.set(data.value, this._writeIdx)\n this._writeIdx = 0\n this._logger.debug('【fetchLoader,onProgress enough】,done,', data.done, ',len,', retData.byteLength, ', writeIdx,', this._writeIdx)\n } else {\n if (curLen > 0 && this._writeIdx + curLen < CACHESIZE) {\n this._cache.set(data.value, this._writeIdx)\n this._writeIdx += curLen\n this._logger.debug('【fetchLoader,onProgress cache】,len,', curLen, ', writeIdx,', this._writeIdx)\n } else if (curLen > 0) {\n const temp = new Uint8Array(this._writeIdx + curLen + 2048)\n this._logger.debug('【fetchLoader,onProgress extra start】,size,', this._writeIdx + curLen + 2048, ', datalen,', curLen, ', writeIdx,', this._writeIdx)\n temp.set(this._cache.slice(0, this._writeIdx), 0)\n curLen > 0 && temp.set(data.value, this._writeIdx)\n this._writeIdx += curLen\n delete this._cache\n this._cache = temp\n this._logger.debug('【fetchLoader,onProgress extra end】,len,', curLen, ', writeIdx,', this._writeIdx)\n }\n }\n } else {\n retData = data.value\n }\n if (retData && retData.byteLength > 0 || data.done) {\n onProgress(retData, data.done, {\n range: [this._range[0] + this._receivedLength - (retData ? retData.byteLength : 0), this._range[0] + this._receivedLength],\n vid: this._vid,\n index: this._index,\n startTime,\n endTime,\n st,\n firstByteTime,\n priOptions:this._priOptions\n }, response)\n }\n if (!data.done) {\n pump()\n } else {\n const costTime = Date.now() - st\n const speed = calculateSpeed(this._receivedLength, costTime)\n this.emit(EVENT.REAL_TIME_SPEED, {speed,len: this._receivedLength, time: costTime, vid: this._vid, index: this._index, range: this._range, priOptions: this._priOptions})\n this._running = false\n this._logger.debug('[fetchLoader onProgress end],task,', this._range, ',done,', data.done)\n this.resolve(createResponse(\n data,\n true,\n response,\n response.headers.get('Content-Length'),\n response.headers.get('age'),\n st,\n firstByteTime,\n this._index,\n this._range,\n this._vid,\n this._priOptions\n ))\n }\n }\n pump()\n }\n\n get receiveLen () {\n return this._receivedLength\n }\n\n get running () {\n return this._running\n }\n\n set running (status) {\n this._running = status\n }\n\n static isSupported () {\n return !!(typeof fetch !== 'undefined')\n }\n}\n","import { NetError } from './error'\nimport { createResponse, getRangeValue, setUrlParams, calculateSpeed } from './helper'\nimport { ResponseType } from './types'\nimport { EVENT } from '../event'\nimport EventEmitter from 'eventemitter3'\nexport class XhrLoader extends EventEmitter {\n\n _xhr = null\n _aborted = false\n _timeoutTimer = null\n _range = null\n _receivedLength = 0\n _url = null\n _onProgress = null\n _index = -1\n _headers = null\n // _chunkSizeKBList = [\n // 128, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 5120, 6144, 7168, 8192\n // ]\n\n _currentChunkSizeKB = 384\n _timeout = null\n _xhr = null\n _withCredentials = null\n _startTime = -1\n // _speedSampler = new SpeedSampler()\n _loadCompleteResolve = null\n _loadCompleteReject = null\n _runing = false\n _logger = false\n _vid = ''\n _responseType\n _credentials\n _method\n _transformResponse\n _firstRtt\n _onCancel = null\n _priOptions = null // 比较私有化的参数传递,回调时候透传\n\n\n constructor () {\n super()\n }\n\n load (req) {\n clearTimeout(this._timeoutTimer)\n this._logger = req.logger\n this._range = req.range\n this._onProgress = req.onProgress\n this._index = req.index\n this._headers = req.headers\n this._withCredentials = req.credentials === 'include' || req.credentials === 'same-origin'\n this._body = req.body || null\n req.method && (this._method = req.method)\n this._timeout = req.timeout || null\n this._runing = true\n this._vid = req.vid || req.url\n this._responseType = req.responseType\n this._firstRtt = -1\n this._onTimeout = req.onTimeout\n this._onCancel = req.onCancel\n this._request = req.request\n this._priOptions = req.priOptions || {}\n this._logger.debug('【xhrLoader task】, range', this._range)\n\n this._url = setUrlParams(req.url, req.params)\n\n const startTime = Date.now()\n return new Promise((resolve, reject) => {\n this._loadCompleteResolve = resolve\n this._loadCompleteReject = reject\n this._startLoad()\n }).catch((error) => {\n clearTimeout(this._timeoutTimer)\n this._runing = false\n if (this._aborted) return\n error = error instanceof NetError ? error : new NetError(this._url, this._request)\n error.startTime = startTime\n error.endTime = Date.now()\n error.options = {index: this._index, vid: this._vid, priOptions: this._priOptions}\n throw error\n })\n }\n\n _startLoad () {\n let range = null\n if (this._responseType === ResponseType.ARRAY_BUFFER && this._range && this._range.length > 1) {\n if (this._onProgress) {\n this._firstRtt = -1\n const chunkSize = this._currentChunkSizeKB * 1024\n const from = this._range[0] + this._receivedLength\n let to = this._range[1]\n if (chunkSize < this._range[1] - from) {\n to = from + chunkSize\n }\n range = [from, to]\n this._logger.debug('[xhr_loader->],tast :', this._range, ', SubRange, ', range)\n } else {\n range = this._range\n this._logger.debug('[xhr_loader->],tast :', this._range, ', allRange, ', range)\n }\n }\n this._internalOpen(range)\n }\n\n _internalOpen (range) {\n try {\n this._startTime = Date.now()\n const xhr = this._xhr = new XMLHttpRequest()\n xhr.open(this._method || 'GET', this._url, true)\n xhr.responseType = this._responseType\n this._timeout && (xhr.timeout = this._timeout)\n xhr.withCredentials = this._withCredentials\n xhr.onload = this._onLoad.bind(this)\n xhr.onreadystatechange = this._onReadyStatechange.bind(this)\n xhr.onerror = (errorEvent) => {\n this._running = false\n const error = new NetError(this._url, this._request, errorEvent?.currentTarget?.response, ('xhr.onerror.status:' + errorEvent?.currentTarget?.status + ',statusText,' + errorEvent?.currentTarget?.statusText))\n error.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n this._loadCompleteReject(error)\n }\n xhr.ontimeout = (event) => {\n this.cancel()\n const error = new NetError(this._url, this._request, {status:408}, 'timeout')\n if (this._onTimeout) {\n error.isTimeout = true\n this._onTimeout(error,{index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions})\n }\n error.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n this._loadCompleteReject(error)\n }\n const headers = this._headers || {}\n const rangeValue = getRangeValue(range)\n if (rangeValue) {\n headers.Range = rangeValue\n }\n if (headers) {\n Object.keys(headers).forEach(k => {\n xhr.setRequestHeader(k, headers[k])\n })\n }\n this._logger.debug('[xhr.send->] tast,', this._range, ',load sub range, ', range)\n xhr.send(this._body)\n } catch (e) {\n e.options = {index: this._index, range, vid: this._vid, priOptions: this._priOptions}\n this._loadCompleteReject(e)\n }\n }\n\n _onReadyStatechange (e) {\n const xhr = e.target\n if (xhr.readyState === 2) {\n this._firstRtt < 0 && (this._firstRtt = Date.now())\n }\n }\n\n _onLoad (e) {\n const status = e.target.status\n if (status < 200 || status > 299) {\n const error = new NetError(this._url, null, { ...e.target.response, status }, 'bad response,status:' + status)\n error.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n return this._loadCompleteReject(error)\n }\n let data = null\n let done = false\n let byteStart\n const startRange = (this._range?.length > 0 ? this._range [0] : 0 )\n if (this._responseType === ResponseType.ARRAY_BUFFER) {\n const chunk = new Uint8Array(e.target.response)\n byteStart = startRange + this._receivedLength\n if (chunk && chunk.byteLength > 0) {\n this._receivedLength += chunk.byteLength\n const costTime = Date.now() - this._startTime\n const speed = calculateSpeed(this._receivedLength, costTime)\n this.emit(EVENT.REAL_TIME_SPEED, {speed, len: this._receivedLength, time: costTime, vid: this._vid, index: this._index, range: [byteStart, startRange + this._receivedLength], priOptions: this._priOptions})\n }\n data = chunk\n if (this._range?.length > 1 && this._range[1] && this._receivedLength < this._range[1] - this._range[0]) {\n done = false\n } else {\n done = true\n }\n this._logger.debug('[xhr load done->], tast :', this._range, ', start', byteStart, 'end ', startRange + this._receivedLength, ',dataLen,', (chunk ? chunk.byteLength : 0), ',receivedLength', this._receivedLength, ',index,', this._index, ', done,', done)\n } else {\n done = true\n data = e.target.response\n }\n let response = {\n ok: status >= 200 && status < 300,\n status,\n statusText: this._xhr.statusText,\n url: this._xhr.responseURL,\n headers: this._getHeaders(this._xhr),\n body: this._xhr.response\n }\n if (this._transformResponse) {\n response = this._transformResponse(response, this._url) || response\n }\n if (this._onProgress) {\n this._onProgress(data, done, { index: this._index, vid: this._vid, range: [byteStart, startRange + this._receivedLength], startTime: this._startTime, endTime: Date.now(), priOptions: this._priOptions }, response)\n }\n\n if (!done) {\n this._startLoad()\n } else {\n this._runing = false\n this._loadCompleteResolve && this._loadCompleteResolve(createResponse(\n this._onProgress ? null : data,\n done,\n response,\n response.headers['content-length'],\n response.headers.age,\n this._startTime,\n this._firstRtt,\n this._index,\n this._range,\n this._vid,\n this._priOptions\n ))\n }\n }\n\n cancel () {\n if (this._aborted) return\n this._aborted = true\n this._runing = false\n super.removeAllListeners()\n if (this._onCancel) {\n this._onCancel({index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions})\n }\n if (this._xhr) {\n return this._xhr.abort()\n }\n }\n\n static isSupported () {\n return typeof XMLHttpRequest !== 'undefined'\n }\n\n get receiveLen () {\n return this._receivedLength\n }\n\n get running () {\n return this._running\n }\n\n set running (status) {\n this._running = status\n }\n\n _getHeaders (xhr) {\n const headerLines = xhr.getAllResponseHeaders().trim().split('\\r\\n')\n const headers = {}\n for (const header of headerLines) {\n const parts = header.split(': ')\n headers[parts[0].toLowerCase()] = parts.slice(1).join(': ')\n }\n return headers\n }\n}\n","import { FetchLoader } from './fetch'\nimport { XhrLoader } from './xhr'\nimport { LoaderType } from './types'\nimport { createPublicPromise } from '../utils'\nimport { Logger } from '../logger'\n\nexport class Task {\n constructor (type, config) {\n this.promise = createPublicPromise()\n this.alive = !!config.onProgress\n !config.logger && (config.logger = new Logger('Loader'))\n this._loaderType = type\n this._loader = type === LoaderType.FETCH && !!window.fetch ? new FetchLoader() : new XhrLoader()\n this._config = config\n this._retryCount = 0\n this._retryTimer = null\n this._canceled = false\n this._retryCheckFunc = config.retryCheckFunc\n this._logger = config.logger\n }\n\n exec () {\n const {\n retry,\n retryDelay,\n onRetryError,\n transformError,\n ...rest\n } = this._config\n\n const request = async () => {\n try {\n const response = await this._loader.load(rest)\n this.promise.resolve(response)\n } catch (e) {\n this._loader.running = false\n this._logger.debug('[task request catch err]', e)\n if (this._canceled) return\n\n e.loaderType = this._loaderType\n e.retryCount = this._retryCount\n\n let error = e\n if (transformError) {\n error = transformError(error) || error\n }\n\n if (onRetryError && this._retryCount > 0) onRetryError(error, this._retryCount, {index: rest.index, vid: rest.vid, range: rest.range, priOptions: rest.priOptions})\n\n this._retryCount++\n let isRetry = true\n if (this._retryCheckFunc) {\n isRetry = this._retryCheckFunc(e)\n }\n if (isRetry && this._retryCount <= retry) {\n clearTimeout(this._retryTimer)\n this._logger.debug('[task request setTimeout],retry', this._retryCount, ',retry range,', rest.range)\n this._retryTimer = setTimeout(request, retryDelay)\n return\n }\n this.promise.reject(error)\n }\n }\n\n request()\n return this.promise\n }\n\n async cancel () {\n clearTimeout(this._retryTimer)\n this._canceled = true\n this._loader.running = false\n return this._loader.cancel()\n }\n\n get running () {\n return this._loader && this._loader.running\n }\n\n get loader () {\n return this._loader\n }\n}\n","export function isMediaPlaying (media) {\n return media && !media.paused && !media.ended && media.playbackRate !== 0 && media.readyState !== 0\n}\n\nexport function getVideoPlaybackQuality (video) {\n if (!video) return {}\n if (typeof video.getVideoPlaybackQuality === 'function') {\n const info = video.getVideoPlaybackQuality()\n return {\n droppedVideoFrames: info.droppedVideoFrames || info.corruptedVideoFrames,\n totalVideoFrames: info.totalVideoFrames,\n creationTime: info.creationTime\n }\n }\n\n return {\n droppedVideoFrames: video.webkitDroppedFrameCount,\n totalVideoFrames: video.webkitDecodedFrameCount,\n creationTime: performance.now()\n }\n}\n\n/**\n * @param {Array.<Uint8Array>} arr\n * @returns\n */\nexport function concatUint8Array (...arr) {\n arr = arr.filter(Boolean)\n if (arr.length < 2) return arr[0]\n const data = new Uint8Array(arr.reduce((p, c) => p + c.byteLength, 0))\n let prevLen = 0\n arr.forEach((d) => {\n data.set(d, prevLen)\n prevLen += d.byteLength\n })\n return data\n}\n\nexport function sleep (t = 0) {\n return new Promise((resolve) => setTimeout(resolve, t))\n}\n","import { FetchLoader } from './fetch'\nimport { LoaderType, ResponseType } from './types'\nimport { getConfig } from './config'\nimport { Task } from './task'\nimport { isPlainObject } from '../is'\nimport { sleep } from '../streaming-helper'\nimport { EVENT } from '../event'\nimport EventEmitter from 'eventemitter3'\n\nexport {\n LoaderType,\n ResponseType\n}\n\nexport class NetLoader extends EventEmitter {\n type = LoaderType.FETCH\n\n _queue = []\n\n _alive = []\n\n _currentTask = null\n\n _config\n\n constructor (cfg) {\n super(cfg)\n this._config = getConfig(cfg)\n if (\n this._config.loaderType === LoaderType.XHR ||\n !FetchLoader.isSupported()\n ) {\n this.type = LoaderType.XHR\n }\n this.log = cfg.logger\n }\n\n isFetch () {\n return this.type === LoaderType.FETCH\n }\n\n static isFetchSupport () {\n return FetchLoader.isSupported()\n }\n\n load (url, config = {}) {\n if (typeof url === 'string' || !url) {\n config.url = url || config.url || this._config.url\n } else {\n config = url\n }\n\n config = Object.assign({}, this._config, config)\n if (config.params) config.params = Object.assign({}, config.params)\n if (config.headers && isPlainObject(config.headers)) config.headers = Object.assign({}, config.headers)\n if (config.body && isPlainObject(config.body)) config.body = Object.assign({}, config.body)\n\n if (config.transformRequest) {\n config = config.transformRequest(config) || config\n }\n config.logger = this.log\n\n const task = new Task(this.type, config)\n task.loader.on(EVENT.REAL_TIME_SPEED, (data) => {\n this.emit(EVENT.REAL_TIME_SPEED, data)\n })\n this._queue.push(task)\n if (this._queue.length === 1 && (!this._currentTask || !this._currentTask.running)) {\n this._processTask()\n }\n\n return task.promise\n }\n\n async cancel () {\n const cancels = this._queue.map(t => t.cancel()).concat(this._alive.map(t => t.cancel()))\n if (this._currentTask) {\n cancels.push(this._currentTask.cancel())\n }\n this._queue = []\n this._alive = []\n await Promise.all(cancels)\n await sleep()\n }\n\n _processTask () {\n this._currentTask = this._queue.shift()\n if (!this._currentTask) return\n\n if (this._currentTask.alive) {\n this._alive.push(this._currentTask)\n }\n const req = this._currentTask.exec().catch(e => {})\n\n if (!(req && typeof req.finally === 'function')) return\n\n req.finally(() => {\n if (this._currentTask?.alive && this._alive?.length > 0) {\n this._alive = this._alive.filter(task => task && task !== this._currentTask)\n }\n this._processTask()\n })\n\n }\n}\n","import { LoaderType, ResponseType } from './types'\n\nexport function getConfig (cfg) {\n return {\n loaderType: LoaderType.FETCH,\n retry: 0,\n retryDelay: 0, // ms\n timeout: 0,\n request: null, // Request\n onTimeout: undefined,\n onProgress: undefined,\n onRetryError: undefined,\n transformRequest: undefined,\n transformResponse: undefined,\n transformError: undefined,\n responseType: ResponseType.TEXT,\n range: undefined,\n url: '',\n params: undefined,\n method: 'GET',\n headers: {},\n body: undefined,\n mode: undefined,\n credentials: undefined,\n cache: undefined,\n redirect: undefined,\n referrer: undefined,\n referrerPolicy: undefined,\n integrity: undefined,\n onProcessMinLen: 0,\n ...cfg\n }\n}\n","/** @enum {string} */\nexport const TrackType = {\n VIDEO: 'video',\n AUDIO: 'audio',\n METADATA: 'metadata'\n}\n\n/** @enum {string} */\nexport const VideoCodecType = {\n AVC: 'avc',\n HEVC: 'hevc'\n}\n\n/** @enum {string} */\nexport const AudioCodecType = {\n AAC: 'aac',\n G711PCMA: 'g7110a',\n G711PCMU: 'g7110m'\n}\n\n/** @enum {string} */\nexport const WarningType = {\n LARGE_AV_SHIFT: 'LARGE_AV_SHIFT',\n LARGE_VIDEO_GAP: 'LARGE_VIDEO_GAP',\n LARGE_VIDEO_GAP_BETWEEN_CHUNK: 'LARGE_VIDEO_GAP_BETWEEN_CHUNK',\n LARGE_AUDIO_GAP: 'LARGE_AUDIO_GAP',\n AUDIO_FILLED: 'AUDIO_FILLED',\n AUDIO_DROPPED: 'AUDIO_DROPPED'\n}\n","import { TrackType, VideoCodecType } from './types'\n\nexport class VideoTrack {\n id = 1\n\n /** @readonly */\n type = TrackType.VIDEO\n\n codecType = VideoCodecType.AVC\n\n pid = -1 // ts use\n\n /** @type {Uint8Array | Object} */\n hvcC = undefined\n\n codec = ''\n\n timescale = 0\n\n formatTimescale = 0\n\n sequenceNumber = 0\n\n baseMediaDecodeTime = 0\n\n baseDts = 0\n\n duration = 0\n\n warnings = []\n\n /** @type {import('./video-sample').VideoSample[]} */\n samples = []\n\n /** @type {Uint8Array[]} */\n pps = []\n\n /** @type {Uint8Array[]} */\n sps = []\n\n /** @type {Uint8Array[]} */\n vps = []\n\n fpsNum = 0\n\n fpsDen = 0\n\n /** @type {[number, number]} */\n sarRatio = [] // [hSpacing, vSpacing]\n\n width = 0\n\n height = 0\n\n nalUnitSize = 4\n\n present = false\n\n isVideoEncryption = false\n\n isAudioEncryption = false\n\n isVideo = true\n\n kid = null\n\n pssh = null\n\n /** @type {any} */\n ext\n\n reset () {\n this.sequenceNumber =\n this.width =\n this.height =\n this.fpsDen =\n this.fpsNum =\n this.duration =\n this.baseMediaDecodeTime =\n this.timescale = 0\n this.codec = ''\n this.present = false\n this.pid = -1\n this.pps = []\n this.sps = []\n this.vps = []\n this.sarRatio = []\n this.samples = []\n this.warnings = []\n this.hvcC = null\n }\n\n /**\n * @returns {boolean}\n */\n exist () {\n return !!(this.pps.length && this.sps.length && this.codec)\n }\n\n /**\n * @returns {boolean}\n */\n hasSample () {\n return !!this.samples.length\n }\n\n get isEncryption (){\n return this.isVideoEncryption\n }\n}\n","import { TrackType, AudioCodecType } from './types'\n\nexport class AudioTrack {\n id = 2\n\n /** @readonly */\n type = TrackType.AUDIO\n\n codecType = AudioCodecType.AAC\n\n pid = -1\n\n codec = ''\n\n sequenceNumber = 0\n\n sampleDuration = 0\n\n timescale = 0\n\n formatTimescale = 0\n\n baseMediaDecodeTime = 0\n\n duration = 0\n\n warnings = []\n\n /** @type {import('./audio-sample').AudioSample[]} */\n samples = []\n\n baseDts = 0\n\n sampleSize = 16\n\n sampleRate = 0\n\n channelCount = 0\n\n objectType = 0\n\n sampleRateIndex = 0\n\n /** @type {number[]} */\n config = []\n\n present = false\n\n isVideoEncryption = false\n\n isAudioEncryption = false\n\n kid = null\n\n /** @type {any} */\n ext\n\n reset () {\n this.sequenceNumber = 0\n this.timescale = 0\n this.sampleDuration = 0\n this.sampleRate = 0\n this.channelCount = 0\n this.baseMediaDecodeTime = 0\n this.present = false\n this.pid = -1\n this.codec = ''\n this.samples = []\n this.config = []\n this.warnings = []\n }\n\n /**\n * @returns {boolean}\n */\n exist () {\n return !!(this.sampleRate && this.channelCount && this.codec && this.codecType === AudioCodecType.AAC)\n }\n\n /**\n * @returns {boolean}\n */\n hasSample () {\n return !!this.samples.length\n }\n\n get isEncryption (){\n return this.isAudioEncryption\n }\n}\n","/**\n * @typedef {Object} VideoFlag\n * @property {number} [isLeading=0]\n * @property {number} [dependsOn=1]\n * @property {number} [isDependedOn=0]\n * @property {number} [hasRedundancy=0]\n * @property {number} [paddingValue=0]\n * @property {number} [degradationPriority=0]\n * @property {number} [isNonSyncSample=1]\n */\n\nexport class VideoSample {\n /** @type {VideoFlag} */\n flag = {}\n\n keyframe = false\n\n gopId = 0\n\n duration = 0\n\n size = 0\n\n units = []\n\n chromaFormat = 420\n\n // sampleOffset = 0\n\n /**\n * @param {number} pts\n * @param {number} dts\n * @param {Uint8Array[]} [units]\n */\n constructor (pts, dts, units) {\n this.originPts = this.pts = pts\n this.originDts = this.dts = dts\n if (units) this.units = units\n }\n\n /**\n * @returns {number}\n */\n get cts () {\n return this.pts - this.dts\n }\n\n setToKeyframe () {\n this.keyframe = true\n this.flag.dependsOn = 2\n this.flag.isNonSyncSample = 0\n }\n}\n","export class AudioSample {\n duration = 1024\n\n flag = { dependsOn: 2, isNonSyncSample: 0 }\n keyframe = true\n\n /**\n * @param {number} pts\n * @param {Uint8Array} data\n * @param {number} [duration=1024]\n */\n constructor (pts, data, duration, sampleOffset) {\n this.originPts = this.pts = this.dts = pts\n this.data = data\n this.size = data.byteLength\n this.sampleOffset = sampleOffset\n if (duration) this.duration = duration\n }\n}\n","import { TrackType } from './types'\n\nclass Sample {\n time = 0 // second\n\n /**\n * @param {Object} data\n * @param {number} pts\n */\n constructor (data, pts) {\n this.data = data\n this.originPts = this.pts = pts\n }\n}\n\nexport class FlvScriptSample extends Sample {}\n\nexport class SeiSample extends Sample {}\n\nexport class MetadataTrack {\n /** @readonly */\n id = 3\n\n /** @readonly */\n type = TrackType.METADATA\n\n timescale = 0\n\n /** @type {FlvScriptSample[]} */\n flvScriptSamples = []\n\n /** @type {SeiSample[]} */\n seiSamples = []\n\n /**\n * @returns {boolean}\n */\n exist () {\n return !!((this.flvScriptSamples.length || this.seiSamples.length) && this.timescale)\n }\n\n reset () {\n this.timescale = 0\n this.flvScriptSamples = []\n this.seiSamples = []\n }\n\n /**\n * @returns {boolean}\n */\n hasSample () {\n return !!(this.flvScriptSamples.length || this.seiSamples.length)\n }\n}\n","export class ExpGolomb {\n _bytesAvailable\n\n _bitsAvailable = 0\n\n _word = 0\n\n constructor (data) {\n if (!data) throw new Error('ExpGolomb data params is required')\n this._data = data\n this._bytesAvailable = data.byteLength\n if (this._bytesAvailable) this._loadWord()\n }\n\n _loadWord () {\n const position = this._data.byteLength - this._bytesAvailable\n const availableBytes = Math.min(4, this._bytesAvailable)\n if (availableBytes === 0) throw new Error('No bytes available')\n\n const workingBytes = new Uint8Array(4)\n workingBytes.set(this._data.subarray(position, position + availableBytes))\n\n this._word = new DataView(workingBytes.buffer).getUint32(0)\n this._bitsAvailable = availableBytes * 8\n this._bytesAvailable -= availableBytes\n }\n\n skipBits (count) {\n if (this._bitsAvailable > count) {\n this._word <<= count\n this._bitsAvailable -= count\n } else {\n count -= this._bitsAvailable\n const skipBytes = Math.floor(count / 8)\n count -= (skipBytes * 8)\n this._bytesAvailable -= skipBytes\n this._loadWord()\n this._word <<= count\n this._bitsAvailable -= count\n }\n }\n\n readBits (size) {\n if (size > 32) {\n throw new Error('Cannot read more than 32 bits')\n }\n\n let bits = Math.min(this._bitsAvailable, size)\n const val = this._word >>> (32 - bits)\n\n this._bitsAvailable -= bits\n if (this._bitsAvailable > 0) {\n this._word <<= bits\n } else if (this._bytesAvailable > 0) {\n this._loadWord()\n }\n\n bits = size - bits\n if (bits > 0 && this._bitsAvailable) {\n return (val << bits) | this.readBits(bits)\n }\n return val\n }\n\n skipLZ () {\n let leadingZeroCount\n for (\n leadingZeroCount = 0;\n leadingZeroCount < this._bitsAvailable;\n ++leadingZeroCount\n ) {\n if ((this._word & (0x80000000 >>> leadingZeroCount)) !== 0) {\n this._word <<= leadingZeroCount\n this._bitsAvailable -= leadingZeroCount\n return leadingZeroCount\n }\n }\n this._loadWord()\n return leadingZeroCount + this.skipLZ()\n }\n\n skipUEG () {\n this.skipBits(1 + this.skipLZ())\n }\n\n readUEG () {\n const clz = this.skipLZ()\n return this.readBits(clz + 1) - 1\n }\n\n readEG () {\n const val = this.readUEG()\n if (1 & val) {\n return (1 + val) >>> 1\n }\n return -1 * (val >>> 1)\n }\n\n readBool () {\n return this.readBits(1) === 1\n }\n\n readUByte () {\n return this.readBits(8)\n }\n\n skipScalingList (count) {\n let lastScale = 8\n let nextScale = 8\n let deltaScale\n for (let j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = this.readEG()\n nextScale = (lastScale + deltaScale + 256) % 256\n }\n lastScale = nextScale === 0 ? lastScale : nextScale\n }\n }\n}\n","export class Logger {\n constructor (name) {\n this.name = name || ''\n this._prefix = `[${this.name}]`\n }\n\n warn (...args) {\n if (Logger.disabled) return\n console.warn(this._prefix, ...args)\n }\n\n static disabled = true\n\n static enable () {\n Logger.disabled = false\n }\n\n static disable () {\n Logger.disabled = true\n }\n}\n","export class UTF8 {\n /**\n *\n * @param {Uint8Array} uint8array\n * @return {string}\n */\n static decode (uint8array) {\n const out = []\n const input = uint8array\n let i = 0\n const length = uint8array.length\n\n while (i < length) {\n if (input[i] < 0x80) {\n out.push(String.fromCharCode(input[i]))\n ++i\n continue\n } else if (input[i] < 0xC0) {\n // fallthrough\n } else if (input[i] < 0xE0) {\n if (UTF8._checkContinuation(input, i, 1)) {\n const ucs4 = (input[i] & 0x1F) << 6 | (input[i + 1] & 0x3F)\n if (ucs4 >= 0x80) {\n out.push(String.fromCharCode(ucs4 & 0xFFFF))\n i += 2\n continue\n }\n }\n } else if (input[i] < 0xF0) {\n if (UTF8._checkContinuation(input, i, 2)) {\n const ucs4 = (input[i] & 0xF) << 12 | (input[i + 1] & 0x3F) << 6 | input[i + 2] & 0x3F\n if (ucs4 >= 0x800 && (ucs4 & 0xF800) !== 0xD800) {\n out.push(String.fromCharCode(ucs4 & 0xFFFF))\n i += 3\n continue\n }\n }\n } else if (input[i] < 0xF8) {\n if (UTF8._checkContinuation(input, i, 3)) {\n let ucs4 = (input[i] & 0x7) << 18 | (input[i + 1] & 0x3F) << 12 |\n (input[i + 2] & 0x3F) << 6 | (input[i + 3] & 0x3F)\n if (ucs4 > 0x10000 && ucs4 < 0x110000) {\n ucs4 -= 0x10000\n out.push(String.fromCharCode((ucs4 >>> 10) | 0xD800))\n out.push(String.fromCharCode((ucs4 & 0x3FF) | 0xDC00))\n i += 4\n continue\n }\n }\n }\n out.push(String.fromCharCode(0xFFFD))\n ++i\n }\n\n return out.join('')\n }\n\n static _checkContinuation (uint8array, start, checkLength) {\n const array = uint8array\n if (start + checkLength < array.length) {\n while (checkLength--) {\n if ((array[++start] & 0xC0) !== 0x80) {\n return false\n }\n }\n return true\n } else {\n return false\n }\n }\n}\n","export const isBrowser = typeof window !== 'undefined'\n\nconst ua = isBrowser && navigator.userAgent.toLocaleLowerCase()\n\n// eslint-disable-next-line no-lookahead-lookbehind-regexp/no-lookahead-lookbehind-regexp\nexport const isSafari = isBrowser && /^((?!chrome|android).)*safari/.test(ua)\nexport const isFirefox = isBrowser && ua.includes('firefox')\nexport const isAndroid = isBrowser && ua.includes('android')\n","/* c8 ignore next 4 */\nexport { ExpGolomb } from './exp-golomb'\nexport { Logger } from './logger'\nexport { UTF8 } from './utf8'\nexport * from './env'\n\nexport function concatUint8Array (...arr) {\n arr = arr.filter(Boolean)\n const data = new Uint8Array(arr.reduce((p, c) => p + c.byteLength, 0))\n let prevLen = 0\n arr.forEach((d) => {\n data.set(d, prevLen)\n prevLen += d.byteLength\n })\n return data\n}\n\nexport const MAX_SIZE = Math.pow(2, 32)\n\nexport function readBig16 (data, i = 0) {\n return (data[i] << 8) + (data[i + 1] || 0)\n}\n\nexport function readBig24 (data, i = 0) {\n return (data[i] << 16) + (data[i + 1] << 8) + (data[i + 2] || 0)\n}\n\nexport function readBig32 (data, i = 0) {\n return (data[i] << 24 >>> 0) + (data[i + 1] << 16) + (data[i + 2] << 8) + (data[i + 3] || 0)\n}\n\nexport function readBig64 (data, i = 0) {\n return readBig32(data, i) * MAX_SIZE + readBig32(data, i + 4)\n}\n\nexport function getAvcCodec (codecs) {\n let codec = 'avc1.'\n let h\n for (let i = 0; i < 3; i++) {\n h = codecs[i].toString(16)\n if (h.length < 2) h = `0${h}`\n codec += h\n }\n return codec\n}\n\nexport function formatIV (arr) {\n let iv = ''\n arr.forEach(value => {\n iv += bufferToString(value)\n })\n if (iv.length <= 32) {\n const len = 32 - iv.length\n for (let i = 0; i < len; i++) {\n iv += '0'\n }\n }\n return iv\n}\n\nexport function parse (a) {\n if (!Array.isArray(a)) {\n const 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}\nfunction bufferToString (value) {\n return ('0' + (Number(value).toString(16))).slice(-2).toUpperCase()\n}\n\nexport function hashVal (str) {\n let hash = 0; let i; let chr\n if (str.length === 0) return hash\n for (i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i)\n hash = ((hash << 5) - hash) + chr\n hash |= 0\n }\n return hash\n}\n","import { readBig32 } from '../utils'\n\nexport class NALu {\n static parseAnnexB (data) {\n const len = data.length\n let start = 2\n let end = 0\n while (data[start] !== null && data[start] !== undefined && data[start] !== 1) {\n start++\n }\n start++\n end = start + 2\n\n if (end >= len) return []\n\n const units = []\n\n while (end < len) {\n switch (data[end]) {\n case 0:\n if (data[end - 1] !== 0) {\n end += 2\n break\n } else if (data[end - 2] !== 0) {\n end++\n break\n }\n\n if (start !== end - 2) units.push(data.subarray(start, end - 2))\n\n do {\n end++\n } while (data[end] !== 1 && end < len)\n start = end + 1\n end = start + 2\n break\n case 1:\n if (data[end - 1] !== 0 || data[end - 2] !== 0) {\n end += 3\n break\n }\n if (start !== end - 2) units.push(data.subarray(start, end - 2))\n start = end + 1\n end = start + 2\n break\n default:\n end += 3\n break\n }\n }\n\n if (start < len) units.push(data.subarray(start))\n\n return units\n }\n\n static parseAvcC (data, size = 4) {\n if (data.length < 4) return\n const dataLen = data.length\n const units = []\n\n let offset = 0\n let length\n while ((offset + size) < dataLen) {\n length = readBig32(data, offset)\n if (size === 3) length >>>= 8\n offset += size\n\n if (!length) continue\n if (offset + length > dataLen) {\n break\n }\n\n units.push(data.subarray(offset, offset + length))\n offset += length\n }\n\n return units\n }\n\n static parseSEI (unit, isHevc) {\n const len = unit.length\n let i = isHevc ? 2 : 1\n let type = 0\n let size = 0\n let uuid = ''\n\n while (unit[i] === 255) {\n type += 255\n i++\n }\n\n type += unit[i++]\n\n while (unit[i] === 255) {\n size += 255\n i++\n }\n size += unit[i++]\n\n if (type === 5 && len > i + 16) {\n for (let j = 0; j < 16; j++) {\n uuid += unit[i].toString(16)\n i++\n }\n }\n\n return {\n payload: unit.subarray(i), type, size, uuid\n }\n }\n\n static removeEPB (uint) {\n const length = uint.byteLength\n const emulationPreventionBytesPositions = []\n let i = 1\n\n while (i < length - 2) {\n if (uint[i] === 0 && uint[i + 1] === 0 && uint[i + 2] === 0x03) {\n emulationPreventionBytesPositions.push(i + 2)\n i += 2\n } else {\n i++\n }\n }\n\n if (!emulationPreventionBytesPositions.length) return uint\n\n const newLength = length - emulationPreventionBytesPositions.length\n const newData = new Uint8Array(newLength)\n\n let sourceIndex = 0\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === emulationPreventionBytesPositions[0]) {\n sourceIndex++\n emulationPreventionBytesPositions.shift()\n }\n newData[i] = uint[sourceIndex]\n }\n\n return newData\n }\n}\n","import { NALu } from './nalu'\nimport { ExpGolomb, getAvcCodec } from '../utils'\n\nexport class AVC {\n static parseAVCDecoderConfigurationRecord (data) {\n if (data.length < 7) return\n const nalUnitSize = (data[4] & 3) + 1\n\n let spsParsed\n const spsArr = []\n const ppsArr = []\n\n let offset = 6\n const spsCount = data[5] & 0x1f\n let spsSize\n for (let i = 0; i < spsCount; i++) {\n spsSize = (data[offset] << 8) | data[offset + 1]\n offset += 2\n if (!spsSize) continue\n\n const sps = data.subarray(offset, offset + spsSize)\n offset += spsSize\n spsArr.push(sps)\n\n if (!spsParsed) {\n spsParsed = AVC.parseSPS(NALu.removeEPB(sps))\n }\n }\n\n const ppsCount = data[offset]\n offset++\n let ppsSize\n for (let i = 0; i < ppsCount; i++) {\n ppsSize = (data[offset] << 8) | data[offset + 1]\n offset += 2\n if (!ppsSize) continue\n ppsArr.push(data.subarray(offset, offset + ppsSize))\n offset += ppsSize\n }\n\n return {\n sps: spsParsed,\n spsArr,\n ppsArr,\n nalUnitSize\n }\n }\n\n static parseSPS (unit) {\n const eg = new ExpGolomb(unit)\n eg.readUByte()\n\n const profileIdc = eg.readUByte()\n const profileCompatibility = eg.readUByte()\n const levelIdc = eg.readUByte()\n eg.skipUEG()\n\n let chromaFormat = 420\n if (\n profileIdc === 100 ||\n profileIdc === 110 ||\n profileIdc === 122 ||\n profileIdc === 244 ||\n profileIdc === 44 ||\n profileIdc === 83 ||\n profileIdc === 86 ||\n profileIdc === 118 ||\n profileIdc === 128 ||\n profileIdc === 138 ||\n profileIdc === 144\n ) {\n const chromaFormatIdc = eg.readUEG()\n if (chromaFormatIdc <= 3) chromaFormat = [0, 420, 422, 444][chromaFormatIdc]\n if (chromaFormatIdc === 3) eg.skipBits(1)\n eg.skipUEG()\n eg.skipUEG()\n eg.skipBits(1)\n if (eg.readBool()) {\n const scalingListCount = chromaFormatIdc !== 3 ? 8 : 12\n for (let i = 0; i < scalingListCount; i++) {\n if (eg.readBool()) {\n if (i < 6) {\n eg.skipScalingList(16)\n } else {\n eg.skipScalingList(64)\n }\n }\n }\n }\n }\n\n eg.skipUEG()\n const picOrderCntType = eg.readUEG()\n if (picOrderCntType === 0) {\n eg.readUEG()\n } else if (picOrderCntType === 1) {\n eg.skipBits(1)\n eg.skipUEG()\n eg.skipUEG()\n const numRefFramesInPicOrderCntCycle = eg.readUEG()\n for (let i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n eg.skipUEG()\n }\n }\n\n eg.skipUEG()\n eg.skipBits(1)\n const picWidthInMbsMinus1 = eg.readUEG()\n const picHeightInMapUnitsMinus1 = eg.readUEG()\n const frameMbsOnlyFlag = eg.readBits(1)\n if (frameMbsOnlyFlag === 0) eg.skipBits(1)\n eg.skipBits(1)\n\n let frameCropLeftOffset = 0\n let frameCropRightOffset = 0\n let frameCropTopOffset = 0\n let frameCropBottomOffset = 0\n\n if (eg.readBool()) {\n frameCropLeftOffset = eg.readUEG()\n frameCropRightOffset = eg.readUEG()\n frameCropTopOffset = eg.readUEG()\n frameCropBottomOffset = eg.readUEG()\n }\n\n let sarRatio\n let fixedFrame\n let fpsNum\n let fpsDen\n let fps\n if (eg.readBool()) {\n if (eg.readBool()) {\n const aspectRatioIdc = eg.readUByte()\n switch (aspectRatioIdc) {\n case 1: sarRatio = [1, 1]; break\n case 2: sarRatio = [12, 11]; break\n case 3: sarRatio = [10, 11]; break\n case 4: sarRatio = [16, 11]; break\n case 5: sarRatio = [40, 33]; break\n case 6: sarRatio = [24, 11]; break\n case 7: sarRatio = [20, 11]; break\n case 8: sarRatio = [32, 11]; break\n case 9: sarRatio = [80, 33]; break\n case 10: sarRatio = [18, 11]; break\n case 11: sarRatio = [15, 11]; break\n case 12: sarRatio = [64, 33]; break\n case 13: sarRatio = [160, 99]; break\n case 14: sarRatio = [4, 3]; break\n case 15: sarRatio = [3, 2]; break\n case 16: sarRatio = [2, 1]; break\n case 255: {\n sarRatio = [\n (eg.readUByte() << 8) | eg.readUByte(),\n (eg.readUByte() << 8) | eg.readUByte()\n ]\n break\n }\n default:\n }\n }\n\n if (eg.readBool()) eg.readBool()\n\n if (eg.readBool()) {\n eg.readBits(4)\n if (eg.readBool()) eg.readBits(24)\n }\n\n if (eg.readBool()) {\n eg.readUEG()\n eg.readUEG()\n }\n\n if (eg.readBool()) {\n const numUnitsInTick = eg.readBits(32)\n const timeScale = eg.readBits(32)\n fixedFrame = eg.readBool()\n\n fpsNum = timeScale\n fpsDen = numUnitsInTick * 2\n fps = fpsNum / fpsDen\n }\n }\n\n return {\n codec: getAvcCodec(unit.subarray(1, 4)),\n profileIdc,\n profileCompatibility,\n levelIdc,\n chromaFormat,\n width: Math.ceil(\n (picWidthInMbsMinus1 + 1) * 16 -\n 2 * (frameCropLeftOffset + frameCropRightOffset)\n ),\n height:\n (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 -\n (frameMbsOnlyFlag ? 2 : 4) *\n (frameCropTopOffset + frameCropBottomOffset),\n sarRatio,\n fpsNum,\n fpsDen,\n fps,\n fixedFrame\n }\n }\n}\n","import { isFirefox, isAndroid } from '../utils'\n\nexport class AAC {\n static FREQ = [\n 96000,\n 88200,\n 64000,\n 48000,\n 44100,\n 32000,\n 24000,\n 22050,\n 16000,\n 12000,\n 11025,\n 8000,\n 7350\n ];\n\n static getRateIndexByRate (rate) {\n return AAC.FREQ.indexOf(rate)\n }\n\n static parseADTS (data, pts) {\n const len = data.length\n let i = 0\n\n while ((i + 2) < len) {\n if (data[i] === 0xff && (data[i + 1] & 0xf6) === 0xf0) {\n break\n }\n i++\n }\n\n if (i >= len) return\n\n const skip = i\n const frames = []\n const samplingFrequencyIndex = (data[i + 2] & 0x3c) >>> 2\n const sampleRate = AAC.FREQ[samplingFrequencyIndex]\n if (!sampleRate) throw new Error(`Invalid sampling index: ${samplingFrequencyIndex}`)\n const objectType = ((data[i + 2] & 0xc0) >>> 6) + 1\n const channelCount = ((data[i + 2] & 1) << 2) | ((data[i + 3] & 0xc0) >>> 6)\n const { config, codec } = AAC._getConfig(samplingFrequencyIndex, channelCount, objectType)\n\n let protectionSkipBytes\n let frameLength\n let frameIndex = 0\n const duration = AAC.getFrameDuration(sampleRate)\n\n while ((i + 7) < len) {\n if ((data[i] !== 0xff) || (data[i + 1] & 0xF6) !== 0xf0) {\n i++\n continue\n }\n\n frameLength = ((data[i + 3] & 0x03) << 11) | (data[i + 4] << 3) | ((data[i + 5] & 0xe0) >> 5)\n if ((len - i) < frameLength) break\n\n protectionSkipBytes = (~data[i + 1] & 0x01) * 2\n frames.push({\n pts: pts + frameIndex * duration,\n data: data.subarray(i + 7 + protectionSkipBytes, i + frameLength)\n })\n\n frameIndex++\n i += frameLength\n }\n\n return {\n skip,\n remaining: i >= len ? undefined : data.subarray(i),\n frames,\n samplingFrequencyIndex,\n sampleRate,\n objectType,\n channelCount,\n codec,\n config,\n originCodec: `mp4a.40.${objectType}`\n }\n }\n\n static parseAudioSpecificConfig (data) {\n if (!data.length) return\n const objectType = data[0] >>> 3\n const samplingFrequencyIndex = ((data[0] & 0x07) << 1) | (data[1] >>> 7)\n const channelCount = (data[1] & 0x78) >>> 3\n const sampleRate = AAC.FREQ[samplingFrequencyIndex]\n // play as no audio track stream\n if (!sampleRate) return\n const { config, codec } = AAC._getConfig(samplingFrequencyIndex, channelCount, objectType)\n\n return {\n samplingFrequencyIndex,\n sampleRate,\n objectType,\n channelCount,\n config,\n codec,\n originCodec: `mp4a.40.${objectType}`\n }\n }\n\n static getFrameDuration (rate, timescale = 90000) {\n return 1024 * timescale / rate\n }\n\n static _getConfig (samplingIndex, channelCount, originObjectType) {\n const config = []\n let objectType\n let extensionSamplingIndex\n if (isFirefox) {\n if (samplingIndex >= 6) { // use SBR (HE-AAC)\n objectType = 5\n extensionSamplingIndex = samplingIndex - 3\n } else { // use LC-AAC\n objectType = 2\n extensionSamplingIndex = samplingIndex\n }\n } else if (isAndroid) { // use LC-AAC\n objectType = 2\n extensionSamplingIndex = samplingIndex\n } else { // use HE-AAC\n objectType = (originObjectType === 2 || originObjectType === 5) ? originObjectType : 5\n extensionSamplingIndex = samplingIndex\n\n if (samplingIndex >= 6) {\n extensionSamplingIndex = samplingIndex - 3\n } else if (channelCount === 1) { // Mono channel, use LC-AAC\n objectType = 2\n extensionSamplingIndex = samplingIndex\n }\n }\n\n config[0] = objectType << 3\n config[0] |= (samplingIndex & 0x0e) >> 1\n config[1] = (samplingIndex & 0x01) << 7\n config[1] |= channelCount << 3\n if (objectType === 5) {\n config[1] |= ((extensionSamplingIndex & 0x0e) >> 1)\n config[2] = (extensionSamplingIndex & 0x01) << 7\n config[2] |= (2 << 2)\n config[3] = 0\n }\n\n return {\n config,\n codec: `mp4a.40.${objectType}`\n }\n }\n\n /* c8 ignore next 65 */\n static getSilentFrame (codec, channelCount) {\n switch (codec) {\n case 'mp4a.40.2':\n if (channelCount === 1) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80])\n } if (channelCount === 2) {\n return new Uint8Array([\n 0x21, 0x00, 0x49, 0x90, 0x02, 0x19, 0x00, 0x23, 0x80\n ])\n } if (channelCount === 3) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x8e\n ])\n } if (channelCount === 4) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x80, 0x2c, 0x80, 0x08, 0x02, 0x38\n ])\n } if (channelCount === 5) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x38\n ])\n } if (channelCount === 6) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x00, 0xb2,\n 0x00, 0x20, 0x08, 0xe0\n ])\n }\n break\n default:\n if (channelCount === 1) {\n return new Uint8Array([\n 0x1, 0x40, 0x22, 0x80, 0xa3, 0x4e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0,\n 0x0, 0x1c, 0x6, 0xf1, 0xc1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5e\n ])\n } if (channelCount === 2) {\n return new Uint8Array([\n 0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0,\n 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5e\n ])\n } if (channelCount === 3) {\n return new Uint8Array([\n 0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0,\n 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5e\n ])\n }\n break\n }\n }\n}\n","import { NALu } from './nalu'\nimport { ExpGolomb } from '../utils'\n\nexport class HEVC {\n static parseHEVCDecoderConfigurationRecord (data, hvcC = {}) {\n if (data.length < 23) return\n hvcC = hvcC || {}\n const nalUnitSize = (data[21] & 3) + 1\n\n let vpsParsed\n let spsParsed\n const spsArr = []\n const ppsArr = []\n const vpsArr = []\n\n let offset = 23\n const numOfArrays = data[22]\n\n let nalUnitType\n let numNalus\n let nalSize\n for (let i = 0; i < numOfArrays; i++) {\n nalUnitType = data[offset] & 0x3f\n numNalus = (data[offset + 1] << 8) | data[offset + 2]\n\n offset += 3\n\n for (let j = 0; j < numNalus; j++) {\n nalSize = (data[offset] << 8) | data[offset + 1]\n offset += 2\n if (!nalSize) continue\n switch (nalUnitType) {\n case 32: {\n const vps = data.subarray(offset, offset + nalSize)\n if (!vpsParsed) vpsParsed = HEVC.parseVPS(NALu.removeEPB(vps), hvcC)\n vpsArr.push(vps)\n }\n break\n case 33: {\n const sps = data.subarray(offset, offset + nalSize)\n if (!spsParsed) spsParsed = HEVC.parseSPS(NALu.removeEPB(sps), hvcC)\n spsArr.push(sps)\n }\n break\n case 34:\n ppsArr.push(data.subarray(offset, offset + nalSize))\n break\n default:\n }\n\n offset += nalSize\n }\n }\n\n return {\n hvcC,\n sps: spsParsed,\n spsArr,\n ppsArr,\n vpsArr,\n nalUnitSize\n }\n }\n\n static parseVPS (unit, hvcC) {\n hvcC = hvcC || {}\n const eg = new ExpGolomb(unit)\n eg.readUByte()\n eg.readUByte()\n\n eg.readBits(12)\n const vpsMaxSubLayersMinus1 = eg.readBits(3)\n hvcC.numTemporalLayers = Math.max(hvcC.numTemporalLayers || 0, vpsMaxSubLayersMinus1 + 1)\n eg.readBits(17)\n HEVC._parseProfileTierLevel(eg, vpsMaxSubLayersMinus1, hvcC)\n\n return hvcC\n }\n\n static parseSPS (unit, hvcC = {}) {\n hvcC = hvcC || {}\n const eg = new ExpGolomb(unit)\n eg.readUByte()\n eg.readUByte()\n\n eg.readBits(4)\n const spsMaxSubLayersMinus1 = eg.readBits(3)\n hvcC.numTemporalLayers = Math.max(spsMaxSubLayersMinus1 + 1, hvcC.numTemporalLayers || 0)\n hvcC.temporalIdNested = eg.readBits(1)\n HEVC._parseProfileTierLevel(eg, spsMaxSubLayersMinus1, hvcC)\n\n eg.readUEG() // sps_seq_parameter_set_id\n\n const chromaFormatIdc = hvcC.chromaFormatIdc = eg.readUEG()\n let chromaFormat = 420\n if (chromaFormatIdc <= 3) chromaFormat = [0, 420, 422, 444][chromaFormatIdc]\n\n let separateColourPlaneFlag = 0\n if (chromaFormatIdc === 3) {\n separateColourPlaneFlag = eg.readBits(1)\n }\n\n let width = eg.readUEG() // pic_width_in_luma_samples\n let height = eg.readUEG() // pic_height_in_luma_samples\n\n const conformanceWindowFlag = eg.readBits(1)\n\n let confWinLeftOffset\n let confWinRightOffset\n let confWinTopOffset\n let confWinBottomOffset\n if (conformanceWindowFlag === 1) {\n confWinLeftOffset = eg.readUEG() // conf_win_left_offset\n confWinRightOffset = eg.readUEG() // conf_win_right_offset\n confWinTopOffset = eg.readUEG() // conf_win_top_offset\n confWinBottomOffset = eg.readUEG() // conf_win_bottom_offset\n }\n\n hvcC.bitDepthLumaMinus8 = eg.readUEG() // bit_depth_luma_minus8\n hvcC.bitDepthChromaMinus8 = eg.readUEG() // bit_depth_chroma_minus8\n\n if (conformanceWindowFlag === 1) {\n const subWidthC = (((chromaFormatIdc === 1) || (chromaFormatIdc === 2)) && (separateColourPlaneFlag === 0)) ? 2 : 1\n const subHeightC = ((chromaFormatIdc === 1) && (separateColourPlaneFlag === 0)) ? 2 : 1\n width -= (subWidthC * (confWinRightOffset + confWinLeftOffset))\n height -= (subHeightC * (confWinBottomOffset + confWinTopOffset))\n }\n\n return {\n codec: 'hev1.1.6.L93.B0',\n width,\n height,\n chromaFormat,\n hvcC\n }\n }\n\n static _parseProfileTierLevel (eg, maxSubLayersMinus1, hvcC) {\n const generalTierFlag = hvcC.generalTierFlag || 0\n hvcC.generalProfileSpace = eg.readBits(2)\n hvcC.generalTierFlag = Math.max(eg.readBits(1), generalTierFlag)\n hvcC.generalProfileIdc = Math.max(eg.readBits(5), hvcC.generalProfileIdc || 0)\n hvcC.generalProfileCompatibilityFlags = eg.readBits(32)\n hvcC.generalConstraintIndicatorFlags = [eg.readBits(8), eg.readBits(8), eg.readBits(8), eg.readBits(8), eg.readBits(8), eg.readBits(8)]\n const generalLevelIdc = eg.readBits(8)\n if (generalTierFlag < hvcC.generalTierFlag) {\n hvcC.generalLevelIdc = generalLevelIdc\n } else {\n hvcC.generalLevelIdc = Math.max(generalLevelIdc, hvcC.generalLevelIdc || 0)\n }\n\n const subLayerProfilePresentFlag = []\n const subLayerLevelPresentFlag = []\n for (let j = 0; j < maxSubLayersMinus1; j++) {\n subLayerProfilePresentFlag[j] = eg.readBits(1)\n subLayerLevelPresentFlag[j] = eg.readBits(1)\n }\n\n if (maxSubLayersMinus1 > 0) {\n eg.readBits((8 - maxSubLayersMinus1) * 2)\n }\n\n for (let i = 0; i < maxSubLayersMinus1; i++) {\n if (subLayerProfilePresentFlag[i] !== 0) {\n eg.readBits(2)\n eg.readBits(1)\n eg.readBits(5)\n\n eg.readBits(16)\n eg.readBits(16)\n\n eg.readBits(4)\n\n eg.readBits(16)\n eg.readBits(16)\n eg.readBits(12)\n }\n if (subLayerLevelPresentFlag[i] !== 0) {\n eg.readBits(8)\n }\n }\n }\n}\n","import { AudioCodecType, AudioSample, WarningType } from '../model'\nimport { AAC } from '../codec'\nimport { isSafari } from '../utils'\n\nconst LARGE_AV_FIRST_FRAME_GAP = 500 // ms\nconst AUDIO_GAP_OVERLAP_THRESHOLD_COUNT = 3\nconst MAX_SILENT_FRAME_DURATION = 1000 // ms\nconst AUDIO_EXCETION_LOG_EMIT_DURATION = 5000 // 5s\nconst MAX_VIDEO_FRAME_DURATION = 1000 // ms\nconst MAX_DTS_DELTA_WITH_NEXT_CHUNK = 200 // ms\nconst VIDEO_EXCETION_LOG_EMIT_DURATION = 5000 // 5s\nconst TRACK_BREACKED_CHECK_TIME = 5\n\nexport class FlvFixer {\n constructor (videoTrack, audioTrack, metadataTrack) {\n this.videoTrack = videoTrack\n this.audioTrack = audioTrack\n this.metadataTrack = metadataTrack\n\n this._baseDts = -1\n this._baseDtsInited = false\n\n this._audioNextPts = undefined\n this._videoNextDts = undefined\n\n this._audioTimestampBreak = 0\n this._videoTimestampBreak = 0\n this._lastVideoDuration = 0\n\n this._lastAudioExceptionGapDot = -Infinity\n this._lastAudioExceptionOverlapDot = -Infinity\n this._lastAudioExceptionLargeGapDot = -Infinity\n\n this._lastVideoExceptionLargeGapDot = -Infinity\n this._lastVideoExceptionChunkFirstDtsDot = -Infinity\n }\n\n /**\n * @param {number} startTime 点播seek到的时间点\n * @param {boolean} discontinuity 是否换流\n * @param {boolean} contiguous 前后chunk时间戳是否连续\n */\n fix (startTime = 0, discontinuity = false, contiguous = true) {\n startTime = Math.round(startTime * 1000)\n const videoTrack = this.videoTrack\n const audioTrack = this.audioTrack\n\n if (discontinuity || !contiguous) {\n this._videoLastSample = null\n this._audioNextPts = undefined\n this._videoNextDts = undefined\n this._audioTimestampBreak = 0\n this._videoTimestampBreak = 0\n this._lastAudioExceptionGapDot = -Infinity\n this._lastAudioExceptionOverlapDot = -Infinity\n this._lastAudioExceptionLargeGapDot = -Infinity\n this._lastVideoExceptionLargeGapDot = -Infinity\n this._lastVideoExceptionChunkFirstDtsDot = -Infinity\n }\n\n if (discontinuity && !contiguous) {\n this._baseDtsInited = false\n }\n\n if (!this._baseDtsInited) {\n this._calculateBaseDts(audioTrack, videoTrack)\n }\n\n if (!contiguous && startTime) {\n this._audioNextPts = this._videoNextDts = startTime\n }\n\n const resetBaseDts = this._baseDtsInited &&\n (this._videoTimestampBreak || !this.videoTrack.exist()) &&\n (this._audioTimestampBreak || !this.audioTrack.exist())\n\n if (resetBaseDts) {\n this._resetBaseDtsWhenStreamBreaked()\n }\n\n this._fixAudio(audioTrack)\n\n this._fixVideo(videoTrack)\n\n if (this.metadataTrack.exist()) {\n const timescale = this.metadataTrack.timescale\n this.metadataTrack.seiSamples.forEach(s => {\n s.pts = s.originPts - this._baseDts\n s.time = Math.max(0, s.pts) / timescale\n })\n this.metadataTrack.flvScriptSamples.forEach(s => {\n s.pts = s.originPts - this._baseDts\n s.time = Math.max(0, s.pts) / timescale\n })\n }\n\n if (videoTrack.samples.length) {\n videoTrack.baseMediaDecodeTime = videoTrack.samples[0].dts\n }\n if (audioTrack.samples.length) {\n audioTrack.baseMediaDecodeTime = audioTrack.samples[0].pts * audioTrack.timescale / 1000\n }\n }\n\n _fixVideo (videoTrack) {\n const samples = videoTrack.samples\n\n if (!samples.length) return\n\n samples.forEach(x => {\n x.dts -= this._baseDts\n x.pts -= this._baseDts\n })\n\n let refSampleDurationInt\n if (videoTrack.fpsNum && videoTrack.fpsDen) {\n refSampleDurationInt = videoTrack.timescale * (videoTrack.fpsDen / videoTrack.fpsNum)\n } else if (videoTrack.length > 1) {\n const first = videoTrack.samples[0]\n const last = videoTrack.samples[samples.length - 1]\n refSampleDurationInt = Math.floor((last.dts - first.dts) / (samples.length - 1))\n } else {\n refSampleDurationInt = this._lastVideoDuration || 40\n }\n\n const lastSample = samples.pop()\n\n if (this._videoLastSample) {\n samples.unshift(this._videoLastSample)\n }\n\n this._videoLastSample = lastSample\n\n if (!samples.length) return\n\n if (this._videoNextDts === undefined) {\n const samp0 = samples[0]\n this._videoNextDts = samp0.dts\n }\n\n const len = samples.length\n let sampleDuration = 0\n const firstSample = samples[0]\n const vDelta = this._videoNextDts - firstSample.dts\n\n if (Math.abs(vDelta) > MAX_DTS_DELTA_WITH_NEXT_CHUNK) {\n // emit large delta of first sample with expect\n if (Math.abs(firstSample.dts - this._lastVideoExceptionChunkFirstDtsDot) > VIDEO_EXCETION_LOG_EMIT_DURATION) {\n this._lastVideoExceptionChunkFirstDtsDot = firstSample.dts\n\n videoTrack.warnings.push({\n type: WarningType.LARGE_VIDEO_GAP_BETWEEN_CHUNK,\n nextDts: this._videoNextDts,\n firstSampleDts: firstSample.dts,\n nextSampleDts: samples[1]?.dts,\n sampleDuration: vDelta\n })\n }\n\n // only video breaked\n if (this._videoTimestampBreak >= TRACK_BREACKED_CHECK_TIME) {\n this._videoNextDts = firstSample.dts\n this._videoTimestampBreak = 0\n } else {\n // resolve first frame only\n firstSample.dts += vDelta\n firstSample.pts += vDelta\n if (!this.audioTrack.exist()) {\n this._videoTimestampBreak = 1\n }\n }\n }\n\n for (let i = 0; i < len; i++) {\n const dts = samples[i].dts\n const nextSample = samples[i + 1]\n\n if (i < len - 1) {\n sampleDuration = nextSample.dts - dts\n } else if (lastSample) {\n sampleDuration = lastSample.dts - dts\n } else {\n sampleDuration = refSampleDurationInt\n }\n\n if (sampleDuration > MAX_VIDEO_FRAME_DURATION || sampleDuration < 0) {\n this._videoTimestampBreak++\n // emit stream breaked\n if (Math.abs(dts - this._lastVideoExceptionLargeGapDot) > VIDEO_EXCETION_LOG_EMIT_DURATION) {\n this._lastVideoExceptionLargeGapDot = dts\n videoTrack.warnings.push({\n type: WarningType.LARGE_VIDEO_GAP,\n time: dts / videoTrack.timescale,\n dts,\n originDts: samples[i].originDts,\n nextDts: this._videoNextDts,\n sampleDuration,\n refSampleDuration: refSampleDurationInt\n })\n }\n\n sampleDuration = refSampleDurationInt\n }\n\n samples[i].duration = sampleDuration\n this._videoNextDts += sampleDuration\n this._lastVideoDuration = sampleDuration\n }\n }\n\n _fixAudio (audioTrack) {\n const samples = audioTrack.samples\n if (!samples.length) return\n\n // offset origin timestamp\n samples.forEach(x => {\n x.dts = x.pts -= this._baseDts\n })\n\n this._doFixAudioInternal(audioTrack, samples, 1000)\n }\n\n _calculateBaseDts (audioTrack, videoTrack) {\n const audioSamps = audioTrack.samples\n const videoSamps = videoTrack.samples\n\n if (!audioSamps.length && !videoSamps.length) {\n return false\n }\n\n let audioBasePts = Infinity\n let videoBaseDts = Infinity\n\n if (audioSamps.length) {\n audioTrack.baseDts = audioBasePts = audioSamps[0].pts\n }\n\n if (videoSamps.length) {\n videoTrack.baseDts = videoBaseDts = videoSamps[0].dts\n }\n\n this._baseDts = Math.min(audioBasePts, videoBaseDts)\n\n const delta = videoBaseDts - audioBasePts\n\n if (Number.isFinite(delta) && Math.abs(delta) > LARGE_AV_FIRST_FRAME_GAP) {\n videoTrack.warnings.push({\n type: WarningType.LARGE_AV_SHIFT,\n videoBaseDts,\n audioBasePts,\n baseDts: this._baseDts,\n delta\n })\n }\n\n this._baseDtsInited = true\n return true\n }\n\n _resetBaseDtsWhenStreamBreaked () {\n /**\n * timestamp breaked\n * _audioNextDts\n * ---------------------|\n * (_baseDts) _videoNextDts\n * ----------------------|\n * <----------------\n * nextVideo.dts\n * ----------------------------------------|\n * nextAudio.dts\n * ---------------------------------------|\n */\n\n // calc baseDts base on new samples\n const calc = this._calculateBaseDts(this.audioTrack, this.videoTrack)\n\n if (!calc) return\n\n // consider the expect dts for next frame\n if (!this.audioTrack.exist()){\n this._baseDts -= this._videoNextDts\n } else if (!this.videoTrack.exist()){\n this._baseDts -= this._audioNextPts\n } else {\n this._baseDts -= Math.min(this._audioNextPts, this._videoNextDts)\n }\n this._videoTimestampBreak = 0\n this._audioTimestampBreak = 0\n }\n\n _doFixAudioInternal (audioTrack, samples, timescale) {\n if (!audioTrack.sampleDuration) {\n audioTrack.sampleDuration = audioTrack.codecType === AudioCodecType.AAC\n ? AAC.getFrameDuration(audioTrack.timescale, timescale)\n : this._getG711Duration(audioTrack)\n }\n const refSampleDuration = audioTrack.sampleDuration\n\n const sampleDurationInSampleRate = audioTrack.codecType === AudioCodecType.AAC ? 1024 : refSampleDuration * audioTrack.timescale / 1000\n\n if (this._audioNextPts === undefined) {\n const samp0 = samples[0]\n this._audioNextPts = samp0.pts\n }\n\n for (let i = 0; i < samples.length; i++) {\n let nextPts = this._audioNextPts\n const sample = samples[i]\n let delta = sample.pts - nextPts\n\n // only audio breaked\n if (i === 0 && this._audioTimestampBreak >= TRACK_BREACKED_CHECK_TIME) {\n nextPts = this._audioNextPts = sample.dts\n delta = 0\n this._audioTimestampBreak = 0\n }\n\n // fill frames\n // delta >= 3 * refSampleDurationInt\n // delta <= 500s\n if (!this._audioTimestampBreak && delta >= AUDIO_GAP_OVERLAP_THRESHOLD_COUNT * refSampleDuration && delta <= MAX_SILENT_FRAME_DURATION && !isSafari) {\n const silentFrame = this._getSilentFrame(audioTrack) || samples[0].data.subarray()\n const count = Math.floor(delta / refSampleDuration)\n\n if (Math.abs(sample.pts - this._lastAudioExceptionGapDot) > AUDIO_EXCETION_LOG_EMIT_DURATION) {\n this._lastAudioExceptionGapDot = sample.pts\n audioTrack.warnings.push({\n type: WarningType.AUDIO_FILLED,\n pts: sample.pts,\n originPts: sample.originPts,\n count,\n nextPts,\n refSampleDuration\n })\n }\n\n for (let j = 0; j < count; j++) {\n const silentSample = new AudioSample(Math.floor(this._audioNextPts + refSampleDuration) - Math.floor(this._audioNextPts), silentFrame, sampleDurationInSampleRate)\n silentSample.originPts = Math.floor(this._baseDts + nextPts)\n samples.splice(i, 0, silentSample)\n this._audioNextPts += refSampleDuration\n i++\n }\n\n i--\n // delta <= -3 * refSampleDurationInt\n // delta >= -500ms\n } else if (delta <= -AUDIO_GAP_OVERLAP_THRESHOLD_COUNT * refSampleDuration && delta >= -1 * MAX_SILENT_FRAME_DURATION) {\n // need discard frames\n if (Math.abs(sample.pts - this._lastAudioExceptionOverlapDot) > AUDIO_EXCETION_LOG_EMIT_DURATION) {\n this._lastAudioExceptionOverlapDot = sample.pts\n\n audioTrack.warnings.push({\n type: WarningType.AUDIO_DROPPED,\n pts: sample.pts,\n originPts: sample.originPts,\n nextPts,\n refSampleDuration\n })\n }\n samples.splice(i, 1)\n i--\n } else {\n if (Math.abs(delta) > MAX_SILENT_FRAME_DURATION) {\n this._audioTimestampBreak++\n\n if (Math.abs(sample.pts - this._lastAudioExceptionLargeGapDot) > AUDIO_EXCETION_LOG_EMIT_DURATION) {\n this._lastAudioExceptionLargeGapDot = sample.pts\n audioTrack.warnings.push({\n type: WarningType.LARGE_AUDIO_GAP,\n time: sample.pts / 1000,\n pts: sample.pts,\n originPts: sample.originPts,\n nextPts,\n sampleDuration: delta,\n refSampleDuration\n })\n }\n }\n\n sample.dts = sample.pts = nextPts\n sample.duration = sampleDurationInSampleRate\n this._audioNextPts += refSampleDuration\n }\n }\n }\n\n _getG711Duration (track) {\n const { sampleSize, channelCount, sampleRate } = track\n const samp0 = track.samples[0]\n if (!samp0) return\n return samp0.data.byteLength * 2 / channelCount / (sampleSize / 8) / sampleRate * 1000\n }\n\n _getSilentFrame (track) {\n if (track.codecType === AudioCodecType.AAC) return AAC.getSilentFrame(track.codec, track.channelCount)\n return new Uint8Array(8 * track.sampleDuration * track.channelCount)\n }\n}\n","import { UTF8 } from '../utils'\n\nexport class AMF {\n static parse (data) {\n if (data.length < 3) return\n\n const ret = {}\n const name = AMF._parseValue(new DataView(data.buffer, data.byteOffset, data.byteLength))\n const value = AMF._parseValue(new DataView(data.buffer, data.byteOffset + name.size, data.byteLength - name.size))\n ret[name.data] = value.data\n\n return ret\n }\n\n static _parseValue (view) {\n const dataLen = view.byteLength\n const type = view.getUint8(0)\n let offset = 1\n let isEnd = false\n let value\n\n switch (type) {\n case 0: // Number(Double) type\n value = view.getFloat64(1)\n offset += 8\n break\n case 1: { // Boolean type\n value = !!view.getUint8(1)\n offset += 1\n break\n }\n case 2: { // String type\n const { data, size } = AMF._parseString(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset))\n value = data\n offset += size\n }\n break\n case 3: { // Object(s) type\n value = {}\n let terminal = 0\n if ((view.getUint32(dataLen - 4) & 0x00FFFFFF) === 9) {\n terminal = 3\n }\n while (offset < dataLen - 4) { // 4 === type(UI8) + ScriptDataObjectEnd(UI24)\n const { size, data, isEnd } = AMF._parseObject(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset - terminal))\n if (isEnd) break\n value[data.name] = data.value\n offset += size\n }\n if (offset <= dataLen - 3) {\n const marker = view.getUint32(offset - 1) & 0x00FFFFFF\n if (marker === 9) offset += 3\n }\n }\n break\n case 8: { // ECMA array type (Mixed array)\n value = {}\n offset += 4 // ECMAArrayLength(UI32)\n let terminal = 0 // workaround for malformed MixedArrays which has missing ScriptDataObjectEnd\n if ((view.getUint32(dataLen - 4) & 0x00FFFFFF) === 9) {\n terminal = 3\n }\n while (offset < dataLen - 8) { // 8 === type(UI8) + ECMAArrayLength(UI32) + ScriptDataVariableEnd(UI24)\n const { size, data, isEnd } = AMF._parseObject(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset - terminal))\n if (isEnd) break\n value[data.name] = data.value\n offset += size\n }\n if (offset <= dataLen - 3) {\n const marker = view.getUint32(offset - 1) & 0x00FFFFFF\n if (marker === 9) {\n offset += 3\n }\n }\n }\n break\n case 9: // ScriptDataObjectEnd\n value = undefined\n offset = 1\n isEnd = true\n break\n case 10: { // Strict array type\n value = []\n const strictArrayLength = view.getUint32(1)\n offset += 4\n for (let i = 0; i < strictArrayLength; i++) {\n const { data, size } = AMF._parseValue(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset))\n value.push(data)\n offset += size\n }\n }\n break\n case 11: { // Date type\n const timestamp = view.getFloat64(offset) + view.getInt16(offset + 8) * 60000\n value = new Date(timestamp)\n offset += 10\n }\n break\n case 12: { // Long string type\n const length = view.getUint32(1)\n offset += 4\n value = ''\n if (length > 0) {\n value = UTF8.decode(new Uint8Array(view.buffer, view.byteOffset + offset, length))\n }\n offset += length\n }\n break\n default:\n offset = dataLen\n break\n }\n\n return {\n data: value,\n size: offset,\n isEnd\n }\n }\n\n static _parseString (view) {\n const length = view.getUint16(0)\n let data = ''\n if (length > 0) {\n data = UTF8.decode(new Uint8Array(view.buffer, view.byteOffset + 2, length))\n }\n\n return {\n data,\n size: 2 + length\n }\n }\n\n static _parseObject (view) {\n if (view.byteLength < 3) return\n\n const name = AMF._parseString(view)\n const value = AMF._parseValue(new DataView(view.buffer, view.byteOffset + name.size, view.byteLength - name.size))\n\n return {\n data: {\n name: name.data,\n value: value.data\n },\n size: name.size + value.size,\n isEnd: value.isEnd\n }\n }\n}\n","import { VideoTrack, AudioTrack, MetadataTrack, AudioSample, VideoSample, VideoCodecType, AudioCodecType, FlvScriptSample, SeiSample } from '../model'\nimport { FlvFixer } from './fixer'\nimport { concatUint8Array, Logger, readBig32 } from '../utils'\nimport { AAC, AVC, HEVC, NALu } from '../codec'\nimport { AMF } from './amf'\n\nconst logger = new Logger('FlvDemuxer')\n\n/**\n * @typedef {Object} DemuxResult\n * @property {VideoTrack} videoTrack\n * @property {AudioTrack} audioTrack\n * @property {MetadataTrack} metadataTrack\n */\n\nexport class FlvDemuxer {\n _headerParsed = false\n _remainingData = null\n _gopId = 0\n _needAddMetaBeforeKeyFrameNal = true // 标识H265流中关键帧Nal之前是否需要插入vps、sps、pps Nal\n\n static AUDIO_RATE = [5500, 11000, 22000, 44000]\n\n /**\n * @param {VideoTrack} [videoTrack]\n * @param {AudioTrack} [audioTrack]\n * @param {MetadataTrack} [metadataTrack]\n */\n constructor (videoTrack, audioTrack, metadataTrack) {\n this.videoTrack = videoTrack || new VideoTrack()\n this.audioTrack = audioTrack || new AudioTrack()\n this.metadataTrack = metadataTrack || new MetadataTrack()\n this._fixer = new FlvFixer(this.videoTrack, this.audioTrack, this.metadataTrack)\n }\n\n /**\n * @param {Uint8Array} data\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @returns {DemuxResult}\n */\n demux (data, discontinuity = false, contiguous = true) {\n const { audioTrack, videoTrack, metadataTrack } = this\n\n if (discontinuity || !contiguous) {\n this._remainingData = null\n this._headerParsed = false\n }\n\n if (discontinuity) {\n videoTrack.reset()\n audioTrack.reset()\n metadataTrack.reset()\n } else {\n videoTrack.samples = []\n audioTrack.samples = []\n metadataTrack.seiSamples = []\n metadataTrack.flvScriptSamples = []\n videoTrack.warnings = []\n audioTrack.warnings = []\n\n if (this._remainingData) {\n data = concatUint8Array(this._remainingData, data)\n this._remainingData = null\n }\n }\n\n if (!data.length) {\n return {\n videoTrack,\n audioTrack,\n metadataTrack\n }\n }\n\n let offset = 0\n if (!this._headerParsed) {\n if (!FlvDemuxer.probe(data)) {\n throw new Error('Invalid flv file')\n }\n audioTrack.present = ((data[4] & 4) >>> 2) !== 0\n videoTrack.present = (data[4] & 1) !== 0\n this._headerParsed = true\n offset = readBig32(data, 5) + 4 // skip prev tag size\n }\n\n const dataLen = data.length\n\n let tagType\n let dataSize\n let timestamp\n let bodyData\n let prevTagSize\n while ((offset + 15) < dataLen) { // header and prev tag size\n tagType = data[offset]\n dataSize = (data[offset + 1] << 16) | (data[offset + 2] << 8) | data[offset + 3]\n if (offset + 15 + dataSize > dataLen) break\n timestamp = (\n (data[offset + 7] << 24 >>> 0) +\n (data[offset + 4] << 16) +\n (data[offset + 5] << 8) +\n data[offset + 6]\n )\n\n offset += 11\n bodyData = data.subarray(offset, offset + dataSize)\n if (tagType === 8) {\n this._parseAudio(bodyData, timestamp)\n } else if (tagType === 9) {\n this._parseVideo(bodyData, timestamp)\n } else if (tagType === 18) {\n this._parseScript(bodyData, timestamp)\n } else {\n logger.warn(`Invalid tag type: ${tagType}`)\n }\n\n offset += dataSize\n prevTagSize = readBig32(data, offset)\n if (prevTagSize !== 11 + dataSize) {\n logger.warn(`Invalid PrevTagSize ${prevTagSize} (${11 + dataSize})`)\n }\n\n offset += 4\n }\n\n if (offset < dataLen) {\n this._remainingData = data.subarray(offset)\n }\n\n audioTrack.formatTimescale = videoTrack.formatTimescale = videoTrack.timescale = metadataTrack.timescale = 1000\n audioTrack.timescale = audioTrack.sampleRate || 0\n\n if (!audioTrack.exist() && audioTrack.hasSample()) {\n audioTrack.reset()\n }\n if (!videoTrack.exist() && videoTrack.hasSample()) {\n videoTrack.reset()\n }\n\n return {\n videoTrack,\n audioTrack,\n metadataTrack\n }\n }\n\n /**\n * @param {number} [startTime=0]\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @returns {DemuxResult}\n */\n fix (startTime, discontinuity, contiguous) {\n this._fixer.fix(startTime, discontinuity, contiguous)\n return {\n videoTrack: this.videoTrack,\n audioTrack: this.audioTrack,\n metadataTrack: this.metadataTrack\n }\n }\n\n /**\n * @param {Uint8Array} data\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @param {number} [startTime=0]\n * @returns {DemuxResult}\n */\n demuxAndFix (data, discontinuity, contiguous, startTime) {\n this.demux(data, discontinuity, contiguous)\n return this.fix(startTime, discontinuity, contiguous)\n }\n\n /**\n * @param { Uint8Array } data\n * @returns {boolean}\n */\n static probe (data) {\n if (data[0] !== 0x46 || data[1] !== 0x4C || data[2] !== 0x56 || data[3] !== 0x01) {\n return false\n }\n return readBig32(data, 5) >= 9\n }\n\n _parseAudio (data, pts) {\n if (!data.length) return\n\n const format = (data[0] & 0xf0) >>> 4\n const track = this.audioTrack\n\n if (\n format !== 10 && // AAC\n format !== 7 && // G.711 A-law logarithmic PCM\n format !== 8 // G.711 mu-law logarithmic PCM\n ) {\n logger.warn(`Unsupported sound format: ${format}`)\n track.reset()\n return\n }\n\n if (format !== 10) {\n const soundRate = (data[0] & 0x0c) >> 2\n const soundSize = (data[0] & 0x02) >> 1\n const soundType = (data[0] & 0x01)\n track.sampleRate = FlvDemuxer.AUDIO_RATE[soundRate]\n track.sampleSize = soundSize ? 16 : 8\n track.channelCount = soundType + 1\n }\n\n if (format === 10) {\n this._parseAac(data, pts)\n } else {\n this._parseG711(data, pts, format)\n }\n }\n\n _parseG711 (data, pts, format) {\n const track = this.audioTrack\n track.codecType = format === 7 ? AudioCodecType.G711PCMA : AudioCodecType.G711PCMU\n track.sampleRate = 8000\n track.codec = track.codecType\n track.samples.push(new AudioSample(pts, data.subarray(1)))\n }\n\n _parseAac (data, pts) {\n const track = this.audioTrack\n track.codecType = AudioCodecType.AAC\n\n if (data[1] === 0) { // AACPacketType\n const ret = AAC.parseAudioSpecificConfig(data.subarray(2))\n if (ret) {\n track.codec = ret.codec\n track.channelCount = ret.channelCount\n track.sampleRate = ret.sampleRate\n track.config = ret.config\n track.objectType = ret.objectType\n track.sampleRateIndex = ret.samplingFrequencyIndex\n } else {\n track.reset()\n logger.warn('Cannot parse AudioSpecificConfig', data)\n }\n } else if (data[1] === 1) { // Raw AAC frame data\n if (pts === undefined || pts === null) return\n track.samples.push(new AudioSample(pts, data.subarray(2)))\n } else {\n logger.warn(`Unknown AACPacketType: ${data[1]}`)\n }\n }\n\n _parseVideo (data, dts) {\n if (data.length < 6) return\n\n const frameType = (data[0] & 0xf0) >>> 4\n const codecId = data[0] & 0x0f\n\n const track = this.videoTrack\n\n if (\n codecId !== 7 && // AVC\n codecId !== 12 // HEVC\n ) {\n track.reset()\n logger.warn(`Unsupported codecId: ${codecId}`)\n return\n }\n\n const isHevc = codecId === 12\n track.codecType = isHevc ? VideoCodecType.HEVC : VideoCodecType.AVC\n\n const packetType = data[1]\n const cts = (((data[2] << 16) | (data[3] << 8) | (data[4])) << 8) >> 8\n\n if (packetType === 0) { // DecoderConfigurationRecord\n const configData = data.subarray(5)\n const ret = isHevc\n ? HEVC.parseHEVCDecoderConfigurationRecord(configData)\n : AVC.parseAVCDecoderConfigurationRecord(configData)\n if (ret) {\n const { hvcC, sps, ppsArr, spsArr, vpsArr, nalUnitSize } = ret\n if (hvcC) {\n track.hvcC = track.hvcC || hvcC\n }\n if (sps) {\n track.codec = sps.codec\n track.width = sps.width\n track.height = sps.height\n track.sarRatio = sps.sarRatio\n track.fpsNum = sps.fpsNum\n track.fpsDen = sps.fpsDen\n }\n if (spsArr.length) track.sps = spsArr\n if (ppsArr.length) track.pps = ppsArr\n if (vpsArr && vpsArr.length) track.vps = vpsArr\n if (nalUnitSize) track.nalUnitSize = nalUnitSize\n } else {\n logger.warn(`Cannot parse ${isHevc ? 'HEVC' : 'AVC'}DecoderConfigurationRecord`, data)\n }\n } else if (packetType === 1) { // One or more NALUs\n let units = NALu.parseAvcC(data.subarray(5), track.nalUnitSize)\n\n units = this._checkAddMetaNalToUnits(isHevc, units, track)\n\n if (units && units.length) {\n const sample = new VideoSample(dts + cts, dts, units)\n if (frameType === 1) {\n sample.setToKeyframe()\n }\n track.samples.push(sample)\n\n units.forEach(unit => {\n const type = isHevc ? (unit[0] >>> 1) & 0x3f : unit[0] & 0x1f\n switch (type) {\n case 5: // IDR\n case 16: // HEVC BLA_W_LP\n case 17: // HEVC BLA_W_RADL\n case 18: // HEVC BLA_N_LP\n case 19: // HEVC IDR_W_RADL\n case 20: // HEVC IDR_N_LP\n case 21: // HEVC CRA_NUT\n case 22: // HEVC RSV_IRAP_VCL22\n case 23: // HEVC RSV_IRAP_VCL23\n if ((!isHevc && type !== 5) || (isHevc && type === 5)) break\n sample.setToKeyframe()\n break\n case 6: // SEI\n case 39: // HEVC PREFIX_SEI\n case 40: // HEVC SUFFIX_SEI\n if ((!isHevc && type !== 6) || (isHevc && type === 6)) break\n this.metadataTrack.seiSamples.push(new SeiSample(\n NALu.parseSEI(NALu.removeEPB(unit), isHevc),\n dts + cts\n ))\n break\n default:\n }\n })\n\n if (sample.keyframe) {\n this._gopId++\n }\n sample.gopId = this._gopId\n } else {\n logger.warn('Cannot parse NALUs', data)\n }\n } else if (packetType === 2) {\n // AVC end of sequence, Empty\n } else {\n logger.warn(`Unknown AVCPacketType: ${packetType}`)\n }\n }\n\n _checkAddMetaNalToUnits (hevc, units, track) {\n if (!hevc || !this._needAddMetaBeforeKeyFrameNal) {\n this._needAddMetaBeforeKeyFrameNal = false\n return units\n }\n\n const nalTypes = units.map(x => (x[0] >>> 1) & 0x3f)\n\n if (nalTypes.includes(32)) {\n this._needAddMetaBeforeKeyFrameNal = false\n return units\n }\n\n units.unshift(track.pps[0])\n units.unshift(track.sps[0])\n units.unshift(track.vps[0])\n\n return units.filter(Boolean)\n }\n\n _parseScript (data, pts) {\n this.metadataTrack.flvScriptSamples.push(new FlvScriptSample(AMF.parse(data), pts))\n }\n}\n","import { TsFixer } from './fixer'\nimport { AVC, AAC, HEVC, NALu } from '../codec'\nimport { VideoSample, AudioSample, VideoCodecType, VideoTrack, AudioTrack, MetadataTrack, SeiSample } from '../model'\nimport { Logger, concatUint8Array } from '../utils'\n\nconst logger = new Logger('TsDemuxer')\n\nexport class TsDemuxer {\n _pmtId = -1\n _remainingPacketData = null\n _videoPesData = []\n _audioPesData = []\n _gopId = 0\n\n /**\n * @param {VideoTrack} [videoTrack]\n * @param {AudioTrack} [audioTrack]\n * @param {MetadataTrack} [metadataTrack]\n */\n constructor (videoTrack, audioTrack, metadataTrack) {\n this.videoTrack = videoTrack || new VideoTrack()\n this.audioTrack = audioTrack || new AudioTrack()\n this.metadataTrack = metadataTrack || new MetadataTrack()\n this._fixer = new TsFixer(this.videoTrack, this.audioTrack, this.metadataTrack)\n }\n\n /**\n * @param {Uint8Array} data\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @returns {import('../flv').DemuxResult}\n */\n demux (data, discontinuity = false, contiguous = true) {\n const { audioTrack, videoTrack, metadataTrack } = this\n\n if (discontinuity) {\n this._pmtId = -1\n videoTrack.reset()\n audioTrack.reset()\n metadataTrack.reset()\n }\n\n if (!contiguous || discontinuity) {\n this._remainingPacketData = null\n this._videoPesData = []\n this._audioPesData = []\n } else {\n videoTrack.samples = []\n audioTrack.samples = []\n metadataTrack.seiSamples = []\n videoTrack.warnings = []\n audioTrack.warnings = []\n\n if (this._remainingPacketData) {\n data = concatUint8Array(this._remainingPacketData, data)\n this._remainingPacketData = null\n }\n }\n\n let dataLen = data.length\n const remainingLength = dataLen % 188\n if (remainingLength) {\n this._remainingPacketData = data.subarray(dataLen - remainingLength)\n dataLen -= remainingLength\n }\n\n let videoPid = videoTrack.pid\n let audioPid = audioTrack.pid\n\n for (let start = 0; start < dataLen; start += 188) {\n if (data[start] !== 0x47) throw new Error('TS packet did not start with 0x47')\n const payloadUnitStartIndicator = !!(data[start + 1] & 0x40)\n const pid = ((data[start + 1] & 0x1f) << 8) + data[start + 2]\n const adaptationFiledControl = (data[start + 3] & 0x30) >> 4\n\n let offset\n if (adaptationFiledControl > 1) {\n offset = start + 5 + data[start + 4]\n if (offset === start + 188) continue\n } else {\n offset = start + 4\n }\n\n switch (pid) {\n case 0: // PAT\n if (payloadUnitStartIndicator) offset += data[offset] + 1\n this._pmtId = ((data[offset + 10] & 0x1f) << 8) | data[offset + 11]\n break\n case this._pmtId: {\n if (payloadUnitStartIndicator) offset += data[offset] + 1\n const tableEnd = offset + 3 + (((data[offset + 1] & 0x0f) << 8) | data[offset + 2]) - 4\n const programInfoLength = ((data[offset + 10] & 0x0f) << 8) | data[offset + 11]\n offset += 12 + programInfoLength\n\n while (offset < tableEnd) {\n const esPid = ((data[offset + 1] & 0x1f) << 8) | data[offset + 2]\n switch (data[offset]) {\n case 0x0f: // AAC ADTS\n audioTrack.pid = audioPid = esPid\n break\n case 0x1b: // AVC\n if (videoPid !== -1) break\n videoTrack.codecType = VideoCodecType.AVC\n videoTrack.pid = videoPid = esPid\n break\n case 0x24: // HEVC\n if (videoPid !== -1) break\n videoTrack.codecType = VideoCodecType.HEVC\n videoTrack.pid = videoPid = esPid\n break\n default:\n logger.warn(`Unsupported stream. type: ${data[offset]}, pid: ${esPid}`)\n }\n\n offset += (((data[offset + 3] & 0x0f) << 8) | data[offset + 4]) + 5\n }\n }\n break\n case videoPid:\n if (payloadUnitStartIndicator && this._videoPesData.length) {\n this._parseVideoData()\n }\n this._videoPesData.push(data.subarray(offset, start + 188))\n break\n case audioPid:\n if (payloadUnitStartIndicator && this._audioPesData.length) {\n this._parseAudioData()\n }\n this._audioPesData.push(data.subarray(offset, start + 188))\n break\n case 17:\n case 0x1fff:\n break\n default:\n logger.warn(`Unknown pid: ${pid}`)\n }\n }\n\n this._parseVideoData()\n this._parseAudioData()\n\n audioTrack.formatTimescale = videoTrack.formatTimescale = videoTrack.timescale = metadataTrack.timescale = 90000\n\n audioTrack.timescale = audioTrack.sampleRate || 0\n\n return {\n videoTrack,\n audioTrack,\n metadataTrack\n }\n }\n\n /**\n * @param {number} [startTime=0]\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n */\n fix (startTime, discontinuity, contiguous) {\n this._fixer.fix(startTime, discontinuity, contiguous)\n return {\n videoTrack: this.videoTrack,\n audioTrack: this.audioTrack,\n metadataTrack: this.metadataTrack\n }\n }\n\n /**\n * @param {Uint8Array} data\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @param {number} [startTime=0]\n */\n demuxAndFix (data, discontinuity, contiguous, startTime) {\n this.demux(data, discontinuity, contiguous)\n return this.fix(startTime, discontinuity, contiguous)\n }\n\n /**\n * @param { Uint8Array } data\n * @returns {boolean}\n */\n static probe (data) {\n if (!data.length) return false\n return data[0] === 0x47 && data[188] === 0x47 && data[376] === 0x47\n }\n\n _parseVideoData () {\n if (!this._videoPesData.length) return\n const pes = TsDemuxer._parsePES(concatUint8Array(...this._videoPesData))\n if (!pes) {\n logger.warn('Cannot parse video pes', this._videoPesData)\n return\n }\n\n const units = NALu.parseAnnexB(pes.data)\n if (units) {\n this._createVideoSample(units, pes.pts, pes.dts)\n } else {\n logger.warn('Cannot parse avc units', pes)\n }\n\n this._videoPesData = []\n }\n\n _createVideoSample (units, pts, dts) {\n if (!units.length) return\n const track = this.videoTrack\n const isHevc = track.codecType === VideoCodecType.HEVC\n\n const sample = new VideoSample(pts, dts)\n units.forEach((unit) => {\n const type = isHevc ? (unit[0] >>> 1) & 0x3f : unit[0] & 0x1f\n switch (type) {\n case 5: // IDR\n case 16: // HEVC BLA_W_LP\n case 17: // HEVC BLA_W_RADL\n case 18: // HEVC BLA_N_LP\n case 19: // HEVC IDR_W_RADL\n case 20: // HEVC IDR_N_LP\n case 21: // HEVC CRA_NUT\n case 22: // HEVC RSV_IRAP_VCL22\n case 23: // HEVC RSV_IRAP_VCL23\n if ((!isHevc && type !== 5) || (isHevc && type === 5)) break\n sample.setToKeyframe()\n this._gopId++\n break\n case 6: // SEI\n case 39: // HEVC PREFIX_SEI\n case 40: // HEVC SUFFIX_SEI\n if ((!isHevc && type !== 6) || (isHevc && type === 6)) break\n this.metadataTrack.seiSamples.push(new SeiSample(\n NALu.parseSEI(NALu.removeEPB(unit), isHevc),\n pts\n ))\n // fix 分割nal之前只要sei信息被当做单独一个sample\n return\n case 32: // HEVC VPS\n if (!isHevc) break\n if (!track.vps.length) {\n const hvcC = HEVC.parseVPS(NALu.removeEPB(unit), track.hvcC)\n track.hvcC = track.hvcC || hvcC\n track.vps = [unit]\n }\n break\n case 7: // SPS\n case 33: // HEVC SPS\n if ((!isHevc && type !== 7) || (isHevc && type === 7)) break\n if (!track.sps.length) {\n const data = NALu.removeEPB(unit)\n const spsInfo = isHevc ? HEVC.parseSPS(data, track.hvcC) : AVC.parseSPS(data)\n track.sps = [unit]\n track.hvcC = track.hvcC || spsInfo.hvcC\n track.codec = spsInfo.codec\n track.width = spsInfo.width\n track.height = spsInfo.height\n track.sarRatio = spsInfo.sarRatio\n track.fpsNum = spsInfo.fpsNum\n track.fpsDen = spsInfo.fpsDen\n }\n break\n case 8: // PPS\n case 34: // HEVC PPS\n if ((!isHevc && type !== 8) || (isHevc && type === 8)) break\n if (!track.pps.length) track.pps = [unit]\n break\n case 9: // AUD\n case 35: // HEVC AUD\n // if ((!isHevc && type !== 9) || (isHevc && type === 9)) break\n // sample.gopId = this._gopId\n // if (sample.units.length && !keyFrame) {\n // this._pushVideoSample(track, sample)\n // sample = this.prevAvcSample = new VideoSample(pts, dts)\n // }\n break\n default:\n }\n sample.units.push(unit)\n })\n sample.gopId = this._gopId\n this._pushVideoSample(track, sample)\n }\n\n _pushVideoSample (track, sample) {\n if (sample.units.length) {\n if (sample.pts === null || sample.pts === undefined) {\n logger.warn('Video sample no pts', sample)\n const lastSample = track.samples[track.samples.length - 1]\n if (lastSample) {\n sample.pts = lastSample.pts\n sample.dts = lastSample.dts\n } else {\n logger.warn('Drop video sample', sample)\n }\n } else {\n track.samples.push(sample)\n }\n }\n }\n\n _parseAudioData () {\n if (!this._audioPesData.length) return\n const pes = TsDemuxer._parsePES(concatUint8Array(...this._audioPesData))\n if (!pes) {\n logger.warn('Cannot parse audio pes', this._audioPesData)\n return\n }\n\n this._parseAacData(pes)\n\n this._audioPesData = []\n }\n\n _parseAacData (pes) {\n const track = this.audioTrack\n let pts = pes.pts\n if (pts === null || pts === undefined) {\n logger.warn('AAC pes not pts', track)\n if (!track.samples.length || !track.sampleRate) {\n return\n }\n pts = track.samples[track.samples.length - 1].pts + AAC.getFrameDuration(track.sampleRate)\n }\n\n const ret = AAC.parseADTS(pes.data, pts)\n if (ret) {\n track.codec = ret.codec\n track.channelCount = ret.channelCount\n track.sampleRate = ret.sampleRate\n track.objectType = ret.objectType\n track.sampleRateIndex = ret.samplingFrequencyIndex\n track.config = ret.config\n track.samples.push(...ret.frames.map((s) => new AudioSample(s.pts, s.data)))\n\n if (ret.skip) {\n logger.warn(`Skip aac adts ${ret.skip} bits`)\n }\n if (ret.remaining) {\n logger.warn(`Remaining aac adts ${ret.remaining} bits`)\n }\n } else {\n logger.warn('Cannot parse aac adts', pes)\n }\n }\n\n static _parsePES (data) {\n const headerDataLen = data[8]\n if (headerDataLen === null || headerDataLen === undefined || data.length < (headerDataLen + 9)) return\n const startPrefix = data[0] << 16 | data[1] << 8 | data[2]\n if (startPrefix !== 1) return\n const pesLen = (data[4] << 8) + data[5]\n if (pesLen && pesLen > data.length - 6) return\n\n let pts\n let dts\n const ptsDtsFlags = data[7]\n if (ptsDtsFlags & 0xc0) {\n pts = (data[9] & 0x0e) * 536870912 +\n (data[10] & 0xff) * 4194304 +\n (data[11] & 0xfe) * 16384 +\n (data[12] & 0xff) * 128 +\n (data[13] & 0xfe) / 2\n\n if (ptsDtsFlags & 0x40) {\n dts = (data[14] & 0x0e) * 536870912 +\n (data[15] & 0xff) * 4194304 +\n (data[16] & 0xfe) * 16384 +\n (data[17] & 0xff) * 128 +\n (data[18] & 0xfe) / 2\n if (pts - dts > 60 * 90000) pts = dts\n } else {\n dts = pts\n }\n }\n\n return { data: data.subarray(9 + headerDataLen), pts, dts }\n }\n}\n","import { AudioCodecType, VideoCodecType } from '../model'\nimport { getAvcCodec, readBig16, readBig24, readBig32, readBig64 } from '../utils'\nimport { AAC } from '../codec'\nexport class MP4Parser {\n static findBox (data, names, start = 0) {\n const ret = []\n if (!data) return ret\n\n let size = 0\n let type = ''\n let headerSize = 0\n while (data.length > 7) {\n size = readBig32(data)\n type = String.fromCharCode.apply(null, data.subarray(4, 8))\n headerSize = 8\n if (size === 1) {\n size = readBig64(data, 8)\n headerSize += 8\n } else if (!size) {\n size = data.length\n }\n if (!names[0] || type === names[0]) {\n const subData = data.subarray(0, size)\n if (names.length < 2) {\n ret.push({\n start,\n size,\n headerSize,\n type,\n data: subData\n })\n } else {\n return MP4Parser.findBox(subData.subarray(headerSize), names.slice(1), start + headerSize)\n }\n }\n\n start += size\n data = data.subarray(size)\n }\n\n return ret\n }\n\n static tfhd (box) {\n return parseBox(box, true, (ret, data) => {\n ret.trackId = readBig32(data)\n let start = 4\n const baseDataOffsetPresent = (ret.flags & 0xff) & 0x01\n const sampleDescriptionIndexPresent = (ret.flags & 0xff) & 0x02\n const defaultSampleDurationPresent = (ret.flags & 0xff) & 0x08\n const defaultSampleSizePresent = (ret.flags & 0xff) & 0x10\n const defaultSampleFlagsPresent = (ret.flags & 0xff) & 0x20\n\n if (baseDataOffsetPresent) {\n start += 4 // truncate top 4 bytes\n ret.baseDataOffset = readBig32(data, start)\n start += 4\n }\n if (sampleDescriptionIndexPresent) {\n ret.sampleDescriptionIndex = readBig32(data, start)\n start += 4\n }\n if (defaultSampleDurationPresent) {\n ret.defaultSampleDuration = readBig32(data, start)\n start += 4\n }\n if (defaultSampleSizePresent) {\n ret.defaultSampleSize = readBig32(data, start)\n start += 4\n }\n if (defaultSampleFlagsPresent) {\n ret.defaultSampleFlags = readBig32(data, start)\n }\n })\n }\n\n static sidx (box) {\n return parseBox(box, true, (ret, data) => {\n let start = 0\n ret.reference_ID = readBig32(data, start)// stream.readUint32();\n start += 4\n ret.timescale = readBig32(data, start)\n start += 4\n if (ret.version === 0) {\n ret.earliest_presentation_time = readBig32(data, start)\n start += 4\n ret.first_offset = readBig32(data, start)\n start += 4\n } else {\n ret.earliest_presentation_time = readBig64(data, start)\n start += 8\n ret.first_offset = readBig64(data, start)\n start += 8\n }\n start += 2\n ret.references = []\n const count = readBig16(data, start)\n start += 2\n for (let i = 0; i < count; i++) {\n const ref = {}\n ret.references.push(ref)\n let tmp32 = readBig32(data, start)\n start += 4\n ref.reference_type = (tmp32 >> 31) & 0x1\n ref.referenced_size = tmp32 & 0x7FFFFFFF\n ref.subsegment_duration = readBig32(data, start)\n start += 4\n tmp32 = readBig32(data, start)\n start += 4\n ref.starts_with_SAP = (tmp32 >> 31) & 0x1\n ref.SAP_type = (tmp32 >> 28) & 0x7\n ref.SAP_delta_time = tmp32 & 0xFFFFFFF\n }\n })\n }\n\n static moov (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.mvhd = MP4Parser.mvhd(MP4Parser.findBox(data, ['mvhd'], start)[0])\n ret.trak = MP4Parser.findBox(data, ['trak'], start).map(trak => MP4Parser.trak(trak))\n ret.pssh = MP4Parser.pssh(MP4Parser.findBox(data, ['pssh'], start)[0])\n })\n }\n\n static mvhd (box) {\n return parseBox(box, true, (ret, data) => {\n let start = 0\n if (ret.version === 1) {\n ret.timescale = readBig32(data, 16)\n ret.duration = readBig64(data, 20)\n start += 28\n } else {\n ret.timescale = readBig32(data, 8)\n ret.duration = readBig32(data, 12)\n start += 16\n }\n ret.nextTrackId = readBig32(data, start + 76)\n })\n }\n\n static trak (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.tkhd = MP4Parser.tkhd(MP4Parser.findBox(data, ['tkhd'], start)[0])\n ret.mdia = MP4Parser.mdia(MP4Parser.findBox(data, ['mdia'], start)[0])\n })\n }\n\n static tkhd (box) {\n return parseBox(box, true, (ret, data) => {\n let start = 0\n if (ret.version === 1) {\n ret.trackId = readBig32(data, 16)\n ret.duration = readBig64(data, 24)\n start += 32\n } else {\n ret.trackId = readBig32(data, 8)\n ret.duration = readBig32(data, 16)\n start += 20\n }\n ret.width = readBig32(data, start + 52)\n ret.height = readBig32(data, start + 56)\n })\n }\n\n static mdia (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.mdhd = MP4Parser.mdhd(MP4Parser.findBox(data, ['mdhd'], start)[0])\n ret.hdlr = MP4Parser.hdlr(MP4Parser.findBox(data, ['hdlr'], start)[0])\n ret.minf = MP4Parser.minf(MP4Parser.findBox(data, ['minf'], start)[0])\n })\n }\n\n static mdhd (box) {\n return parseBox(box, true, (ret, data) => {\n let start = 0\n if (ret.version === 1) {\n ret.timescale = readBig32(data, 16)\n ret.duration = readBig64(data, 20)\n start += 28\n } else {\n ret.timescale = readBig32(data, 8)\n ret.duration = readBig32(data, 12)\n start += 16\n }\n const lang = readBig16(data, start)\n ret.language = String.fromCharCode(((lang >> 10) & 0x1F) + 0x60, ((lang >> 5) & 0x1F) + 0x60, (lang & 0x1F) + 0x60)\n })\n }\n\n static hdlr (box) {\n return parseBox(box, true, (ret, data) => {\n if (ret.version === 0) {\n ret.handlerType = String.fromCharCode.apply(null, data.subarray(4, 8))\n }\n })\n }\n\n static minf (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.vmhd = MP4Parser.vmhd(MP4Parser.findBox(data, ['vmhd'], start)[0])\n ret.smhd = MP4Parser.smhd(MP4Parser.findBox(data, ['smhd'], start)[0])\n ret.stbl = MP4Parser.stbl(MP4Parser.findBox(data, ['stbl'], start)[0])\n })\n }\n\n static vmhd (box) {\n return parseBox(box, true, (ret, data) => {\n ret.graphicsmode = readBig16(data)\n ret.opcolor = [readBig16(data, 2), readBig16(data, 4), readBig16(data, 6)]\n })\n }\n\n static smhd (box) {\n return parseBox(box, true, (ret, data) => {\n ret.balance = readBig16(data)\n })\n }\n\n static stbl (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.stsd = MP4Parser.stsd(MP4Parser.findBox(data, ['stsd'], start)[0])\n ret.stts = MP4Parser.stts(MP4Parser.findBox(data, ['stts'], start)[0])\n ret.ctts = MP4Parser.ctts(MP4Parser.findBox(data, ['ctts'], start)[0])\n ret.stsc = MP4Parser.stsc(MP4Parser.findBox(data, ['stsc'], start)[0])\n ret.stsz = MP4Parser.stsz(MP4Parser.findBox(data, ['stsz'], start)[0])\n ret.stco = MP4Parser.stco(MP4Parser.findBox(data, ['stco'], start)[0])\n if (!ret.stco) {\n ret.co64 = MP4Parser.co64(MP4Parser.findBox(data, ['co64'], start)[0])\n ret.stco = ret.co64\n }\n const default_IV_size = ret.stsd.entries[0]?.sinf?.schi?.tenc.default_IV_size\n ret.stss = MP4Parser.stss(MP4Parser.findBox(data, ['stss'], start)[0])\n ret.senc = MP4Parser.senc(MP4Parser.findBox(data, ['senc'], start)[0], default_IV_size)\n })\n }\n\n static senc (box, iv = 8) {\n return parseBox(box, true, (ret, data) => {\n let start = 0\n const sampleCount = readBig32(data, start)\n start += 4\n ret.samples = []\n for (let i = 0; i < sampleCount; i++) {\n const sample = {}\n sample.InitializationVector = []\n for (let j = 0; j < iv; j++){\n sample.InitializationVector[j] = data[start + j]\n }\n start += iv\n if (ret.flags & 0x2) {\n sample.subsamples = []\n const subsampleCount = readBig16(data, start)\n start += 2\n for (let j = 0; j < subsampleCount; j++) {\n const subsample = {}\n subsample.BytesOfClearData = readBig16(data, start)\n start += 2\n subsample.BytesOfProtectedData = readBig32(data, start)\n start += 4\n sample.subsamples.push(subsample)\n }\n }\n ret.samples.push(sample)\n }\n })\n }\n\n static pssh (box) {\n return parseBox(box, true, (ret, data) => {\n const keyIds = []\n const systemId = []\n let start = 0\n for (let i = 0; i < 16; i++) {\n systemId.push(toHex(data[start + i]))\n }\n start += 16\n if (ret.version > 0) {\n const numKeyIds = readBig32(data, start)\n start += 4\n for (let i = 0; i < ('' + numKeyIds).length; i++) {\n for (let j = 0; j < 16; j++) {\n const keyId = data[start]\n start += 1\n keyIds.push(toHex(keyId))\n }\n }\n }\n const dataSize = readBig32(data, start)\n ret.data_size = dataSize\n start += 4\n ret.kid = keyIds\n ret.system_id = systemId\n ret.buffer = data\n })\n }\n\n static stsd (box) {\n return parseBox(box, true, (ret, data, start) => {\n ret.entryCount = readBig32(data)\n ret.entries = MP4Parser.findBox(data.subarray(4), [], start + 4).map(b => {\n switch (b.type) {\n case 'avc1':\n case 'avc2':\n case 'avc3':\n case 'avc4':\n return MP4Parser.avc1(b)\n case 'hvc1':\n case 'hev1':\n return MP4Parser.hvc1(b)\n case 'mp4a':\n return MP4Parser.mp4a(b)\n case 'alaw':\n case 'ulaw':\n return MP4Parser.alaw(b)\n case 'enca':\n // sinf->schi->tenc\n return parseBox(b, false, (ret, data, start) => {\n ret.channelCount = readBig16(data, 16)\n ret.samplesize = readBig16(data, 18)\n ret.sampleRate = (readBig32(data, 24) / (1 << 16))\n data = data.subarray(28)\n ret.sinf = MP4Parser.sinf(MP4Parser.findBox(data, ['sinf'], start)[0])\n ret.esds = MP4Parser.esds(MP4Parser.findBox(data, ['esds'], start)[0])\n })\n case 'encv':\n // sinf->schi->tenc\n return parseBox(b, false, (ret, data, start) => {\n ret.width = readBig16(data, 24)\n ret.height = readBig16(data, 26)\n ret.horizresolution = readBig32(data, 28)\n ret.vertresolution = readBig32(data, 32)\n data = data.subarray(78)\n ret.sinf = MP4Parser.sinf(MP4Parser.findBox(data, ['sinf'], start)[0])\n ret.avcC = MP4Parser.avcC(MP4Parser.findBox(data, ['avcC'], start)[0])\n ret.hvcC = MP4Parser.hvcC(MP4Parser.findBox(data, ['hvcC'], start)[0])\n ret.pasp = MP4Parser.pasp(MP4Parser.findBox(data, ['pasp'], start)[0])\n })\n default:\n }\n }).filter(Boolean)\n })\n }\n\n static tenc (box) {\n return parseBox(box, false, (ret, data) => {\n let start = 6\n ret.default_IsEncrypted = data[start]\n start += 1\n ret.default_IV_size = data[start]\n start += 1\n ret.default_KID = []\n for (let i = 0; i < 16; i++) {\n ret.default_KID.push(toHex(data[start]))\n start += 1\n }\n })\n }\n\n static schi (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.tenc = MP4Parser.tenc(MP4Parser.findBox(data, ['tenc'], start)[0])\n })\n }\n\n static sinf (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.schi = MP4Parser.schi(MP4Parser.findBox(data, ['schi'], start)[0])\n ret.frma = MP4Parser.frma(MP4Parser.findBox(data, ['frma'], start)[0])\n })\n }\n\n static frma (box) {\n return parseBox(box, false, (ret, data) => {\n ret.data_format = ''\n for (let i = 0; i < 4; i++) {\n ret.data_format += String.fromCharCode(data[i])\n }\n })\n }\n\n static avc1 (box) {\n return parseBox(box, false, (ret, data, start) => {\n const bodyStart = parseVisualSampleEntry(ret, data)\n const bodyData = data.subarray(bodyStart)\n start += bodyStart\n ret.avcC = MP4Parser.avcC(MP4Parser.findBox(bodyData, ['avcC'], start)[0])\n ret.pasp = MP4Parser.pasp(MP4Parser.findBox(bodyData, ['pasp'], start)[0])\n })\n }\n\n static avcC (box) {\n return parseBox(box, false, (ret, data) => {\n ret.configurationVersion = data[0]\n ret.AVCProfileIndication = data[1]\n ret.profileCompatibility = data[2]\n ret.AVCLevelIndication = data[3]\n ret.codec = getAvcCodec([data[1], data[2], data[3]])\n ret.lengthSizeMinusOne = data[4] & 0x3\n ret.spsLength = data[5] & 0x1F\n ret.sps = []\n let start = 6\n for (let i = 0; i < ret.spsLength; i++) {\n const size = readBig16(data, start)\n start += 2\n ret.sps.push(data.subarray(start, start + size))\n // ret.spsInfo = SpsParser.parseSPS(ret.sps[i])\n // ret.pixelRatio = ret.spsInfo.par_ratio\n start += size\n }\n ret.ppsLength = data[start]\n start += 1\n ret.pps = []\n for (let i = 0; i < ret.ppsLength; i++) {\n const size = readBig16(data, start)\n start += 2\n ret.pps.push(data.subarray(start, start += size))\n start += size\n }\n })\n }\n\n static hvc1 (box) {\n return parseBox(box, false, (ret, data, start) => {\n const bodyStart = parseVisualSampleEntry(ret, data)\n const bodyData = data.subarray(bodyStart)\n start += bodyStart\n ret.hvcC = MP4Parser.hvcC(MP4Parser.findBox(bodyData, ['hvcC'], start)[0])\n ret.pasp = MP4Parser.pasp(MP4Parser.findBox(bodyData, ['pasp'], start)[0])\n })\n }\n\n static hvcC (box) {\n return parseBox(box, false, (ret, data) => {\n ret.data = box.data\n ret.codec = 'hev1.1.6.L93.B0'\n ret.configurationVersion = data[0]\n const tmp = data[1]\n ret.generalProfileSpace = tmp >> 6\n ret.generalTierFlag = (tmp & 0x20) >> 5\n ret.generalProfileIdc = tmp & 0x1F\n ret.generalProfileCompatibility = readBig32(data, 2)\n ret.generalConstraintIndicatorFlags = data.subarray(6, 12)\n ret.generalLevelIdc = data[12]\n ret.avgFrameRate = readBig16(data, 19)\n ret.numOfArrays = data[22]\n ret.vps = []\n ret.sps = []\n ret.pps = []\n let start = 23\n let type = 0\n let numNalus = 0\n let size = 0\n for (let i = 0; i < ret.numOfArrays; i++) {\n type = data[start] & 0x3F\n numNalus = readBig16(data, start + 1)\n start += 3\n const nalus = []\n for (let j = 0; j < numNalus; j++) {\n size = readBig16(data, start)\n start += 2\n nalus.push(data.subarray(start, start + size))\n start += size\n }\n\n if (type === 32) {\n ret.vps.push(...nalus)\n } else if (type === 33) {\n ret.sps.push(...nalus)\n } else if (type === 34) {\n ret.pps.push(...nalus)\n }\n }\n })\n }\n\n static pasp (box) {\n return parseBox(box, false, (ret, data) => {\n ret.hSpacing = readBig32(data)\n ret.vSpacing = readBig32(data, 4)\n })\n }\n\n static mp4a (box) {\n return parseBox(box, false, (ret, data, start) => {\n const bodyStart = parseAudioSampleEntry(ret, data)\n ret.esds = MP4Parser.esds(MP4Parser.findBox(data.subarray(bodyStart), ['esds'], start + bodyStart)[0])\n })\n }\n\n static esds (box) {\n return parseBox(box, true, (ret, data) => {\n ret.codec = 'mp4a.'\n let start = 0\n let byteRead = 0\n let size = 0\n let tag = 0\n while (data.length) {\n start = 0\n tag = data[start]\n byteRead = data[start + 1]\n start += 2\n while (byteRead & 0x80) {\n size = (byteRead & 0x7F) << 7\n byteRead = data[start]\n start += 1\n }\n size += byteRead & 0x7F\n if (tag === 3) {\n data = data.subarray(start + 3)\n } else if (tag === 4) {\n ret.codec += (data[start].toString(16) + '.').padStart(3, '0')\n data = data.subarray(start + 13)\n } else if (tag === 5) {\n const config = ret.config = data.subarray(start, start + size)\n let objectType = (config[0] & 0xF8) >> 3\n if (objectType === 31 && config.length >= 2) {\n objectType = 32 + ((config[0] & 0x7) << 3) + ((config[1] & 0xE0) >> 5)\n }\n ret.objectType = objectType\n ret.codec += objectType.toString(16)\n if (ret.codec[ret.codec.length - 1] === '.') {\n ret.codec = ret.codec.substring(0, ret.codec.length - 1)\n }\n return\n } else {\n if (ret.codec[ret.codec.length - 1] === '.') {\n ret.codec = ret.codec.substring(0, ret.codec.length - 1)\n }\n return\n }\n }\n })\n }\n\n static alaw (box) {\n return parseBox(box, false, (ret, data) => {\n parseAudioSampleEntry(ret, data)\n })\n }\n\n static stts (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries.push({\n count: readBig32(data, start),\n delta: readBig32(data, start + 4)\n })\n start += 8\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static ctts (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n if (ret.version === 1) {\n for (let i = 0; i < entryCount; i++) {\n entries.push({\n count: readBig32(data, start),\n offset: readBig32(data, start + 4)\n })\n start += 8\n }\n } else {\n for (let i = 0; i < entryCount; i++) {\n entries.push({\n count: readBig32(data, start),\n offset: -(~readBig32(data, start + 4) + 1)\n })\n start += 8\n }\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static stsc (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries.push({\n firstChunk: readBig32(data, start),\n samplesPerChunk: readBig32(data, start + 4),\n sampleDescriptionIndex: readBig32(data, start + 8)\n })\n start += 12\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static stsz (box) {\n return parseBox(box, true, (ret, data) => {\n const sampleSize = readBig32(data)\n const sampleCount = readBig32(data, 4)\n const entrySizes = []\n if (!sampleSize) {\n let start = 8\n for (let i = 0; i < sampleCount; i++) {\n entrySizes.push(readBig32(data, start))\n start += 4\n }\n }\n ret.sampleSize = sampleSize\n ret.sampleCount = sampleCount\n ret.entrySizes = entrySizes\n })\n }\n\n static stco (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries.push(readBig32(data, start))\n start += 4\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static co64 (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries.push(readBig64(data, start))\n start += 8\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static stss (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries.push(readBig32(data, start))\n start += 4\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static moof (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.mfhd = MP4Parser.mfhd(MP4Parser.findBox(data, ['mfhd'], start)[0])\n ret.traf = MP4Parser.findBox(data, ['traf'], start).map(t => MP4Parser.traf(t))\n })\n }\n\n static mfhd (box) {\n return parseBox(box, true, (ret, data) => {\n ret.sequenceNumber = readBig32(data)\n })\n }\n\n static traf (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.tfhd = MP4Parser.tfhd(MP4Parser.findBox(data, ['tfhd'], start)[0])\n ret.tfdt = MP4Parser.tfdt(MP4Parser.findBox(data, ['tfdt'], start)[0])\n ret.trun = MP4Parser.trun(MP4Parser.findBox(data, ['trun'], start)[0])\n })\n }\n\n static trun (box) {\n return parseBox(box, true, (ret, data) => {\n const { version, flags } = ret\n const dataLen = data.length\n const sampleCount = ret.sampleCount = readBig32(data)\n let offset = 4\n if (dataLen > offset && flags & 1) {\n ret.dataOffset = -(~readBig32(data, offset) + 1)\n offset += 4\n }\n if (dataLen > offset && flags & 4) {\n ret.firstSampleFlags = readBig32(data, offset)\n offset += 4\n }\n ret.samples = []\n if (dataLen > offset) {\n let sample\n for (let i = 0; i < sampleCount; i++) {\n sample = {}\n if (flags & 0x100) {\n sample.duration = readBig32(data, offset)\n offset += 4\n }\n if (flags & 0x200) {\n sample.size = readBig32(data, offset)\n offset += 4\n }\n if (flags & 0x400) {\n sample.flags = readBig32(data, offset)\n offset += 4\n }\n if (flags & 0x800) {\n if (version) {\n sample.cts = -(~readBig32(data, offset + 4) + 1)\n } else {\n sample.cts = readBig32(data, offset)\n }\n offset += 4\n }\n ret.samples.push(sample)\n }\n }\n })\n }\n\n static tfdt (box) {\n return parseBox(box, true, (ret, data) => {\n if (ret.version === 1) {\n ret.baseMediaDecodeTime = readBig64(data)\n } else {\n ret.baseMediaDecodeTime = readBig32(data)\n }\n })\n }\n\n static probe (data) {\n return !!MP4Parser.findBox(data, ['ftyp'])\n }\n\n static parseSampleFlags (flags) {\n return {\n isLeading: (flags[0] & 0x0c) >>> 2,\n dependsOn: flags[0] & 0x03,\n isDependedOn: (flags[1] & 0xc0) >>> 6,\n hasRedundancy: (flags[1] & 0x30) >>> 4,\n paddingValue: (flags[1] & 0x0e) >>> 1,\n isNonSyncSample: flags[1] & 0x01,\n degradationPriority: (flags[2] << 8) | flags[3]\n }\n }\n\n static moovToTrack (moov, videoTrack, audioTrack) {\n const tracks = moov.trak\n if (!tracks || !tracks.length) return\n const vTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'vide')\n const aTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'soun')\n if (vTrack && videoTrack) {\n const v = videoTrack\n const _vTrackId = vTrack.tkhd?.trackId\n if (_vTrackId !== null && _vTrackId !== undefined) v.id = vTrack.tkhd.trackId\n v.tkhdDuration = vTrack.tkhd.duration\n v.mvhdDurtion = moov.mvhd.duration\n v.mvhdTimecale = moov.mvhd.timescale\n v.timescale = v.formatTimescale = vTrack.mdia.mdhd.timescale\n v.duration = vTrack.mdia.mdhd.duration || (v.mvhdDurtion / v.mvhdTimecale * v.timescale)\n const e1 = vTrack.mdia.minf.stbl.stsd.entries[0]\n v.width = e1.width\n v.height = e1.height\n if (e1.pasp) {\n v.sarRatio = [e1.pasp.hSpacing, e1.pasp.vSpacing]\n }\n if (e1.hvcC) {\n v.codecType = VideoCodecType.HEVC\n v.codec = e1.hvcC.codec\n v.vps = e1.hvcC.vps\n v.sps = e1.hvcC.sps\n v.pps = e1.hvcC.pps\n v.hvcC = e1.hvcC.data\n } else if (e1.avcC) {\n v.codec = e1.avcC.codec\n v.sps = e1.avcC.sps\n v.pps = e1.avcC.pps\n } else {\n throw new Error('unknown video stsd entry')\n }\n v.present = true\n v.ext = {}\n v.ext.stss = vTrack.mdia?.minf?.stbl?.stss\n v.ext.ctts = vTrack.mdia?.minf?.stbl?.ctts\n\n if (e1 && e1.type === 'encv') {\n v.isVideoEncryption = true\n e1.default_KID = e1.sinf?.schi?.tenc.default_KID\n e1.default_IsEncrypted = e1.sinf?.schi?.tenc.default_IsEncrypted\n e1.default_IV_size = e1.sinf?.schi?.tenc.default_IV_size\n v.videoSenc = vTrack.mdia.minf.stbl.senc && vTrack.mdia.minf.stbl.senc.samples\n e1.data_format = e1.sinf?.frma?.data_format\n v.useEME = moov.useEME\n v.kidValue = moov.kidValue\n v.pssh = moov.pssh\n v.encv = e1\n }\n }\n\n if (aTrack && audioTrack) {\n const a = audioTrack\n const _aTrackId = aTrack.tkhd?.trackId\n if (_aTrackId !== null && _aTrackId !== undefined) a.id = aTrack.tkhd.trackId\n a.tkhdDuration = aTrack.tkhd.duration\n a.mvhdDurtion = moov.mvhd.duration\n a.mvhdTimecale = moov.mvhd.timescale\n a.timescale = a.formatTimescale = aTrack.mdia.mdhd.timescale\n a.duration = aTrack.mdia.mdhd.duration || (a.mvhdDurtion / a.mvhdTimecale * a.timescale)\n const e1 = aTrack.mdia.minf.stbl.stsd.entries[0]\n a.sampleSize = e1.sampleSize\n a.sampleRate = e1.sampleRate\n a.channelCount = e1.channelCount\n a.present = true\n\n switch (e1.type) {\n case 'alaw':\n a.codecType = a.codec = AudioCodecType.G711PCMA\n a.sampleRate = 8000\n break\n case 'ulaw':\n a.codecType = a.codec = AudioCodecType.G711PCMU\n a.sampleRate = 8000\n break\n default:\n a.sampleDuration = AAC.getFrameDuration(a.sampleRate, a.timescale)\n a.sampleRateIndex = AAC.getRateIndexByRate(a.sampleRate)\n a.objectType = e1.esds?.objectType || 2\n if (e1.esds) a.config = Array.from(e1.esds.config)\n a.codec = e1.esds?.codec || 'mp4a.40.2'\n break\n }\n a.sampleDuration = AAC.getFrameDuration(a.sampleRate, a.timescale)\n a.objectType = e1.esds?.objectType || 2\n if (e1.esds) {\n if (e1.esds.config) {\n a.config = Array.from(e1.esds.config)\n } else {\n console.warn('esds config is null')\n }\n }\n a.codec = e1.esds?.codec || 'mp4a.40.2'\n a.sampleRateIndex = AAC.getRateIndexByRate(a.sampleRate)\n a.ext = {}\n a.ext.stss = aTrack.mdia?.minf?.stbl?.stss\n a.ext.ctts = aTrack.mdia?.minf?.stbl?.ctts\n a.present = true\n if (e1 && e1.type === 'enca') {\n a.isAudioEncryption = true\n e1.data_format = e1.sinf?.frma?.data_format\n e1.default_KID = e1.sinf?.schi?.tenc.default_KID\n e1.default_IsEncrypted = e1.sinf?.schi?.tenc.default_IsEncrypted\n e1.default_IV_size = e1.sinf?.schi?.tenc.default_IV_size\n a.audioSenc = aTrack.mdia.minf.stbl.senc && aTrack.mdia.minf.stbl.senc.samples\n a.useEME = moov.useEME\n a.kidValue = moov.kidValue\n a.enca = e1\n }\n }\n\n audioTrack && (audioTrack.isVideoEncryption = videoTrack ? videoTrack.isVideoEncryption : false)\n videoTrack && (videoTrack.isAudioEncryption = audioTrack ? audioTrack.isAudioEncryption : false)\n\n if (videoTrack?.encv || audioTrack?.enca) {\n const vkid = videoTrack?.encv?.default_KID\n const akid = audioTrack?.enca?.default_KID\n const kid = (vkid || akid) ? (vkid || akid).join('') : null\n videoTrack && (videoTrack.kid = kid)\n audioTrack && (audioTrack.kid = kid)\n }\n\n videoTrack && (videoTrack.flags = 0xf01)\n audioTrack && (audioTrack.flags = 0x701)\n\n return {\n videoTrack,\n audioTrack\n }\n }\n\n static evaluateDefaultDuration (videoTrack, audioTrack, videoSampleCount) {\n const audioSampleCount = audioTrack?.samples?.length\n\n // audio\n if (!audioSampleCount) return 1024\n\n const segmentDuration = 1024 * audioSampleCount / audioTrack.timescale\n\n return segmentDuration * videoTrack.timescale / videoSampleCount\n }\n\n static moofToSamples (moof, videoTrack, audioTrack) {\n const ret = {}\n\n if (moof.mfhd) {\n if (videoTrack) videoTrack.sequenceNumber = moof.mfhd.sequenceNumber\n if (audioTrack) audioTrack.sequenceNumber = moof.mfhd.sequenceNumber\n }\n\n moof.traf.forEach(({ tfhd, tfdt, trun }) => {\n if (!tfhd || !trun) return\n if (tfdt) {\n if (videoTrack && videoTrack.id === tfhd.trackId) videoTrack.baseMediaDecodeTime = tfdt.baseMediaDecodeTime\n if (audioTrack && audioTrack.id === tfhd.trackId) audioTrack.baseMediaDecodeTime = tfdt.baseMediaDecodeTime\n }\n const defaultSize = tfhd.defaultSampleSize || 0\n const defaultDuration = tfhd.defaultSampleDuration || MP4Parser.evaluateDefaultDuration(videoTrack, audioTrack, trun.samples.length || trun.sampleCount)\n let offset = trun.dataOffset || 0\n let dts = 0\n let gopId = -1\n if (!trun.samples.length && trun.sampleCount) {\n ret[tfhd.trackId] = []\n for (let i = 0; i < trun.sampleCount; i++) {\n ret[tfhd.trackId].push({\n offset,\n dts,\n duration: defaultDuration,\n size: defaultSize\n })\n dts += defaultDuration\n offset += defaultSize\n }\n } else {\n ret[tfhd.trackId] = trun.samples.map((s, index) => {\n s = {\n offset,\n dts,\n pts: dts + (s.cts || 0),\n duration: s.duration || defaultDuration,\n size: s.size || defaultSize,\n gopId,\n keyframe: index === 0 || ((s.flags !== null && s.flags !== undefined) && ((s.flags & 65536) >>> 0) !== 65536)\n }\n if (s.keyframe) {\n gopId++\n s.gopId = gopId\n }\n dts += s.duration\n offset += s.size\n return s\n })\n }\n })\n\n return ret\n }\n\n static moovToSamples (moov) {\n const tracks = moov.trak\n if (!tracks || !tracks.length) return\n const vTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'vide')\n const aTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'soun')\n if (!vTrack && !aTrack) return\n let videoSamples\n let audioSamples\n if (vTrack) {\n const videoStbl = vTrack.mdia?.minf?.stbl\n if (!videoStbl) return\n const { stts, stsc, stsz, stco, stss, ctts } = videoStbl\n if (!stts || !stsc || !stsz || !stco || !stss) return\n videoSamples = getSamples(stts, stsc, stsz, stco, ctts, stss)\n }\n if (aTrack) {\n const audioStbl = aTrack.mdia?.minf?.stbl\n if (!audioStbl) return\n const timescale = aTrack.mdia.mdhd?.timescale\n const { stts, stsc, stsz, stco } = audioStbl\n if (!timescale || !stts || !stsc || !stsz || !stco) return\n audioSamples = getSamples(stts, stsc, stsz, stco)\n }\n\n return {\n videoSamples,\n audioSamples\n }\n }\n}\n\nfunction getSamples (stts, stsc, stsz, stco, ctts, stss) {\n const samples = []\n const cttsEntries = ctts?.entries\n const stscEntries = stsc.entries\n const stcoEntries = stco.entries\n const stszEntrySizes = stsz.entrySizes\n const stssEntries = stss?.entries\n let keyframeMap\n if (stssEntries) {\n keyframeMap = {}\n stssEntries.forEach(x => { keyframeMap[x - 1] = true })\n }\n let cttsArr\n if (cttsEntries) {\n cttsArr = []\n cttsEntries.forEach(({ count, offset }) => {\n for (let i = 0; i < count; i++) {\n cttsArr.push(offset)\n }\n })\n }\n\n let sample\n let gopId = -1\n let dts = 0\n let pos = 0\n let chunkIndex = 0\n let chunkRunIndex = 0\n let offsetInChunk = 0\n let lastSampleInChunk = stscEntries[0].samplesPerChunk\n let lastChunkInRun = stscEntries[1] ? stscEntries[1].firstChunk - 1 : Infinity\n stts.entries.forEach(({ count, delta }) => {\n for (let i = 0; i < count; i++) {\n sample = {\n dts,\n duration: delta,\n size: stszEntrySizes[pos] || stsz.sampleSize,\n offset: stcoEntries[chunkIndex] + offsetInChunk,\n index: pos\n }\n if (stssEntries) {\n sample.keyframe = keyframeMap[pos]\n if (sample.keyframe) {\n gopId++\n }\n sample.gopId = gopId\n }\n // sample.timeOffset = 0\n if (cttsArr && pos < cttsArr.length) {\n sample.pts = sample.dts + cttsArr[pos]\n // sample.timeOffset = cttsArr[pos]\n // if (pos === 0) {\n // sample.pts = sample.dts\n // sample.timeOffset = 0\n // }\n }\n samples.push(sample)\n dts += delta\n pos++\n\n if (pos < lastSampleInChunk) {\n offsetInChunk += sample.size\n } else {\n chunkIndex++\n offsetInChunk = 0\n if (chunkIndex >= lastChunkInRun) {\n chunkRunIndex++\n lastChunkInRun = stscEntries[chunkRunIndex + 1] ? stscEntries[chunkRunIndex + 1].firstChunk - 1 : Infinity\n }\n lastSampleInChunk += stscEntries[chunkRunIndex].samplesPerChunk\n }\n }\n })\n\n return samples\n}\n\nfunction parseVisualSampleEntry (ret, data) {\n ret.dataReferenceIndex = readBig16(data, 6)\n ret.width = readBig16(data, 24)\n ret.height = readBig16(data, 26)\n ret.horizresolution = readBig32(data, 28)\n ret.vertresolution = readBig32(data, 32)\n ret.frameCount = readBig16(data, 40)\n ret.depth = readBig16(data, 74)\n return 78\n}\n\nfunction parseAudioSampleEntry (ret, data) {\n ret.dataReferenceIndex = readBig16(data, 6)\n ret.channelCount = readBig16(data, 16)\n ret.sampleSize = readBig16(data, 18)\n ret.sampleRate = readBig32(data, 24) / (1 << 16)\n return 28\n}\n\nfunction parseBox (box, isFullBox, parse) {\n if (!box) return\n if (box.size !== box.data.length) throw new Error(`box ${box.type} size !== data.length`)\n const ret = {\n start: box.start,\n size: box.size,\n headerSize: box.headerSize,\n type: box.type\n }\n if (isFullBox) {\n ret.version = box.data[box.headerSize]\n ret.flags = readBig24(box.data, box.headerSize + 1)\n ret.headerSize += 4\n }\n parse(ret, box.data.subarray(ret.headerSize), ret.start + ret.headerSize)\n return ret\n}\n\nconst padStart = function (str, length, pad) {\n const charstr = String(pad)\n const len = length >> 0\n let maxlen = Math.ceil(len / charstr.length)\n const chars = []\n const r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\nconst toHex = function (...value) {\n const hex = []\n value.forEach(item => {\n hex.push(padStart(Number(item).toString(16), 2, 0))\n })\n return hex[0]\n}\n","\n// 改造为兼容IE11\nfunction Concat (ResultConstructor, ...arrays){\n let totalLength = 0\n arrays.forEach(function (arr){\n totalLength += arr.length\n })\n const result = new ResultConstructor(totalLength)\n let offset = 0\n arrays.forEach(function (arr){\n result.set(arr, offset)\n offset += arr.length\n })\n return result\n}\n\nclass Buffer {\n constructor () {\n this.buffer = new Uint8Array(0)\n }\n\n write (...buffer) {\n const self = this\n buffer.forEach(item => {\n if (item) {\n self.buffer = Concat(Uint8Array, self.buffer, item)\n } else {\n window.console.warn(item)\n }\n })\n }\n\n static writeUint16 (value) {\n return new Uint8Array([\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n\n static writeUint32 (value) {\n return new Uint8Array([\n value >> 24,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n}\n\nexport default Buffer\n","import { TrackType, VideoCodecType } from '../model'\nimport { concatUint8Array, parse /* hashVal */ } from '../utils'\nimport Buffer from './buffer'\n// import Crypto from './crypto/crypto'\nconst UINT32_MAX = 2 ** 32 - 1\n\nexport class MP4 {\n static types = [\n 'avc1',\n 'avcC',\n 'hvc1',\n 'hvcC',\n 'dinf',\n 'dref',\n 'esds',\n 'ftyp',\n 'hdlr',\n 'mdat',\n 'mdhd',\n 'mdia',\n 'mfhd',\n 'minf',\n 'moof',\n 'moov',\n 'mp4a',\n 'mvex',\n 'mvhd',\n 'pasp',\n 'stbl',\n 'stco',\n 'stsc',\n 'stsd',\n 'stsz',\n 'stts',\n 'tfdt',\n 'tfhd',\n 'traf',\n 'trak',\n 'trex',\n 'tkhd',\n 'vmhd',\n 'smhd',\n 'ctts',\n 'stss',\n 'styp',\n 'pssh',\n 'sidx',\n 'sbgp',\n 'saiz',\n 'saio',\n 'senc',\n 'trun',\n 'encv',\n 'enca',\n 'sinf',\n 'btrt',\n 'frma',\n 'tenc',\n 'schm',\n 'schi',\n 'mehd',\n 'fiel',\n 'sdtp'\n ].reduce((p, c) => {\n p[c] = [c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2), c.charCodeAt(3)]\n return p\n }, Object.create(null));\n\n static HDLR_TYPES = {\n video: new Uint8Array([\n 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,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65, 0x6f, 0x48, 0x61,\n 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]),\n audio: new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x73, 0x6f, 0x75, 0x6e, // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61,\n 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n ])\n }\n\n static FTYPAVC1 = MP4.box(MP4.types.ftyp, new Uint8Array([\n 105, 115, 111, 109, // isom\n 0, 0, 0, 1,\n 105, 115, 111, 109,\n 97, 118, 99, 49 // avc1\n ]))\n\n static FTYPHEV1 = MP4.box(MP4.types.ftyp, new Uint8Array([\n 105, 115, 111, 109, // isom\n 0, 0, 0, 1,\n 105, 115, 111, 109,\n 104, 101, 118, 49 // hev1\n ]))\n\n static DINF = MP4.box(MP4.types.dinf, MP4.box(MP4.types.dref, new Uint8Array([\n 0x00, // version\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\n 0x00, 0x00, 0x01 // entry_flags\n ])))\n\n static VMHD = MP4.box(MP4.types.vmhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphics mode\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // op color\n ]))\n\n static SMHD = MP4.box(MP4.types.smhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]))\n\n static StblTable = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n\n static STTS = MP4.box(MP4.types.stts, MP4.StblTable)\n\n static STSC = MP4.box(MP4.types.stsc, MP4.StblTable)\n\n static STSZ = MP4.box(MP4.types.stsz, 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\n static STCO = MP4.box(MP4.types.stco, MP4.StblTable)\n\n static box (type, ...payload) {\n payload = payload.filter(Boolean)\n const size = 8 + payload.reduce((p, c) => (p + c.byteLength), 0)\n const ret = new Uint8Array(size)\n ret[0] = (size >> 24) & 0xff\n ret[1] = (size >> 16) & 0xff\n ret[2] = (size >> 8) & 0xff\n ret[3] = size & 0xff\n ret.set(type, 4)\n let offset = 8\n payload.forEach((data) => {\n ret.set(data, offset)\n offset += data.byteLength\n })\n return ret\n }\n\n static ftyp (tracks) {\n const isHevc = tracks.find(t => t.type === TrackType.VIDEO && t.codecType === VideoCodecType.HEVC)\n return isHevc ? MP4.FTYPHEV1 : MP4.FTYPAVC1\n }\n\n static initSegment (tracks) {\n const ftyp = MP4.ftyp(tracks)\n // console.log('[remux],ftyp ,len ', ftyp.byteLength, hashVal(ftyp.toString()))\n const init = concatUint8Array(ftyp, MP4.moov(tracks))\n // console.log('[remux],init ,len ', init.byteLength, hashVal(init.toString()))\n return init\n }\n\n static pssh (data) {\n // const buffer = new Buffer()\n const content = new Uint8Array(\n [\n 0x01, 0x00, 0x00, 0x00 // version\n ].concat(\n [\n 0x10, 0x77, 0xef, 0xec,\n 0xc0, 0xb2, 0x4d, 0x02,\n 0xac, 0xe3, 0x3c, 0x1e,\n 0x52, 0xe2, 0xfb, 0x4b\n ],\n [0x00, 0x00, 0x00, 0x01],\n parse(data.kid),\n [0x00, 0x00, 0x00, 0x00]\n )\n )\n return MP4.box(MP4.types.pssh, content)\n }\n\n static moov (tracks) {\n if (tracks[0].useEME && (tracks[0].encv || tracks[0].enca)) {\n if (!tracks[0].pssh) {\n tracks[0].pssh = {\n kid: tracks[0].kid\n }\n }\n const pssh = this.pssh(tracks[0].pssh)\n // console.log('[remux],pssh,', hashVal(pssh.toString()))\n return MP4.box(MP4.types.moov,\n MP4.mvhd(tracks[0].mvhdDurtion || tracks[0].duration, tracks[0].mvhdTimecale || tracks[0].timescale),\n MP4.mvex(tracks),\n ...tracks.map((t) => MP4.trak(t)),\n pssh)\n } else {\n return MP4.box(MP4.types.moov,\n MP4.mvhd(tracks[0].mvhdDurtion || tracks[0].duration, tracks[0].mvhdTimecale || tracks[0].timescale),\n ...tracks.map((t) => MP4.trak(t)),\n MP4.mvex(tracks)\n )\n }\n }\n\n static mvhd (duration, timescale = 90000) {\n const mvhd = MP4.box(MP4.types.mvhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,\n 0x00, 0x01, 0x00, 0x00, // rate\n 0x01, 0x00, // volume\n 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\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, // matrix\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0xff, 0xff, 0xff, 0xff // todo 0xff, 0xff, 0xff, 0xff // next_track_ID\n ]))\n // console.log('[remux],mvhd, len,', mvhd.byteLength, hashVal(mvhd.toString()))\n return mvhd\n }\n\n static trak (track) {\n const trak = MP4.box(\n MP4.types.trak,\n MP4.tkhd(track.id, track.tkhdDuration || 0, track.width, track.height),\n MP4.mdia(track)\n )\n // console.log('[remux],trak, len,', trak.byteLength, track.id, hashVal(trak.toString()))\n return trak\n }\n\n static tkhd (id, duration, width = 0, height = 0) {\n const tkhd = MP4.box(MP4.types.tkhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x07, // flags、todo 0x07\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time todo\n (id >> 24) & 0xff, (id >> 16) & 0xff, (id >> 8) & 0xff, id & 0xff,\n 0x00, 0x00, 0x00, 0x00,\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff, // todo (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, 0x00, // /*0x00*/ alternate_group //todo type === 'video' ? 0x01 : 0x00(第二个位置)\n 0x01, 0x00, // /* 0x01 */, 0x00, // non-audio track volume //todo type === 'audio' ? 0x01 : 0x00(第一个位置)\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, // matrix\n (width >> 8) & 0xff, width & 0xff, 0x00, 0x00,\n (height >> 8) & 0xff, height & 0xff, 0x00, 0x00\n ]))\n // console.log('[remux],tkhd, len,', tkhd.byteLength, hashVal(tkhd.toString()))\n return tkhd\n }\n\n static mdia (track) {\n const mdia = MP4.box(MP4.types.mdia, MP4.mdhd(track.duration, track.timescale), MP4.hdlr(track.type), MP4.minf(track))\n // console.log('[remux],mdia, len,', mdia.byteLength, hashVal(mdia.toString()))\n return mdia\n }\n\n static mdhd (duration, timescale = 90000) {\n const mdhd = MP4.box(MP4.types.mdhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // todo 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff, // (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,//todo\n 0x55, 0xc4, // 'und' language (undetermined) //todo 0x15, 0xC7\n 0x00, 0x00 // pre_defined\n ]))\n // console.log('[remux],mdhd, len,', mdhd.byteLength, hashVal(mdhd.toString()))\n return mdhd\n }\n\n static hdlr (type) {\n const hdlr = MP4.box(MP4.types.hdlr, MP4.HDLR_TYPES[type])\n // console.log('[remux],hdlr, len,', hdlr.byteLength, hashVal(hdlr.toString()))\n return hdlr\n }\n\n static minf (track) {\n const minf = MP4.box(MP4.types.minf, track.type === TrackType.VIDEO ? MP4.VMHD : MP4.SMHD, MP4.DINF, MP4.stbl(track))\n // console.log('[remux],minf, len,', minf.byteLength, hashVal(minf.toString()))\n return minf\n }\n\n static stbl (track) {\n const extBox = []\n if (track && track.ext) {\n track.ext.stss && extBox.push(MP4.stss(track.ext.stss.entries))\n // track.ext.stss && extBox.push(MP4.ctts(track.ext.stss.entries))\n }\n const stbl = MP4.box(MP4.types.stbl, MP4.stsd(track), MP4.STTS, extBox[0], MP4.STSC, MP4.STSZ, MP4.STCO)\n // console.log('[remux],stbl, len,', stbl.byteLength, hashVal(stbl.toString()))\n return stbl\n }\n\n static stsd (track) {\n let content\n if (track.type === 'audio') {\n if (track.useEME && track.enca) {\n content = MP4.enca(track)\n // console.log('[remux],enca, len,', content.byteLength, track.type, hashVal(content.toString()))\n } else {\n content = MP4.mp4a(track)\n // console.log('[remux],mp4a, len,', content.byteLength, track.type, hashVal(content.toString()))\n }\n } else if (track.useEME && track.encv) {\n content = MP4.encv(track)\n // console.log('[remux],encv, len,', content.byteLength, track.type, hashVal(content.toString()))\n } else {\n content = MP4.avc1hev1(track)\n // console.log('[remux],avc1hev1, len,', content.byteLength, track.type, hashVal(content.toString()))\n }\n const stsd = MP4.box(MP4.types.stsd, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01 // entry_count\n ]), content)\n // console.log('[remux],stsd, len,', stsd.byteLength, hashVal(stsd.toString()))\n return stsd\n }\n\n static enca (data) {\n const channelCount = data.enca.channelCount\n const sampleRate = data.enca.sampleRate\n const 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, channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n (sampleRate >> 8) & 0xff,\n sampleRate & 0xff, //\n 0x00, 0x00\n ])\n const esds = MP4.esds(data.config)\n // console.log('[remux],esds, len,', esds.byteLength, hashVal(esds.toString()))\n const sinf = MP4.sinf(data.enca)\n // console.log('[remux],sinf, len,', sinf.byteLength, hashVal(sinf.toString()))\n return MP4.box(MP4.types.enca, content, esds, sinf)\n }\n\n static encv (track) {\n const sps = track.sps.length > 0 ? track.sps[0] : []\n const pps = track.pps.length > 0 ? track.pps[0] : []\n const width = track.width\n const height = track.height\n const hSpacing = track.sarRatio[0]\n const vSpacing = track.sarRatio[1]\n\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n\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\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 const 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 sps.length >>> 8 & 0xff,\n sps.length & 0xff\n ].concat(...sps).concat([\n 0x01,\n pps.length >>> 8 & 0xff,\n pps.length & 0xff\n ]).concat(...pps))\n const btrt = new Uint8Array([\n 0x00, 0x00, 0x58, 0x39,\n 0x00, 0x0F, 0xC8, 0xC0,\n 0x00, 0x04, 0x56, 0x48\n ])\n const sinf = MP4.sinf(track.encv)\n const 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 return MP4.box(MP4.types.encv, content, MP4.box(MP4.types.avcC, avcc), MP4.box(MP4.types.btrt, btrt), sinf, MP4.box(MP4.types.pasp, pasp))\n }\n\n static schi (data) {\n const content = new Uint8Array([])\n const tenc = MP4.tenc(data)\n return MP4.box(MP4.types.schi, content, tenc)\n }\n\n static tenc (data) {\n // 用于每个track的加密参数(包括KID、初始化向量、加密标志位),包含在TrackEncryptionBox(‘tenc’)中。\n const content = new Uint8Array(\n [\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // skip\n data.default_IsEncrypted & 0xff, // default_isProtected\n data.default_IV_size & 0xff // default_Per_Sample_IV_Size\n ].concat(parse(data.default_KID)))\n return MP4.box(MP4.types.tenc, content)\n }\n\n static sinf (data) {\n const content = new Uint8Array([])\n const frma = new Uint8Array([\n data.data_format.charCodeAt(0),\n data.data_format.charCodeAt(1),\n data.data_format.charCodeAt(2),\n data.data_format.charCodeAt(3)\n ])\n const schm = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00,\n 0x63, 0x65, 0x6E, 0x63, // cenc\n 0x00, 0x01, 0x00, 0x00 // version\n ])\n const schi = MP4.schi(data)\n return MP4.box(MP4.types.sinf, content, MP4.box(MP4.types.frma, frma), MP4.box(MP4.types.schm, schm), schi)\n }\n\n static avc1hev1 (track) {\n const isHevc = track.codecType === VideoCodecType.HEVC\n const typ = isHevc ? MP4.types.hvc1 : MP4.types.avc1\n const config = isHevc ? MP4.hvcC(track) : MP4.avcC(track)\n const boxes = [\n new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pre_defined\n (track.width >> 8) & 0xff, track.width & 0xff, // width\n (track.height >> 8) & 0xff, track.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, 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, 0x00,\n 0x00, 0x00, 0x00, 0x00, // compressor name\n 0x00, 0x18, // depth\n 0x11, 0x11 // pre_defined = -1 //todo\n ]), config\n ]\n // console.log('[remux],avc1hev1_0, len,', boxes[0].byteLength, hashVal(boxes[0].toString()))\n // console.log('[remux],avc1hev1_1, len,', boxes[1].byteLength, hashVal(boxes[1].toString()))\n if (isHevc) {\n boxes.push(MP4.box(MP4.types.fiel, new Uint8Array([0x01, 0x00])))\n // console.log('[remux],fiel, len,', boxes[2].byteLength, hashVal(boxes[2].toString()))\n } else if (track.sarRatio && track.sarRatio.length > 1) {\n boxes.push(MP4.pasp(track.sarRatio))\n // console.log('[remux],pasp, len,', boxes[2].byteLength, hashVal(boxes[2].toString()))\n }\n return MP4.box(typ, ...boxes)\n }\n\n static avcC (track) {\n const sps = []\n const pps = []\n\n let len\n track.sps.forEach((s) => {\n len = s.byteLength\n sps.push((len >>> 8) & 0xff)\n sps.push(len & 0xff)\n sps.push(...s)\n })\n\n track.pps.forEach((p) => {\n len = p.byteLength\n pps.push((len >>> 8) & 0xff)\n pps.push(len & 0xff)\n pps.push(...p)\n })\n\n return MP4.box(MP4.types.avcC, new Uint8Array([\n 0x01, // configurationVersion\n sps[3], // AVCProfileIndication\n sps[4], // profile_compatibility\n sps[5], // AVCLevelIndication\n 0xfc | 3, // lengthSizeMinusOne\n 0xe0 | track.sps.length // 3bit reserved (111) + numOfSequenceParameterSets\n ].concat(...sps)\n .concat([track.pps.length]) // numOfPictureParameterSets\n .concat(...pps)))\n }\n\n static hvcC (track) {\n const hvcC = track.hvcC\n if (hvcC instanceof ArrayBuffer || hvcC instanceof Uint8Array) return hvcC\n const { vps, sps, pps } = track\n let data\n if (hvcC) {\n const pcf = hvcC.generalProfileCompatibilityFlags\n const cif = hvcC.generalConstraintIndicatorFlags\n const numOfArrays = (vps.length && 1) + (sps.length && 1) + (pps.length && 1)\n data = [\n 0x01, // configurationVersion\n hvcC.generalProfileSpace << 6 | hvcC.generalTierFlag << 5 | hvcC.generalProfileIdc,\n pcf >>> 24, pcf >>> 16, pcf >>> 8, pcf,\n cif[0], cif[1], cif[2], cif[3], cif[4], cif[5],\n hvcC.generalLevelIdc,\n 0xF0, 0x00, // min_spatial_segmentation_idc\n 0xFC, // parallelismType\n hvcC.chromaFormatIdc | 0xFC,\n hvcC.bitDepthLumaMinus8 | 0xF8,\n hvcC.bitDepthChromaMinus8 | 0xF8,\n 0x00, 0x00, // avgFrameRate\n hvcC.numTemporalLayers << 3 | hvcC.temporalIdNested << 2 | 3,\n numOfArrays\n ]\n const write = (x) => {\n data.push(x.length >> 8, x.length)\n data.push(...x)\n }\n if (vps.length) {\n data.push(0xA0, 0x00, vps.length)\n vps.forEach(write)\n }\n if (sps.length) {\n data.push(0xA1, 0x00, sps.length)\n sps.forEach(write)\n }\n if (pps.length) {\n data.push(0xA2, 0x00, pps.length)\n pps.forEach(write)\n }\n } else {\n data = [\n 0x01, // configurationVersion\n 0x01, // profile_space + tier_flag + profile_idc\n 0x60, 0x00, 0x00, 0x00, // general_profile_compatibility\n 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, // constraint_indicator_flags\n 0x5D, // level_idc=90\n 0xF0, 0x00, 0xFC, 0xFD, // profile_compatibility_indications\n 0xF8, // ‘11111’b + bitDepthLumaMinus8\n 0xF8, // ‘11111’b + bitDepthChromaMinus8\n 0x00, 0x00, // avgFrameRate\n 0x0F, // constantFrameRate + numTemporalLayers + ‘1’b + lengthSizeMinusOne\n 0x03, // numOfArrays\n\n // vps\n 0xA0, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x18, // nalUnitLength\n 0x40, 0x01, 0x0C, 0x01, 0xFF, 0xFF, 0x01, 0x60, 0x00, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x5D, 0x99, 0x98, 0x09,\n\n // sps\n 0xA1, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x2D, // nalUnitLength\n 0x42, 0x01, 0x01, 0x01, 0x60, 0x00, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x5D, 0xA0, 0x02,\n 0x80, 0x80, 0x2D, 0x16, 0x59, 0x99, 0xA4, 0x93, 0x2B, 0x9A, 0x80, 0x80, 0x80, 0x82, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00,\n 0x00, 0x03, 0x00, 0x32, 0x10,\n\n // pps\n 0xA2, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x07, // nalUnitLength\n 0x44, 0x01, 0xC1, 0x72, 0xB4, 0x62, 0x40\n ]\n }\n return MP4.box(MP4.types.hvcC, new Uint8Array(data))\n }\n\n static pasp ([hSpacing, vSpacing]) {\n return MP4.box(MP4.types.pasp, new Uint8Array([\n hSpacing >> 24, (hSpacing >> 16) & 0xff, (hSpacing >> 8) & 0xff, hSpacing & 0xff,\n vSpacing >> 24, (vSpacing >> 16) & 0xff, (vSpacing >> 8) & 0xff, vSpacing & 0xff\n ]))\n }\n\n static mp4a (track) {\n return MP4.box(MP4.types.mp4a, new Uint8Array([\n 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, track.channelCount,\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n (track.sampleRate >> 8) & 0xff, track.sampleRate & 0xff,\n 0x00, 0x00\n ]), track.config.length ? MP4.esds(track.config) : undefined)\n }\n\n static esds (config) {\n const len = config.length\n const esds = MP4.box(MP4.types.esds, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x03, // tag\n 0x17 + len, // length\n 0x00, 0x00, // ES_ID\n 0x00, // streamDependenceFlag, URL_flag, reserved, streamPriority\n 0x04, // tag\n 0x0f + len, // length\n 0x40, // object type\n 0x15, // streamType\n 0x00, 0x06, 0x00, // bufferSizeDB\n 0x00, 0x00, 0xda, 0xc0, // maxBitrate\n 0x00, 0x00, 0xda, 0xc0, // avgBitrate\n 0x05 // tag, DecoderSpecificInfoTag\n ].concat([len])\n .concat(config)\n .concat(\n [0x06, 0x01, 0x02]// GASpecificConfig\n )\n ))\n // console.log('[remux],esds ,len ', esds.byteLength, hashVal(esds.toString()))\n return esds\n }\n\n static mvex (tracks) {\n // const mehd = MP4.box(MP4.types.mehd, this.extension(0, 0), Buffer.writeUint32(tracks[0].tkhdDuration))\n // const mvex = MP4.box(MP4.types.mvex, mehd, MP4.trex1(1), MP4.trex2(2))\n // // console.log('[remux],mvex, len,', mvex.byteLength, hashVal(mvex.toString()))\n // const mvex = MP4.box(MP4.types.mvex, MP4.trex1(1), MP4.trex2(2))\n const mvex = MP4.box(MP4.types.mvex, ...tracks.map((t) => MP4.trex(t.id)))\n // console.log('[remux],mvex, len,', mvex.byteLength, hashVal(mvex.toString()))\n return mvex\n }\n\n static trex (id) {\n const trex = MP4.box(MP4.types.trex, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n id >> 24, (id >> 16) & 0xff, (id >> 8) & 0xff, 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 // console.log('[remux],trex, len,', trex.byteLength, hashVal(trex.toString()))\n return trex\n }\n\n static trex1 (id) {\n const trex = MP4.box(MP4.types.trex, 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 // console.log('[remux],trex, len,', trex.byteLength, hashVal(trex.toString()))\n return trex\n }\n\n static trex2 (id) {\n const trex = MP4.box(MP4.types.trex, 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 // console.log('[remux],trex, len,', trex.byteLength, hashVal(trex.toString()))\n return trex\n }\n\n static moof (tracks) {\n const moof = MP4.box(MP4.types.moof, MP4.mfhd(tracks[0].samples ? tracks[0].samples[0].gopId : 0), ...tracks.map((t) => MP4.traf(t)))\n // console.log('[remux],moof, len', moof.byteLength)\n return moof\n // return MP4.box(MP4.types.moof, MP4.mfhd(tracks[0].gopId), ...tracks.map((t) => MP4.traf(t)))\n }\n\n static mfhd (sequenceNumber) {\n // sequenceNumber += 1\n const mfhd = MP4.box(MP4.types.mfhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n sequenceNumber >> 24, (sequenceNumber >> 16) & 0xff, (sequenceNumber >> 8) & 0xff, sequenceNumber & 0xff\n ]))\n // console.log('[remux],mfhd, len,', mfhd.byteLength, hashVal(mfhd.toString()))\n return mfhd\n }\n\n static traf (track) {\n const tfhd = MP4.tfhd(track.id)\n // console.log('[remux],tfhd, len,', tfhd.byteLength, hashVal(tfhd.toString()), ', trackid = ', track.id)\n // console.log('[remux],tfdt,baseMediaDecodeTime,', track.baseMediaDecodeTime)\n const tfdt = MP4.tfdt(track, track.baseMediaDecodeTime)\n let sencLength = 0\n let samples\n if (track.isVideo && track.videoSenc) {\n samples = track.videoSenc\n samples.forEach(function (item) {\n sencLength = sencLength + 8\n if (item.subsamples && item.subsamples.length) {\n sencLength = sencLength + 2\n sencLength = sencLength + item.subsamples.length * 6\n }\n })\n }\n track.videoSencLength = sencLength\n // console.log('[remux],tfdt, len,', tfdt.toString().length)\n // console.log('[remux],tfdt, len,', tfdt.byteLength, hashVal(tfdt.toString()))\n if (!track.useEME || (!track.isVideoEncryption && !track.isAudioEncryption)) {\n const sdtp = MP4.sdtp(track)\n // console.log('[remux],sdtp, len,', sdtp.byteLength, hashVal(sdtp.toString()))\n const offset = 16 + // tfhd\n 20 + // tfdt\n 8 + // traf header\n 16 + // mfhd\n 8 + // moof header\n 8 // mdat header\n return MP4.box(MP4.types.traf, tfhd, tfdt, sdtp, MP4.trun(track.samples, sdtp.byteLength + offset))\n } else if (track.isVideoEncryption) {\n if (track.isVideo) {\n // 加密视频\n const saiz = MP4.saiz(track)\n const saio = MP4.saio(track)\n const trun = MP4.trun1(track)\n const senc = MP4.senc(track)\n const traf = MP4.box(MP4.types.traf, tfhd, tfdt, saiz, saio, trun, senc)\n // console.log('[remux],trex_video, len,', traf.byteLength, hashVal(traf.toString()))\n return traf\n } else {\n // 视频加密,音频加密和未加密处理\n if (!track.isAudioEncryption) {\n // 音频未加密\n const sbgp = MP4.sbgp()\n const trun = MP4.trun1(track)\n return MP4.box(MP4.types.traf, tfhd, tfdt, sbgp, trun)\n } else {\n // 音频加密\n const sbgp = MP4.sbgp()\n const saiz = MP4.saiz(track)\n const saio = MP4.saio(track)\n const senc = MP4.senc(track)\n const trun = MP4.trun1(track)\n const traf = MP4.box(MP4.types.traf, tfhd, tfdt, sbgp, saiz, saio, senc, trun)\n // console.log('[remux],trex_audio, len,', traf.byteLength, hashVal(traf.toString()))\n return traf\n }\n }\n } else {\n // 视频未加密,音频加密\n if (track.isVideo) {\n const trun = MP4.trun1(track)\n return MP4.box(MP4.types.traf, tfhd, tfdt, trun)\n } else {\n const sbgp = MP4.sbgp()\n const saiz = MP4.saiz(track)\n const saio = MP4.saio(track)\n const senc = MP4.senc(track)\n const trun = MP4.trun1(track)\n const traf = MP4.box(MP4.types.traf, tfhd, tfdt, sbgp, saiz, saio, senc, trun)\n // console.log('[remux],trex, len,', traf.byteLength, hashVal(traf.toString()))\n return traf\n }\n }\n }\n\n static sdtp (data) {\n const buffer = new Buffer()\n data.samples.forEach(item => {\n buffer.write(new Uint8Array(data.isVideo ? [item.keyframe ? 32 : 16] : [16]))\n })\n return MP4.box(MP4.types.sdtp, this.extension(0, 0), buffer.buffer)\n }\n\n static trun1 (data) {\n // const id = data.id\n // const ceil = id === 1 ? 12 : 4\n const buffer = new Buffer()\n const sampleCount = Buffer.writeUint32(data.samples.length)\n let offset = null\n if (data.isVideo) {\n const sencLength = data.videoSencLength\n /*\n 16 + // mfhd\n 16 + // tfhd\n 20 + // tfdt\n 17 + //saiz\n 24 + //saio\n data.samples.length*16\n 4(offset) + 4(sampleCount) + 12(header) //trun\n 12(header) + sencLength //senc\n 8 + // traf header\n 8 + // moof header\n 8 // mdat header\n = 149+data.samples.length * 16 + sencLength\n */\n offset = Buffer.writeUint32(data.samples.length * 16 + sencLength + 149)\n if (!data.isVideoEncryption && data.isAudioEncryption) {\n offset = Buffer.writeUint32(data.samples.length * 16 + 92)\n }\n } else {\n /*\n 16 + // mfhd\n 16 + // tfhd\n 20 + // tfdt\n 28 + //sbgp\n 4(offset) + 4(sampleCount) + 12(header) //trun\n 8 + // traf header\n 8 + // moof header\n 8 // mdat header\n */\n let len = data.samples.length * 12 + 124\n if (data.isAudioEncryption) {\n len = data.samples.length * 12 + 8 * data.audioSenc.length + 177\n }\n offset = Buffer.writeUint32(len)\n }\n\n data.samples.forEach(item => {\n buffer.write(Buffer.writeUint32(item.duration))\n buffer.write(Buffer.writeUint32(item.size))\n buffer.write(Buffer.writeUint32(item.keyframe ? 0x02000000 : 0x00010000))\n if (data.isVideo) {\n buffer.write(Buffer.writeUint32(item.cts ? item.cts : 0))\n }\n })\n\n return MP4.box(MP4.types.trun, this.extension(0, data.flags), sampleCount, offset, buffer.buffer)\n }\n\n static senc (data) {\n const buffer = new Buffer()\n const len = data.samples.length\n const ceil = data.isVideo ? 16 : 8\n const flag = data.isVideo ? 2 : 0\n let samples = []\n let samplesLength = 0\n if (data.isVideo) {\n samples = data.videoSenc\n samplesLength = data.videoSencLength\n } else {\n samples = data.audioSenc\n }\n samplesLength = samplesLength || ceil * len\n buffer.write(\n Buffer.writeUint32(16 + samplesLength), MP4.types.senc, this.extension(0, flag)\n )\n buffer.write(Buffer.writeUint32(len))\n samples.forEach(item => {\n for (let i = 0; i < item.InitializationVector.length; i++) {\n buffer.write(new Uint8Array([item.InitializationVector[i]]))\n }\n if (item.subsamples && item.subsamples.length) {\n buffer.write(Buffer.writeUint16(item.subsamples.length))\n item.subsamples.forEach(value => {\n buffer.write(Buffer.writeUint16(value.BytesOfClearData))\n buffer.write(Buffer.writeUint32(value.BytesOfProtectedData))\n })\n }\n })\n return buffer.buffer\n // return MP4.box(MP4.types.senc, this.extension(0, flag), buffer.buffer)\n }\n\n static saio (data) {\n let length = data.samples.length * 12 + 141\n if (!data.isVideo && data.isAudioEncryption) {\n length = 149\n }\n const content = new Uint8Array([\n 0x01, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x01,\n 0x00, 0x00, 0x00, 0x00,\n (length >> 24) & 0xff,\n (length >> 16) & 0xff,\n (length >> 8) & 0xff,\n length & 0xff\n ])\n return MP4.box(MP4.types.saio, content)\n }\n\n static saiz (data) {\n const samplesLength = data.samples.length\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00,\n 0x10, // default sample info size\n (samplesLength >> 24) & 0xff,\n (samplesLength >> 16) & 0xff,\n (samplesLength >> 8) & 0xff,\n samplesLength & 0xff\n ])\n return MP4.box(MP4.types.saiz, content)\n }\n\n static sbgp () {\n const content = new Uint8Array([\n 0x72, 0x6F, 0x6C, 0x6C, // sgpd, grouping_type\n 0x00, 0x00, 0x00, 0x01,\n 0x00, 0x00, 0x01, 0x19,\n 0x00, 0x00, 0x00, 0x01\n ])\n return MP4.box(MP4.types.sbgp, this.extension(0, 0), content)\n }\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\n static tfhd (id) {\n return MP4.box(MP4.types.tfhd, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags todo 0x00\n id >> 24, (id >> 16) & 0xff, (id >> 8) & 0xff, id & 0xff // track_ID\n ]))\n }\n\n static tfdt (data, baseMediaDecodeTime) {\n const upperWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1))\n const lowerWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1))\n if (data.useEME && (data.isVideoEncryption || data.isAudioEncryption)) {\n return MP4.box(MP4.types.tfdt, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n lowerWordBaseMediaDecodeTime >> 24,\n (lowerWordBaseMediaDecodeTime >> 16) & 0xff,\n (lowerWordBaseMediaDecodeTime >> 8) & 0xff,\n lowerWordBaseMediaDecodeTime & 0xff\n ]))\n } else {\n return MP4.box(MP4.types.tfdt, new Uint8Array([\n 0x01, // version 1\n 0x00, 0x00, 0x00, // flags\n upperWordBaseMediaDecodeTime >> 24,\n (upperWordBaseMediaDecodeTime >> 16) & 0xff,\n (upperWordBaseMediaDecodeTime >> 8) & 0xff,\n upperWordBaseMediaDecodeTime & 0xff,\n lowerWordBaseMediaDecodeTime >> 24,\n (lowerWordBaseMediaDecodeTime >> 16) & 0xff,\n (lowerWordBaseMediaDecodeTime >> 8) & 0xff,\n lowerWordBaseMediaDecodeTime & 0xff\n ]))\n }\n }\n\n static trun (samples, offset) {\n const sampleLen = samples.length\n const dataLen = 12 + (16 * sampleLen)\n offset += 8 + dataLen\n const data = new Uint8Array(dataLen)\n data.set([\n 0x00, // version\n 0x00, 0x0f, 0x01, // flags\n (sampleLen >>> 24) & 0xff, (sampleLen >>> 16) & 0xff, (sampleLen >>> 8) & 0xff, sampleLen & 0xff,\n (offset >>> 24) & 0xff, (offset >>> 16) & 0xff, (offset >>> 8) & 0xff, offset & 0xff // data_offset\n ], 0)\n for (let i = 0; i < sampleLen; i++) {\n const {\n duration, size, flag = {}, cts = 0\n } = samples[i]\n data.set([\n (duration >>> 24) & 0xff, (duration >>> 16) & 0xff, (duration >>> 8) & 0xff, duration & 0xff,\n (size >>> 24) & 0xff, (size >>> 16) & 0xff, (size >>> 8) & 0xff, size & 0xff,\n (flag.isLeading << 2) | (flag.dependsOn === null || flag.dependsOn === undefined ? 1 : flag.dependsOn),\n (flag.isDependedOn << 6) | (flag.hasRedundancy << 4) | (flag.paddingValue << 1) | (flag.isNonSyncSample === null || flag.isNonSyncSample === undefined ? 1 : flag.isNonSyncSample),\n flag.degradationPriority & (0xf0 << 8), flag.degradationPriority & 0x0f, // sample_flags\n (cts >>> 24) & 0xff, (cts >>> 16) & 0xff, (cts >>> 8) & 0xff, cts & 0xff // sample_composition_time_offset\n ], 12 + 16 * i)\n }\n\n return MP4.box(MP4.types.trun, data)\n }\n\n static moovMP4 (tracks) {\n return MP4.box(MP4.types.moov,\n MP4.mvhd(tracks[0].duration, tracks[0].timescale),\n ...tracks.map((t) => MP4.trackMP4(t)))\n }\n\n static trackMP4 (track) {\n return MP4.box(\n MP4.types.trak,\n MP4.tkhd(track.id, track.duration, track.width, track.height),\n MP4.mdiaMP4(track)\n )\n }\n\n static mdiaMP4 (track) {\n return MP4.box(MP4.types.mdia, MP4.mdhd(track.duration, track.timescale), MP4.hdlr(track.type), MP4.minfMP4(track))\n }\n\n static minfMP4 (track) {\n return MP4.box(MP4.types.minf, track.type === TrackType.VIDEO ? MP4.VMHD : MP4.SMHD, MP4.DINF, MP4.stblMP4(track))\n }\n\n static stblMP4 (track) {\n const { ext } = track\n const boxes = [\n MP4.stsd(track),\n MP4.stts(ext.stts),\n MP4.stsc(ext.stsc),\n MP4.stsz(ext.stsz),\n MP4.stco(ext.stco)\n ]\n\n if (ext.stss.length) {\n boxes.push(MP4.stss(ext.stss))\n }\n\n if (ext.ctts.length) {\n boxes.push(MP4.ctts(ext.ctts))\n }\n\n return MP4.box(MP4.types.stbl, ...boxes)\n }\n\n static stts (samples) {\n const len = samples.length\n const data = new Uint8Array(8 * len)\n let offset = 0\n samples.forEach(({ value, count }) => {\n data.set([\n count >> 24, (count >> 16) & 0xff, (count >> 8) & 0xff, count & 0xff,\n value >> 24, (value >> 16) & 0xff, (value >> 8) & 0xff, value & 0xff\n ], offset)\n offset += 8\n })\n\n return MP4.box(MP4.types.stts, concatUint8Array(new Uint8Array([\n 0, 0, 0, 0,\n (len >> 24), (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]), data))\n }\n\n static stsc (entries) {\n const len = entries.length\n const data = new Uint8Array(12 * len)\n let offset = 0\n entries.forEach(({ firstChunk, samplesPerChunk, sampleDescIndex }) => {\n data.set([\n firstChunk >> 24, (firstChunk >> 16) & 0xff, (firstChunk >> 8) & 0xff, firstChunk & 0xff,\n samplesPerChunk >> 24, (samplesPerChunk >> 16) & 0xff, (samplesPerChunk >> 8) & 0xff, samplesPerChunk & 0xff,\n sampleDescIndex >> 24, (sampleDescIndex >> 16) & 0xff, (sampleDescIndex >> 8) & 0xff, sampleDescIndex & 0xff\n ], offset)\n offset += 12\n })\n return MP4.box(MP4.types.stsc, concatUint8Array(new Uint8Array([\n 0, 0, 0, 0,\n (len >> 24), (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]), data))\n }\n\n static stsz (samplesSizes) {\n const len = samplesSizes.length\n const data = new Uint8Array(4 * len)\n let offset = 0\n samplesSizes.forEach((x) => {\n data.set([\n x >> 24, (x >> 16) & 0xff, (x >> 8) & 0xff, x & 0xff\n ], offset)\n offset += 4\n })\n return MP4.box(MP4.types.stsz, concatUint8Array(\n new Uint8Array([\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n len >> 24, (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]),\n data\n ))\n }\n\n static stco (offsets) {\n const len = offsets.length\n const data = new Uint8Array(4 * len)\n let offset = 0\n offsets.forEach((x) => {\n data.set([\n x >> 24, (x >> 16) & 0xff, (x >> 8) & 0xff, x & 0xff\n ], offset)\n offset += 4\n })\n return MP4.box(MP4.types.stco, concatUint8Array(\n new Uint8Array([\n 0, 0, 0, 0,\n len >> 24, (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]),\n data\n ))\n }\n\n static stss (keyframeIndexes) {\n const len = keyframeIndexes.length\n const data = new Uint8Array(4 * len)\n let offset = 0\n keyframeIndexes.forEach((x) => {\n data.set([\n x >> 24, (x >> 16) & 0xff, (x >> 8) & 0xff, x & 0xff\n ], offset)\n offset += 4\n })\n return MP4.box(MP4.types.stss, concatUint8Array(\n new Uint8Array([\n 0, 0, 0, 0,\n len >> 24, (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]),\n data\n ))\n }\n\n static ctts (samples) {\n const len = samples.length\n const data = new Uint8Array(8 * len)\n let offset = 0\n samples.forEach(({ value, count }) => {\n data.set([\n count >> 24, (count >> 16) & 0xff, (count >> 8) & 0xff, count & 0xff,\n value >> 24, (value >> 16) & 0xff, (value >> 8) & 0xff, value & 0xff\n ], offset)\n offset += 8\n })\n return MP4.box(MP4.types.ctts, concatUint8Array(new Uint8Array([\n 0, 0, 0, 0,\n len >> 24, (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]), data))\n }\n\n static styp () {\n return MP4.box(MP4.types.styp, new Uint8Array([\n 0x6D, 0x73, 0x64, 0x68,\n 0x00, 0x00, 0x00, 0x00,\n 0x6D, 0x73, 0x64, 0x68,\n 0x6D, 0x73, 0x69, 0x78\n ]))\n }\n\n // data.sampleOffset 指的是samples的序列号。_samples[0].idx\n static sidx (data) {\n // const buffer = new Buffer()\n const timescale = data.timescale\n const duration = data.samples[0].duration\n const durationCount = duration * data.samples.length\n const earliestTime = data.samples[0].sampleOffset * duration\n let mdatSize = 8\n data.samples.forEach(item => {\n mdatSize += item.size\n })\n let length = 0\n if (data.isVideo) {\n let sencLength = 0\n let samples\n if (data.videoSenc) {\n samples = data.videoSenc\n }\n if (data.isVideo) {\n samples.forEach(item => {\n sencLength = sencLength + 8\n if (item.subsamples && item.subsamples.length) {\n sencLength = sencLength + 2\n sencLength = sencLength + item.subsamples.length * 6\n }\n })\n }\n data.videoSencLength = sencLength\n length = mdatSize + 141 + data.samples.length * 16 + sencLength\n if (data.useEME && data.isAudioEncryption && !data.isVideoEncryption) {\n length = mdatSize + (data.samples.length * 16) + 84\n }\n } else {\n length = mdatSize + 116 + data.samples.length * 12\n if (data.useEME && data.isAudioEncryption) {\n length = mdatSize + 169 + data.samples.length * 12 + 8 * data.audioSenc.length\n }\n }\n\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, data.id & 0xff, // ref_id\n (timescale >> 24) & 0xff,\n (timescale >> 16) & 0xff,\n (timescale >> 8) & 0xff,\n timescale & 0xff, // timescale\n (earliestTime >> 24) & 0xff,\n (earliestTime >> 16) & 0xff,\n (earliestTime >> 8) & 0xff,\n earliestTime & 0xff, // earliest_presentation_time\n 0x00, 0x00, 0x00, 0x00, // first_offset\n 0x00, 0x00, // reserved\n 0x00, 0x01, // ref_count\n // 0x00, 0x04, 0x11, 0xCF, // ref_size + ref_type\n // 0x00, 0x01, 0x0A, 0xA6, // ref_size + ref_type\n 0x00, // ref_size + ref_type ref_size = moof.size + mdat.size\n (length >> 16) & 0xff,\n (length >> 8) & 0xff,\n length & 0xff,\n (durationCount >> 24) & 0xff,\n (durationCount >> 16) & 0xff,\n (durationCount >> 8) & 0xff,\n durationCount & 0xff,\n 0x90, 0x00, 0x00, 0x00\n ])\n return MP4.box(MP4.types.sidx, content)\n }\n\n static mdat (data) {\n const mdat = MP4.box(MP4.types.mdat, data)\n // console.log('[remux],mdat ,len ', mdat.byteLength, hashVal(mdat.toString()))\n return mdat\n }\n}\n","\nexport class Logger {\n constructor (name, enable) {\n this.name = name || ''\n this._prefix = `[${this.name}]`\n Logger.disabled = enable\n }\n\n debug (...args) {\n if (Logger.disabled) return\n console.debug(this._prefix, ...args)\n }\n\n log (...args) {\n if (Logger.disabled) return\n console.log(this._prefix, ...args)\n }\n\n warn (...args) {\n if (Logger.disabled) return\n console.warn(this._prefix, ...args)\n }\n\n error (...args) {\n if (Logger.disabled) return\n console.error(this._prefix, ...args)\n }\n\n table (...args) {\n if (Logger.disabled) return\n console.group(this._prefix)\n console.table(...args)\n console.groupEnd()\n }\n\n static disabled = true\n\n static enable () {\n Logger.disabled = false\n }\n\n static disable () {\n Logger.disabled = true\n }\n}\n","import {\n WordArray,\n Hasher,\n} from './core.js';\n\n// Constants table\nconst T = [];\n\n// Compute constants\nfor (let i = 0; i < 64; i += 1) {\n T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n}\n\nconst FF = (a, b, c, d, x, s, t) => {\n const n = a + ((b & c) | (~b & d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\nconst GG = (a, b, c, d, x, s, t) => {\n const n = a + ((b & d) | (c & ~d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\nconst HH = (a, b, c, d, x, s, t) => {\n const n = a + (b ^ c ^ d) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\nconst II = (a, b, c, d, x, s, t) => {\n const n = a + (c ^ (b | ~d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\n/**\n * MD5 hash algorithm.\n */\nexport class MD5Algo extends Hasher {\n _doReset() {\n this._hash = new WordArray([\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n ]);\n }\n\n _doProcessBlock(M, offset) {\n const _M = M;\n\n // Swap endian\n for (let i = 0; i < 16; i += 1) {\n // Shortcuts\n const offset_i = offset + i;\n const M_offset_i = M[offset_i];\n\n _M[offset_i] = (\n (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff)\n | (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n );\n }\n\n // Shortcuts\n const H = this._hash.words;\n\n const M_offset_0 = _M[offset + 0];\n const M_offset_1 = _M[offset + 1];\n const M_offset_2 = _M[offset + 2];\n const M_offset_3 = _M[offset + 3];\n const M_offset_4 = _M[offset + 4];\n const M_offset_5 = _M[offset + 5];\n const M_offset_6 = _M[offset + 6];\n const M_offset_7 = _M[offset + 7];\n const M_offset_8 = _M[offset + 8];\n const M_offset_9 = _M[offset + 9];\n const M_offset_10 = _M[offset + 10];\n const M_offset_11 = _M[offset + 11];\n const M_offset_12 = _M[offset + 12];\n const M_offset_13 = _M[offset + 13];\n const M_offset_14 = _M[offset + 14];\n const M_offset_15 = _M[offset + 15];\n\n // Working varialbes\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n\n // Computation\n a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n a = II(a, b, c, d, M_offset_0, 6, T[48]);\n d = II(d, a, b, c, M_offset_7, 10, T[49]);\n c = II(c, d, a, b, M_offset_14, 15, T[50]);\n b = II(b, c, d, a, M_offset_5, 21, T[51]);\n a = II(a, b, c, d, M_offset_12, 6, T[52]);\n d = II(d, a, b, c, M_offset_3, 10, T[53]);\n c = II(c, d, a, b, M_offset_10, 15, T[54]);\n b = II(b, c, d, a, M_offset_1, 21, T[55]);\n a = II(a, b, c, d, M_offset_8, 6, T[56]);\n d = II(d, a, b, c, M_offset_15, 10, T[57]);\n c = II(c, d, a, b, M_offset_6, 15, T[58]);\n b = II(b, c, d, a, M_offset_13, 21, T[59]);\n a = II(a, b, c, d, M_offset_4, 6, T[60]);\n d = II(d, a, b, c, M_offset_11, 10, T[61]);\n c = II(c, d, a, b, M_offset_2, 15, T[62]);\n b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n // Intermediate hash value\n H[0] = (H[0] + a) | 0;\n H[1] = (H[1] + b) | 0;\n H[2] = (H[2] + c) | 0;\n H[3] = (H[3] + d) | 0;\n }\n /* eslint-ensable no-param-reassign */\n\n _doFinalize() {\n // Shortcuts\n const data = this._data;\n const dataWords = data.words;\n\n const nBitsTotal = this._nDataBytes * 8;\n const nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - (nBitsLeft % 32));\n\n const nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n const nBitsTotalL = nBitsTotal;\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff)\n | (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n );\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff)\n | (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n );\n\n data.sigBytes = (dataWords.length + 1) * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n const hash = this._hash;\n const H = hash.words;\n\n // Swap endian\n for (let i = 0; i < 4; i += 1) {\n // Shortcut\n const H_i = H[i];\n\n H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff)\n | (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n }\n\n // Return final computed hash\n return hash;\n }\n\n clone() {\n const clone = super.clone.call(this);\n clone._hash = this._hash.clone();\n\n return clone;\n }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.MD5('message');\n * var hash = CryptoJS.MD5(wordArray);\n */\nexport const MD5 = Hasher._createHelper(MD5Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacMD5(message, key);\n */\nexport const HmacMD5 = Hasher._createHmacHelper(MD5Algo);\n","/* eslint-disable no-use-before-define */\n\n/**\n * Base class for inheritance.\n */\nexport class Base {\n /**\n * Extends this object and runs the init method.\n * Arguments to create() will be passed to init().\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var instance = MyType.create();\n */\n static create(...args) {\n return new this(...args);\n }\n\n /**\n * Copies properties into this object.\n *\n * @param {Object} properties The properties to mix in.\n *\n * @example\n *\n * MyType.mixIn({\n * field: 'value'\n * });\n */\n mixIn(properties) {\n return Object.assign(this, properties);\n }\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = instance.clone();\n */\n clone() {\n const clone = new this.constructor();\n Object.assign(clone, this);\n return clone;\n }\n}\n\n/**\n * An array of 32-bit words.\n *\n * @property {Array} words The array of 32-bit words.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\nexport class WordArray extends Base {\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of 32-bit words.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.create();\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n */\n constructor(words = [], sigBytes = words.length * 4) {\n super();\n\n let typedArray = words;\n // Convert buffers to uint8\n if (typedArray instanceof ArrayBuffer) {\n typedArray = new Uint8Array(typedArray);\n }\n\n // Convert other array views to uint8\n if (\n typedArray instanceof Int8Array\n || typedArray instanceof Uint8ClampedArray\n || typedArray instanceof Int16Array\n || typedArray instanceof Uint16Array\n || typedArray instanceof Int32Array\n || typedArray instanceof Uint32Array\n || typedArray instanceof Float32Array\n || typedArray instanceof Float64Array\n ) {\n typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n }\n\n // Handle Uint8Array\n if (typedArray instanceof Uint8Array) {\n // Shortcut\n const typedArrayByteLength = typedArray.byteLength;\n\n // Extract bytes\n const _words = [];\n for (let i = 0; i < typedArrayByteLength; i += 1) {\n _words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n }\n\n // Initialize this word array\n this.words = _words;\n this.sigBytes = typedArrayByteLength;\n } else {\n // Else call normal init\n this.words = words;\n this.sigBytes = sigBytes;\n }\n }\n\n /**\n * Creates a word array filled with random bytes.\n *\n * @param {number} nBytes The number of random bytes to generate.\n *\n * @return {WordArray} The random word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.random(16);\n */\n static random(nBytes) {\n const words = [];\n\n const r = (m_w) => {\n let _m_w = m_w;\n let _m_z = 0x3ade68b1;\n const mask = 0xffffffff;\n\n return () => {\n _m_z = (0x9069 * (_m_z & 0xFFFF) + (_m_z >> 0x10)) & mask;\n _m_w = (0x4650 * (_m_w & 0xFFFF) + (_m_w >> 0x10)) & mask;\n let result = ((_m_z << 0x10) + _m_w) & mask;\n result /= 0x100000000;\n result += 0.5;\n return result * (Math.random() > 0.5 ? 1 : -1);\n };\n };\n\n for (let i = 0, rcache; i < nBytes; i += 4) {\n const _r = r((rcache || Math.random()) * 0x100000000);\n\n rcache = _r() * 0x3ade67b7;\n words.push((_r() * 0x100000000) | 0);\n }\n\n return new WordArray(words, nBytes);\n }\n\n /**\n * Converts this word array to a string.\n *\n * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n *\n * @return {string} The stringified word array.\n *\n * @example\n *\n * var string = wordArray + '';\n * var string = wordArray.toString();\n * var string = wordArray.toString(CryptoJS.enc.Utf8);\n */\n toString(encoder = Hex) {\n return encoder.stringify(this);\n }\n\n /**\n * Concatenates a word array to this word array.\n *\n * @param {WordArray} wordArray The word array to append.\n *\n * @return {WordArray} This word array.\n *\n * @example\n *\n * wordArray1.concat(wordArray2);\n */\n concat(wordArray) {\n // Shortcuts\n const thisWords = this.words;\n const thatWords = wordArray.words;\n const thisSigBytes = this.sigBytes;\n const thatSigBytes = wordArray.sigBytes;\n\n // Clamp excess bits\n this.clamp();\n\n // Concat\n if (thisSigBytes % 4) {\n // Copy one byte at a time\n for (let i = 0; i < thatSigBytes; i += 1) {\n const thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n }\n } else {\n // Copy one word at a time\n for (let i = 0; i < thatSigBytes; i += 4) {\n thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n }\n }\n this.sigBytes += thatSigBytes;\n\n // Chainable\n return this;\n }\n\n /**\n * Removes insignificant bits.\n *\n * @example\n *\n * wordArray.clamp();\n */\n clamp() {\n // Shortcuts\n const { words, sigBytes } = this;\n\n // Clamp\n words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n words.length = Math.ceil(sigBytes / 4);\n }\n\n /**\n * Creates a copy of this word array.\n *\n * @return {WordArray} The clone.\n *\n * @example\n *\n * var clone = wordArray.clone();\n */\n clone() {\n const clone = super.clone.call(this);\n clone.words = this.words.slice(0);\n\n return clone;\n }\n}\n\n/**\n * Hex encoding strategy.\n */\nexport const Hex = {\n /**\n * Converts a word array to a hex string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The hex string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n */\n stringify(wordArray) {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n\n // Convert\n const hexChars = [];\n for (let i = 0; i < sigBytes; i += 1) {\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n\n return hexChars.join('');\n },\n\n /**\n * Converts a hex string to a word array.\n *\n * @param {string} hexStr The hex string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n */\n parse(hexStr) {\n // Shortcut\n const hexStrLength = hexStr.length;\n\n // Convert\n const words = [];\n for (let i = 0; i < hexStrLength; i += 2) {\n words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n }\n\n return new WordArray(words, hexStrLength / 2);\n },\n};\n\n/**\n * Latin1 encoding strategy.\n */\nexport const Latin1 = {\n /**\n * Converts a word array to a Latin1 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Latin1 string.\n *\n * @static\n *\n * @example\n *\n * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n */\n stringify(wordArray) {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n\n // Convert\n const latin1Chars = [];\n for (let i = 0; i < sigBytes; i += 1) {\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n latin1Chars.push(String.fromCharCode(bite));\n }\n\n return latin1Chars.join('');\n },\n\n /**\n * Converts a Latin1 string to a word array.\n *\n * @param {string} latin1Str The Latin1 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n */\n parse(latin1Str) {\n // Shortcut\n const latin1StrLength = latin1Str.length;\n\n // Convert\n const words = [];\n for (let i = 0; i < latin1StrLength; i += 1) {\n words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n }\n\n return new WordArray(words, latin1StrLength);\n },\n};\n\n/**\n * UTF-8 encoding strategy.\n */\nexport const Utf8 = {\n /**\n * Converts a word array to a UTF-8 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-8 string.\n *\n * @static\n *\n * @example\n *\n * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n */\n stringify(wordArray) {\n try {\n return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n } catch (e) {\n throw new Error('Malformed UTF-8 data');\n }\n },\n\n /**\n * Converts a UTF-8 string to a word array.\n *\n * @param {string} utf8Str The UTF-8 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n */\n parse(utf8Str) {\n return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n },\n};\n\n/**\n * Abstract buffered block algorithm template.\n *\n * The property blockSize must be implemented in a concrete subtype.\n *\n * @property {number} _minBufferSize\n *\n * The number of blocks that should be kept unprocessed in the buffer. Default: 0\n */\nexport class BufferedBlockAlgorithm extends Base {\n constructor() {\n super();\n this._minBufferSize = 0;\n }\n\n /**\n * Resets this block algorithm's data buffer to its initial state.\n *\n * @example\n *\n * bufferedBlockAlgorithm.reset();\n */\n reset() {\n // Initial values\n this._data = new WordArray();\n this._nDataBytes = 0;\n }\n\n /**\n * Adds new data to this block algorithm's buffer.\n *\n * @param {WordArray|string} data\n *\n * The data to append. Strings are converted to a WordArray using UTF-8.\n *\n * @example\n *\n * bufferedBlockAlgorithm._append('data');\n * bufferedBlockAlgorithm._append(wordArray);\n */\n _append(data) {\n let m_data = data;\n\n // Convert string to WordArray, else assume WordArray already\n if (typeof m_data === 'string') {\n m_data = Utf8.parse(m_data);\n }\n\n // Append\n this._data.concat(m_data);\n this._nDataBytes += m_data.sigBytes;\n }\n\n /**\n * Processes available data blocks.\n *\n * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n *\n * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n *\n * @return {WordArray} The processed data.\n *\n * @example\n *\n * var processedData = bufferedBlockAlgorithm._process();\n * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n */\n _process(doFlush) {\n let processedWords;\n\n // Shortcuts\n const { _data: data, blockSize } = this;\n const dataWords = data.words;\n const dataSigBytes = data.sigBytes;\n const blockSizeBytes = blockSize * 4;\n\n // Count blocks ready\n let nBlocksReady = dataSigBytes / blockSizeBytes;\n if (doFlush) {\n // Round up to include partial blocks\n nBlocksReady = Math.ceil(nBlocksReady);\n } else {\n // Round down to include only full blocks,\n // less the number of blocks that must remain in the buffer\n nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n }\n\n // Count words ready\n const nWordsReady = nBlocksReady * blockSize;\n\n // Count bytes ready\n const nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n // Process blocks\n if (nWordsReady) {\n for (let offset = 0; offset < nWordsReady; offset += blockSize) {\n // Perform concrete-algorithm logic\n this._doProcessBlock(dataWords, offset);\n }\n\n // Remove processed words\n processedWords = dataWords.splice(0, nWordsReady);\n data.sigBytes -= nBytesReady;\n }\n\n // Return processed words\n return new WordArray(processedWords, nBytesReady);\n }\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = bufferedBlockAlgorithm.clone();\n */\n clone() {\n const clone = super.clone.call(this);\n clone._data = this._data.clone();\n\n return clone;\n }\n}\n\n/**\n * Abstract hasher template.\n *\n * @property {number} blockSize\n *\n * The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n */\nexport class Hasher extends BufferedBlockAlgorithm {\n constructor(cfg) {\n super();\n\n this.blockSize = 512 / 32;\n\n /**\n * Configuration options.\n */\n this.cfg = Object.assign(new Base(), cfg);\n\n // Set initial values\n this.reset();\n }\n\n /**\n * Creates a shortcut function to a hasher's object interface.\n *\n * @param {Hasher} SubHasher The hasher to create a helper for.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n */\n static _createHelper(SubHasher) {\n return (message, cfg) => new SubHasher(cfg).finalize(message);\n }\n\n /**\n * Creates a shortcut function to the HMAC's object interface.\n *\n * @param {Hasher} SubHasher The hasher to use in this HMAC helper.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n */\n static _createHmacHelper(SubHasher) {\n return (message, key) => new HMAC(SubHasher, key).finalize(message);\n }\n\n /**\n * Resets this hasher to its initial state.\n *\n * @example\n *\n * hasher.reset();\n */\n reset() {\n // Reset data buffer\n super.reset.call(this);\n\n // Perform concrete-hasher logic\n this._doReset();\n }\n\n /**\n * Updates this hasher with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {Hasher} This hasher.\n *\n * @example\n *\n * hasher.update('message');\n * hasher.update(wordArray);\n */\n update(messageUpdate) {\n // Append\n this._append(messageUpdate);\n\n // Update the hash\n this._process();\n\n // Chainable\n return this;\n }\n\n /**\n * Finalizes the hash computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The hash.\n *\n * @example\n *\n * var hash = hasher.finalize();\n * var hash = hasher.finalize('message');\n * var hash = hasher.finalize(wordArray);\n */\n finalize(messageUpdate) {\n // Final message update\n if (messageUpdate) {\n this._append(messageUpdate);\n }\n\n // Perform concrete-hasher logic\n const hash = this._doFinalize();\n\n return hash;\n }\n}\n\n/**\n * HMAC algorithm.\n */\nexport class HMAC extends Base {\n /**\n * Initializes a newly created HMAC.\n *\n * @param {Hasher} SubHasher The hash algorithm to use.\n * @param {WordArray|string} key The secret key.\n *\n * @example\n *\n * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n */\n constructor(SubHasher, key) {\n super();\n\n const hasher = new SubHasher();\n this._hasher = hasher;\n\n // Convert string to WordArray, else assume WordArray already\n let _key = key;\n if (typeof _key === 'string') {\n _key = Utf8.parse(_key);\n }\n\n // Shortcuts\n const hasherBlockSize = hasher.blockSize;\n const hasherBlockSizeBytes = hasherBlockSize * 4;\n\n // Allow arbitrary length keys\n if (_key.sigBytes > hasherBlockSizeBytes) {\n _key = hasher.finalize(key);\n }\n\n // Clamp excess bits\n _key.clamp();\n\n // Clone key for inner and outer pads\n const oKey = _key.clone();\n this._oKey = oKey;\n const iKey = _key.clone();\n this._iKey = iKey;\n\n // Shortcuts\n const oKeyWords = oKey.words;\n const iKeyWords = iKey.words;\n\n // XOR keys with pad constants\n for (let i = 0; i < hasherBlockSize; i += 1) {\n oKeyWords[i] ^= 0x5c5c5c5c;\n iKeyWords[i] ^= 0x36363636;\n }\n oKey.sigBytes = hasherBlockSizeBytes;\n iKey.sigBytes = hasherBlockSizeBytes;\n\n // Set initial values\n this.reset();\n }\n\n /**\n * Resets this HMAC to its initial state.\n *\n * @example\n *\n * hmacHasher.reset();\n */\n reset() {\n // Shortcut\n const hasher = this._hasher;\n\n // Reset\n hasher.reset();\n hasher.update(this._iKey);\n }\n\n /**\n * Updates this HMAC with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {HMAC} This HMAC instance.\n *\n * @example\n *\n * hmacHasher.update('message');\n * hmacHasher.update(wordArray);\n */\n update(messageUpdate) {\n this._hasher.update(messageUpdate);\n\n // Chainable\n return this;\n }\n\n /**\n * Finalizes the HMAC computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The HMAC.\n *\n * @example\n *\n * var hmac = hmacHasher.finalize();\n * var hmac = hmacHasher.finalize('message');\n * var hmac = hmacHasher.finalize(wordArray);\n */\n finalize(messageUpdate) {\n // Shortcut\n const hasher = this._hasher;\n\n // Compute HMAC\n const innerHash = hasher.finalize(messageUpdate);\n hasher.reset();\n const hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n return hmac;\n }\n}\n","import {\n WordArray,\n} from './core.js';\n\nconst parseLoop = (base64Str, base64StrLength, reverseMap) => {\n const words = [];\n let nBytes = 0;\n for (let i = 0; i < base64StrLength; i += 1) {\n if (i % 4) {\n const bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n const bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n const bitsCombined = bits1 | bits2;\n words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n nBytes += 1;\n }\n }\n return WordArray.create(words, nBytes);\n};\n\n/**\n * Base64 encoding strategy.\n */\nexport const Base64 = {\n /**\n * Converts a word array to a Base64 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Base64 string.\n *\n * @static\n *\n * @example\n *\n * const base64String = CryptoJS.enc.Base64.stringify(wordArray);\n */\n stringify(wordArray) {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n const map = this._map;\n\n // Clamp excess bits\n wordArray.clamp();\n\n // Convert\n const base64Chars = [];\n for (let i = 0; i < sigBytes; i += 3) {\n const byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n const byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n const byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n const triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n for (let j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j += 1) {\n base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n }\n }\n\n // Add padding\n const paddingChar = map.charAt(64);\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n\n return base64Chars.join('');\n },\n\n /**\n * Converts a Base64 string to a word array.\n *\n * @param {string} base64Str The Base64 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * const wordArray = CryptoJS.enc.Base64.parse(base64String);\n */\n parse(base64Str) {\n // Shortcuts\n let base64StrLength = base64Str.length;\n const map = this._map;\n let reverseMap = this._reverseMap;\n\n if (!reverseMap) {\n this._reverseMap = [];\n reverseMap = this._reverseMap;\n for (let j = 0; j < map.length; j += 1) {\n reverseMap[map.charCodeAt(j)] = j;\n }\n }\n\n // Ignore padding\n const paddingChar = map.charAt(64);\n if (paddingChar) {\n const paddingIndex = base64Str.indexOf(paddingChar);\n if (paddingIndex !== -1) {\n base64StrLength = paddingIndex;\n }\n }\n\n // Convert\n return parseLoop(base64Str, base64StrLength, reverseMap);\n },\n\n _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n};\n","import {\n Base,\n WordArray,\n} from './core.js';\nimport { MD5Algo } from './md5.js';\n\n/**\n * This key derivation function is meant to conform with EVP_BytesToKey.\n * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n */\nexport class EvpKDFAlgo extends Base {\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * const kdf = CryptoJS.algo.EvpKDF.create();\n * const kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n * const kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n */\n constructor(cfg) {\n super();\n\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n this.cfg = Object.assign(\n new Base(),\n {\n keySize: 128 / 32,\n hasher: MD5Algo,\n iterations: 1,\n },\n cfg,\n );\n }\n\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * const key = kdf.compute(password, salt);\n */\n compute(password, salt) {\n let block;\n\n // Shortcut\n const { cfg } = this;\n\n // Init hasher\n const hasher = cfg.hasher.create();\n\n // Initial values\n const derivedKey = WordArray.create();\n\n // Shortcuts\n const derivedKeyWords = derivedKey.words;\n const { keySize, iterations } = cfg;\n\n // Generate key\n while (derivedKeyWords.length < keySize) {\n if (block) {\n hasher.update(block);\n }\n block = hasher.update(password).finalize(salt);\n hasher.reset();\n\n // Iterations\n for (let i = 1; i < iterations; i += 1) {\n block = hasher.finalize(block);\n hasher.reset();\n }\n\n derivedKey.concat(block);\n }\n derivedKey.sigBytes = keySize * 4;\n\n return derivedKey;\n }\n}\n\n/**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.EvpKDF(password, salt);\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n */\nexport const EvpKDF = (password, salt, cfg) => EvpKDFAlgo.create(cfg).compute(password, salt);\n","/* eslint-disable no-use-before-define */\n\nimport {\n Base,\n WordArray,\n BufferedBlockAlgorithm,\n} from './core.js';\nimport { Base64 } from './enc-base64.js';\nimport { EvpKDFAlgo } from './evpkdf.js';\n\n/**\n * Abstract base cipher template.\n *\n * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n */\nexport class Cipher extends BufferedBlockAlgorithm {\n /**\n * Initializes a newly created cipher.\n *\n * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @example\n *\n * const cipher = CryptoJS.algo.AES.create(\n * CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }\n * );\n */\n constructor(xformMode, key, cfg) {\n super();\n\n /**\n * Configuration options.\n *\n * @property {WordArray} iv The IV to use for this operation.\n */\n this.cfg = Object.assign(new Base(), cfg);\n\n // Store transform mode and key\n this._xformMode = xformMode;\n this._key = key;\n\n // Set initial values\n this.reset();\n }\n\n /**\n * Creates this cipher in encryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * const cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n */\n static createEncryptor(key, cfg) {\n return this.create(this._ENC_XFORM_MODE, key, cfg);\n }\n\n /**\n * Creates this cipher in decryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * const cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n */\n static createDecryptor(key, cfg) {\n return this.create(this._DEC_XFORM_MODE, key, cfg);\n }\n\n /**\n * Creates shortcut functions to a cipher's object interface.\n *\n * @param {Cipher} cipher The cipher to create a helper for.\n *\n * @return {Object} An object with encrypt and decrypt shortcut functions.\n *\n * @static\n *\n * @example\n *\n * const AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n */\n static _createHelper(SubCipher) {\n const selectCipherStrategy = (key) => {\n if (typeof key === 'string') {\n return PasswordBasedCipher;\n }\n return SerializableCipher;\n };\n\n return {\n encrypt(message, key, cfg) {\n return selectCipherStrategy(key).encrypt(SubCipher, message, key, cfg);\n },\n\n decrypt(ciphertext, key, cfg) {\n return selectCipherStrategy(key).decrypt(SubCipher, ciphertext, key, cfg);\n },\n };\n }\n\n /**\n * Resets this cipher to its initial state.\n *\n * @example\n *\n * cipher.reset();\n */\n reset() {\n // Reset data buffer\n super.reset.call(this);\n\n // Perform concrete-cipher logic\n this._doReset();\n }\n\n /**\n * Adds data to be encrypted or decrypted.\n *\n * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n *\n * @return {WordArray} The data after processing.\n *\n * @example\n *\n * const encrypted = cipher.process('data');\n * const encrypted = cipher.process(wordArray);\n */\n process(dataUpdate) {\n // Append\n this._append(dataUpdate);\n\n // Process available blocks\n return this._process();\n }\n\n /**\n * Finalizes the encryption or decryption process.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n *\n * @return {WordArray} The data after final processing.\n *\n * @example\n *\n * const encrypted = cipher.finalize();\n * const encrypted = cipher.finalize('data');\n * const encrypted = cipher.finalize(wordArray);\n */\n finalize(dataUpdate) {\n // Final data update\n if (dataUpdate) {\n this._append(dataUpdate);\n }\n\n // Perform concrete-cipher logic\n const finalProcessedData = this._doFinalize();\n\n return finalProcessedData;\n }\n}\nCipher._ENC_XFORM_MODE = 1;\nCipher._DEC_XFORM_MODE = 2;\nCipher.keySize = 128 / 32;\nCipher.ivSize = 128 / 32;\n\n/**\n * Abstract base stream cipher template.\n *\n * @property {number} blockSize\n *\n * The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n */\nexport class StreamCipher extends Cipher {\n constructor(...args) {\n super(...args);\n\n this.blockSize = 1;\n }\n\n _doFinalize() {\n // Process partial blocks\n const finalProcessedBlocks = this._process(!!'flush');\n\n return finalProcessedBlocks;\n }\n}\n\n/**\n * Abstract base block cipher mode template.\n */\nexport class BlockCipherMode extends Base {\n /**\n * Initializes a newly created mode.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @example\n *\n * const mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n */\n constructor(cipher, iv) {\n super();\n\n this._cipher = cipher;\n this._iv = iv;\n }\n\n /**\n * Creates this mode for encryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * const mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n */\n static createEncryptor(cipher, iv) {\n return this.Encryptor.create(cipher, iv);\n }\n\n /**\n * Creates this mode for decryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * const mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n */\n static createDecryptor(cipher, iv) {\n return this.Decryptor.create(cipher, iv);\n }\n}\n\nfunction xorBlock(words, offset, blockSize) {\n const _words = words;\n let block;\n\n // Shortcut\n const iv = this._iv;\n\n // Choose mixing block\n if (iv) {\n block = iv;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n } else {\n block = this._prevBlock;\n }\n\n // XOR blocks\n for (let i = 0; i < blockSize; i += 1) {\n _words[offset + i] ^= block[i];\n }\n}\n\n/**\n * Cipher Block Chaining mode.\n */\n\n/**\n * Abstract base CBC mode.\n */\nexport class CBC extends BlockCipherMode {\n}\n/**\n * CBC encryptor.\n */\nCBC.Encryptor = class extends CBC {\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock(words, offset) {\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n\n // XOR and encrypt\n xorBlock.call(this, words, offset, blockSize);\n cipher.encryptBlock(words, offset);\n\n // Remember this block to use with next block\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n};\n/**\n * CBC decryptor.\n */\nCBC.Decryptor = class extends CBC {\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock(words, offset) {\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n\n // Remember this block to use with next block\n const thisBlock = words.slice(offset, offset + blockSize);\n\n // Decrypt and XOR\n cipher.decryptBlock(words, offset);\n xorBlock.call(this, words, offset, blockSize);\n\n // This block becomes the previous block\n this._prevBlock = thisBlock;\n }\n};\n\n/**\n * PKCS #5/7 padding strategy.\n */\nexport const Pkcs7 = {\n /**\n * Pads data using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to pad.\n * @param {number} blockSize The multiple that the data should be padded to.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n */\n pad(data, blockSize) {\n // Shortcut\n const blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n const nPaddingBytes = blockSizeBytes - (data.sigBytes % blockSizeBytes);\n\n // Create padding word\n const paddingWord = (nPaddingBytes << 24)\n | (nPaddingBytes << 16)\n | (nPaddingBytes << 8)\n | nPaddingBytes;\n\n // Create padding\n const paddingWords = [];\n for (let i = 0; i < nPaddingBytes; i += 4) {\n paddingWords.push(paddingWord);\n }\n const padding = WordArray.create(paddingWords, nPaddingBytes);\n\n // Add padding\n data.concat(padding);\n },\n\n /**\n * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to unpad.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.unpad(wordArray);\n */\n unpad(data) {\n const _data = data;\n\n // Get number of padding bytes from last byte\n const nPaddingBytes = _data.words[(_data.sigBytes - 1) >>> 2] & 0xff;\n\n // Remove padding\n _data.sigBytes -= nPaddingBytes;\n },\n};\n\n/**\n * Abstract base block cipher template.\n *\n * @property {number} blockSize\n *\n * The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n */\nexport class BlockCipher extends Cipher {\n constructor(xformMode, key, cfg) {\n /**\n * Configuration options.\n *\n * @property {Mode} mode The block mode to use. Default: CBC\n * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n */\n super(xformMode, key, Object.assign(\n {\n mode: CBC,\n padding: Pkcs7,\n },\n cfg,\n ));\n\n this.blockSize = 128 / 32;\n }\n\n reset() {\n let modeCreator;\n\n // Reset cipher\n super.reset.call(this);\n\n // Shortcuts\n const { cfg } = this;\n const { iv, mode } = cfg;\n\n // Reset block mode\n if (this._xformMode === this.constructor._ENC_XFORM_MODE) {\n modeCreator = mode.createEncryptor;\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n modeCreator = mode.createDecryptor;\n // Keep at least one block in the buffer for unpadding\n this._minBufferSize = 1;\n }\n\n this._mode = modeCreator.call(mode, this, iv && iv.words);\n this._mode.__creator = modeCreator;\n }\n\n _doProcessBlock(words, offset) {\n this._mode.processBlock(words, offset);\n }\n\n _doFinalize() {\n let finalProcessedBlocks;\n\n // Shortcut\n const { padding } = this.cfg;\n\n // Finalize\n if (this._xformMode === this.constructor._ENC_XFORM_MODE) {\n // Pad data\n padding.pad(this._data, this.blockSize);\n\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n\n // Unpad data\n padding.unpad(finalProcessedBlocks);\n }\n\n return finalProcessedBlocks;\n }\n}\n\n/**\n * A collection of cipher parameters.\n *\n * @property {WordArray} ciphertext The raw ciphertext.\n * @property {WordArray} key The key to this ciphertext.\n * @property {WordArray} iv The IV used in the ciphering operation.\n * @property {WordArray} salt The salt used with a key derivation function.\n * @property {Cipher} algorithm The cipher algorithm.\n * @property {Mode} mode The block mode used in the ciphering operation.\n * @property {Padding} padding The padding scheme used in the ciphering operation.\n * @property {number} blockSize The block size of the cipher.\n * @property {Format} formatter\n * The default formatting strategy to convert this cipher params object to a string.\n */\nexport class CipherParams extends Base {\n /**\n * Initializes a newly created cipher params object.\n *\n * @param {Object} cipherParams An object with any of the possible cipher parameters.\n *\n * @example\n *\n * var cipherParams = CryptoJS.lib.CipherParams.create({\n * ciphertext: ciphertextWordArray,\n * key: keyWordArray,\n * iv: ivWordArray,\n * salt: saltWordArray,\n * algorithm: CryptoJS.algo.AES,\n * mode: CryptoJS.mode.CBC,\n * padding: CryptoJS.pad.PKCS7,\n * blockSize: 4,\n * formatter: CryptoJS.format.OpenSSL\n * });\n */\n constructor(cipherParams) {\n super();\n\n this.mixIn(cipherParams);\n }\n\n /**\n * Converts this cipher params object to a string.\n *\n * @param {Format} formatter (Optional) The formatting strategy to use.\n *\n * @return {string} The stringified cipher params.\n *\n * @throws Error If neither the formatter nor the default formatter is set.\n *\n * @example\n *\n * var string = cipherParams + '';\n * var string = cipherParams.toString();\n * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n */\n toString(formatter) {\n return (formatter || this.formatter).stringify(this);\n }\n}\n\n/**\n * OpenSSL formatting strategy.\n */\nexport const OpenSSLFormatter = {\n /**\n * Converts a cipher params object to an OpenSSL-compatible string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The OpenSSL-compatible string.\n *\n * @static\n *\n * @example\n *\n * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n */\n stringify(cipherParams) {\n let wordArray;\n\n // Shortcuts\n const { ciphertext, salt } = cipherParams;\n\n // Format\n if (salt) {\n wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n } else {\n wordArray = ciphertext;\n }\n\n return wordArray.toString(Base64);\n },\n\n /**\n * Converts an OpenSSL-compatible string to a cipher params object.\n *\n * @param {string} openSSLStr The OpenSSL-compatible string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n */\n parse(openSSLStr) {\n let salt;\n\n // Parse base64\n const ciphertext = Base64.parse(openSSLStr);\n\n // Shortcut\n const ciphertextWords = ciphertext.words;\n\n // Test for salt\n if (ciphertextWords[0] === 0x53616c74 && ciphertextWords[1] === 0x65645f5f) {\n // Extract salt\n salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n // Remove salt from ciphertext\n ciphertextWords.splice(0, 4);\n ciphertext.sigBytes -= 16;\n }\n\n return CipherParams.create({ ciphertext, salt });\n },\n};\n\n/**\n * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n */\nexport class SerializableCipher extends Base {\n /**\n * Encrypts a message.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * .encrypt(CryptoJS.algo.AES, message, key);\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * .encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * .encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n static encrypt(cipher, message, key, cfg) {\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Encrypt\n const encryptor = cipher.createEncryptor(key, _cfg);\n const ciphertext = encryptor.finalize(message);\n\n // Shortcut\n const cipherCfg = encryptor.cfg;\n\n // Create and return serializable cipher params\n return CipherParams.create({\n ciphertext,\n key,\n iv: cipherCfg.iv,\n algorithm: cipher,\n mode: cipherCfg.mode,\n padding: cipherCfg.padding,\n blockSize: encryptor.blockSize,\n formatter: _cfg.format,\n });\n }\n\n /**\n * Decrypts serialized ciphertext.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.SerializableCipher\n * .decrypt(CryptoJS.algo.AES, formattedCiphertext, key,\n * { iv: iv, format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.SerializableCipher\n * .decrypt(CryptoJS.algo.AES, ciphertextParams, key,\n * { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n static decrypt(cipher, ciphertext, key, cfg) {\n let _ciphertext = ciphertext;\n\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Convert string to CipherParams\n _ciphertext = this._parse(_ciphertext, _cfg.format);\n\n // Decrypt\n const plaintext = cipher.createDecryptor(key, _cfg).finalize(_ciphertext.ciphertext);\n\n return plaintext;\n }\n\n /**\n * Converts serialized ciphertext to CipherParams,\n * else assumed CipherParams already and returns ciphertext unchanged.\n *\n * @param {CipherParams|string} ciphertext The ciphertext.\n * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n *\n * @return {CipherParams} The unserialized ciphertext.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * ._parse(ciphertextStringOrParams, format);\n */\n static _parse(ciphertext, format) {\n if (typeof ciphertext === 'string') {\n return format.parse(ciphertext, this);\n }\n return ciphertext;\n }\n}\n/**\n * Configuration options.\n *\n * @property {Formatter} format\n *\n * The formatting strategy to convert cipher param objects to and from a string.\n * Default: OpenSSL\n */\nSerializableCipher.cfg = Object.assign(\n new Base(),\n { format: OpenSSLFormatter },\n);\n\n/**\n * OpenSSL key derivation function.\n */\nexport const OpenSSLKdf = {\n /**\n * Derives a key and IV from a password.\n *\n * @param {string} password The password to derive from.\n * @param {number} keySize The size in words of the key to generate.\n * @param {number} ivSize The size in words of the IV to generate.\n * @param {WordArray|string} salt\n * (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n *\n * @return {CipherParams} A cipher params object with the key, IV, and salt.\n *\n * @static\n *\n * @example\n *\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n */\n execute(password, keySize, ivSize, salt) {\n let _salt = salt;\n\n // Generate random salt\n if (!_salt) {\n _salt = WordArray.random(64 / 8);\n }\n\n // Derive key and IV\n const key = EvpKDFAlgo.create({ keySize: keySize + ivSize }).compute(password, _salt);\n\n // Separate key and IV\n const iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n key.sigBytes = keySize * 4;\n\n // Return params\n return CipherParams.create({ key, iv, salt: _salt });\n },\n};\n\n/**\n * A serializable cipher wrapper that derives the key from a password,\n * and returns ciphertext as a serializable cipher params object.\n */\nexport class PasswordBasedCipher extends SerializableCipher {\n /**\n * Encrypts a message using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher\n * .encrypt(CryptoJS.algo.AES, message, 'password');\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher\n * .encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n */\n static encrypt(cipher, message, password, cfg) {\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Derive key and other params\n const derivedParams = _cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n // Add IV to config\n _cfg.iv = derivedParams.iv;\n\n // Encrypt\n const ciphertext = SerializableCipher.encrypt\n .call(this, cipher, message, derivedParams.key, _cfg);\n\n // Mix in derived params\n ciphertext.mixIn(derivedParams);\n\n return ciphertext;\n }\n\n /**\n * Decrypts serialized ciphertext using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.PasswordBasedCipher\n * .decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password',\n * { format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.PasswordBasedCipher\n * .decrypt(CryptoJS.algo.AES, ciphertextParams, 'password',\n * { format: CryptoJS.format.OpenSSL });\n */\n static decrypt(cipher, ciphertext, password, cfg) {\n let _ciphertext = ciphertext;\n\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Convert string to CipherParams\n _ciphertext = this._parse(_ciphertext, _cfg.format);\n\n // Derive key and other params\n const derivedParams = _cfg.kdf\n .execute(password, cipher.keySize, cipher.ivSize, _ciphertext.salt);\n\n // Add IV to config\n _cfg.iv = derivedParams.iv;\n\n // Decrypt\n const plaintext = SerializableCipher.decrypt\n .call(this, cipher, _ciphertext, derivedParams.key, _cfg);\n\n return plaintext;\n }\n}\n/**\n * Configuration options.\n *\n * @property {KDF} kdf\n * The key derivation function to use to generate a key and IV from a password.\n * Default: OpenSSL\n */\nPasswordBasedCipher.cfg = Object.assign(SerializableCipher.cfg, { kdf: OpenSSLKdf });\n","import {\n BlockCipher,\n} from './cipher-core.js';\n\n// Lookup tables\nconst _SBOX = [];\nconst INV_SBOX = [];\nconst _SUB_MIX_0 = [];\nconst _SUB_MIX_1 = [];\nconst _SUB_MIX_2 = [];\nconst _SUB_MIX_3 = [];\nconst INV_SUB_MIX_0 = [];\nconst INV_SUB_MIX_1 = [];\nconst INV_SUB_MIX_2 = [];\nconst INV_SUB_MIX_3 = [];\n\n// Compute lookup tables\n\n// Compute double table\nconst d = [];\nfor (let i = 0; i < 256; i += 1) {\n if (i < 128) {\n d[i] = i << 1;\n } else {\n d[i] = (i << 1) ^ 0x11b;\n }\n}\n\n// Walk GF(2^8)\nlet x = 0;\nlet xi = 0;\nfor (let i = 0; i < 256; i += 1) {\n // Compute sbox\n let sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n _SBOX[x] = sx;\n INV_SBOX[sx] = x;\n\n // Compute multiplication\n const x2 = d[x];\n const x4 = d[x2];\n const x8 = d[x4];\n\n // Compute sub bytes, mix columns tables\n let t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n _SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n _SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n _SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n _SUB_MIX_3[x] = t;\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n INV_SUB_MIX_3[sx] = t;\n\n // Compute next counter\n if (!x) {\n xi = 1;\n x = xi;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n}\n\n// Precomputed Rcon lookup\nconst RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n/**\n * AES block cipher algorithm.\n */\nexport class AESAlgo extends BlockCipher {\n _doReset() {\n let t;\n\n // Skip reset of nRounds has been set before and key did not change\n if (this._nRounds && this._keyPriorReset === this._key) {\n return;\n }\n\n // Shortcuts\n this._keyPriorReset = this._key;\n const key = this._keyPriorReset;\n const keyWords = key.words;\n const keySize = key.sigBytes / 4;\n\n // Compute number of rounds\n this._nRounds = keySize + 6;\n const nRounds = this._nRounds;\n\n // Compute number of key schedule rows\n const ksRows = (nRounds + 1) * 4;\n\n // Compute key schedule\n this._keySchedule = [];\n const keySchedule = this._keySchedule;\n for (let ksRow = 0; ksRow < ksRows; ksRow += 1) {\n if (ksRow < keySize) {\n keySchedule[ksRow] = keyWords[ksRow];\n } else {\n t = keySchedule[ksRow - 1];\n\n if (!(ksRow % keySize)) {\n // Rot word\n t = (t << 8) | (t >>> 24);\n\n // Sub word\n t = (_SBOX[t >>> 24] << 24)\n | (_SBOX[(t >>> 16) & 0xff] << 16)\n | (_SBOX[(t >>> 8) & 0xff] << 8)\n | _SBOX[t & 0xff];\n\n // Mix Rcon\n t ^= RCON[(ksRow / keySize) | 0] << 24;\n } else if (keySize > 6 && ksRow % keySize === 4) {\n // Sub word\n t = (_SBOX[t >>> 24] << 24)\n | (_SBOX[(t >>> 16) & 0xff] << 16)\n | (_SBOX[(t >>> 8) & 0xff] << 8)\n | _SBOX[t & 0xff];\n }\n\n keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n }\n }\n\n // Compute inv key schedule\n this._invKeySchedule = [];\n const invKeySchedule = this._invKeySchedule;\n for (let invKsRow = 0; invKsRow < ksRows; invKsRow += 1) {\n const ksRow = ksRows - invKsRow;\n\n if (invKsRow % 4) {\n t = keySchedule[ksRow];\n } else {\n t = keySchedule[ksRow - 4];\n }\n\n if (invKsRow < 4 || ksRow <= 4) {\n invKeySchedule[invKsRow] = t;\n } else {\n invKeySchedule[invKsRow] = INV_SUB_MIX_0[_SBOX[t >>> 24]]\n ^ INV_SUB_MIX_1[_SBOX[(t >>> 16) & 0xff]]\n ^ INV_SUB_MIX_2[_SBOX[(t >>> 8) & 0xff]]\n ^ INV_SUB_MIX_3[_SBOX[t & 0xff]];\n }\n }\n }\n\n encryptBlock(M, offset) {\n this._doCryptBlock(\n M, offset, this._keySchedule, _SUB_MIX_0, _SUB_MIX_1, _SUB_MIX_2, _SUB_MIX_3, _SBOX,\n );\n }\n\n decryptBlock(M, offset) {\n const _M = M;\n\n // Swap 2nd and 4th rows\n let t = _M[offset + 1];\n _M[offset + 1] = _M[offset + 3];\n _M[offset + 3] = t;\n\n this._doCryptBlock(\n _M,\n offset,\n this._invKeySchedule,\n INV_SUB_MIX_0,\n INV_SUB_MIX_1,\n INV_SUB_MIX_2,\n INV_SUB_MIX_3,\n INV_SBOX,\n );\n\n // Inv swap 2nd and 4th rows\n t = _M[offset + 1];\n _M[offset + 1] = _M[offset + 3];\n _M[offset + 3] = t;\n }\n\n _doCryptBlock(M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n const _M = M;\n\n // Shortcut\n const nRounds = this._nRounds;\n\n // Get input, add round key\n let s0 = _M[offset] ^ keySchedule[0];\n let s1 = _M[offset + 1] ^ keySchedule[1];\n let s2 = _M[offset + 2] ^ keySchedule[2];\n let s3 = _M[offset + 3] ^ keySchedule[3];\n\n // Key schedule row counter\n let ksRow = 4;\n\n // Rounds\n for (let round = 1; round < nRounds; round += 1) {\n // Shift rows, sub bytes, mix columns, add round key\n const t0 = SUB_MIX_0[s0 >>> 24]\n ^ SUB_MIX_1[(s1 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s2 >>> 8) & 0xff]\n ^ SUB_MIX_3[s3 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n const t1 = SUB_MIX_0[s1 >>> 24]\n ^ SUB_MIX_1[(s2 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s3 >>> 8) & 0xff]\n ^ SUB_MIX_3[s0 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n const t2 = SUB_MIX_0[s2 >>> 24]\n ^ SUB_MIX_1[(s3 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s0 >>> 8) & 0xff]\n ^ SUB_MIX_3[s1 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n const t3 = SUB_MIX_0[s3 >>> 24]\n ^ SUB_MIX_1[(s0 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s1 >>> 8) & 0xff]\n ^ SUB_MIX_3[s2 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n\n // Update state\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n }\n\n // Shift rows, sub bytes, add round key\n const t0 = (\n (SBOX[s0 >>> 24] << 24)\n | (SBOX[(s1 >>> 16) & 0xff] << 16)\n | (SBOX[(s2 >>> 8) & 0xff] << 8)\n | SBOX[s3 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n const t1 = (\n (SBOX[s1 >>> 24] << 24)\n | (SBOX[(s2 >>> 16) & 0xff] << 16)\n | (SBOX[(s3 >>> 8) & 0xff] << 8)\n | SBOX[s0 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n const t2 = (\n (SBOX[s2 >>> 24] << 24)\n | (SBOX[(s3 >>> 16) & 0xff] << 16)\n | (SBOX[(s0 >>> 8) & 0xff] << 8)\n | SBOX[s1 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n const t3 = (\n (SBOX[s3 >>> 24] << 24)\n | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n\n // Set output\n _M[offset] = t0;\n _M[offset + 1] = t1;\n _M[offset + 2] = t2;\n _M[offset + 3] = t3;\n }\n}\nAESAlgo.keySize = 256 / 32;\n\n/**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n */\nexport const AES = BlockCipher._createHelper(AESAlgo);\n","/**\n * Counter block mode.\n */\nimport {\n BlockCipherMode,\n} from './cipher-core.js';\n\nexport class CTR extends BlockCipherMode {\n}\nCTR.Encryptor = class extends CTR {\n processBlock(words, offset) {\n const _words = words;\n\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n const iv = this._iv;\n let counter = this._counter;\n\n // Generate keystream\n if (iv) {\n this._counter = iv.slice(0);\n counter = this._counter;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n const keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0);\n\n // Increment counter\n counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0;\n\n // Encrypt\n for (let i = 0; i < blockSize; i += 1) {\n _words[offset + i] ^= keystream[i];\n }\n }\n};\nCTR.Decryptor = CTR.Encryptor;\n","export class MediaError {\n constructor (msg, data) {\n this.type = 'file'\n this.message = msg\n this.data = data\n }\n}\n","export class Cache {\n _data = Object.create(null)\n\n set (id, data) {\n this._data[id] = data\n }\n\n get (id) {\n return this._data[id]\n }\n\n clear () {\n this._data = Object.create(null)\n }\n}\n","\nexport function moovToSegments (moov, duration) {\n const tracks = moov.trak\n if (!tracks || !tracks.length) return\n const videoTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'vide')\n const audioTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'soun')\n if (!videoTrack && !audioTrack) return\n\n let videoSegments = []\n let audioSegments = []\n\n let segmentDurations\n if (videoTrack) {\n const videoStbl = videoTrack.mdia?.minf?.stbl\n if (!videoStbl) return\n const timescale = videoTrack.mdia.mdhd?.timescale\n const { stts, stsc, stsz, stco, stss, ctts } = videoStbl\n if (!timescale || !stts || !stsc || !stsz || !stco || !stss) return\n videoSegments = getSegments(duration, timescale, stts, stsc, stsz, stco, stss, ctts)\n segmentDurations = videoSegments.map(x => x.duration)\n }\n if (audioTrack) {\n const audioStbl = audioTrack.mdia?.minf?.stbl\n if (!audioStbl) return\n const timescale = audioTrack.mdia.mdhd?.timescale\n const { stts, stsc, stsz, stco } = audioStbl\n if (!timescale || !stts || !stsc || !stsz || !stco) return\n audioSegments = getSegments(duration, timescale, stts, stsc, stsz, stco, null, null, segmentDurations)\n }\n\n return {\n videoSegments,\n audioSegments\n }\n}\n\nfunction getSegments (segDuration, timescale, stts, stsc, stsz, stco, stss, ctts, segmentDurations) {\n const frames = []\n const gop = []\n const gopDuration = []\n const stscEntries = stsc.entries\n const stcoEntries = stco.entries\n const stszEntrySizes = stsz.entrySizes\n const stssEntries = stss?.entries\n const cttsEntries = ctts?.entries\n let cttsArr\n if (cttsEntries) {\n cttsArr = []\n cttsEntries.forEach(({ count, offset }) => {\n for (let i = 0; i < count; i++) {\n cttsArr.push(offset)\n }\n })\n }\n let keyframeMap\n if (stssEntries) {\n keyframeMap = {}\n stssEntries.forEach(x => { keyframeMap[x - 1] = true })\n }\n\n let frame\n let duration\n let startTime = 0\n let pos = 0\n let chunkIndex = 0\n let chunkRunIndex = 0\n let offsetInChunk = 0\n let lastSampleInChunk = stscEntries[0].samplesPerChunk\n let lastChunkInRun = stscEntries[1] ? stscEntries[1].firstChunk - 1 : Infinity\n let dts = 0\n let gopId = -1\n stts.entries.forEach(({ count, delta }) => {\n duration = delta // / timescale\n for (let i = 0; i < count; i++) {\n frame = {\n dts,\n startTime,\n duration,\n size: stszEntrySizes[pos] || stsz.sampleSize,\n offset: stcoEntries[chunkIndex] + offsetInChunk,\n index: pos\n }\n if (stssEntries) {\n frame.keyframe = keyframeMap[pos]\n if (frame.keyframe) {\n gopId++\n gop.push([frame])\n gopDuration.push(frame.duration)\n } else {\n gop[gop.length - 1].push(frame)\n gopDuration[gop.length - 1] += frame.duration\n }\n frame.gopId = gopId\n }\n if (cttsArr && pos < cttsArr.length) {\n frame.pts = dts + cttsArr[pos]\n }\n if (pos === 0) {\n frame.pts = 0\n }\n frames.push(frame)\n startTime += duration\n dts += delta\n pos++\n\n if (pos < lastSampleInChunk) {\n offsetInChunk += frame.size\n } else {\n chunkIndex++\n offsetInChunk = 0\n if (chunkIndex >= lastChunkInRun) {\n chunkRunIndex++\n lastChunkInRun = stscEntries[chunkRunIndex + 1] ? stscEntries[chunkRunIndex + 1].firstChunk - 1 : Infinity\n }\n lastSampleInChunk += stscEntries[chunkRunIndex].samplesPerChunk\n }\n }\n })\n\n const l = frames.length\n if (!l || (stss && !frames[0].keyframe)) return\n\n const segments = []\n let segFrames = []\n let time = 0\n let lastFrame\n let adjust = 0\n const pushSegment = (duration) => {\n lastFrame = segFrames[segFrames.length - 1]\n segments.push({\n index: segments.length,\n startTime: (segments[segments.length - 1]?.endTime || segFrames[0].startTime / timescale),\n endTime: (lastFrame.startTime + lastFrame.duration) / timescale,\n duration: duration,\n range: [segFrames[0].offset, lastFrame.offset + lastFrame.size],\n frames: segFrames\n })\n time = 0\n segFrames = []\n }\n\n if (stss) {\n const duration = segDuration * timescale\n for (let i = 0, l = gop.length; i < l; i++) {\n time += gopDuration[i]\n segFrames.push(...gop[i])\n if (i + 1 < l) {\n if (i === 0 || time > duration) {\n pushSegment(time / timescale)\n }\n } else {\n pushSegment(time / timescale)\n }\n }\n } else {\n segmentDurations = segmentDurations || []\n let duration = segmentDurations[0] || segDuration\n for (let i = 0; i < l; i++) {\n segFrames.push(frames[i])\n time += frames[i].duration\n const curTime = time / timescale\n if (i + 1 >= l || curTime + adjust >= duration) {\n adjust += curTime - duration\n pushSegment(curTime)\n duration = segmentDurations[segments.length] || segDuration\n }\n }\n }\n\n return segments\n}\n\nexport function moovToMeta (moov) {\n let videoCodec = ''\n let audioCodec = ''\n let width = 0\n let height = 0\n let audioChannelCount = 0\n let audioSampleRate = 0\n let duration = 0\n let videoTimescale = 0\n let audioTimescale = 0\n if (moov.mvhd) {\n duration = moov.mvhd.duration / moov.mvhd.timescale\n }\n\n const tracks = moov.trak\n\n if (tracks) {\n const videoTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'vide')\n const audioTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'soun')\n let e1 = null\n let defaultKID\n if (videoTrack) {\n e1 = videoTrack.mdia?.minf?.stbl?.stsd.entries[0]\n if (e1) {\n width = e1.width\n height = e1.height\n videoTimescale = videoTrack.mdia?.mdhd?.timescale\n videoCodec = (e1.avcC || e1.hvcC)?.codec\n if (e1.type === 'encv') {\n defaultKID = e1.sinf?.schi?.tenc.default_KID\n }\n }\n }\n if (audioTrack) {\n e1 = audioTrack.mdia?.minf?.stbl?.stsd.entries[0]\n if (e1) {\n audioChannelCount = e1.channelCount\n audioSampleRate = e1.sampleRate\n audioCodec = e1.esds?.codec\n audioTimescale = audioTrack.mdia?.mdhd?.timescale\n if (e1.type === 'enca') {\n defaultKID = defaultKID || e1.sinf?.schi?.tenc.default_KID\n }\n }\n }\n return {\n kid: defaultKID ? defaultKID.join('') : null,\n videoCodec,\n audioCodec,\n width,\n height,\n videoTimescale,\n audioChannelCount,\n audioSampleRate,\n duration,\n audioTimescale,\n moov\n }\n }\n}\n\nexport function isNumber (n) {\n return typeof n === 'number' && !Number.isNaN(n)\n}\n","import { NetLoader, concatUint8Array, Logger, EVENT } from 'xgplayer-streaming-shared'\nimport { MP4Parser } from 'xgplayer-transmuxer'\nimport { getConfig } from './config'\nimport { MediaError } from './error'\nimport { Cache } from './cache'\nimport { isNumber, moovToMeta, moovToSegments } from './utils'\nimport EventEmitter from 'eventemitter3'\n\nexport class MP4Loader extends EventEmitter {\n vid = ''\n url = ''\n meta = {}\n downloadInfo = []\n videoSegments = []\n audioSegments = []\n cache = null\n _currentSegmentIndex = -1\n _currentLoadingSegmentIndex = -1\n buffer\n _error\n\n constructor (config) {\n super()\n this._config = getConfig(config)\n const {\n vid,\n cache,\n ...rest\n } = this._config\n this.cache = cache || new Cache()\n this.vid = vid || rest.url\n this.url = rest.url\n rest.transformError = this._transformError\n this.logger = new Logger('MP4Loader_' + this.vid)\n !!config.openLog && Logger.enable()\n rest.logger = this.logger\n\n this._loader = new NetLoader(rest)\n this._loader.on(EVENT.REAL_TIME_SPEED, (data) => {\n this.emit(EVENT.REAL_TIME_SPEED, data)\n })\n }\n\n get isMetaLoaded () {\n return this.videoSegments.length || this.audioSegments.length\n }\n\n setCurrentSegment (segIndex) {\n if (isNumber(segIndex)) {\n this._currentSegmentIndex = segIndex\n }\n }\n\n isLastSegment (segIndex) {\n if (isNumber(segIndex)) {\n const lastIndex = this.videoSegments[this.videoSegments.length - 1]?.index || this.audioSegments[this.audioSegments.length - 1]?.index || 0\n return segIndex >= lastIndex\n }\n\n return false\n }\n\n isSegmentLoading (segIndex) {\n return segIndex === this._currentLoadingSegmentIndex\n }\n\n async changeUrl (url, vid = url, moovEnd, notCancelLoader) {\n await this.reset(notCancelLoader)\n if (url) this.url = url\n if (vid) this.vid = vid\n if (moovEnd) this._config.moovEnd = moovEnd\n }\n\n async getOrLoadMeta (cache) {\n if (!this.isMetaLoaded) await this.loadMeta(cache)\n return this.meta\n }\n\n async loadMetaProcess (cache, [moovStart, moovEnd], onProgress, config) {\n this._error = false\n this.logger.debug('[loadMetaProcess start], range,', [moovStart, moovEnd])\n const OnProgressHandle = async (data, state, options) => {\n if (this.meta && options?.range && options.range.length > 0 && options.range[1] >= moovEnd) {\n state = true\n this.logger.debug('[loadMetaProcess],data done,setstate true,[', moovStart, moovEnd, ']')\n }\n if (state && options?.range && options.range.length > 0 && options.range[1] < moovEnd) {\n state = false // 为了修复state为true但数据还么全部返回的问题\n this.logger.debug('[loadMetaProcess],data not done,setstate false,[', moovStart, moovEnd, ']')\n }\n this.logger.debug('[loadMetaProcess],task,[', moovStart, moovEnd, '], range,', options.range, ',dataLen,', (data ? data.byteLength : undefined), ', state,', state, ',err,',this._error)\n !this._error && data && data.byteLength > 0 && onProgress(data, state, options)\n if (this.meta.moov || this._error) return\n if (data && data.byteLength > 0) {\n this.buffer = concatUint8Array(this.buffer, data)\n let moov = MP4Parser.findBox(this.buffer, ['moov'])[0]\n if (!moov) {\n const mdat = MP4Parser.findBox(this.buffer, ['mdat'])[0]\n if (state) {\n if (!mdat) {\n this._error = true\n onProgress(null, state, options, {err:'cannot find moov or mdat box'})\n return\n // throw new MediaError('cannot find moov or mdat box')\n } else {\n const moovStart = mdat.start + mdat.size\n const res = await this.loadData([moovStart, ''], cache, config)\n if (res) {\n moov = MP4Parser.findBox(res.data, ['moov'])[0]\n }\n }\n }\n }\n if (moov && state && moov.size > moov.data.length) {\n this.logger.debug('[loadMetaProcess],moov not all, range,', options.range[1], ',dataLen,', this.buffer.byteLength, ', state,', state)\n await this.loadMetaProcess(cache, [options.range[1], moov.start + moov.size - 1], onProgress)\n }\n if (moov && moov.size <= moov.data.length && !this.meta.moov) {\n const parsedMoov = MP4Parser.moov(moov)\n if (!parsedMoov) {\n this._error = true\n onProgress(null, state, options, {err:'cannot parse moov box'})\n return\n // throw new MediaError('cannot parse moov box', moov.data)\n }\n\n const segments = moovToSegments(parsedMoov, this._config.segmentDuration)\n if (!segments) {\n this._error = true\n onProgress(null, state, options, {err:'cannot parse segments'})\n return\n // throw new MediaError('cannot parse segments', moov.data)\n }\n\n this.meta = moovToMeta(parsedMoov)\n const { videoSegments, audioSegments } = segments\n this.videoSegments = videoSegments\n this.audioSegments = audioSegments\n this.logger.debug('[loadMetaProcess] moov ok')\n onProgress(undefined, state, {\n meta: {\n meta: this.meta,\n videoSegments,\n audioSegments\n }\n })\n }\n }\n }\n await this.loadData([moovStart, moovEnd || this._config.moovEnd], cache, { onProgress: OnProgressHandle, ...config})\n }\n\n async loadMeta (cache, moovEnd, config) {\n const responses = []\n this.logger.debug('[loadMeta start]')\n let res = await this.loadData([0, moovEnd || this._config.moovEnd], cache, config)\n if (!res) return\n responses.push(res)\n let moov = MP4Parser.findBox(res.data, ['moov'])[0]\n if (!moov) {\n const mdat = MP4Parser.findBox(res.data, ['mdat'])[0]\n if (!mdat) {\n throw new MediaError('cannot find moov or mdat box', res.data)\n }\n const moovStart = mdat.start + mdat.size\n res = await this.loadData([moovStart], cache, config)\n if (!res) return\n responses.push(res)\n moov = MP4Parser.findBox(res.data, ['moov'], moovStart)[0]\n if (!moov) {\n throw new MediaError('cannot find moov box', res.data)\n }\n }\n if (moov.size > moov.data.length) {\n res = await this.loadData([res.data.length, moov.start + moov.size - 1], cache, config)\n if (!res) return\n responses.push(res)\n moov.data = concatUint8Array(moov.data, res.data)\n }\n const parsedMoov = MP4Parser.moov(moov)\n if (!parsedMoov) {\n throw new MediaError('cannot parse moov box', moov.data)\n }\n\n const segments = moovToSegments(parsedMoov, this._config.segmentDuration)\n if (!segments) {\n throw new MediaError('cannot parse segments', moov.data)\n }\n\n this.meta = moovToMeta(parsedMoov)\n const { videoSegments, audioSegments } = segments\n this.videoSegments = videoSegments\n this.audioSegments = audioSegments\n this.logger.debug('[load moov end!!!!!]')\n return {\n meta: this.meta,\n videoSegments,\n audioSegments,\n responses\n }\n }\n\n loadCacheMeta (meta, segmentIndex){\n const { moov } = meta\n const segments = moovToSegments(moov, this._config.segmentDuration)\n const { videoSegments, audioSegments } = segments\n this.videoSegments = videoSegments\n this.audioSegments = audioSegments\n this._currentSegmentIndex = segmentIndex\n this.meta = meta\n }\n\n getSegmentByTime (time) {\n let video\n let audio\n if (!this.videoSegments.length) {\n audio = this.audioSegments.find(x => x.startTime <= time && x.endTime > time)\n } else {\n video = this.videoSegments.find(x => x.startTime <= time && x.endTime > time)\n if (video) {\n audio = this.audioSegments[video.index]\n }\n }\n\n return {\n video,\n audio\n }\n }\n\n async loadSegmentByTime (time, cache, changeCurrent = true, config = {}) {\n if (!this.isMetaLoaded) {\n await this.loadMeta(cache)\n }\n const { video, audio } = this.getSegmentByTime(time)\n return this._loadSegment(video, audio, cache, changeCurrent, config)\n }\n\n async loadNextSegment (cache, changeCurrent = true, config = {}) {\n if (!this.isMetaLoaded) {\n await this.loadMeta()\n }\n const video = this.videoSegments[this._currentSegmentIndex + 1]\n const audio = this.audioSegments[this._currentSegmentIndex + 1]\n return this._loadSegment(video, audio, cache, changeCurrent, config)\n }\n\n async preload (time) {\n if (!this.isMetaLoaded) {\n await this.loadMeta(true)\n }\n if (!time || time < 0) return\n const { video, audio } = this.getSegmentByTime(time)\n const index = Math.max(video?.index || 0, audio?.index || 0)\n if (!index) return\n\n const videos = this.videoSegments.slice(0, index)\n const audios = this.audioSegments.slice(0, index)\n\n const load = async (i) => {\n if (i > index) return\n await this._loadSegment(videos[i], audios[i], true, false)\n await load(i + 1)\n }\n\n await load(0)\n }\n\n cancel () {\n return this._loader.cancel()\n }\n\n async reset (notCancelLoader = false) {\n if (!notCancelLoader) {\n this.logger.debug('[MP4loader reset func call loader.cancel]')\n await this._loader.cancel()\n }\n this.vid = this.url = ''\n this.meta = {}\n this.downloadInfo = []\n this.videoSegments = []\n this.audioSegments = []\n this._currentSegmentIndex = -1\n this._currentLoadingSegmentIndex = -1\n }\n\n async destroy () {\n await this.reset()\n // await this.cancel()\n this.cache.clear()\n }\n\n async _loadSegment (video, audio, cache, changeCurrent, config) {\n if (!video && !audio) return\n const segIndex = video?.index || audio?.index || 0\n this._currentLoadingSegmentIndex = segIndex\n let res\n try {\n res = await this.loadData([\n Math.min(video?.range[0] || Infinity, audio?.range[0] || Infinity),\n Math.max(video?.range[1] || 0, audio?.range[1] || 0)\n ], cache, config)\n } finally {\n this._currentLoadingSegmentIndex = -1\n }\n if (!res) return\n\n if (changeCurrent) {\n this._currentSegmentIndex = segIndex\n }\n\n res.video = video\n res.audio = audio\n\n return res\n }\n\n async loadData (range, cache, config) {\n const cacheKey = this._getCacheKey(range)\n const data = await this.cache.get(cacheKey)\n let res\n if (!data) {\n const url = config && config.url ? config.url : this.url\n res = await this._loader.load(url, { range, vid: this.vid, ...config })\n } else {\n res = { data, state: true, options: { fromCache: true, range, vid: this.vid } }\n }\n if (!res) return\n if (!data) {\n res.data && this.downloadInfo.push({\n startTime: res.startTime,\n endTime: res.endTime,\n size: res.data.byteLength,\n range\n })\n if (this.downloadInfo && this.downloadInfo.length > this._config.maxDownloadInfoSize) {\n this.downloadInfo = this.downloadInfo.slice(-this._config.maxDownloadInfoSize)\n }\n }\n\n if (!data && cache) {\n // this.cache.set(cacheKey, res.data)\n }\n\n // res.range = range\n return res\n }\n\n _transformError = (error) => {\n // error.type = 'network'\n return error\n }\n\n _getCacheKey (range) {\n return (this.vid || this.url) + ':' + range\n }\n}\n","export function getConfig (cfg) {\n return {\n vid: '',\n moovEnd: 80000,\n segmentDuration: 2,\n maxDownloadInfoSize: 30,\n responseType: 'arraybuffer',\n cache: null,\n // ...xgplayer-streaming-shared/src/net/config\n ...cfg\n }\n}\n"],"names":["createPublicPromise","res","rej","promise","Promise","resolve","reject","used","apply","arguments","nowTime","parseInt","performance","now","e","Date","getTime","Buffer","_classCallCheck","key","value","buf","length","end","start","b","buffered","error","maxHole","buffers","i","l","bufLen","last","lastEnd","push","reduce","a","c","pos","undefined","index","nextStart","nextEnd","prevStart","prevEnd","item","currentTime","behind","remaining","totalLength","ERR","FLV","HLS","MP4","FMP4","MSE_ADD_SB","MSE_APPEND_BUFFER","MSE_OTHER","MSE_FULL","OPTION","DASH","LICENSE","CUSTOM_LICENSE","MSE_HIJACK","EME_HIJACK","SIDX","NO_CANPLAY_ERROR","BUFFERBREAK_ERROR","MEDIA_ERR_ABORTED","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","MEDIA_ERR_CODEC_NOT_SUPPORTED","MEDIA_ERR_URL_EMPTY","ERR_CODE","_defineProperty","_ERR_CODE","StreamingError","_Error","_inherits","_super","_createSuper","type","subType","origin","payload","msg","_this","call","message","errorType","originError","ext","errorCode","errorMessage","Error","_error$response","isTimeout","url","response","httpCode","status","isBrowser","window","LogCacheLevel","DEBUG","LOG","WARN","ERROR","SIMPLE_TYPE","Logger","name","config","this","_prefix","concat","disabled","logCacheLevel","logMaxSize","logSize","logTextArray","_createClass","_console","_len","args","Array","_key","logCache","console","debug","_console2","_len2","_key2","log","_console3","_len3","_key3","warn","_console4","_len4","_key4","text","_len5","logText","_key5","finLogText","map","logable","JSON","stringify","delLog","shift","join","reset","_console5","group","table","groupEnd","val","toLocaleString","reduceDepth","_typeof","objType","Object","prototype","toString","slice","obj","maxDepth","depth","result","includes","hasOwnProperty","MediaSource","getMediaSource","OP_NAME","MSE","media","_this2","create","queue","_queue","op","costtime","_opst","_logger","opName","context","_startQueue","event","_config","assign","getDefaultConfig","bindMedia","openLog","enable","_enqueueBlockingOp2","_unbindMedia","_bindMedia","get","_this$mediaSource","mediaSource","readyState","_url","_this$mediaSource2","duration","_mseFullFlag","VIDEO","_this3","_enqueueBlockingOp","isEnded","_this4","_openPromise","isOpened","ms","addEventListener","onOpen","_st","removeEventListener","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_this5","wrap","_context","prev","next","unbindMedia","revokeObjectURL","src","URL","createObjectURL","abrupt","stop","_x","_callee2","hasMetadata","mseOpen","_this6","_context2","keys","forEach","t","x","endOfStream","_sourceBuffer","k","removeSourceBuffer","removeAttribute","load","mimeType","sb","addSourceBuffer","_onSBUpdateEnd","bind","_onSBUpdateError","_this7","changeType","_enqueueOp","createSource","buffer","_this8","byteLength","_this8$_sourceBuffer$","appendBuffer","startTime","endTime","_this9","isInsertHead","remove","p","_this10","_this11","_this$_queue$type","initOpque","isinit","reason","_this12","setLiveSeekableRange","exec","_this13","splice","then","_callee3","types","waiters","_this14","_context3","prom","all","updating","_x2","_x3","indexOf","timestampOffset","_this15","_this16","abort","mime","isTypeSupported","LoaderType","ResponseType","NetError","request","_assertThisInitialized","isPlainObject","getPrototypeOf","getRangeValue","ret","encode","encodeURIComponent","replace","setUrlParams","params","v","str","isArray","toISOString","isObject","filter","Boolean","hashIndex","createResponse","data","done","contentLength","age","firstByteTime","range","vid","priOptions","parseFloat","Number","isNaN","option","calculateSpeed","byteLen","millisec","Math","round","EVENT","has","prefix","Events","EE","fn","once","addListener","emitter","TypeError","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","__proto__","eventNames","names","events","getOwnPropertySymbols","listeners","handlers","ee","listenerCount","emit","a1","a2","a3","a4","a5","len","removeListener","j","on","removeAllListeners","off","prefixed","module","exports","CACHESIZE","FetchLoader","_EventEmitter","_cancel","_ref","_this$_abortControlle","timeout","responseType","onProgress","onTimeout","onCancel","transformResponse","logger","method","headers","body","mode","credentials","cache","redirect","referrer","referrerPolicy","onProcessMinLen","_aborted","_onProcessMinLen","_onCancel","_abortController","AbortController","_running","_index","_range","_vid","_priOptions","init","signal","clearTimeout","_timeoutTimer","rangeValue","Headers","append","Range","setTimeout","cancel","fetch","_ref2","costTime","speed","_response","ok","sent","json","_loadChunk","arrayBuffer","Uint8Array","time","catch","_error","options","_reader","t0","st","getReader","err","_cache","_writeIdx","reader","pump","_ref3","_this3$_range","startRange","startByte","curLen","retData","temp","read","_receivedLength","set","XhrLoader","req","_onProgress","_headers","_withCredentials","_body","_method","_timeout","_runing","_responseType","_firstRtt","_onTimeout","_request","_loadCompleteResolve","_loadCompleteReject","_startLoad","chunkSize","_currentChunkSizeKB","from","to","_internalOpen","_startTime","xhr","_xhr","XMLHttpRequest","open","withCredentials","onload","_onLoad","onreadystatechange","_onReadyStatechange","onerror","errorEvent","_errorEvent$currentTa","_errorEvent$currentTa2","_errorEvent$currentTa3","currentTarget","statusText","ontimeout","setRequestHeader","send","target","_this$_range","_objectSpread","byteStart","_this$_range2","chunk","responseURL","_getHeaders","_transformResponse","_getPrototypeOf","_step","_iterator","_createForOfIteratorHelper","getAllResponseHeaders","trim","split","s","n","parts","toLowerCase","f","Task","alive","_loaderType","_loader","_retryCount","_retryTimer","_canceled","_retryCheckFunc","retryCheckFunc","_this$_config","retry","retryDelay","onRetryError","transformError","rest","_objectWithoutProperties","_excluded","isRetry","running","loaderType","retryCount","concatUint8Array","arr","prevLen","d","sleep","NetLoader","cfg","transformRequest","integrity","getConfig","isSupported","task","loader","_currentTask","_processTask","cancels","_alive","finally","_this3$_currentTask","_this3$_alive","TrackType","VideoCodecType","AudioCodecType","WarningType","VideoTrack","sequenceNumber","width","height","fpsDen","fpsNum","baseMediaDecodeTime","timescale","codec","present","pid","pps","sps","vps","sarRatio","samples","warnings","hvcC","isVideoEncryption","AudioTrack","sampleDuration","sampleRate","channelCount","codecType","isAudioEncryption","VideoSample","pts","dts","units","originPts","originDts","keyframe","flag","dependsOn","isNonSyncSample","AudioSample","sampleOffset","size","Sample","FlvScriptSample","_Sample","SeiSample","_Sample2","_super2","MetadataTrack","flvScriptSamples","seiSamples","ExpGolomb","_data","_bytesAvailable","_loadWord","position","availableBytes","min","workingBytes","subarray","_word","DataView","getUint32","_bitsAvailable","count","skipBytes","floor","bits","readBits","leadingZeroCount","skipLZ","skipBits","clz","readUEG","lastScale","nextScale","readEG","UTF8","uint8array","out","input","String","fromCharCode","_checkContinuation","ucs4","_ucs2","checkLength","array","ua","navigator","userAgent","toLocaleLowerCase","isSafari","test","isFirefox","isAndroid","MAX_SIZE","pow","readBig16","readBig32","readBig64","getAvcCodec","codecs","h","parse","NALu","offset","dataLen","unit","isHevc","uuid","uint","emulationPreventionBytesPositions","newLength","newData","sourceIndex","AVC","nalUnitSize","spsParsed","spsSize","spsArr","ppsArr","spsCount","parseSPS","removeEPB","ppsSize","ppsCount","eg","readUByte","profileIdc","profileCompatibility","levelIdc","skipUEG","chromaFormat","chromaFormatIdc","readBool","scalingListCount","skipScalingList","picOrderCntType","numRefFramesInPicOrderCntCycle","picWidthInMbsMinus1","picHeightInMapUnitsMinus1","frameMbsOnlyFlag","fixedFrame","fps","frameCropLeftOffset","frameCropRightOffset","frameCropTopOffset","frameCropBottomOffset","aspectRatioIdc","numUnitsInTick","timeScale","ceil","AAC","rate","FREQ","skip","frames","samplingFrequencyIndex","protectionSkipBytes","frameLength","objectType","_AAC$_getConfig","_getConfig","frameIndex","getFrameDuration","originCodec","_AAC$_getConfig2","samplingIndex","originObjectType","extensionSamplingIndex","HEVC","vpsParsed","nalUnitType","numNalus","nalSize","vpsArr","numOfArrays","parseVPS","vpsMaxSubLayersMinus1","numTemporalLayers","max","_parseProfileTierLevel","spsMaxSubLayersMinus1","temporalIdNested","separateColourPlaneFlag","confWinLeftOffset","confWinRightOffset","confWinTopOffset","confWinBottomOffset","conformanceWindowFlag","bitDepthLumaMinus8","bitDepthChromaMinus8","subWidthC","subHeightC","maxSubLayersMinus1","generalTierFlag","generalProfileSpace","generalProfileIdc","generalProfileCompatibilityFlags","generalConstraintIndicatorFlags","generalLevelIdc","subLayerProfilePresentFlag","subLayerLevelPresentFlag","MAX_SILENT_FRAME_DURATION","AUDIO_EXCETION_LOG_EMIT_DURATION","FlvFixer","videoTrack","audioTrack","metadataTrack","_baseDts","_baseDtsInited","_audioNextPts","_videoNextDts","_audioTimestampBreak","_videoTimestampBreak","_lastVideoDuration","_lastAudioExceptionGapDot","Infinity","_lastAudioExceptionOverlapDot","_lastAudioExceptionLargeGapDot","_lastVideoExceptionLargeGapDot","_lastVideoExceptionChunkFirstDtsDot","discontinuity","contiguous","_videoLastSample","_calculateBaseDts","resetBaseDts","exist","_resetBaseDtsWhenStreamBreaked","_fixAudio","_fixVideo","refSampleDurationInt","first","lastSample","pop","unshift","samp0","firstSample","vDelta","abs","_samples$","nextDts","firstSampleDts","nextSampleDts","nextSample","refSampleDuration","_doFixAudioInternal","audioSamps","videoSamps","audioBasePts","videoBaseDts","baseDts","delta","isFinite","_getG711Duration","sampleDurationInSampleRate","nextPts","sample","silentFrame","_getSilentFrame","silentSample","track","sampleSize","getSilentFrame","AMF","_parseValue","byteOffset","view","isEnd","getUint8","getFloat64","_AMF$_parseString","_parseString","terminal","_AMF$_parseObject","_parseObject","_terminal","_AMF$_parseObject2","strictArrayLength","_AMF$_parseValue","timestamp","getInt16","decode","getUint16","FlvDemuxer","_fixer","_remainingData","_headerParsed","probe","tagType","dataSize","bodyData","prevTagSize","_parseAudio","_parseVideo","_parseScript","formatTimescale","hasSample","fix","demux","format","soundRate","soundSize","soundType","AUDIO_RATE","_parseAac","_parseG711","parseAudioSpecificConfig","sampleRateIndex","frameType","codecId","packetType","cts","configData","parseHEVCDecoderConfigurationRecord","parseAVCDecoderConfigurationRecord","parseAvcC","_checkAddMetaNalToUnits","setToKeyframe","parseSEI","_gopId","gopId","hevc","_needAddMetaBeforeKeyFrameNal","MP4Parser","headerSize","subData","findBox","box","parseBox","trackId","baseDataOffsetPresent","flags","sampleDescriptionIndexPresent","defaultSampleDurationPresent","defaultSampleSizePresent","defaultSampleFlagsPresent","baseDataOffset","sampleDescriptionIndex","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","reference_ID","version","earliest_presentation_time","first_offset","references","ref","tmp32","reference_type","referenced_size","subsegment_duration","starts_with_SAP","SAP_type","SAP_delta_time","mvhd","trak","pssh","nextTrackId","tkhd","mdia","mdhd","hdlr","minf","lang","language","handlerType","vmhd","smhd","stbl","graphicsmode","opcolor","balance","_ret$stsd$entries$","_ret$stsd$entries$$si","_ret$stsd$entries$$si2","stsd","stts","ctts","stsc","stsz","stco","co64","default_IV_size","entries","sinf","schi","tenc","stss","senc","iv","sampleCount","InitializationVector","subsamples","subsampleCount","subsample","BytesOfClearData","BytesOfProtectedData","keyIds","systemId","toHex","numKeyIds","keyId","data_size","kid","system_id","entryCount","avc1","hvc1","mp4a","alaw","samplesize","esds","horizresolution","vertresolution","avcC","pasp","default_IsEncrypted","default_KID","frma","data_format","bodyStart","parseVisualSampleEntry","configurationVersion","AVCProfileIndication","AVCLevelIndication","lengthSizeMinusOne","spsLength","ppsLength","tmp","generalProfileCompatibility","avgFrameRate","_ret$vps","nalus","_ret$sps","_ret$pps","hSpacing","vSpacing","parseAudioSampleEntry","byteRead","tag","substring","padStart","firstChunk","samplesPerChunk","entrySizes","mfhd","traf","tfhd","tfdt","trun","dataOffset","firstSampleFlags","isLeading","isDependedOn","hasRedundancy","paddingValue","degradationPriority","moov","_e$esds","_e$esds2","tracks","vTrack","find","_t$mdia","_t$mdia$hdlr","aTrack","_t$mdia2","_t$mdia2$hdlr","_vTrack$tkhd","_vTrack$mdia","_vTrack$mdia$minf","_vTrack$mdia$minf$stb","_vTrack$mdia2","_vTrack$mdia2$minf","_vTrack$mdia2$minf$st","_vTrackId","id","tkhdDuration","mvhdDurtion","mvhdTimecale","_e1$sinf","_e1$sinf$schi","_e1$sinf2","_e1$sinf2$schi","_e1$sinf3","_e1$sinf3$schi","_e1$sinf4","_e1$sinf4$frma","e1","videoSenc","useEME","kidValue","encv","_aTrack$tkhd","_e$esds3","_e$esds4","_aTrack$mdia","_aTrack$mdia$minf","_aTrack$mdia$minf$stb","_aTrack$mdia2","_aTrack$mdia2$minf","_aTrack$mdia2$minf$st","_aTrackId","_e$sinf","_e$sinf$frma","_e$sinf2","_e$sinf2$schi","_e$sinf3","_e$sinf3$schi","_e$sinf4","_e$sinf4$schi","getRateIndexByRate","audioSenc","enca","_videoTrack$encv","_audioTrack$enca","vkid","akid","videoSampleCount","_audioTrack$samples","audioSampleCount","moof","defaultSize","defaultDuration","evaluateDefaultDuration","_t$mdia3","_t$mdia3$hdlr","_t$mdia4","_t$mdia4$hdlr","videoSamples","audioSamples","_vTrack$mdia3","_vTrack$mdia3$minf","videoStbl","getSamples","_aTrack$mdia3","_aTrack$mdia3$minf","_aTrack$mdia$mdhd","audioStbl","keyframeMap","cttsArr","cttsEntries","stscEntries","stcoEntries","stszEntrySizes","stssEntries","chunkIndex","chunkRunIndex","offsetInChunk","lastSampleInChunk","lastChunkInRun","dataReferenceIndex","frameCount","isFullBox","readBig24","pad","charstr","maxlen","chars","r","hex","Concat","ResultConstructor","arrays","self","UINT32_MAX","FTYPHEV1","FTYPAVC1","ftyp","content","mvex","_toConsumableArray","HDLR_TYPES","VMHD","SMHD","DINF","extBox","STTS","STSC","STSZ","STCO","avc1hev1","_concat$concat","avcc","btrt","charCodeAt","schm","typ","boxes","fiel","_concat$concat2","ArrayBuffer","pcf","cif","write","_ref4","_slicedToArray","trex","sencLength","isVideo","videoSencLength","saiz","saio","trun1","sbgp","sdtp","extension","writeUint32","samplesLength","writeUint16","upperWordBaseMediaDecodeTime","lowerWordBaseMediaDecodeTime","sampleLen","_samples$i","_samples$i$flag","_samples$i$cts","trackMP4","mdiaMP4","minfMP4","stblMP4","_ref5","_ref6","sampleDescIndex","samplesSizes","offsets","keyframeIndexes","_ref7","styp","durationCount","earliestTime","mdatSize","sidx","mdat","video","audio","dinf","dref","StblTable","Base","properties","clone","constructor","_construct","WordArray","_Base","words","sigBytes","typedArray","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","typedArrayByteLength","_words","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","_get","nBytes","rcache","m_w","_m_w","_m_z","mask","random","_r","hexChars","bite","hexStr","hexStrLength","substr","Latin1","latin1Str","latin1StrLength","Utf8","utf8Str","unescape","BufferedBlockAlgorithm","_Base2","_minBufferSize","_nDataBytes","m_data","doFlush","processedWords","blockSize","dataWords","dataSigBytes","nBlocksReady","nWordsReady","nBytesReady","_doProcessBlock","Hasher","_BufferedBlockAlgorit","_super3","_doReset","messageUpdate","_append","_process","hash","_doFinalize","SubHasher","finalize","HMAC","_Base3","_super4","hasher","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","update","innerHash","hmac","Base64","_map","base64Chars","triplet","charAt","paddingChar","base64Str","base64StrLength","reverseMap","_reverseMap","paddingIndex","parseLoop","bits1","bitsCombined","T","sin","FF","GG","HH","II","MD5Algo","_Hasher","_hash","M","_M","offset_i","M_offset_i","H","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","H_i","_createHelper","_createHmacHelper","EvpKDFAlgo","keySize","iterations","password","salt","derivedKeyWords","block","derivedKey","Cipher","xformMode","_xformMode","dataUpdate","finalProcessedData","_ENC_XFORM_MODE","_DEC_XFORM_MODE","SubCipher","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","encrypt","decrypt","ciphertext","ivSize","BlockCipherMode","cipher","_cipher","_iv","Encryptor","Decryptor","xorBlock","_prevBlock","CBC","_BlockCipherMode","_CBC","_class","_super5","encryptBlock","_CBC2","_class2","_super6","thisBlock","decryptBlock","Pkcs7","blockSizeBytes","nPaddingBytes","paddingWord","paddingWords","padding","unpad","BlockCipher","_Cipher2","_super7","modeCreator","createEncryptor","createDecryptor","_mode","__creator","processBlock","finalProcessedBlocks","CipherParams","_super8","cipherParams","mixIn","formatter","OpenSSLFormatter","openSSLStr","ciphertextWords","_super9","_cfg","encryptor","cipherCfg","algorithm","_ciphertext","plaintext","_parse","OpenSSLKdf","execute","_salt","compute","_SerializableCipher","_super10","derivedParams","kdf","_SBOX","INV_SBOX","_SUB_MIX_0","_SUB_MIX_1","_SUB_MIX_2","_SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","xi","sx","x2","x4","x8","RCON","AESAlgo","_BlockCipher","_nRounds","_keyPriorReset","keyWords","ksRows","_keySchedule","keySchedule","ksRow","_invKeySchedule","invKeySchedule","invKsRow","_doCryptBlock","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","SBOX","nRounds","s0","s1","s2","s3","t1","t2","t3","CTR","_CTR","counter","_counter","keystream","MediaError","Cache","moovToSegments","segmentDurations","videoSegments","audioSegments","_videoTrack$mdia","_videoTrack$mdia$minf","_videoTrack$mdia$mdhd","getSegments","_audioTrack$mdia","_audioTrack$mdia$minf","_audioTrack$mdia$mdhd","segDuration","frame","gop","gopDuration","lastFrame","segments","segFrames","adjust","pushSegment","_segments","_segFrames","curTime","moovToMeta","videoCodec","audioCodec","audioChannelCount","audioSampleRate","videoTimescale","audioTimescale","defaultKID","_videoTrack$mdia2","_videoTrack$mdia2$min","_videoTrack$mdia2$min2","_videoTrack$mdia3","_videoTrack$mdia3$mdh","_audioTrack$mdia2","_audioTrack$mdia2$min","_audioTrack$mdia2$min2","_e1$esds","_audioTrack$mdia3","_audioTrack$mdia3$mdh","isNumber","MP4Loader","_loadData","_loadSegment2","_destroy","_reset","_preload","_loadNextSegment","_loadSegmentByTime","_loadMeta","_loadMetaProcess","_getOrLoadMeta","_changeUrl","moovEnd","segmentDuration","maxDownloadInfoSize","_transformError","segIndex","_currentSegmentIndex","_this$videoSegments","_this$audioSegments","_currentLoadingSegmentIndex","notCancelLoader","_args","isMetaLoaded","loadMeta","meta","_callee4","moovStart","OnProgressHandle","_context4","state","_moovStart","parsedMoov","loadData","loadMetaProcess","_x7","_x8","_x9","_x4","_x5","_x6","_callee5","responses","_context5","_x10","_x11","_x12","segmentIndex","_callee6","changeCurrent","_this$getSegmentByTim","_args6","_context6","getSegmentByTime","_loadSegment","loadSegmentByTime","_x13","_x14","_callee7","_args7","_context7","_x15","_callee9","_this$getSegmentByTim2","videos","audios","_context9","_callee8","_context8","_x17","_x16","_callee10","_args10","_context10","downloadInfo","_callee11","_context11","clear","_callee12","_context12","finish","_x18","_x19","_x20","_x21","_x22","_callee13","cacheKey","_context13","_getCacheKey","fromCache","_x23","_x24","_x25"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.min.js","sources":["../../xgplayer-streaming-shared/src/utils.js","../../xgplayer-streaming-shared/src/buffer.js","../../xgplayer-streaming-shared/src/error.js","../../xgplayer-streaming-shared/src/env.js","../../xgplayer-streaming-shared/src/logger.js","../../xgplayer-streaming-shared/src/mse.js","../../xgplayer-streaming-shared/src/net/types.js","../../xgplayer-streaming-shared/src/net/error.js","../../xgplayer-streaming-shared/src/is.js","../../xgplayer-streaming-shared/src/net/helper.js","../../xgplayer-streaming-shared/src/event.js","../../../node_modules/eventemitter3/index.js","../../xgplayer-streaming-shared/src/net/fetch.js","../../xgplayer-streaming-shared/src/net/xhr.js","../../xgplayer-streaming-shared/src/net/task.js","../../xgplayer-streaming-shared/src/streaming-helper.js","../../xgplayer-streaming-shared/src/net/index.js","../../xgplayer-streaming-shared/src/net/config.js","../../xgplayer-transmuxer/src/model/types.js","../../xgplayer-transmuxer/src/model/video-track.js","../../xgplayer-transmuxer/src/model/audio-track.js","../../xgplayer-transmuxer/src/model/video-sample.js","../../xgplayer-transmuxer/src/model/audio-sample.js","../../xgplayer-transmuxer/src/model/metadata-track.js","../../xgplayer-transmuxer/src/utils/exp-golomb.js","../../xgplayer-transmuxer/src/utils/logger.js","../../xgplayer-transmuxer/src/utils/utf8.js","../../xgplayer-transmuxer/src/utils/env.js","../../xgplayer-transmuxer/src/utils/index.js","../../xgplayer-transmuxer/src/codec/nalu.js","../../xgplayer-transmuxer/src/codec/avc.js","../../xgplayer-transmuxer/src/codec/aac.js","../../xgplayer-transmuxer/src/codec/hevc.js","../../xgplayer-transmuxer/src/flv/fixer.js","../../xgplayer-transmuxer/src/flv/amf.js","../../xgplayer-transmuxer/src/flv/index.js","../../xgplayer-transmuxer/src/mpeg-ts/index.js","../../xgplayer-transmuxer/src/mp4/mp4-parser.js","../../xgplayer-transmuxer/src/mp4/buffer.js","../../xgplayer-transmuxer/src/mp4/mp4.js","../../xgplayer-transmuxer/src/mp4/logger.js","../../../node_modules/crypto-es/lib/md5.js","../../../node_modules/crypto-es/lib/core.js","../../../node_modules/crypto-es/lib/enc-base64.js","../../../node_modules/crypto-es/lib/evpkdf.js","../../../node_modules/crypto-es/lib/cipher-core.js","../../../node_modules/crypto-es/lib/aes.js","../../../node_modules/crypto-es/lib/mode-ctr.js","../src/error.js","../src/cache.js","../src/utils.js","../src/loader.js","../src/config.js"],"sourcesContent":["export function createPublicPromise () {\n let res, rej\n const promise = new Promise((resolve, reject) => {\n res = resolve\n rej = reject\n })\n promise.used = false\n promise.resolve = (...args) => {\n promise.used = true\n return res(...args)\n }\n promise.reject = (...args) => {\n promise.used = true\n return rej(...args)\n }\n return promise\n}\n\nexport function nowTime () {\n try {\n return parseInt(performance.now(), 10)\n } catch (e) {\n return new Date().getTime()\n }\n}\n","export class Buffer {\n /**\n * @param {TimeRanges} buf\n * @returns {number}\n */\n static start (buf) {\n if (!buf || !buf.length) return 0\n\n // Safari bug: https://bit.ly/2trx6O8\n if (buf.length === 1 && buf.end(0) - buf.start(0) < 1e-6) return 0\n // Edge bug: https://bit.ly/2JYLPeB\n if (buf.length === 1 && buf.start(0) < 0) return 0\n\n return buf.start(0)\n }\n\n /**\n * @param {TimeRanges} buf\n * @returns {number}\n */\n static end (buf) {\n if (!buf || !buf.length) return 0\n\n // Safari bug: https://bit.ly/2trx6O8\n if (buf.length === 1 && buf.end(0) - buf.start(0) < 1e-6) return 0\n\n return buf.end(buf.length - 1)\n }\n\n /**\n * @param {{buffered?: TimeRanges}} b\n * @returns {TimeRanges | void}\n */\n static get (b) {\n if (!b) return\n try {\n return b.buffered\n } catch (error) {\n // ignore\n }\n }\n\n /**\n * @param {TimeRanges} buf\n * @param {number} [maxHole]\n * @returns {[number,number][]}\n */\n static buffers (buf, maxHole) {\n if (!buf || !buf.length) return []\n\n const buffers = []\n for (let i = 0, l = buf.length; i < l; i++) {\n const bufLen = buffers.length\n if (!bufLen || !maxHole) {\n buffers.push([buf.start(i), buf.end(i)])\n } else {\n const last = buffers[bufLen - 1]\n const lastEnd = last[1]\n const start = buf.start(i)\n if (start - lastEnd <= maxHole) {\n const end = buf.end(i)\n if (end > lastEnd) {\n last[1] = end\n }\n } else {\n buffers.push([buf.start(i), buf.end(i)])\n }\n }\n }\n return buffers\n }\n\n /**\n * @param {TimeRanges} buf\n * @param {number} [maxHole]\n * @returns {{buffers:[number,number][],length:number}}\n */\n static totalLength (buffers) {\n if (!buffers || !buffers.length) return 0\n return buffers.reduce((a, c) => (a += (c[1] - c[0])), 0)\n }\n\n /**\n *\n * @param {TimeRanges} buf\n * @param {number} [pos=0]\n * @param {number} [maxHole=0]\n * @returns {{start:number,end:number,buffers:[number,number][],remaining:number,index?:number,nextStart?:number,nextEnd?:number,prevStart?:number,prevEnd?:number}}\n */\n static info (buf, pos = 0, maxHole = 0) {\n if (!buf || !buf.length) return { start: 0, end: 0, buffers: [] }\n\n let start = 0\n let end = 0\n let index = 0\n let nextStart = 0\n let nextEnd = 0\n let prevStart = 0\n let prevEnd = 0\n const buffers = Buffer.buffers(buf, maxHole)\n\n for (let i = 0, l = buffers.length; i < l; i++) {\n const item = buffers[i]\n if (pos + maxHole >= item[0] && pos < item[1]) {\n start = item[0]\n end = item[1]\n index = i\n } else if (pos + maxHole < item[0]) {\n nextStart = item[0]\n nextEnd = item[1]\n break\n } else if (pos + maxHole > item[1]) {\n prevStart = item[0]\n prevEnd = item[1]\n }\n }\n\n return {\n start,\n end,\n index,\n buffers,\n nextStart,\n nextEnd,\n prevStart,\n prevEnd,\n currentTime: pos,\n behind: pos - start,\n remaining: end ? end - pos : 0,\n length: Buffer.totalLength && Buffer.totalLength(buffers)\n }\n }\n}\n","export const ERR = {\n MANIFEST: 'manifest',\n NETWORK: 'network',\n NETWORK_TIMEOUT: 'network_timeout',\n NETWORK_FORBIDDEN:'network_forbidden',\n NETWROK_RANGE_NOT_SATISFIABLE:'network_range_not_satisfiable',\n DEMUX: 'demux',\n REMUX: 'remux',\n MEDIA: 'media',\n DRM: 'drm',\n OTHER: 'other',\n RUNTIME:'runtime',\n\n SUB_TYPES: {\n FLV: 'FLV',\n HLS: 'HLS',\n MP4: 'MP4',\n FMP4: 'FMP4',\n MSE_ADD_SB: 'MSE_ADD_SB',\n MSE_APPEND_BUFFER: 'MSE_APPEND_BUFFER',\n MSE_OTHER: 'MSE_OTHER',\n MSE_FULL: 'MSE_FULL',\n OPTION: 'OPTION',\n DASH:'DASH',\n LICENSE:'LICENSE',\n CUSTOM_LICENSE:'CUSTOM_LICENSE',\n MSE_HIJACK:'MSE_HIJACK',\n EME_HIJACK:'EME_HIJACK',\n SIDX:'SIDX',\n NO_CANPLAY_ERROR:'NO_CANPLAY_ERROR',\n BUFFERBREAK_ERROR:'BUFFERBREAK_ERROR',\n MEDIA_ERR_ABORTED:'MEDIA_ERR_ABORTED',\n MEDIA_ERR_NETWORK:'MEDIA_ERR_NETWORK',\n MEDIA_ERR_DECODE:'MEDIA_ERR_DECODE',\n MEDIA_ERR_SRC_NOT_SUPPORTED:'MEDIA_ERR_SRC_NOT_SUPPORTED',\n MEDIA_ERR_CODEC_NOT_SUPPORTED:'MEDIA_ERR_CODEC_NOT_SUPPORTED',\n MEDIA_ERR_URL_EMPTY:'MEDIA_ERR_URL_EMPTY'\n }\n}\n\nexport const ERR_CODE = {\n [ERR.MANIFEST]: {\n HLS: 1100,\n DASH:1200\n },\n [ERR.NETWORK]: 2100,\n [ERR.NETWORK_TIMEOUT]: 2101,\n [ERR.NETWORK_FORBIDDEN]:2103,\n [ERR.NETWROK_RANGE_NOT_SATISFIABLE]:2116,\n [ERR.DEMUX]: {\n FLV: 3100,\n HLS: 3200,\n MP4: 3300,\n FMP4: 3400,\n SIDX: 3410\n },\n [ERR.REMUX]: {\n FMP4: 4100,\n MP4: 4200\n },\n [ERR.MEDIA]: {\n MEDIA_ERR_ABORTED: 5101,\n MEDIA_ERR_NETWORK: 5102,\n MEDIA_ERR_DECODE: 5103,\n MEDIA_ERR_SRC_NOT_SUPPORTED: 5104,\n MEDIA_ERR_CODEC_NOT_SUPPORTED: 5105,\n MEDIA_ERR_URL_EMPTY: 5106,\n MSE_ADD_SB: 5200,\n MSE_APPEND_BUFFER: 5201,\n MSE_OTHER: 5202,\n MSE_FULL: 5203,\n MSE_HIJACK:5204,\n EME_HIJACK:5301\n },\n [ERR.DRM]:{\n LICENSE:7100,\n CUSTOM_LICENSE:7200\n },\n [ERR.OTHER]: 8000,\n [ERR.RUNTIME]:{\n NO_CANPLAY_ERROR:9001,\n BUFFERBREAK_ERROR:9002\n }\n}\n\nexport class StreamingError extends Error {\n constructor (type, subType, origin, payload, msg) {\n super(msg || origin?.message)\n this.errorType = type === ERR.NETWORK_TIMEOUT ? ERR.NETWORK : type\n this.originError = origin\n this.ext = payload\n this.errorCode = ERR_CODE[type][subType] || ERR_CODE[type]\n this.errorMessage = this.message\n if (!this.errorCode) {\n this.errorType = ERR.OTHER\n this.errorCode = ERR_CODE[this.errorType]\n }\n }\n\n static create (type, subType, origin, payload, msg) {\n if (type instanceof StreamingError) {\n return type\n } else if (type instanceof Error) {\n origin = type\n type = ''\n }\n\n if (!type) type = ERR.OTHER\n\n return new StreamingError(type, subType, origin, payload, msg)\n }\n\n static network (error) {\n return new StreamingError(\n error?.isTimeout ? ERR.NETWORK_TIMEOUT : ERR.NETWORK,\n null,\n error instanceof Error ? error : null,\n {\n url: error?.url,\n response: error?.response,\n httpCode: error?.response?.status\n }\n )\n }\n}\n","export const isBrowser = typeof window !== 'undefined'\n","\nexport const LogCacheLevel = {\n 'DEBUG': 1,\n 'LOG': 2,\n 'WARN': 3,\n 'ERROR': 4\n}\nconst LOG_MAX_SIZE = 200 * 1024\nconst SIMPLE_TYPE = ['Boolean', 'Number' ,'String', 'Undefined','Null', 'Date','Object']\nexport class Logger {\n constructor (name,config) {\n this.name = name || ''\n this._prefix = `[${this.name}]`\n Logger.disabled = config?.disabled || true\n this.logCacheLevel = config?.logCacheLevel || 3\n this.logMaxSize = config?.logMaxSize || LOG_MAX_SIZE\n this.logSize = 0\n this.logTextArray = []\n }\n\n debug (...args) {\n this.logCache(LogCacheLevel.DEBUG,...args)\n if (Logger.disabled) return\n console.debug(this._prefix, nowTime(), ...args)\n }\n\n log (...args) {\n this.logCache(LogCacheLevel.LOG,...args)\n if (Logger.disabled) return\n console.log(this._prefix, nowTime(), ...args)\n }\n\n warn (...args) {\n this.logCache(LogCacheLevel.WARN,...args)\n if (Logger.disabled) return\n console.warn(this._prefix, nowTime(), ...args)\n }\n\n error (...args) {\n this.logCache(LogCacheLevel.ERROR,...args)\n if (Logger.disabled) return\n console.error(this._prefix, nowTime(), ...args)\n }\n\n logCache (logCacheLevel, ...logText) {\n if (logCacheLevel < this.logCacheLevel) return\n let text = ''\n try {\n const finLogText = logText.map( item => logable(item))\n text = this._prefix + nowTime() + (JSON.stringify(finLogText))\n } catch (e) {\n return\n }\n if (logCacheLevel >= this.logCacheLevel) {\n this.logSize += text.length\n this.logTextArray.push(text)\n }\n if (this.logSize > this.logMaxSize) {\n const delLog = this.logTextArray.shift()\n this.logSize -= delLog.length\n }\n }\n\n getLogCache () {\n const logText = this.logTextArray.join('\\n')\n this.reset()\n return logText\n }\n\n reset () {\n this.logTextArray = []\n this.logSize = 0\n }\n\n table (...args) {\n if (Logger.disabled) return\n console.group(this._prefix)\n console.table(...args)\n console.groupEnd()\n }\n\n static disabled = true\n\n static enable () {\n Logger.disabled = false\n }\n\n static disable () {\n Logger.disabled = true\n }\n\n setLogLevel (val) {\n this.logCacheLevel = val\n }\n}\nfunction nowTime () {\n return new Date().toLocaleString()\n}\n\nfunction reduceDepth (val) {\n if (typeof val !== 'object') {\n return val\n }\n const objType = Object.prototype.toString.call(val).slice(8, -1)\n switch (objType) {\n case 'Array':\n case 'Uint8Array':\n case 'ArrayBuffer':\n\n return objType + '[' + val.length + ']'\n case 'Object':\n return '{}'\n default:\n return objType\n }\n}\n\nfunction logable (obj, maxDepth, depth) {\n if (!depth) depth = 1\n if (!maxDepth) maxDepth = 2\n const result = {}\n\n if (!obj || typeof obj !== 'object') {\n return obj\n }\n\n const objType = Object.prototype.toString.call(obj).slice(8, -1)\n if (!SIMPLE_TYPE.includes(objType)) {\n return objType\n }\n\n if (depth > maxDepth) {\n return undefined\n }\n\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (depth === maxDepth) {\n result[key] = reduceDepth(obj[key])\n } else if (typeof obj[key] === 'object') {\n result[key] = logable(obj[key], maxDepth, depth + 1)\n } else {\n result[key] = obj[key]\n }\n }\n }\n return result\n}\n\n","/* eslint-disable no-undef */\nimport { createPublicPromise, nowTime } from './utils'\nimport { Buffer } from './buffer'\nimport { StreamingError, ERR } from './error'\nimport { isBrowser } from './env'\nimport { Logger } from './logger'\n\nfunction getMediaSource () {\n try {\n return isBrowser ? window.MediaSource : null\n } catch (e) {}\n}\n\nconst MediaSource = getMediaSource()\n\n/** @enum {string} */\nexport const MSEErrorType = {\n UPDATE_ERROR: 'updateError'\n}\n\nconst OP_NAME = {\n APPEND: 'appendBuffer',\n REMOVE: 'removeBuffer'\n}\n\nexport class MSEError extends Error {\n /**\n * @param {MSEErrorType} type\n * @param {any} [msg]\n */\n constructor (type, msg) {\n super(msg || type)\n this.type = type\n this.msg = msg\n }\n}\n\nexport class MSE {\n /** @type { HTMLMediaElement | null } */\n media = null\n\n /** @type { MediaSource | null } */\n mediaSource = null\n\n _openPromise = createPublicPromise()\n\n _queue = Object.create(null)\n\n _sourceBuffer = Object.create(null)\n\n static VIDEO = 'video'\n\n static AUDIO = 'audio'\n\n _mseFullFlag = {}\n\n _st = 0\n\n _opst = 0\n\n _logger = null\n\n _config = null\n _url = null\n\n\n static getDefaultConfig () {\n return {\n openLog: false\n }\n }\n\n /**\n * @param {HTMLMediaElement} [media]\n */\n constructor (media, config) {\n this._config = Object.assign(MSE.getDefaultConfig(), config)\n if (media) this.bindMedia(media)\n this._logger = new Logger('MSE')\n if (this._config.openLog) {\n Logger.enable()\n }\n }\n\n get isOpened () {\n return this.mediaSource?.readyState === 'open'\n }\n\n get url () {\n return this._url\n }\n\n get duration () {\n return this.mediaSource?.duration || -1\n }\n\n get isEnded () {\n return this.mediaSource ? this.mediaSource.readyState === 'ended' : false\n }\n\n isFull (type) {\n return type ? this._mseFullFlag[type] : this._mseFullFlag[MSE.VIDEO]\n }\n\n /**\n * @param { number } duration\n * @return { Promise }\n */\n updateDuration (duration) {\n // 设置值比当前值小,会导致异常\n if (this.mediaSource && this.mediaSource.duration > duration) {\n return Promise.resolve()\n }\n\n return this._enqueueBlockingOp(() => {\n if (this.isEnded) {\n this._logger.debug('[debug mse] setDuration ended')\n return\n }\n if (this.mediaSource) {\n this.mediaSource.duration = duration\n this._logger.debug('[debug mse] setDuration')\n }\n }, 'updateDuration')\n }\n\n /** @return { Promise } */\n open () {\n if (this._openPromise.used && !this.isOpened && this.mediaSource) {\n const ms = this.mediaSource\n const onOpen = () => {\n const costtime = nowTime() - this._st\n this._logger.debug('MSE OPEN', costtime)\n ms.removeEventListener('sourceopen', onOpen)\n this._openPromise.resolve({costtime})\n }\n ms.addEventListener('sourceopen', onOpen)\n this._openPromise = createPublicPromise()\n }\n\n return this._openPromise\n }\n\n /**\n * @param { HTMLMediaElement } media\n * @return { Promise }\n */\n async bindMedia (media) {\n if (this.mediaSource || this.media) await this.unbindMedia()\n if (!media || !MediaSource) throw new Error('Param media or MediaSource does not exist')\n this.media = media\n const ms = this.mediaSource = new MediaSource()\n this._st = nowTime()\n\n const onOpen = () => {\n const costtime = nowTime() - this._st\n this._logger.debug('MSE OPEN')\n ms.removeEventListener('sourceopen', onOpen)\n URL.revokeObjectURL(media.src)\n this._openPromise.resolve({costtime})\n }\n ms.addEventListener('sourceopen', onOpen)\n this._url = URL.createObjectURL(ms)\n media.src = this._url\n return this._openPromise\n }\n\n /** @return { Promise } */\n async unbindMedia () {\n if (!this._openPromise.used) this._openPromise.resolve()\n const ms = this.mediaSource\n\n if (ms) {\n Object.keys(this._queue).forEach((t) => {\n const queue = this._queue[t]\n if (queue) {\n queue.forEach(x => x.promise.resolve)\n }\n })\n\n const hasMetadata = !!this.media && this.media.readyState >= 1\n const mseOpen = ms.readyState === 'open'\n\n if (hasMetadata && mseOpen) {\n try {\n ms.endOfStream()\n } catch (error) {\n // ignore\n }\n }\n\n Object.keys(this._sourceBuffer).forEach(k => {\n try {\n ms.removeSourceBuffer(this._sourceBuffer[k])\n } catch (error) {\n // ignore\n }\n })\n }\n\n if (this.media) {\n this.media.removeAttribute('src')\n try {\n this.media.load()\n } catch (error) {\n // ignore\n }\n this.media = null\n }\n\n this.mediaSource = null\n this._openPromise = createPublicPromise()\n this._queue = Object.create(null)\n this._sourceBuffer = Object.create(null)\n }\n\n /**\n * @param { string } type\n * @param { string } mimeType\n */\n createSource (type, mimeType) {\n if (this._sourceBuffer[type] || !this.mediaSource) return\n let sb\n try {\n sb = this._sourceBuffer[type] = this.mediaSource.addSourceBuffer(mimeType)\n } catch (error) {\n throw new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_ADD_SB, error)\n }\n sb.mimeType = mimeType\n sb.addEventListener('updateend', this._onSBUpdateEnd.bind(this, type))\n sb.addEventListener('error', this._onSBUpdateError.bind(this, type))\n }\n\n /**\n * @param { string } type\n * @param { string } mimeType\n * @return { Promise }\n */\n changeType (type, mimeType) {\n const sb = this._sourceBuffer[type]\n if (!this.mediaSource || !sb || sb.mimeType === mimeType || typeof sb.changeType !== 'function') return Promise.resolve()\n\n return this._enqueueOp(type, () => {\n sb.changeType(mimeType)\n sb.mimeType = mimeType\n this._onSBUpdateEnd(type)\n })\n }\n\n /**\n * @param { string } type\n * @param { string } mimeType\n * @return { Promise }\n */\n createOrChangeSource (type, mimeType) {\n this.createSource(type, mimeType)\n return this.changeType(type, mimeType)\n }\n\n /**\n * @param { string } type\n * @param { BufferSource } buffer\n * @return { Promise }\n */\n append (type, buffer, context) {\n if (!buffer || !buffer.byteLength) {\n return Promise.resolve()\n }\n\n if (!this._sourceBuffer[type]) return Promise.resolve()\n\n return this._enqueueOp(type, () => {\n if (!this.mediaSource) return\n this._logger.debug('MSE APPEND START', context)\n this._opst = nowTime()\n this._sourceBuffer[type]?.appendBuffer(buffer)\n }, OP_NAME.APPEND, context)\n\n }\n\n /**\n * @param { string } type\n * @param { number } startTime\n * @param { number } endTime\n * @return { Promise }\n */\n remove (type, startTime, endTime, context) {\n // if (Object.keys(this._sourceBuffer).length === 1) return Promise.resolve()\n let isInsertHead = false\n if (this._mseFullFlag[type]) {\n isInsertHead = true\n }\n return this._enqueueOp(type, () => {\n if (!this.mediaSource) return\n const sb = this._sourceBuffer[type]\n if (startTime >= endTime || !sb) {\n this._onSBUpdateEnd(type)\n return\n }\n this._opst = nowTime()\n this._logger.debug('MSE REMOVE START', type, startTime, endTime, context)\n sb.remove(startTime, endTime)\n }, OP_NAME.REMOVE, context, isInsertHead)\n }\n\n clearBuffer (startTime, endTime) {\n let p\n Object.keys(this._sourceBuffer).forEach(k => {\n p = this._enqueueOp(k, () => {\n if (!this.mediaSource) return\n const sb = this._sourceBuffer[k]\n this._logger.debug('MSE clearBuffer START', k, startTime, endTime)\n sb.remove(startTime, endTime)\n })\n })\n return p\n }\n\n clearAllBuffer () {\n let p\n Object.keys(this._sourceBuffer).forEach(k => {\n p = this._enqueueOp(k, () => {\n if (!this.mediaSource) return\n const sb = this._sourceBuffer[k]\n this._logger.debug('MSE clearAllBuffer START', k)\n sb.remove(0, Buffer.end(Buffer.get(sb)))\n })\n })\n return p\n }\n\n clearOpQueues (type) {\n this._logger.debug('MSE clearOpQueue START')\n const queue = this._queue[type]\n if (!queue || !queue[type] || queue.length < 5) return\n const initOpque = []\n queue.forEach(op => {\n if (op.context && op.context.isinit) {\n initOpque.push(op)\n }\n })\n this._queue[type] = queue.slice(0, 2)\n initOpque.length > 0 && this._queue[type].push(...initOpque)\n }\n\n /**\n * @param {EndOfStreamError} [reason]\n * @returns {Promise}\n */\n endOfStream (reason) {\n if (!this.mediaSource || this.mediaSource.readyState !== 'open') return Promise.resolve()\n return this._enqueueBlockingOp(() => {\n const ms = this.mediaSource\n if (!ms || ms.readyState !== 'open') return\n this._logger.debug('MSE endOfStream START')\n if (reason) {\n ms.endOfStream(reason)\n } else {\n ms.endOfStream()\n }\n }, 'endOfStream')\n }\n\n setLiveSeekableRange (start, end) {\n const ms = this.mediaSource\n if (start < 0 || end < start || !ms?.setLiveSeekableRange || ms.readyState !== 'open') return\n ms.setLiveSeekableRange(start, end)\n }\n\n /**\n * @param {string} type\n * @returns {?SourceBuffer}\n */\n getSourceBuffer (type) {\n return this._sourceBuffer[type]\n }\n\n /**\n * @param { string } type\n * @return { TimeRanges | void }\n */\n buffered (type) {\n return Buffer.get(this._sourceBuffer[type])\n }\n\n /**\n * @param { string } type\n * @return { number }\n */\n bufferStart (type) {\n return Buffer.start(this.buffered(type))\n }\n\n /**\n * @param { string } type\n * @return { number }\n */\n bufferEnd (type) {\n return Buffer.end(this.buffered(type))\n }\n\n _enqueueOp (type, exec, opName, context, isInsertHead) {\n if (!this.mediaSource) return Promise.resolve()\n const queue = this._queue[type] = this._queue[type] || []\n const op = {\n exec,\n promise: createPublicPromise(),\n opName,\n context\n }\n\n if (isInsertHead) {\n queue.splice(0, 0, op)\n this._mseFullFlag[type] = false\n this._startQueue(type)\n } else {\n queue.push(op)\n }\n\n if (this.isOpened) {\n if (queue.length === 1) {\n this._startQueue(type)\n }\n } else {\n this._openPromise.then(() => {\n if (queue.length === 1) {\n this._startQueue(type)\n }\n })\n }\n\n\n return op.promise\n }\n\n async _enqueueBlockingOp (exec, opName) {\n if (!this.mediaSource) return Promise.resolve()\n const types = Object.keys(this._sourceBuffer)\n if (!types.length) {\n return exec()\n }\n\n const waiters = []\n types.forEach(t => {\n const queue = this._queue[t]\n const prom = createPublicPromise()\n waiters.push(prom)\n queue.push({exec: () => prom.resolve(), promise: prom, opName})\n if (queue.length === 1) {\n this._startQueue(t)\n }\n })\n\n return Promise.all(waiters).then(() => {\n try {\n return exec()\n } finally {\n types.forEach(t => {\n const queue = this._queue[t]\n const sb = this._sourceBuffer[t]\n queue?.shift()\n if (!sb || !sb.updating) {\n this._startQueue(t)\n }\n })\n }\n })\n }\n\n _startQueue (type) {\n const queue = this._queue[type]\n if (queue) {\n const op = queue[0]\n if (op && !this._mseFullFlag[type]) {\n try {\n op.exec()\n } catch (error) {\n if (error && error.message && error.message.indexOf('SourceBuffer is full') >= 0) {\n this._mseFullFlag[type] = true\n this._logger.error('[MSE error], context,', op.context, ' ,name,', op.opName, ',err,SourceBuffer is full')\n op.promise.reject(new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_FULL, error))\n } else {\n this._logger.error(error)\n op.promise.reject(new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_OTHER, error))\n queue.shift()\n this._startQueue(type)\n }\n }\n }\n }\n }\n\n _onSBUpdateEnd = (type) => {\n const queue = this._queue[type]\n if (queue) {\n const op = queue.shift()\n if (op) {\n const costtime = nowTime() - this._opst\n this._logger.debug('UpdateEnd', op.opName, costtime, op.context)\n op.promise.resolve({name: op.opName, context: op.context, costtime})\n this._startQueue(type)\n }\n }\n }\n\n _onSBUpdateError = (type, event) => {\n const queue = this._queue[type]\n if (queue) {\n const op = queue[0]\n if (op) {\n this._logger.error('UpdateError', type, op.opName, op.context)\n op.promise.reject(new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_APPEND_BUFFER, event))\n // Do not shift from queue, 'updateend' event will fire next\n }\n }\n }\n\n /**\n * @param {string} [mime='video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"']\n * @returns {boolean}\n */\n static isSupported (mime = 'video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"') {\n if (!MediaSource) return false\n try {\n return MediaSource.isTypeSupported(mime)\n } catch (error) {\n this._logger.error(mime, error)\n return false\n }\n }\n\n setTimeoffset (type, timestampOffset, context) {\n return this._enqueueOp(type, () => {\n if (timestampOffset < 0) {\n timestampOffset += 0.001\n }\n this._sourceBuffer[type].timestampOffset = timestampOffset\n this._onSBUpdateEnd(type)\n }, 'setTimeoffset', context)\n }\n\n /** *重置decode时间戳 */\n abort (type, context) {\n if (!this.isOpened) {\n return Promise.resolve()\n }\n return this._enqueueOp(type, () => {\n this._sourceBuffer[type].abort()\n this._onSBUpdateEnd(type)\n }, 'abort', context)\n }\n}\n","export const LoaderType = {\n FETCH: 'fetch',\n XHR: 'xhr'\n}\n\nexport const ResponseType = {\n ARRAY_BUFFER: 'arraybuffer',\n TEXT: 'text',\n JSON: 'json'\n}\n","import { LoaderType } from './types'\n\nexport class NetError extends Error {\n retryCount = 0\n isTimeout = false\n loaderType = LoaderType.FETCH\n startTime = 0\n endTime = 0\n options = {}\n\n constructor (url, request, response, msg) {\n super(msg)\n this.url = url\n this.request = request\n this.response = response\n }\n}\n","const toString = Object.prototype.toString\n\nexport function isObject (a) {\n return a !== null && typeof a === 'object'\n}\n\nexport function isPlainObject (val) {\n if (toString.call(val) !== '[object Object]') {\n return false\n }\n\n const prototype = Object.getPrototypeOf(val)\n return prototype === null || prototype === Object.prototype\n}\n\nexport function isDate (a) {\n return toString.call(a) === '[object Date]'\n}\n\nexport function isNumber (n) {\n return typeof n === 'number' && !Number.isNaN(n)\n}\n","import { isDate, isObject } from '../is'\n\nexport function getRangeValue (value) {\n if (!value || value[0] === null || value[0] === undefined || (value[0] === 0 && (value[1] === null || value[1] === undefined))) {\n return\n }\n let ret = 'bytes=' + value[0] + '-'\n if (value[1]) ret += value[1]\n return ret\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nexport function setUrlParams (url, params) {\n if (!url) return\n if (!params) return url\n let v\n const str = Object.keys(params).map(k => {\n v = params[k]\n if (v === null || v === undefined) return\n if (Array.isArray(v)) {\n k = k + '[]'\n } else {\n v = [v]\n }\n\n return v.map(x => {\n if (isDate(x)) {\n x = x.toISOString()\n } else if (isObject(x)) {\n x = JSON.stringify(x)\n }\n return `${encode(k)}=${encode(x)}`\n }).join('&')\n }).filter(Boolean).join('&')\n\n if (str) {\n const hashIndex = url.indexOf('#')\n if (hashIndex !== -1) {\n url = url.slice(0, hashIndex)\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + str\n }\n\n return url\n}\n\nexport function createResponse (\n data,\n done,\n response,\n contentLength,\n age,\n startTime,\n firstByteTime,\n index,\n range,\n vid,\n priOptions\n) {\n age = (age !== null && age !== undefined) ? parseFloat(age) : null\n contentLength = parseInt(contentLength || '0', 10)\n if (Number.isNaN(contentLength)) contentLength = 0\n const option = { range, vid, index, contentLength, age, startTime, firstByteTime, endTime: Date.now(), priOptions }\n return { data, done, option, response }\n}\n\nexport function calculateSpeed (byteLen, millisec) {\n return Math.round(byteLen * 8 * 1000 / millisec / 1024)\n}\n","export const EVENT = {\n ERROR: 'error',\n\n TTFB: 'core.ttfb',\n LOAD_START: 'core.loadstart',\n LOAD_RESPONSE_HEADERS: 'core.loadresponseheaders',\n LOAD_COMPLETE: 'core.loadcomplete',\n LOAD_RETRY: 'core.loadretry',\n SOURCEBUFFER_CREATED: 'core.sourcebuffercreated',\n ANALYZE_DURATION_EXCEEDED: 'core.analyzedurationexceeded',\n REMOVE_BUFFER: 'core.removebuffer',\n BUFFEREOS: 'core.buffereos',\n KEYFRAME: 'core.keyframe',\n METADATA_PARSED: 'core.metadataparsed',\n SEI: 'core.sei',\n SEI_IN_TIME: 'core.seiintime',\n FLV_SCRIPT_DATA: 'core.flvscriptdata',\n LOWDECODE: 'core.lowdecode',\n SWITCH_URL_SUCCESS: 'core.switchurlsuccess',\n SWITCH_URL_FAILED: 'core.switchurlfailed',\n SPEED: 'core.speed',\n HLS_MANIFEST_LOADED: 'core.hlsmanifestloaded',\n HLS_LEVEL_LOADED: 'core.hlslevelloaded',\n DEMUXED_TRACK:'core.demuxedtrack',\n\n STREAM_EXCEPTION: 'core.streamexception',\n LARGE_AV_FIRST_FRAME_GAP_DETECT: 'LARGE_AV_FIRST_FRAME_GAP_DETECT',\n LARGE_VIDEO_DTS_GAP_DETECT: 'LARGE_VIDEO_DTS_GAP_DETECT',\n LARGE_AUDIO_DTS_GAP_DETECT: 'LARGE_AUDIO_DTS_GAP_DETECT',\n AUDIO_GAP_DETECT: 'AUDIO_GAP_DETECT',\n AUDIO_OVERLAP_DETECT: 'AUDIO_OVERLAP_DETECT',\n MAX_DTS_DELTA_WITH_NEXT_SEGMENT_DETECT: 'MAX_DTS_DELTA_WITH_NEXT_SEGMENT_DETECT',\n REAL_TIME_SPEED: 'real_time_speed'\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import { NetError } from './error'\nimport { createResponse, getRangeValue, setUrlParams, calculateSpeed } from './helper'\nimport { ResponseType } from './types'\nimport { EVENT } from '../event'\nimport EventEmitter from 'eventemitter3'\nconst CACHESIZE = 2 * 1024 * 1024\nexport class FetchLoader extends EventEmitter {\n _abortController = null\n _timeoutTimer = null\n _reader = null\n _response = null\n _aborted = false\n _index = -1\n _range = null\n _receivedLength = 0\n _running = false\n _logger = null\n _vid = ''\n _onProcessMinLen = 0\n _onCancel = null\n _priOptions = null // 比较私有化的参数传递,回调时候透传\n\n constructor () {\n super()\n }\n\n load ({\n url,\n vid,\n timeout, // ms\n responseType,\n onProgress,\n index,\n onTimeout,\n onCancel,\n range,\n transformResponse,\n request,\n params,\n logger,\n\n method,\n headers,\n body,\n mode,\n credentials,\n cache,\n redirect,\n referrer,\n referrerPolicy,\n onProcessMinLen,\n priOptions\n }) {\n this._logger = logger\n this._aborted = false\n this._onProcessMinLen = onProcessMinLen\n this._onCancel = onCancel\n this._abortController = typeof AbortController !== 'undefined' && new AbortController()\n this._running = true\n this._index = index\n this._range = range || [0, 0]\n this._vid = vid || url\n this._priOptions = priOptions || {}\n const init = {\n method,\n headers,\n body,\n mode,\n credentials,\n cache,\n redirect,\n referrer,\n referrerPolicy,\n signal: this._abortController?.signal\n }\n\n let isTimeout = false\n clearTimeout(this._timeoutTimer)\n\n url = setUrlParams(url, params)\n\n const rangeValue = getRangeValue(range)\n if (rangeValue) {\n if (request) {\n headers = request.headers\n } else {\n headers = init.headers = init.headers || (Headers ? new Headers() : {})\n }\n if (Headers && headers instanceof Headers) {\n headers.append('Range', rangeValue)\n } else {\n headers.Range = rangeValue\n }\n }\n\n if (timeout) {\n this._timeoutTimer = setTimeout(() => {\n isTimeout = true\n this.cancel()\n if (onTimeout) {\n const error = new NetError(url, init, null, 'timeout')\n error.isTimeout = true\n onTimeout(error, {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions})\n }\n }, timeout)\n }\n\n const startTime = Date.now()\n this._logger.debug('[fetch load start], index,', index, ',range,', range)\n return new Promise((resolve, reject) => {\n fetch(request || url, request ? undefined : init).then(async (response) => {\n clearTimeout(this._timeoutTimer)\n this._response = response\n if (this._aborted || !this._running) return\n if (transformResponse) {\n response = transformResponse(response, url) || response\n }\n if (!response.ok) {\n throw new NetError(url, init, response, 'bad network response')\n }\n\n const firstByteTime = Date.now()\n let data\n if (responseType === ResponseType.TEXT) {\n data = await response.text()\n this._running = false\n } else if (responseType === ResponseType.JSON) {\n data = await response.json()\n this._running = false\n } else {\n if (onProgress) {\n this.resolve = resolve\n this.reject = reject\n this._loadChunk(response, onProgress, startTime, firstByteTime)\n return\n } else {\n data = await response.arrayBuffer()\n data = new Uint8Array(data)\n this._running = false\n const costTime = Date.now() - startTime\n const speed = calculateSpeed(data.byteLength, costTime)\n this.emit(EVENT.REAL_TIME_SPEED, {speed,len: data.byteLength, time: costTime, vid: this._vid, index: this._index, range: this._range, priOptions: this._priOptions})\n }\n }\n this._logger.debug('[fetch load end], index,', index, ',range,', range)\n resolve(createResponse(\n data,\n true,\n response,\n response.headers.get('Content-Length'),\n response.headers.get('age'),\n startTime,\n firstByteTime,\n index,\n range,\n this._vid,\n this._priOptions\n ))\n }).catch((error) => {\n clearTimeout(this._timeoutTimer)\n this._running = false\n if (this._aborted && !isTimeout) return\n error = error instanceof NetError ? error : new NetError(url, init, null, error?.message)\n error.startTime = startTime\n error.endTime = Date.now()\n error.isTimeout = isTimeout\n error.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n reject(error)\n })\n })\n }\n\n async cancel () {\n if (this._aborted) return\n this._aborted = true\n this._running = false\n if (this._response) {\n try {\n // await this._response.body.cancel()\n if (this._reader) {\n await this._reader.cancel()\n }\n } catch (error) {\n // ignore\n }\n this._response = this._reader = null\n }\n\n if (this._abortController) {\n try {\n this._abortController.abort()\n } catch (error) {\n // ignore\n }\n this._abortController = null\n }\n if (this._onCancel) {\n this._onCancel({index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions})\n }\n }\n\n _loadChunk (response, onProgress, st, firstByteTime) {\n if (!response.body || !response.body.getReader) {\n this._running = false\n const err = new NetError(response.url, '', response, 'onProgress of bad response.body.getReader')\n err.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n this.reject(err)\n return\n }\n if (this._onProcessMinLen > 0) {\n this._cache = new Uint8Array(CACHESIZE)\n this._writeIdx = 0\n }\n const reader = this._reader = response.body.getReader()\n let data\n\n let startTime\n let endTime\n const pump = async () => {\n startTime = Date.now()\n try {\n data = await reader.read()\n endTime = Date.now()\n } catch (e) {\n // request aborted\n endTime = Date.now()\n if (!this._aborted) {\n this._running = false\n e.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n this.reject(e)\n }\n return\n }\n const startRange = this._range?.length > 0 ? this._range[0] : 0\n const startByte = startRange + this._receivedLength\n if (this._aborted) {\n this._running = false\n onProgress(undefined, false, { range: [startByte, startByte], vid: this._vid, index: this._index, startTime, endTime, st, firstByteTime, priOptions:this._priOptions }, response)\n return\n }\n const curLen = data.value ? data.value.byteLength : 0\n this._receivedLength += curLen\n this._logger.debug('【fetchLoader,onProgress call】,task,', this._range, ', start,', startByte, ', end,', startRange + this._receivedLength, ', done,', data.done)\n let retData\n if (this._onProcessMinLen > 0) {\n if (this._writeIdx + curLen >= this._onProcessMinLen || data.done) {\n retData = new Uint8Array(this._writeIdx + curLen)\n retData.set(this._cache.slice(0, this._writeIdx), 0)\n curLen > 0 && retData.set(data.value, this._writeIdx)\n this._writeIdx = 0\n this._logger.debug('【fetchLoader,onProgress enough】,done,', data.done, ',len,', retData.byteLength, ', writeIdx,', this._writeIdx)\n } else {\n if (curLen > 0 && this._writeIdx + curLen < CACHESIZE) {\n this._cache.set(data.value, this._writeIdx)\n this._writeIdx += curLen\n this._logger.debug('【fetchLoader,onProgress cache】,len,', curLen, ', writeIdx,', this._writeIdx)\n } else if (curLen > 0) {\n const temp = new Uint8Array(this._writeIdx + curLen + 2048)\n this._logger.debug('【fetchLoader,onProgress extra start】,size,', this._writeIdx + curLen + 2048, ', datalen,', curLen, ', writeIdx,', this._writeIdx)\n temp.set(this._cache.slice(0, this._writeIdx), 0)\n curLen > 0 && temp.set(data.value, this._writeIdx)\n this._writeIdx += curLen\n delete this._cache\n this._cache = temp\n this._logger.debug('【fetchLoader,onProgress extra end】,len,', curLen, ', writeIdx,', this._writeIdx)\n }\n }\n } else {\n retData = data.value\n }\n if (retData && retData.byteLength > 0 || data.done) {\n onProgress(retData, data.done, {\n range: [this._range[0] + this._receivedLength - (retData ? retData.byteLength : 0), this._range[0] + this._receivedLength],\n vid: this._vid,\n index: this._index,\n startTime,\n endTime,\n st,\n firstByteTime,\n priOptions:this._priOptions\n }, response)\n }\n if (!data.done) {\n pump()\n } else {\n const costTime = Date.now() - st\n const speed = calculateSpeed(this._receivedLength, costTime)\n this.emit(EVENT.REAL_TIME_SPEED, {speed,len: this._receivedLength, time: costTime, vid: this._vid, index: this._index, range: this._range, priOptions: this._priOptions})\n this._running = false\n this._logger.debug('[fetchLoader onProgress end],task,', this._range, ',done,', data.done)\n this.resolve(createResponse(\n data,\n true,\n response,\n response.headers.get('Content-Length'),\n response.headers.get('age'),\n st,\n firstByteTime,\n this._index,\n this._range,\n this._vid,\n this._priOptions\n ))\n }\n }\n pump()\n }\n\n get receiveLen () {\n return this._receivedLength\n }\n\n get running () {\n return this._running\n }\n\n set running (status) {\n this._running = status\n }\n\n static isSupported () {\n return !!(typeof fetch !== 'undefined')\n }\n}\n","import { NetError } from './error'\nimport { createResponse, getRangeValue, setUrlParams, calculateSpeed } from './helper'\nimport { ResponseType } from './types'\nimport { EVENT } from '../event'\nimport EventEmitter from 'eventemitter3'\nexport class XhrLoader extends EventEmitter {\n\n _xhr = null\n _aborted = false\n _timeoutTimer = null\n _range = null\n _receivedLength = 0\n _url = null\n _onProgress = null\n _index = -1\n _headers = null\n // _chunkSizeKBList = [\n // 128, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 5120, 6144, 7168, 8192\n // ]\n\n _currentChunkSizeKB = 384\n _timeout = null\n _xhr = null\n _withCredentials = null\n _startTime = -1\n // _speedSampler = new SpeedSampler()\n _loadCompleteResolve = null\n _loadCompleteReject = null\n _runing = false\n _logger = false\n _vid = ''\n _responseType\n _credentials\n _method\n _transformResponse\n _firstRtt\n _onCancel = null\n _priOptions = null // 比较私有化的参数传递,回调时候透传\n\n\n constructor () {\n super()\n }\n\n load (req) {\n clearTimeout(this._timeoutTimer)\n this._logger = req.logger\n this._range = req.range\n this._onProgress = req.onProgress\n this._index = req.index\n this._headers = req.headers\n this._withCredentials = req.credentials === 'include' || req.credentials === 'same-origin'\n this._body = req.body || null\n req.method && (this._method = req.method)\n this._timeout = req.timeout || null\n this._runing = true\n this._vid = req.vid || req.url\n this._responseType = req.responseType\n this._firstRtt = -1\n this._onTimeout = req.onTimeout\n this._onCancel = req.onCancel\n this._request = req.request\n this._priOptions = req.priOptions || {}\n this._logger.debug('【xhrLoader task】, range', this._range)\n\n this._url = setUrlParams(req.url, req.params)\n\n const startTime = Date.now()\n return new Promise((resolve, reject) => {\n this._loadCompleteResolve = resolve\n this._loadCompleteReject = reject\n this._startLoad()\n }).catch((error) => {\n clearTimeout(this._timeoutTimer)\n this._runing = false\n if (this._aborted) return\n error = error instanceof NetError ? error : new NetError(this._url, this._request)\n error.startTime = startTime\n error.endTime = Date.now()\n error.options = {index: this._index, vid: this._vid, priOptions: this._priOptions}\n throw error\n })\n }\n\n _startLoad () {\n let range = null\n if (this._responseType === ResponseType.ARRAY_BUFFER && this._range && this._range.length > 1) {\n if (this._onProgress) {\n this._firstRtt = -1\n const chunkSize = this._currentChunkSizeKB * 1024\n const from = this._range[0] + this._receivedLength\n let to = this._range[1]\n if (chunkSize < this._range[1] - from) {\n to = from + chunkSize\n }\n range = [from, to]\n this._logger.debug('[xhr_loader->],tast :', this._range, ', SubRange, ', range)\n } else {\n range = this._range\n this._logger.debug('[xhr_loader->],tast :', this._range, ', allRange, ', range)\n }\n }\n this._internalOpen(range)\n }\n\n _internalOpen (range) {\n try {\n this._startTime = Date.now()\n const xhr = this._xhr = new XMLHttpRequest()\n xhr.open(this._method || 'GET', this._url, true)\n xhr.responseType = this._responseType\n this._timeout && (xhr.timeout = this._timeout)\n xhr.withCredentials = this._withCredentials\n xhr.onload = this._onLoad.bind(this)\n xhr.onreadystatechange = this._onReadyStatechange.bind(this)\n xhr.onerror = (errorEvent) => {\n this._running = false\n const error = new NetError(this._url, this._request, errorEvent?.currentTarget?.response, ('xhr.onerror.status:' + errorEvent?.currentTarget?.status + ',statusText,' + errorEvent?.currentTarget?.statusText))\n error.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n this._loadCompleteReject(error)\n }\n xhr.ontimeout = (event) => {\n this.cancel()\n const error = new NetError(this._url, this._request, {status:408}, 'timeout')\n if (this._onTimeout) {\n error.isTimeout = true\n this._onTimeout(error,{index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions})\n }\n error.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n this._loadCompleteReject(error)\n }\n const headers = this._headers || {}\n const rangeValue = getRangeValue(range)\n if (rangeValue) {\n headers.Range = rangeValue\n }\n if (headers) {\n Object.keys(headers).forEach(k => {\n xhr.setRequestHeader(k, headers[k])\n })\n }\n this._logger.debug('[xhr.send->] tast,', this._range, ',load sub range, ', range)\n xhr.send(this._body)\n } catch (e) {\n e.options = {index: this._index, range, vid: this._vid, priOptions: this._priOptions}\n this._loadCompleteReject(e)\n }\n }\n\n _onReadyStatechange (e) {\n const xhr = e.target\n if (xhr.readyState === 2) {\n this._firstRtt < 0 && (this._firstRtt = Date.now())\n }\n }\n\n _onLoad (e) {\n const status = e.target.status\n if (status < 200 || status > 299) {\n const error = new NetError(this._url, null, { ...e.target.response, status }, 'bad response,status:' + status)\n error.options = {index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions}\n return this._loadCompleteReject(error)\n }\n let data = null\n let done = false\n let byteStart\n const startRange = (this._range?.length > 0 ? this._range [0] : 0 )\n if (this._responseType === ResponseType.ARRAY_BUFFER) {\n const chunk = new Uint8Array(e.target.response)\n byteStart = startRange + this._receivedLength\n if (chunk && chunk.byteLength > 0) {\n this._receivedLength += chunk.byteLength\n const costTime = Date.now() - this._startTime\n const speed = calculateSpeed(this._receivedLength, costTime)\n this.emit(EVENT.REAL_TIME_SPEED, {speed, len: this._receivedLength, time: costTime, vid: this._vid, index: this._index, range: [byteStart, startRange + this._receivedLength], priOptions: this._priOptions})\n }\n data = chunk\n if (this._range?.length > 1 && this._range[1] && this._receivedLength < this._range[1] - this._range[0]) {\n done = false\n } else {\n done = true\n }\n this._logger.debug('[xhr load done->], tast :', this._range, ', start', byteStart, 'end ', startRange + this._receivedLength, ',dataLen,', (chunk ? chunk.byteLength : 0), ',receivedLength', this._receivedLength, ',index,', this._index, ', done,', done)\n } else {\n done = true\n data = e.target.response\n }\n let response = {\n ok: status >= 200 && status < 300,\n status,\n statusText: this._xhr.statusText,\n url: this._xhr.responseURL,\n headers: this._getHeaders(this._xhr),\n body: this._xhr.response\n }\n if (this._transformResponse) {\n response = this._transformResponse(response, this._url) || response\n }\n if (this._onProgress) {\n this._onProgress(data, done, { index: this._index, vid: this._vid, range: [byteStart, startRange + this._receivedLength], startTime: this._startTime, endTime: Date.now(), priOptions: this._priOptions }, response)\n }\n\n if (!done) {\n this._startLoad()\n } else {\n this._runing = false\n this._loadCompleteResolve && this._loadCompleteResolve(createResponse(\n this._onProgress ? null : data,\n done,\n response,\n response.headers['content-length'],\n response.headers.age,\n this._startTime,\n this._firstRtt,\n this._index,\n this._range,\n this._vid,\n this._priOptions\n ))\n }\n }\n\n cancel () {\n if (this._aborted) return\n this._aborted = true\n this._runing = false\n super.removeAllListeners()\n if (this._onCancel) {\n this._onCancel({index: this._index, range: this._range, vid: this._vid, priOptions: this._priOptions})\n }\n if (this._xhr) {\n return this._xhr.abort()\n }\n }\n\n static isSupported () {\n return typeof XMLHttpRequest !== 'undefined'\n }\n\n get receiveLen () {\n return this._receivedLength\n }\n\n get running () {\n return this._running\n }\n\n set running (status) {\n this._running = status\n }\n\n _getHeaders (xhr) {\n const headerLines = xhr.getAllResponseHeaders().trim().split('\\r\\n')\n const headers = {}\n for (const header of headerLines) {\n const parts = header.split(': ')\n headers[parts[0].toLowerCase()] = parts.slice(1).join(': ')\n }\n return headers\n }\n}\n","import { FetchLoader } from './fetch'\nimport { XhrLoader } from './xhr'\nimport { LoaderType } from './types'\nimport { createPublicPromise } from '../utils'\nimport { Logger } from '../logger'\n\nexport class Task {\n constructor (type, config) {\n this.promise = createPublicPromise()\n this.alive = !!config.onProgress\n !config.logger && (config.logger = new Logger('Loader'))\n this._loaderType = type\n this._loader = type === LoaderType.FETCH && !!window.fetch ? new FetchLoader() : new XhrLoader()\n this._config = config\n this._retryCount = 0\n this._retryTimer = null\n this._canceled = false\n this._retryCheckFunc = config.retryCheckFunc\n this._logger = config.logger\n }\n\n exec () {\n const {\n retry,\n retryDelay,\n onRetryError,\n transformError,\n ...rest\n } = this._config\n\n const request = async () => {\n try {\n const response = await this._loader.load(rest)\n this.promise.resolve(response)\n } catch (e) {\n this._loader.running = false\n this._logger.debug('[task request catch err]', e)\n if (this._canceled) return\n\n e.loaderType = this._loaderType\n e.retryCount = this._retryCount\n\n let error = e\n if (transformError) {\n error = transformError(error) || error\n }\n\n if (onRetryError && this._retryCount > 0) onRetryError(error, this._retryCount, {index: rest.index, vid: rest.vid, range: rest.range, priOptions: rest.priOptions})\n\n this._retryCount++\n let isRetry = true\n if (this._retryCheckFunc) {\n isRetry = this._retryCheckFunc(e)\n }\n if (isRetry && this._retryCount <= retry) {\n clearTimeout(this._retryTimer)\n this._logger.debug('[task request setTimeout],retry', this._retryCount, ',retry range,', rest.range)\n this._retryTimer = setTimeout(request, retryDelay)\n return\n }\n this.promise.reject(error)\n }\n }\n\n request()\n return this.promise\n }\n\n async cancel () {\n clearTimeout(this._retryTimer)\n this._canceled = true\n this._loader.running = false\n return this._loader.cancel()\n }\n\n get running () {\n return this._loader && this._loader.running\n }\n\n get loader () {\n return this._loader\n }\n}\n","export function isMediaPlaying (media) {\n return media && !media.paused && !media.ended && media.playbackRate !== 0 && media.readyState !== 0\n}\n\nexport function getVideoPlaybackQuality (video) {\n if (!video) return {}\n if (typeof video.getVideoPlaybackQuality === 'function') {\n const info = video.getVideoPlaybackQuality()\n return {\n droppedVideoFrames: info.droppedVideoFrames || info.corruptedVideoFrames,\n totalVideoFrames: info.totalVideoFrames,\n creationTime: info.creationTime\n }\n }\n\n return {\n droppedVideoFrames: video.webkitDroppedFrameCount,\n totalVideoFrames: video.webkitDecodedFrameCount,\n creationTime: performance.now()\n }\n}\n\n/**\n * @param {Array.<Uint8Array>} arr\n * @returns\n */\nexport function concatUint8Array (...arr) {\n arr = arr.filter(Boolean)\n if (arr.length < 2) return arr[0]\n const data = new Uint8Array(arr.reduce((p, c) => p + c.byteLength, 0))\n let prevLen = 0\n arr.forEach((d) => {\n data.set(d, prevLen)\n prevLen += d.byteLength\n })\n return data\n}\n\nexport function sleep (t = 0) {\n return new Promise((resolve) => setTimeout(resolve, t))\n}\n","import { FetchLoader } from './fetch'\nimport { LoaderType, ResponseType } from './types'\nimport { getConfig } from './config'\nimport { Task } from './task'\nimport { isPlainObject } from '../is'\nimport { sleep } from '../streaming-helper'\nimport { EVENT } from '../event'\nimport EventEmitter from 'eventemitter3'\n\nexport {\n LoaderType,\n ResponseType\n}\n\nexport class NetLoader extends EventEmitter {\n type = LoaderType.FETCH\n\n _queue = []\n\n _alive = []\n\n _currentTask = null\n\n _config\n\n constructor (cfg) {\n super(cfg)\n this._config = getConfig(cfg)\n if (\n this._config.loaderType === LoaderType.XHR ||\n !FetchLoader.isSupported()\n ) {\n this.type = LoaderType.XHR\n }\n this.log = cfg.logger\n }\n\n isFetch () {\n return this.type === LoaderType.FETCH\n }\n\n static isFetchSupport () {\n return FetchLoader.isSupported()\n }\n\n load (url, config = {}) {\n if (typeof url === 'string' || !url) {\n config.url = url || config.url || this._config.url\n } else {\n config = url\n }\n\n config = Object.assign({}, this._config, config)\n if (config.params) config.params = Object.assign({}, config.params)\n if (config.headers && isPlainObject(config.headers)) config.headers = Object.assign({}, config.headers)\n if (config.body && isPlainObject(config.body)) config.body = Object.assign({}, config.body)\n\n if (config.transformRequest) {\n config = config.transformRequest(config) || config\n }\n config.logger = this.log\n\n const task = new Task(this.type, config)\n task.loader.on(EVENT.REAL_TIME_SPEED, (data) => {\n this.emit(EVENT.REAL_TIME_SPEED, data)\n })\n this._queue.push(task)\n if (this._queue.length === 1 && (!this._currentTask || !this._currentTask.running)) {\n this._processTask()\n }\n\n return task.promise\n }\n\n async cancel () {\n const cancels = this._queue.map(t => t.cancel()).concat(this._alive.map(t => t.cancel()))\n if (this._currentTask) {\n cancels.push(this._currentTask.cancel())\n }\n this._queue = []\n this._alive = []\n await Promise.all(cancels)\n await sleep()\n }\n\n _processTask () {\n this._currentTask = this._queue.shift()\n if (!this._currentTask) return\n\n if (this._currentTask.alive) {\n this._alive.push(this._currentTask)\n }\n const req = this._currentTask.exec().catch(e => {})\n\n if (!(req && typeof req.finally === 'function')) return\n\n req.finally(() => {\n if (this._currentTask?.alive && this._alive?.length > 0) {\n this._alive = this._alive.filter(task => task && task !== this._currentTask)\n }\n this._processTask()\n })\n\n }\n}\n","import { LoaderType, ResponseType } from './types'\n\nexport function getConfig (cfg) {\n return {\n loaderType: LoaderType.FETCH,\n retry: 0,\n retryDelay: 0, // ms\n timeout: 0,\n request: null, // Request\n onTimeout: undefined,\n onProgress: undefined,\n onRetryError: undefined,\n transformRequest: undefined,\n transformResponse: undefined,\n transformError: undefined,\n responseType: ResponseType.TEXT,\n range: undefined,\n url: '',\n params: undefined,\n method: 'GET',\n headers: {},\n body: undefined,\n mode: undefined,\n credentials: undefined,\n cache: undefined,\n redirect: undefined,\n referrer: undefined,\n referrerPolicy: undefined,\n integrity: undefined,\n onProcessMinLen: 0,\n ...cfg\n }\n}\n","/** @enum {string} */\nexport const TrackType = {\n VIDEO: 'video',\n AUDIO: 'audio',\n METADATA: 'metadata'\n}\n\n/** @enum {string} */\nexport const VideoCodecType = {\n AVC: 'avc',\n HEVC: 'hevc'\n}\n\n/** @enum {string} */\nexport const AudioCodecType = {\n AAC: 'aac',\n G711PCMA: 'g7110a',\n G711PCMU: 'g7110m'\n}\n\n/** @enum {string} */\nexport const WarningType = {\n LARGE_AV_SHIFT: 'LARGE_AV_SHIFT',\n LARGE_VIDEO_GAP: 'LARGE_VIDEO_GAP',\n LARGE_VIDEO_GAP_BETWEEN_CHUNK: 'LARGE_VIDEO_GAP_BETWEEN_CHUNK',\n LARGE_AUDIO_GAP: 'LARGE_AUDIO_GAP',\n AUDIO_FILLED: 'AUDIO_FILLED',\n AUDIO_DROPPED: 'AUDIO_DROPPED'\n}\n","import { TrackType, VideoCodecType } from './types'\n\nexport class VideoTrack {\n id = 1\n\n /** @readonly */\n type = TrackType.VIDEO\n\n codecType = VideoCodecType.AVC\n\n pid = -1 // ts use\n\n /** @type {Uint8Array | Object} */\n hvcC = undefined\n\n codec = ''\n\n timescale = 0\n\n formatTimescale = 0\n\n sequenceNumber = 0\n\n baseMediaDecodeTime = 0\n\n baseDts = 0\n\n duration = 0\n\n warnings = []\n\n /** @type {import('./video-sample').VideoSample[]} */\n samples = []\n\n /** @type {Uint8Array[]} */\n pps = []\n\n /** @type {Uint8Array[]} */\n sps = []\n\n /** @type {Uint8Array[]} */\n vps = []\n\n fpsNum = 0\n\n fpsDen = 0\n\n /** @type {[number, number]} */\n sarRatio = [] // [hSpacing, vSpacing]\n\n width = 0\n\n height = 0\n\n nalUnitSize = 4\n\n present = false\n\n isVideoEncryption = false\n\n isAudioEncryption = false\n\n isVideo = true\n\n kid = null\n\n pssh = null\n\n /** @type {any} */\n ext\n\n reset () {\n this.sequenceNumber =\n this.width =\n this.height =\n this.fpsDen =\n this.fpsNum =\n this.duration =\n this.baseMediaDecodeTime =\n this.timescale = 0\n this.codec = ''\n this.present = false\n this.pid = -1\n this.pps = []\n this.sps = []\n this.vps = []\n this.sarRatio = []\n this.samples = []\n this.warnings = []\n this.hvcC = null\n }\n\n /**\n * @returns {boolean}\n */\n exist () {\n return !!(this.pps.length && this.sps.length && this.codec)\n }\n\n /**\n * @returns {boolean}\n */\n hasSample () {\n return !!this.samples.length\n }\n\n get isEncryption (){\n return this.isVideoEncryption\n }\n}\n","import { TrackType, AudioCodecType } from './types'\n\nexport class AudioTrack {\n id = 2\n\n /** @readonly */\n type = TrackType.AUDIO\n\n codecType = AudioCodecType.AAC\n\n pid = -1\n\n codec = ''\n\n sequenceNumber = 0\n\n sampleDuration = 0\n\n timescale = 0\n\n formatTimescale = 0\n\n baseMediaDecodeTime = 0\n\n duration = 0\n\n warnings = []\n\n /** @type {import('./audio-sample').AudioSample[]} */\n samples = []\n\n baseDts = 0\n\n sampleSize = 16\n\n sampleRate = 0\n\n channelCount = 0\n\n objectType = 0\n\n sampleRateIndex = 0\n\n /** @type {number[]} */\n config = []\n\n present = false\n\n isVideoEncryption = false\n\n isAudioEncryption = false\n\n kid = null\n\n /** @type {any} */\n ext\n\n reset () {\n this.sequenceNumber = 0\n this.timescale = 0\n this.sampleDuration = 0\n this.sampleRate = 0\n this.channelCount = 0\n this.baseMediaDecodeTime = 0\n this.present = false\n this.pid = -1\n this.codec = ''\n this.samples = []\n this.config = []\n this.warnings = []\n }\n\n /**\n * @returns {boolean}\n */\n exist () {\n return !!(this.sampleRate && this.channelCount && this.codec && this.codecType === AudioCodecType.AAC)\n }\n\n /**\n * @returns {boolean}\n */\n hasSample () {\n return !!this.samples.length\n }\n\n get isEncryption (){\n return this.isAudioEncryption\n }\n}\n","/**\n * @typedef {Object} VideoFlag\n * @property {number} [isLeading=0]\n * @property {number} [dependsOn=1]\n * @property {number} [isDependedOn=0]\n * @property {number} [hasRedundancy=0]\n * @property {number} [paddingValue=0]\n * @property {number} [degradationPriority=0]\n * @property {number} [isNonSyncSample=1]\n */\n\nexport class VideoSample {\n /** @type {VideoFlag} */\n flag = {}\n\n keyframe = false\n\n gopId = 0\n\n duration = 0\n\n size = 0\n\n units = []\n\n chromaFormat = 420\n\n // sampleOffset = 0\n\n /**\n * @param {number} pts\n * @param {number} dts\n * @param {Uint8Array[]} [units]\n */\n constructor (pts, dts, units) {\n this.originPts = this.pts = pts\n this.originDts = this.dts = dts\n if (units) this.units = units\n }\n\n /**\n * @returns {number}\n */\n get cts () {\n return this.pts - this.dts\n }\n\n setToKeyframe () {\n this.keyframe = true\n this.flag.dependsOn = 2\n this.flag.isNonSyncSample = 0\n }\n}\n","export class AudioSample {\n duration = 1024\n\n flag = { dependsOn: 2, isNonSyncSample: 0 }\n keyframe = true\n\n /**\n * @param {number} pts\n * @param {Uint8Array} data\n * @param {number} [duration=1024]\n */\n constructor (pts, data, duration, sampleOffset) {\n this.originPts = this.pts = this.dts = pts\n this.data = data\n this.size = data.byteLength\n this.sampleOffset = sampleOffset\n if (duration) this.duration = duration\n }\n}\n","import { TrackType } from './types'\n\nclass Sample {\n time = 0 // second\n\n /**\n * @param {Object} data\n * @param {number} pts\n */\n constructor (data, pts) {\n this.data = data\n this.originPts = this.pts = pts\n }\n}\n\nexport class FlvScriptSample extends Sample {}\n\nexport class SeiSample extends Sample {}\n\nexport class MetadataTrack {\n /** @readonly */\n id = 3\n\n /** @readonly */\n type = TrackType.METADATA\n\n timescale = 0\n\n /** @type {FlvScriptSample[]} */\n flvScriptSamples = []\n\n /** @type {SeiSample[]} */\n seiSamples = []\n\n /**\n * @returns {boolean}\n */\n exist () {\n return !!((this.flvScriptSamples.length || this.seiSamples.length) && this.timescale)\n }\n\n reset () {\n this.timescale = 0\n this.flvScriptSamples = []\n this.seiSamples = []\n }\n\n /**\n * @returns {boolean}\n */\n hasSample () {\n return !!(this.flvScriptSamples.length || this.seiSamples.length)\n }\n}\n","export class ExpGolomb {\n _bytesAvailable\n\n _bitsAvailable = 0\n\n _word = 0\n\n constructor (data) {\n if (!data) throw new Error('ExpGolomb data params is required')\n this._data = data\n this._bytesAvailable = data.byteLength\n if (this._bytesAvailable) this._loadWord()\n }\n\n _loadWord () {\n const position = this._data.byteLength - this._bytesAvailable\n const availableBytes = Math.min(4, this._bytesAvailable)\n if (availableBytes === 0) throw new Error('No bytes available')\n\n const workingBytes = new Uint8Array(4)\n workingBytes.set(this._data.subarray(position, position + availableBytes))\n\n this._word = new DataView(workingBytes.buffer).getUint32(0)\n this._bitsAvailable = availableBytes * 8\n this._bytesAvailable -= availableBytes\n }\n\n skipBits (count) {\n if (this._bitsAvailable > count) {\n this._word <<= count\n this._bitsAvailable -= count\n } else {\n count -= this._bitsAvailable\n const skipBytes = Math.floor(count / 8)\n count -= (skipBytes * 8)\n this._bytesAvailable -= skipBytes\n this._loadWord()\n this._word <<= count\n this._bitsAvailable -= count\n }\n }\n\n readBits (size) {\n if (size > 32) {\n throw new Error('Cannot read more than 32 bits')\n }\n\n let bits = Math.min(this._bitsAvailable, size)\n const val = this._word >>> (32 - bits)\n\n this._bitsAvailable -= bits\n if (this._bitsAvailable > 0) {\n this._word <<= bits\n } else if (this._bytesAvailable > 0) {\n this._loadWord()\n }\n\n bits = size - bits\n if (bits > 0 && this._bitsAvailable) {\n return (val << bits) | this.readBits(bits)\n }\n return val\n }\n\n skipLZ () {\n let leadingZeroCount\n for (\n leadingZeroCount = 0;\n leadingZeroCount < this._bitsAvailable;\n ++leadingZeroCount\n ) {\n if ((this._word & (0x80000000 >>> leadingZeroCount)) !== 0) {\n this._word <<= leadingZeroCount\n this._bitsAvailable -= leadingZeroCount\n return leadingZeroCount\n }\n }\n this._loadWord()\n return leadingZeroCount + this.skipLZ()\n }\n\n skipUEG () {\n this.skipBits(1 + this.skipLZ())\n }\n\n readUEG () {\n const clz = this.skipLZ()\n return this.readBits(clz + 1) - 1\n }\n\n readEG () {\n const val = this.readUEG()\n if (1 & val) {\n return (1 + val) >>> 1\n }\n return -1 * (val >>> 1)\n }\n\n readBool () {\n return this.readBits(1) === 1\n }\n\n readUByte () {\n return this.readBits(8)\n }\n\n skipScalingList (count) {\n let lastScale = 8\n let nextScale = 8\n let deltaScale\n for (let j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = this.readEG()\n nextScale = (lastScale + deltaScale + 256) % 256\n }\n lastScale = nextScale === 0 ? lastScale : nextScale\n }\n }\n}\n","export class Logger {\n constructor (name) {\n this.name = name || ''\n this._prefix = `[${this.name}]`\n }\n\n warn (...args) {\n if (Logger.disabled) return\n console.warn(this._prefix, ...args)\n }\n\n static disabled = true\n\n static enable () {\n Logger.disabled = false\n }\n\n static disable () {\n Logger.disabled = true\n }\n}\n","export class UTF8 {\n /**\n *\n * @param {Uint8Array} uint8array\n * @return {string}\n */\n static decode (uint8array) {\n const out = []\n const input = uint8array\n let i = 0\n const length = uint8array.length\n\n while (i < length) {\n if (input[i] < 0x80) {\n out.push(String.fromCharCode(input[i]))\n ++i\n continue\n } else if (input[i] < 0xC0) {\n // fallthrough\n } else if (input[i] < 0xE0) {\n if (UTF8._checkContinuation(input, i, 1)) {\n const ucs4 = (input[i] & 0x1F) << 6 | (input[i + 1] & 0x3F)\n if (ucs4 >= 0x80) {\n out.push(String.fromCharCode(ucs4 & 0xFFFF))\n i += 2\n continue\n }\n }\n } else if (input[i] < 0xF0) {\n if (UTF8._checkContinuation(input, i, 2)) {\n const ucs4 = (input[i] & 0xF) << 12 | (input[i + 1] & 0x3F) << 6 | input[i + 2] & 0x3F\n if (ucs4 >= 0x800 && (ucs4 & 0xF800) !== 0xD800) {\n out.push(String.fromCharCode(ucs4 & 0xFFFF))\n i += 3\n continue\n }\n }\n } else if (input[i] < 0xF8) {\n if (UTF8._checkContinuation(input, i, 3)) {\n let ucs4 = (input[i] & 0x7) << 18 | (input[i + 1] & 0x3F) << 12 |\n (input[i + 2] & 0x3F) << 6 | (input[i + 3] & 0x3F)\n if (ucs4 > 0x10000 && ucs4 < 0x110000) {\n ucs4 -= 0x10000\n out.push(String.fromCharCode((ucs4 >>> 10) | 0xD800))\n out.push(String.fromCharCode((ucs4 & 0x3FF) | 0xDC00))\n i += 4\n continue\n }\n }\n }\n out.push(String.fromCharCode(0xFFFD))\n ++i\n }\n\n return out.join('')\n }\n\n static _checkContinuation (uint8array, start, checkLength) {\n const array = uint8array\n if (start + checkLength < array.length) {\n while (checkLength--) {\n if ((array[++start] & 0xC0) !== 0x80) {\n return false\n }\n }\n return true\n } else {\n return false\n }\n }\n}\n","export const isBrowser = typeof window !== 'undefined'\n\nconst ua = isBrowser && navigator.userAgent.toLocaleLowerCase()\n\n// eslint-disable-next-line no-lookahead-lookbehind-regexp/no-lookahead-lookbehind-regexp\nexport const isSafari = isBrowser && /^((?!chrome|android).)*safari/.test(ua)\nexport const isFirefox = isBrowser && ua.includes('firefox')\nexport const isAndroid = isBrowser && ua.includes('android')\n","/* c8 ignore next 4 */\nexport { ExpGolomb } from './exp-golomb'\nexport { Logger } from './logger'\nexport { UTF8 } from './utf8'\nexport * from './env'\n\nexport function concatUint8Array (...arr) {\n arr = arr.filter(Boolean)\n const data = new Uint8Array(arr.reduce((p, c) => p + c.byteLength, 0))\n let prevLen = 0\n arr.forEach((d) => {\n data.set(d, prevLen)\n prevLen += d.byteLength\n })\n return data\n}\n\nexport const MAX_SIZE = Math.pow(2, 32)\n\nexport function readBig16 (data, i = 0) {\n return (data[i] << 8) + (data[i + 1] || 0)\n}\n\nexport function readBig24 (data, i = 0) {\n return (data[i] << 16) + (data[i + 1] << 8) + (data[i + 2] || 0)\n}\n\nexport function readBig32 (data, i = 0) {\n return (data[i] << 24 >>> 0) + (data[i + 1] << 16) + (data[i + 2] << 8) + (data[i + 3] || 0)\n}\n\nexport function readBig64 (data, i = 0) {\n return readBig32(data, i) * MAX_SIZE + readBig32(data, i + 4)\n}\n\nexport function getAvcCodec (codecs) {\n let codec = 'avc1.'\n let h\n for (let i = 0; i < 3; i++) {\n h = codecs[i].toString(16)\n if (h.length < 2) h = `0${h}`\n codec += h\n }\n return codec\n}\n\nexport function formatIV (arr) {\n let iv = ''\n arr.forEach(value => {\n iv += bufferToString(value)\n })\n if (iv.length <= 32) {\n const len = 32 - iv.length\n for (let i = 0; i < len; i++) {\n iv += '0'\n }\n }\n return iv\n}\n\nexport function parse (a) {\n if (!Array.isArray(a)) {\n const 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}\nfunction bufferToString (value) {\n return ('0' + (Number(value).toString(16))).slice(-2).toUpperCase()\n}\n\nexport function hashVal (str) {\n let hash = 0; let i; let chr\n if (str.length === 0) return hash\n for (i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i)\n hash = ((hash << 5) - hash) + chr\n hash |= 0\n }\n return hash\n}\n","import { readBig32 } from '../utils'\n\nexport class NALu {\n static parseAnnexB (data) {\n const len = data.length\n let start = 2\n let end = 0\n while (data[start] !== null && data[start] !== undefined && data[start] !== 1) {\n start++\n }\n start++\n end = start + 2\n\n if (end >= len) return []\n\n const units = []\n\n while (end < len) {\n switch (data[end]) {\n case 0:\n if (data[end - 1] !== 0) {\n end += 2\n break\n } else if (data[end - 2] !== 0) {\n end++\n break\n }\n\n if (start !== end - 2) units.push(data.subarray(start, end - 2))\n\n do {\n end++\n } while (data[end] !== 1 && end < len)\n start = end + 1\n end = start + 2\n break\n case 1:\n if (data[end - 1] !== 0 || data[end - 2] !== 0) {\n end += 3\n break\n }\n if (start !== end - 2) units.push(data.subarray(start, end - 2))\n start = end + 1\n end = start + 2\n break\n default:\n end += 3\n break\n }\n }\n\n if (start < len) units.push(data.subarray(start))\n\n return units\n }\n\n static parseAvcC (data, size = 4) {\n if (data.length < 4) return\n const dataLen = data.length\n const units = []\n\n let offset = 0\n let length\n while ((offset + size) < dataLen) {\n length = readBig32(data, offset)\n if (size === 3) length >>>= 8\n offset += size\n\n if (!length) continue\n if (offset + length > dataLen) {\n break\n }\n\n units.push(data.subarray(offset, offset + length))\n offset += length\n }\n\n return units\n }\n\n static parseSEI (unit, isHevc) {\n const len = unit.length\n let i = isHevc ? 2 : 1\n let type = 0\n let size = 0\n let uuid = ''\n\n while (unit[i] === 255) {\n type += 255\n i++\n }\n\n type += unit[i++]\n\n while (unit[i] === 255) {\n size += 255\n i++\n }\n size += unit[i++]\n\n if (type === 5 && len > i + 16) {\n for (let j = 0; j < 16; j++) {\n uuid += unit[i].toString(16)\n i++\n }\n }\n\n return {\n payload: unit.subarray(i), type, size, uuid\n }\n }\n\n static removeEPB (uint) {\n const length = uint.byteLength\n const emulationPreventionBytesPositions = []\n let i = 1\n\n while (i < length - 2) {\n if (uint[i] === 0 && uint[i + 1] === 0 && uint[i + 2] === 0x03) {\n emulationPreventionBytesPositions.push(i + 2)\n i += 2\n } else {\n i++\n }\n }\n\n if (!emulationPreventionBytesPositions.length) return uint\n\n const newLength = length - emulationPreventionBytesPositions.length\n const newData = new Uint8Array(newLength)\n\n let sourceIndex = 0\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === emulationPreventionBytesPositions[0]) {\n sourceIndex++\n emulationPreventionBytesPositions.shift()\n }\n newData[i] = uint[sourceIndex]\n }\n\n return newData\n }\n}\n","import { NALu } from './nalu'\nimport { ExpGolomb, getAvcCodec } from '../utils'\n\nexport class AVC {\n static parseAVCDecoderConfigurationRecord (data) {\n if (data.length < 7) return\n const nalUnitSize = (data[4] & 3) + 1\n\n let spsParsed\n const spsArr = []\n const ppsArr = []\n\n let offset = 6\n const spsCount = data[5] & 0x1f\n let spsSize\n for (let i = 0; i < spsCount; i++) {\n spsSize = (data[offset] << 8) | data[offset + 1]\n offset += 2\n if (!spsSize) continue\n\n const sps = data.subarray(offset, offset + spsSize)\n offset += spsSize\n spsArr.push(sps)\n\n if (!spsParsed) {\n spsParsed = AVC.parseSPS(NALu.removeEPB(sps))\n }\n }\n\n const ppsCount = data[offset]\n offset++\n let ppsSize\n for (let i = 0; i < ppsCount; i++) {\n ppsSize = (data[offset] << 8) | data[offset + 1]\n offset += 2\n if (!ppsSize) continue\n ppsArr.push(data.subarray(offset, offset + ppsSize))\n offset += ppsSize\n }\n\n return {\n sps: spsParsed,\n spsArr,\n ppsArr,\n nalUnitSize\n }\n }\n\n static parseSPS (unit) {\n const eg = new ExpGolomb(unit)\n eg.readUByte()\n\n const profileIdc = eg.readUByte()\n const profileCompatibility = eg.readUByte()\n const levelIdc = eg.readUByte()\n eg.skipUEG()\n\n let chromaFormat = 420\n if (\n profileIdc === 100 ||\n profileIdc === 110 ||\n profileIdc === 122 ||\n profileIdc === 244 ||\n profileIdc === 44 ||\n profileIdc === 83 ||\n profileIdc === 86 ||\n profileIdc === 118 ||\n profileIdc === 128 ||\n profileIdc === 138 ||\n profileIdc === 144\n ) {\n const chromaFormatIdc = eg.readUEG()\n if (chromaFormatIdc <= 3) chromaFormat = [0, 420, 422, 444][chromaFormatIdc]\n if (chromaFormatIdc === 3) eg.skipBits(1)\n eg.skipUEG()\n eg.skipUEG()\n eg.skipBits(1)\n if (eg.readBool()) {\n const scalingListCount = chromaFormatIdc !== 3 ? 8 : 12\n for (let i = 0; i < scalingListCount; i++) {\n if (eg.readBool()) {\n if (i < 6) {\n eg.skipScalingList(16)\n } else {\n eg.skipScalingList(64)\n }\n }\n }\n }\n }\n\n eg.skipUEG()\n const picOrderCntType = eg.readUEG()\n if (picOrderCntType === 0) {\n eg.readUEG()\n } else if (picOrderCntType === 1) {\n eg.skipBits(1)\n eg.skipUEG()\n eg.skipUEG()\n const numRefFramesInPicOrderCntCycle = eg.readUEG()\n for (let i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n eg.skipUEG()\n }\n }\n\n eg.skipUEG()\n eg.skipBits(1)\n const picWidthInMbsMinus1 = eg.readUEG()\n const picHeightInMapUnitsMinus1 = eg.readUEG()\n const frameMbsOnlyFlag = eg.readBits(1)\n if (frameMbsOnlyFlag === 0) eg.skipBits(1)\n eg.skipBits(1)\n\n let frameCropLeftOffset = 0\n let frameCropRightOffset = 0\n let frameCropTopOffset = 0\n let frameCropBottomOffset = 0\n\n if (eg.readBool()) {\n frameCropLeftOffset = eg.readUEG()\n frameCropRightOffset = eg.readUEG()\n frameCropTopOffset = eg.readUEG()\n frameCropBottomOffset = eg.readUEG()\n }\n\n let sarRatio\n let fixedFrame\n let fpsNum\n let fpsDen\n let fps\n if (eg.readBool()) {\n if (eg.readBool()) {\n const aspectRatioIdc = eg.readUByte()\n switch (aspectRatioIdc) {\n case 1: sarRatio = [1, 1]; break\n case 2: sarRatio = [12, 11]; break\n case 3: sarRatio = [10, 11]; break\n case 4: sarRatio = [16, 11]; break\n case 5: sarRatio = [40, 33]; break\n case 6: sarRatio = [24, 11]; break\n case 7: sarRatio = [20, 11]; break\n case 8: sarRatio = [32, 11]; break\n case 9: sarRatio = [80, 33]; break\n case 10: sarRatio = [18, 11]; break\n case 11: sarRatio = [15, 11]; break\n case 12: sarRatio = [64, 33]; break\n case 13: sarRatio = [160, 99]; break\n case 14: sarRatio = [4, 3]; break\n case 15: sarRatio = [3, 2]; break\n case 16: sarRatio = [2, 1]; break\n case 255: {\n sarRatio = [\n (eg.readUByte() << 8) | eg.readUByte(),\n (eg.readUByte() << 8) | eg.readUByte()\n ]\n break\n }\n default:\n }\n }\n\n if (eg.readBool()) eg.readBool()\n\n if (eg.readBool()) {\n eg.readBits(4)\n if (eg.readBool()) eg.readBits(24)\n }\n\n if (eg.readBool()) {\n eg.readUEG()\n eg.readUEG()\n }\n\n if (eg.readBool()) {\n const numUnitsInTick = eg.readBits(32)\n const timeScale = eg.readBits(32)\n fixedFrame = eg.readBool()\n\n fpsNum = timeScale\n fpsDen = numUnitsInTick * 2\n fps = fpsNum / fpsDen\n }\n }\n\n return {\n codec: getAvcCodec(unit.subarray(1, 4)),\n profileIdc,\n profileCompatibility,\n levelIdc,\n chromaFormat,\n width: Math.ceil(\n (picWidthInMbsMinus1 + 1) * 16 -\n 2 * (frameCropLeftOffset + frameCropRightOffset)\n ),\n height:\n (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 -\n (frameMbsOnlyFlag ? 2 : 4) *\n (frameCropTopOffset + frameCropBottomOffset),\n sarRatio,\n fpsNum,\n fpsDen,\n fps,\n fixedFrame\n }\n }\n}\n","import { isFirefox, isAndroid } from '../utils'\n\nexport class AAC {\n static FREQ = [\n 96000,\n 88200,\n 64000,\n 48000,\n 44100,\n 32000,\n 24000,\n 22050,\n 16000,\n 12000,\n 11025,\n 8000,\n 7350\n ];\n\n static getRateIndexByRate (rate) {\n return AAC.FREQ.indexOf(rate)\n }\n\n static parseADTS (data, pts) {\n const len = data.length\n let i = 0\n\n while ((i + 2) < len) {\n if (data[i] === 0xff && (data[i + 1] & 0xf6) === 0xf0) {\n break\n }\n i++\n }\n\n if (i >= len) return\n\n const skip = i\n const frames = []\n const samplingFrequencyIndex = (data[i + 2] & 0x3c) >>> 2\n const sampleRate = AAC.FREQ[samplingFrequencyIndex]\n if (!sampleRate) throw new Error(`Invalid sampling index: ${samplingFrequencyIndex}`)\n const objectType = ((data[i + 2] & 0xc0) >>> 6) + 1\n const channelCount = ((data[i + 2] & 1) << 2) | ((data[i + 3] & 0xc0) >>> 6)\n const { config, codec } = AAC._getConfig(samplingFrequencyIndex, channelCount, objectType)\n\n let protectionSkipBytes\n let frameLength\n let frameIndex = 0\n const duration = AAC.getFrameDuration(sampleRate)\n\n while ((i + 7) < len) {\n if ((data[i] !== 0xff) || (data[i + 1] & 0xF6) !== 0xf0) {\n i++\n continue\n }\n\n frameLength = ((data[i + 3] & 0x03) << 11) | (data[i + 4] << 3) | ((data[i + 5] & 0xe0) >> 5)\n if ((len - i) < frameLength) break\n\n protectionSkipBytes = (~data[i + 1] & 0x01) * 2\n frames.push({\n pts: pts + frameIndex * duration,\n data: data.subarray(i + 7 + protectionSkipBytes, i + frameLength)\n })\n\n frameIndex++\n i += frameLength\n }\n\n return {\n skip,\n remaining: i >= len ? undefined : data.subarray(i),\n frames,\n samplingFrequencyIndex,\n sampleRate,\n objectType,\n channelCount,\n codec,\n config,\n originCodec: `mp4a.40.${objectType}`\n }\n }\n\n static parseAudioSpecificConfig (data) {\n if (!data.length) return\n const objectType = data[0] >>> 3\n const samplingFrequencyIndex = ((data[0] & 0x07) << 1) | (data[1] >>> 7)\n const channelCount = (data[1] & 0x78) >>> 3\n const sampleRate = AAC.FREQ[samplingFrequencyIndex]\n // play as no audio track stream\n if (!sampleRate) return\n const { config, codec } = AAC._getConfig(samplingFrequencyIndex, channelCount, objectType)\n\n return {\n samplingFrequencyIndex,\n sampleRate,\n objectType,\n channelCount,\n config,\n codec,\n originCodec: `mp4a.40.${objectType}`\n }\n }\n\n static getFrameDuration (rate, timescale = 90000) {\n return 1024 * timescale / rate\n }\n\n static _getConfig (samplingIndex, channelCount, originObjectType) {\n const config = []\n let objectType\n let extensionSamplingIndex\n if (isFirefox) {\n if (samplingIndex >= 6) { // use SBR (HE-AAC)\n objectType = 5\n extensionSamplingIndex = samplingIndex - 3\n } else { // use LC-AAC\n objectType = 2\n extensionSamplingIndex = samplingIndex\n }\n } else if (isAndroid) { // use LC-AAC\n objectType = 2\n extensionSamplingIndex = samplingIndex\n } else { // use HE-AAC\n objectType = (originObjectType === 2 || originObjectType === 5) ? originObjectType : 5\n extensionSamplingIndex = samplingIndex\n\n if (samplingIndex >= 6) {\n extensionSamplingIndex = samplingIndex - 3\n } else if (channelCount === 1) { // Mono channel, use LC-AAC\n objectType = 2\n extensionSamplingIndex = samplingIndex\n }\n }\n\n config[0] = objectType << 3\n config[0] |= (samplingIndex & 0x0e) >> 1\n config[1] = (samplingIndex & 0x01) << 7\n config[1] |= channelCount << 3\n if (objectType === 5) {\n config[1] |= ((extensionSamplingIndex & 0x0e) >> 1)\n config[2] = (extensionSamplingIndex & 0x01) << 7\n config[2] |= (2 << 2)\n config[3] = 0\n }\n\n return {\n config,\n codec: `mp4a.40.${objectType}`\n }\n }\n\n /* c8 ignore next 65 */\n static getSilentFrame (codec, channelCount) {\n switch (codec) {\n case 'mp4a.40.2':\n if (channelCount === 1) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80])\n } if (channelCount === 2) {\n return new Uint8Array([\n 0x21, 0x00, 0x49, 0x90, 0x02, 0x19, 0x00, 0x23, 0x80\n ])\n } if (channelCount === 3) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x8e\n ])\n } if (channelCount === 4) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x80, 0x2c, 0x80, 0x08, 0x02, 0x38\n ])\n } if (channelCount === 5) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x38\n ])\n } if (channelCount === 6) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x00, 0xb2,\n 0x00, 0x20, 0x08, 0xe0\n ])\n }\n break\n default:\n if (channelCount === 1) {\n return new Uint8Array([\n 0x1, 0x40, 0x22, 0x80, 0xa3, 0x4e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0,\n 0x0, 0x1c, 0x6, 0xf1, 0xc1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5e\n ])\n } if (channelCount === 2) {\n return new Uint8Array([\n 0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0,\n 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5e\n ])\n } if (channelCount === 3) {\n return new Uint8Array([\n 0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0,\n 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5e\n ])\n }\n break\n }\n }\n}\n","import { NALu } from './nalu'\nimport { ExpGolomb } from '../utils'\n\nexport class HEVC {\n static parseHEVCDecoderConfigurationRecord (data, hvcC = {}) {\n if (data.length < 23) return\n hvcC = hvcC || {}\n const nalUnitSize = (data[21] & 3) + 1\n\n let vpsParsed\n let spsParsed\n const spsArr = []\n const ppsArr = []\n const vpsArr = []\n\n let offset = 23\n const numOfArrays = data[22]\n\n let nalUnitType\n let numNalus\n let nalSize\n for (let i = 0; i < numOfArrays; i++) {\n nalUnitType = data[offset] & 0x3f\n numNalus = (data[offset + 1] << 8) | data[offset + 2]\n\n offset += 3\n\n for (let j = 0; j < numNalus; j++) {\n nalSize = (data[offset] << 8) | data[offset + 1]\n offset += 2\n if (!nalSize) continue\n switch (nalUnitType) {\n case 32: {\n const vps = data.subarray(offset, offset + nalSize)\n if (!vpsParsed) vpsParsed = HEVC.parseVPS(NALu.removeEPB(vps), hvcC)\n vpsArr.push(vps)\n }\n break\n case 33: {\n const sps = data.subarray(offset, offset + nalSize)\n if (!spsParsed) spsParsed = HEVC.parseSPS(NALu.removeEPB(sps), hvcC)\n spsArr.push(sps)\n }\n break\n case 34:\n ppsArr.push(data.subarray(offset, offset + nalSize))\n break\n default:\n }\n\n offset += nalSize\n }\n }\n\n return {\n hvcC,\n sps: spsParsed,\n spsArr,\n ppsArr,\n vpsArr,\n nalUnitSize\n }\n }\n\n static parseVPS (unit, hvcC) {\n hvcC = hvcC || {}\n const eg = new ExpGolomb(unit)\n eg.readUByte()\n eg.readUByte()\n\n eg.readBits(12)\n const vpsMaxSubLayersMinus1 = eg.readBits(3)\n hvcC.numTemporalLayers = Math.max(hvcC.numTemporalLayers || 0, vpsMaxSubLayersMinus1 + 1)\n eg.readBits(17)\n HEVC._parseProfileTierLevel(eg, vpsMaxSubLayersMinus1, hvcC)\n\n return hvcC\n }\n\n static parseSPS (unit, hvcC = {}) {\n hvcC = hvcC || {}\n const eg = new ExpGolomb(unit)\n eg.readUByte()\n eg.readUByte()\n\n eg.readBits(4)\n const spsMaxSubLayersMinus1 = eg.readBits(3)\n hvcC.numTemporalLayers = Math.max(spsMaxSubLayersMinus1 + 1, hvcC.numTemporalLayers || 0)\n hvcC.temporalIdNested = eg.readBits(1)\n HEVC._parseProfileTierLevel(eg, spsMaxSubLayersMinus1, hvcC)\n\n eg.readUEG() // sps_seq_parameter_set_id\n\n const chromaFormatIdc = hvcC.chromaFormatIdc = eg.readUEG()\n let chromaFormat = 420\n if (chromaFormatIdc <= 3) chromaFormat = [0, 420, 422, 444][chromaFormatIdc]\n\n let separateColourPlaneFlag = 0\n if (chromaFormatIdc === 3) {\n separateColourPlaneFlag = eg.readBits(1)\n }\n\n let width = eg.readUEG() // pic_width_in_luma_samples\n let height = eg.readUEG() // pic_height_in_luma_samples\n\n const conformanceWindowFlag = eg.readBits(1)\n\n let confWinLeftOffset\n let confWinRightOffset\n let confWinTopOffset\n let confWinBottomOffset\n if (conformanceWindowFlag === 1) {\n confWinLeftOffset = eg.readUEG() // conf_win_left_offset\n confWinRightOffset = eg.readUEG() // conf_win_right_offset\n confWinTopOffset = eg.readUEG() // conf_win_top_offset\n confWinBottomOffset = eg.readUEG() // conf_win_bottom_offset\n }\n\n hvcC.bitDepthLumaMinus8 = eg.readUEG() // bit_depth_luma_minus8\n hvcC.bitDepthChromaMinus8 = eg.readUEG() // bit_depth_chroma_minus8\n\n if (conformanceWindowFlag === 1) {\n const subWidthC = (((chromaFormatIdc === 1) || (chromaFormatIdc === 2)) && (separateColourPlaneFlag === 0)) ? 2 : 1\n const subHeightC = ((chromaFormatIdc === 1) && (separateColourPlaneFlag === 0)) ? 2 : 1\n width -= (subWidthC * (confWinRightOffset + confWinLeftOffset))\n height -= (subHeightC * (confWinBottomOffset + confWinTopOffset))\n }\n\n return {\n codec: 'hev1.1.6.L93.B0',\n width,\n height,\n chromaFormat,\n hvcC\n }\n }\n\n static _parseProfileTierLevel (eg, maxSubLayersMinus1, hvcC) {\n const generalTierFlag = hvcC.generalTierFlag || 0\n hvcC.generalProfileSpace = eg.readBits(2)\n hvcC.generalTierFlag = Math.max(eg.readBits(1), generalTierFlag)\n hvcC.generalProfileIdc = Math.max(eg.readBits(5), hvcC.generalProfileIdc || 0)\n hvcC.generalProfileCompatibilityFlags = eg.readBits(32)\n hvcC.generalConstraintIndicatorFlags = [eg.readBits(8), eg.readBits(8), eg.readBits(8), eg.readBits(8), eg.readBits(8), eg.readBits(8)]\n const generalLevelIdc = eg.readBits(8)\n if (generalTierFlag < hvcC.generalTierFlag) {\n hvcC.generalLevelIdc = generalLevelIdc\n } else {\n hvcC.generalLevelIdc = Math.max(generalLevelIdc, hvcC.generalLevelIdc || 0)\n }\n\n const subLayerProfilePresentFlag = []\n const subLayerLevelPresentFlag = []\n for (let j = 0; j < maxSubLayersMinus1; j++) {\n subLayerProfilePresentFlag[j] = eg.readBits(1)\n subLayerLevelPresentFlag[j] = eg.readBits(1)\n }\n\n if (maxSubLayersMinus1 > 0) {\n eg.readBits((8 - maxSubLayersMinus1) * 2)\n }\n\n for (let i = 0; i < maxSubLayersMinus1; i++) {\n if (subLayerProfilePresentFlag[i] !== 0) {\n eg.readBits(2)\n eg.readBits(1)\n eg.readBits(5)\n\n eg.readBits(16)\n eg.readBits(16)\n\n eg.readBits(4)\n\n eg.readBits(16)\n eg.readBits(16)\n eg.readBits(12)\n }\n if (subLayerLevelPresentFlag[i] !== 0) {\n eg.readBits(8)\n }\n }\n }\n}\n","import { AudioCodecType, AudioSample, WarningType } from '../model'\nimport { AAC } from '../codec'\nimport { isSafari } from '../utils'\n\nconst LARGE_AV_FIRST_FRAME_GAP = 500 // ms\nconst AUDIO_GAP_OVERLAP_THRESHOLD_COUNT = 3\nconst MAX_SILENT_FRAME_DURATION = 1000 // ms\nconst AUDIO_EXCETION_LOG_EMIT_DURATION = 5000 // 5s\nconst MAX_VIDEO_FRAME_DURATION = 1000 // ms\nconst MAX_DTS_DELTA_WITH_NEXT_CHUNK = 200 // ms\nconst VIDEO_EXCETION_LOG_EMIT_DURATION = 5000 // 5s\nconst TRACK_BREACKED_CHECK_TIME = 5\n\nexport class FlvFixer {\n constructor (videoTrack, audioTrack, metadataTrack) {\n this.videoTrack = videoTrack\n this.audioTrack = audioTrack\n this.metadataTrack = metadataTrack\n\n this._baseDts = -1\n this._baseDtsInited = false\n\n this._audioNextPts = undefined\n this._videoNextDts = undefined\n\n this._audioTimestampBreak = 0\n this._videoTimestampBreak = 0\n this._lastVideoDuration = 0\n\n // 在视频帧遇到下一个关键帧之前,如果音频时间戳发生了跳变,不能确定是否音视频都发生跳变还是单纯音频发生跳变.\n // 这里记录关键帧标识, 从下一个关键帧开始,如果视频没有跳变,才能判断是只有音频发生了跳变\n this._keyFrameInNextChunk = false\n\n this._lastAudioExceptionGapDot = -Infinity\n this._lastAudioExceptionOverlapDot = -Infinity\n this._lastAudioExceptionLargeGapDot = -Infinity\n\n this._lastVideoExceptionLargeGapDot = -Infinity\n this._lastVideoExceptionChunkFirstDtsDot = -Infinity\n }\n\n /**\n * @param {number} startTime 点播seek到的时间点\n * @param {boolean} discontinuity 是否换流\n * @param {boolean} contiguous 前后chunk时间戳是否连续\n */\n fix (startTime = 0, discontinuity = false, contiguous = true) {\n startTime = Math.round(startTime * 1000)\n const videoTrack = this.videoTrack\n const audioTrack = this.audioTrack\n\n if (discontinuity || !contiguous) {\n this._videoLastSample = null\n this._audioNextPts = undefined\n this._videoNextDts = undefined\n this._audioTimestampBreak = 0\n this._videoTimestampBreak = 0\n this._lastAudioExceptionGapDot = -Infinity\n this._lastAudioExceptionOverlapDot = -Infinity\n this._lastAudioExceptionLargeGapDot = -Infinity\n this._lastVideoExceptionLargeGapDot = -Infinity\n this._lastVideoExceptionChunkFirstDtsDot = -Infinity\n }\n\n if (discontinuity && !contiguous) {\n this._baseDtsInited = false\n }\n\n if (!this._baseDtsInited) {\n this._calculateBaseDts(audioTrack, videoTrack)\n }\n\n if (!contiguous && startTime) {\n this._audioNextPts = this._videoNextDts = startTime\n }\n\n const resetBaseDts = this._baseDtsInited &&\n (this._videoTimestampBreak || !this.videoTrack.exist()) &&\n (this._audioTimestampBreak || !this.audioTrack.exist())\n\n if (resetBaseDts) {\n this._resetBaseDtsWhenStreamBreaked()\n }\n\n this._fixAudio(audioTrack)\n\n this._keyFrameInNextChunk = false\n\n this._fixVideo(videoTrack)\n\n if (this.metadataTrack.exist()) {\n const timescale = this.metadataTrack.timescale\n this.metadataTrack.seiSamples.forEach(s => {\n s.pts = s.originPts - this._baseDts\n s.time = Math.max(0, s.pts) / timescale\n })\n this.metadataTrack.flvScriptSamples.forEach(s => {\n s.pts = s.originPts - this._baseDts\n s.time = Math.max(0, s.pts) / timescale\n })\n }\n\n if (videoTrack.samples.length) {\n videoTrack.baseMediaDecodeTime = videoTrack.samples[0].dts\n }\n if (audioTrack.samples.length) {\n audioTrack.baseMediaDecodeTime = audioTrack.samples[0].pts * audioTrack.timescale / 1000\n }\n }\n\n _fixVideo (videoTrack) {\n const samples = videoTrack.samples\n\n if (!samples.length) return\n\n samples.forEach(x => {\n x.dts -= this._baseDts\n x.pts -= this._baseDts\n if (x.keyframe) this._keyFrameInNextChunk = true\n })\n\n let refSampleDurationInt\n if (videoTrack.fpsNum && videoTrack.fpsDen) {\n refSampleDurationInt = videoTrack.timescale * (videoTrack.fpsDen / videoTrack.fpsNum)\n } else if (videoTrack.length > 1) {\n const first = videoTrack.samples[0]\n const last = videoTrack.samples[samples.length - 1]\n refSampleDurationInt = Math.floor((last.dts - first.dts) / (samples.length - 1))\n } else {\n refSampleDurationInt = this._lastVideoDuration || 40\n }\n\n const lastSample = samples.pop()\n\n if (this._videoLastSample) {\n samples.unshift(this._videoLastSample)\n }\n\n this._videoLastSample = lastSample\n\n if (!samples.length) return\n\n if (this._videoNextDts === undefined) {\n const samp0 = samples[0]\n this._videoNextDts = samp0.dts\n }\n\n const len = samples.length\n let sampleDuration = 0\n const firstSample = samples[0]\n const vDelta = this._videoNextDts - firstSample.dts\n\n if (Math.abs(vDelta) > MAX_DTS_DELTA_WITH_NEXT_CHUNK) {\n // emit large delta of first sample with expect\n if (Math.abs(firstSample.dts - this._lastVideoExceptionChunkFirstDtsDot) > VIDEO_EXCETION_LOG_EMIT_DURATION) {\n this._lastVideoExceptionChunkFirstDtsDot = firstSample.dts\n\n videoTrack.warnings.push({\n type: WarningType.LARGE_VIDEO_GAP_BETWEEN_CHUNK,\n nextDts: this._videoNextDts,\n firstSampleDts: firstSample.dts,\n nextSampleDts: samples[1]?.dts,\n sampleDuration: vDelta\n })\n }\n\n // only video breaked\n if (this._videoTimestampBreak >= TRACK_BREACKED_CHECK_TIME) {\n this._videoNextDts = firstSample.dts\n this._videoTimestampBreak = 0\n } else {\n // resolve first frame only\n firstSample.dts += vDelta\n firstSample.pts += vDelta\n if (!this.audioTrack.exist()) {\n this._videoTimestampBreak = 1\n }\n }\n }\n\n for (let i = 0; i < len; i++) {\n const dts = samples[i].dts\n const nextSample = samples[i + 1]\n\n if (i < len - 1) {\n sampleDuration = nextSample.dts - dts\n } else if (lastSample) {\n sampleDuration = lastSample.dts - dts\n } else {\n sampleDuration = refSampleDurationInt\n }\n\n if (sampleDuration > MAX_VIDEO_FRAME_DURATION || sampleDuration < 0) {\n this._videoTimestampBreak++\n // emit stream breaked\n if (Math.abs(dts - this._lastVideoExceptionLargeGapDot) > VIDEO_EXCETION_LOG_EMIT_DURATION) {\n this._lastVideoExceptionLargeGapDot = dts\n videoTrack.warnings.push({\n type: WarningType.LARGE_VIDEO_GAP,\n time: dts / videoTrack.timescale,\n dts,\n originDts: samples[i].originDts,\n nextDts: this._videoNextDts,\n sampleDuration,\n refSampleDuration: refSampleDurationInt\n })\n }\n\n sampleDuration = refSampleDurationInt\n }\n\n samples[i].duration = sampleDuration\n this._videoNextDts += sampleDuration\n this._lastVideoDuration = sampleDuration\n }\n }\n\n _fixAudio (audioTrack) {\n const samples = audioTrack.samples\n if (!samples.length) return\n\n // offset origin timestamp\n samples.forEach(x => {\n x.dts = x.pts -= this._baseDts\n })\n\n this._doFixAudioInternal(audioTrack, samples, 1000)\n }\n\n _calculateBaseDts (audioTrack, videoTrack) {\n const audioSamps = audioTrack.samples\n const videoSamps = videoTrack.samples\n\n if (!audioSamps.length && !videoSamps.length) {\n return false\n }\n\n let audioBasePts = Infinity\n let videoBaseDts = Infinity\n\n if (audioSamps.length) {\n audioTrack.baseDts = audioBasePts = audioSamps[0].pts\n }\n\n if (videoSamps.length) {\n videoTrack.baseDts = videoBaseDts = videoSamps[0].dts\n }\n\n this._baseDts = Math.min(audioBasePts, videoBaseDts)\n\n const delta = videoBaseDts - audioBasePts\n\n if (Number.isFinite(delta) && Math.abs(delta) > LARGE_AV_FIRST_FRAME_GAP) {\n videoTrack.warnings.push({\n type: WarningType.LARGE_AV_SHIFT,\n videoBaseDts,\n audioBasePts,\n baseDts: this._baseDts,\n delta\n })\n }\n\n this._baseDtsInited = true\n return true\n }\n\n _resetBaseDtsWhenStreamBreaked () {\n /**\n * timestamp breaked\n * _audioNextDts\n * ---------------------|\n * (_baseDts) _videoNextDts\n * ----------------------|\n * <----------------\n * nextVideo.dts\n * ----------------------------------------|\n * nextAudio.dts\n * ---------------------------------------|\n */\n\n // calc baseDts base on new samples\n const calc = this._calculateBaseDts(this.audioTrack, this.videoTrack)\n\n if (!calc) return\n\n // consider the expect dts for next frame\n if (!this.audioTrack.exist()){\n this._baseDts -= this._videoNextDts\n } else if (!this.videoTrack.exist()){\n this._baseDts -= this._audioNextPts\n } else {\n this._baseDts -= Math.min(this._audioNextPts, this._videoNextDts)\n }\n this._videoTimestampBreak = 0\n this._audioTimestampBreak = 0\n }\n\n _doFixAudioInternal (audioTrack, samples, timescale) {\n if (!audioTrack.sampleDuration) {\n audioTrack.sampleDuration = audioTrack.codecType === AudioCodecType.AAC\n ? AAC.getFrameDuration(audioTrack.timescale, timescale)\n : this._getG711Duration(audioTrack)\n }\n const refSampleDuration = audioTrack.sampleDuration\n\n const sampleDurationInSampleRate = audioTrack.codecType === AudioCodecType.AAC ? 1024 : refSampleDuration * audioTrack.timescale / 1000\n\n if (this._audioNextPts === undefined) {\n const samp0 = samples[0]\n this._audioNextPts = samp0.pts\n }\n\n for (let i = 0; i < samples.length; i++) {\n let nextPts = this._audioNextPts\n const sample = samples[i]\n let delta = sample.pts - nextPts\n\n // only audio breaked\n if (i === 0 && this._audioTimestampBreak >= TRACK_BREACKED_CHECK_TIME && this._keyFrameInNextChunk) {\n nextPts = this._audioNextPts = sample.dts\n delta = 0\n this._audioTimestampBreak = 0\n }\n\n // fill frames\n // delta >= 3 * refSampleDurationInt\n // delta <= 500s\n if (!this._audioTimestampBreak && delta >= AUDIO_GAP_OVERLAP_THRESHOLD_COUNT * refSampleDuration && delta <= MAX_SILENT_FRAME_DURATION && !isSafari) {\n const silentFrame = this._getSilentFrame(audioTrack) || samples[0].data.subarray()\n const count = Math.floor(delta / refSampleDuration)\n\n if (Math.abs(sample.pts - this._lastAudioExceptionGapDot) > AUDIO_EXCETION_LOG_EMIT_DURATION) {\n this._lastAudioExceptionGapDot = sample.pts\n audioTrack.warnings.push({\n type: WarningType.AUDIO_FILLED,\n pts: sample.pts,\n originPts: sample.originPts,\n count,\n nextPts,\n refSampleDuration\n })\n }\n\n for (let j = 0; j < count; j++) {\n const silentSample = new AudioSample(Math.floor(this._audioNextPts + refSampleDuration) - Math.floor(this._audioNextPts), silentFrame, sampleDurationInSampleRate)\n silentSample.originPts = Math.floor(this._baseDts + nextPts)\n samples.splice(i, 0, silentSample)\n this._audioNextPts += refSampleDuration\n i++\n }\n\n i--\n // delta <= -3 * refSampleDurationInt\n // delta >= -500ms\n } else if (delta <= -AUDIO_GAP_OVERLAP_THRESHOLD_COUNT * refSampleDuration && delta >= -1 * MAX_SILENT_FRAME_DURATION) {\n // need discard frames\n if (Math.abs(sample.pts - this._lastAudioExceptionOverlapDot) > AUDIO_EXCETION_LOG_EMIT_DURATION) {\n this._lastAudioExceptionOverlapDot = sample.pts\n\n audioTrack.warnings.push({\n type: WarningType.AUDIO_DROPPED,\n pts: sample.pts,\n originPts: sample.originPts,\n nextPts,\n refSampleDuration\n })\n }\n samples.splice(i, 1)\n i--\n } else {\n if (Math.abs(delta) > MAX_SILENT_FRAME_DURATION) {\n this._audioTimestampBreak++\n\n if (Math.abs(sample.pts - this._lastAudioExceptionLargeGapDot) > AUDIO_EXCETION_LOG_EMIT_DURATION) {\n this._lastAudioExceptionLargeGapDot = sample.pts\n audioTrack.warnings.push({\n type: WarningType.LARGE_AUDIO_GAP,\n time: sample.pts / 1000,\n pts: sample.pts,\n originPts: sample.originPts,\n nextPts,\n sampleDuration: delta,\n refSampleDuration\n })\n }\n }\n\n sample.dts = sample.pts = nextPts\n sample.duration = sampleDurationInSampleRate\n this._audioNextPts += refSampleDuration\n }\n }\n }\n\n _getG711Duration (track) {\n const { sampleSize, channelCount, sampleRate } = track\n const samp0 = track.samples[0]\n if (!samp0) return\n return samp0.data.byteLength * 2 / channelCount / (sampleSize / 8) / sampleRate * 1000\n }\n\n _getSilentFrame (track) {\n if (track.codecType === AudioCodecType.AAC) return AAC.getSilentFrame(track.codec, track.channelCount)\n return new Uint8Array(8 * track.sampleDuration * track.channelCount)\n }\n}\n","import { UTF8 } from '../utils'\n\nexport class AMF {\n static parse (data) {\n if (data.length < 3) return\n\n const ret = {}\n const name = AMF._parseValue(new DataView(data.buffer, data.byteOffset, data.byteLength))\n const value = AMF._parseValue(new DataView(data.buffer, data.byteOffset + name.size, data.byteLength - name.size))\n ret[name.data] = value.data\n\n return ret\n }\n\n static _parseValue (view) {\n const dataLen = view.byteLength\n const type = view.getUint8(0)\n let offset = 1\n let isEnd = false\n let value\n\n switch (type) {\n case 0: // Number(Double) type\n value = view.getFloat64(1)\n offset += 8\n break\n case 1: { // Boolean type\n value = !!view.getUint8(1)\n offset += 1\n break\n }\n case 2: { // String type\n const { data, size } = AMF._parseString(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset))\n value = data\n offset += size\n }\n break\n case 3: { // Object(s) type\n value = {}\n let terminal = 0\n if ((view.getUint32(dataLen - 4) & 0x00FFFFFF) === 9) {\n terminal = 3\n }\n while (offset < dataLen - 4) { // 4 === type(UI8) + ScriptDataObjectEnd(UI24)\n const { size, data, isEnd } = AMF._parseObject(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset - terminal))\n if (isEnd) break\n value[data.name] = data.value\n offset += size\n }\n if (offset <= dataLen - 3) {\n const marker = view.getUint32(offset - 1) & 0x00FFFFFF\n if (marker === 9) offset += 3\n }\n }\n break\n case 8: { // ECMA array type (Mixed array)\n value = {}\n offset += 4 // ECMAArrayLength(UI32)\n let terminal = 0 // workaround for malformed MixedArrays which has missing ScriptDataObjectEnd\n if ((view.getUint32(dataLen - 4) & 0x00FFFFFF) === 9) {\n terminal = 3\n }\n while (offset < dataLen - 8) { // 8 === type(UI8) + ECMAArrayLength(UI32) + ScriptDataVariableEnd(UI24)\n const { size, data, isEnd } = AMF._parseObject(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset - terminal))\n if (isEnd) break\n value[data.name] = data.value\n offset += size\n }\n if (offset <= dataLen - 3) {\n const marker = view.getUint32(offset - 1) & 0x00FFFFFF\n if (marker === 9) {\n offset += 3\n }\n }\n }\n break\n case 9: // ScriptDataObjectEnd\n value = undefined\n offset = 1\n isEnd = true\n break\n case 10: { // Strict array type\n value = []\n const strictArrayLength = view.getUint32(1)\n offset += 4\n for (let i = 0; i < strictArrayLength; i++) {\n const { data, size } = AMF._parseValue(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset))\n value.push(data)\n offset += size\n }\n }\n break\n case 11: { // Date type\n const timestamp = view.getFloat64(offset) + view.getInt16(offset + 8) * 60000\n value = new Date(timestamp)\n offset += 10\n }\n break\n case 12: { // Long string type\n const length = view.getUint32(1)\n offset += 4\n value = ''\n if (length > 0) {\n value = UTF8.decode(new Uint8Array(view.buffer, view.byteOffset + offset, length))\n }\n offset += length\n }\n break\n default:\n offset = dataLen\n break\n }\n\n return {\n data: value,\n size: offset,\n isEnd\n }\n }\n\n static _parseString (view) {\n const length = view.getUint16(0)\n let data = ''\n if (length > 0) {\n data = UTF8.decode(new Uint8Array(view.buffer, view.byteOffset + 2, length))\n }\n\n return {\n data,\n size: 2 + length\n }\n }\n\n static _parseObject (view) {\n if (view.byteLength < 3) return\n\n const name = AMF._parseString(view)\n const value = AMF._parseValue(new DataView(view.buffer, view.byteOffset + name.size, view.byteLength - name.size))\n\n return {\n data: {\n name: name.data,\n value: value.data\n },\n size: name.size + value.size,\n isEnd: value.isEnd\n }\n }\n}\n","import { VideoTrack, AudioTrack, MetadataTrack, AudioSample, VideoSample, VideoCodecType, AudioCodecType, FlvScriptSample, SeiSample } from '../model'\nimport { FlvFixer } from './fixer'\nimport { concatUint8Array, Logger, readBig32 } from '../utils'\nimport { AAC, AVC, HEVC, NALu } from '../codec'\nimport { AMF } from './amf'\n\nconst logger = new Logger('FlvDemuxer')\n\n/**\n * @typedef {Object} DemuxResult\n * @property {VideoTrack} videoTrack\n * @property {AudioTrack} audioTrack\n * @property {MetadataTrack} metadataTrack\n */\n\nexport class FlvDemuxer {\n _headerParsed = false\n _remainingData = null\n _gopId = 0\n _needAddMetaBeforeKeyFrameNal = true // 标识H265流中关键帧Nal之前是否需要插入vps、sps、pps Nal\n\n static AUDIO_RATE = [5500, 11000, 22000, 44000]\n\n /**\n * @param {VideoTrack} [videoTrack]\n * @param {AudioTrack} [audioTrack]\n * @param {MetadataTrack} [metadataTrack]\n */\n constructor (videoTrack, audioTrack, metadataTrack) {\n this.videoTrack = videoTrack || new VideoTrack()\n this.audioTrack = audioTrack || new AudioTrack()\n this.metadataTrack = metadataTrack || new MetadataTrack()\n this._fixer = new FlvFixer(this.videoTrack, this.audioTrack, this.metadataTrack)\n }\n\n /**\n * @param {Uint8Array} data\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @returns {DemuxResult}\n */\n demux (data, discontinuity = false, contiguous = true) {\n const { audioTrack, videoTrack, metadataTrack } = this\n\n if (discontinuity || !contiguous) {\n this._remainingData = null\n this._headerParsed = false\n }\n\n if (discontinuity) {\n videoTrack.reset()\n audioTrack.reset()\n metadataTrack.reset()\n } else {\n videoTrack.samples = []\n audioTrack.samples = []\n metadataTrack.seiSamples = []\n metadataTrack.flvScriptSamples = []\n videoTrack.warnings = []\n audioTrack.warnings = []\n\n if (this._remainingData) {\n data = concatUint8Array(this._remainingData, data)\n this._remainingData = null\n }\n }\n\n if (!data.length) {\n return {\n videoTrack,\n audioTrack,\n metadataTrack\n }\n }\n\n let offset = 0\n if (!this._headerParsed) {\n if (!FlvDemuxer.probe(data)) {\n throw new Error('Invalid flv file')\n }\n audioTrack.present = ((data[4] & 4) >>> 2) !== 0\n videoTrack.present = (data[4] & 1) !== 0\n this._headerParsed = true\n offset = readBig32(data, 5) + 4 // skip prev tag size\n }\n\n const dataLen = data.length\n\n let tagType\n let dataSize\n let timestamp\n let bodyData\n let prevTagSize\n while ((offset + 15) < dataLen) { // header and prev tag size\n tagType = data[offset]\n dataSize = (data[offset + 1] << 16) | (data[offset + 2] << 8) | data[offset + 3]\n if (offset + 15 + dataSize > dataLen) break\n timestamp = (\n (data[offset + 7] << 24 >>> 0) +\n (data[offset + 4] << 16) +\n (data[offset + 5] << 8) +\n data[offset + 6]\n )\n\n offset += 11\n bodyData = data.subarray(offset, offset + dataSize)\n if (tagType === 8) {\n this._parseAudio(bodyData, timestamp)\n } else if (tagType === 9) {\n this._parseVideo(bodyData, timestamp)\n } else if (tagType === 18) {\n this._parseScript(bodyData, timestamp)\n } else {\n logger.warn(`Invalid tag type: ${tagType}`)\n }\n\n offset += dataSize\n prevTagSize = readBig32(data, offset)\n if (prevTagSize !== 11 + dataSize) {\n logger.warn(`Invalid PrevTagSize ${prevTagSize} (${11 + dataSize})`)\n }\n\n offset += 4\n }\n\n if (offset < dataLen) {\n this._remainingData = data.subarray(offset)\n }\n\n audioTrack.formatTimescale = videoTrack.formatTimescale = videoTrack.timescale = metadataTrack.timescale = 1000\n audioTrack.timescale = audioTrack.sampleRate || 0\n\n if (!audioTrack.exist() && audioTrack.hasSample()) {\n audioTrack.reset()\n }\n if (!videoTrack.exist() && videoTrack.hasSample()) {\n videoTrack.reset()\n }\n\n return {\n videoTrack,\n audioTrack,\n metadataTrack\n }\n }\n\n /**\n * @param {number} [startTime=0]\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @returns {DemuxResult}\n */\n fix (startTime, discontinuity, contiguous) {\n this._fixer.fix(startTime, discontinuity, contiguous)\n return {\n videoTrack: this.videoTrack,\n audioTrack: this.audioTrack,\n metadataTrack: this.metadataTrack\n }\n }\n\n /**\n * @param {Uint8Array} data\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @param {number} [startTime=0]\n * @returns {DemuxResult}\n */\n demuxAndFix (data, discontinuity, contiguous, startTime) {\n this.demux(data, discontinuity, contiguous)\n return this.fix(startTime, discontinuity, contiguous)\n }\n\n /**\n * @param { Uint8Array } data\n * @returns {boolean}\n */\n static probe (data) {\n if (data[0] !== 0x46 || data[1] !== 0x4C || data[2] !== 0x56 || data[3] !== 0x01) {\n return false\n }\n return readBig32(data, 5) >= 9\n }\n\n _parseAudio (data, pts) {\n if (!data.length) return\n\n const format = (data[0] & 0xf0) >>> 4\n const track = this.audioTrack\n\n if (\n format !== 10 && // AAC\n format !== 7 && // G.711 A-law logarithmic PCM\n format !== 8 // G.711 mu-law logarithmic PCM\n ) {\n logger.warn(`Unsupported sound format: ${format}`)\n track.reset()\n return\n }\n\n if (format !== 10) {\n const soundRate = (data[0] & 0x0c) >> 2\n const soundSize = (data[0] & 0x02) >> 1\n const soundType = (data[0] & 0x01)\n track.sampleRate = FlvDemuxer.AUDIO_RATE[soundRate]\n track.sampleSize = soundSize ? 16 : 8\n track.channelCount = soundType + 1\n }\n\n if (format === 10) {\n this._parseAac(data, pts)\n } else {\n this._parseG711(data, pts, format)\n }\n }\n\n _parseG711 (data, pts, format) {\n const track = this.audioTrack\n track.codecType = format === 7 ? AudioCodecType.G711PCMA : AudioCodecType.G711PCMU\n track.sampleRate = 8000\n track.codec = track.codecType\n track.samples.push(new AudioSample(pts, data.subarray(1)))\n }\n\n _parseAac (data, pts) {\n const track = this.audioTrack\n track.codecType = AudioCodecType.AAC\n\n if (data[1] === 0) { // AACPacketType\n const ret = AAC.parseAudioSpecificConfig(data.subarray(2))\n if (ret) {\n track.codec = ret.codec\n track.channelCount = ret.channelCount\n track.sampleRate = ret.sampleRate\n track.config = ret.config\n track.objectType = ret.objectType\n track.sampleRateIndex = ret.samplingFrequencyIndex\n } else {\n track.reset()\n logger.warn('Cannot parse AudioSpecificConfig', data)\n }\n } else if (data[1] === 1) { // Raw AAC frame data\n if (pts === undefined || pts === null) return\n track.samples.push(new AudioSample(pts, data.subarray(2)))\n } else {\n logger.warn(`Unknown AACPacketType: ${data[1]}`)\n }\n }\n\n _parseVideo (data, dts) {\n if (data.length < 6) return\n\n const frameType = (data[0] & 0xf0) >>> 4\n const codecId = data[0] & 0x0f\n\n const track = this.videoTrack\n\n if (\n codecId !== 7 && // AVC\n codecId !== 12 // HEVC\n ) {\n track.reset()\n logger.warn(`Unsupported codecId: ${codecId}`)\n return\n }\n\n const isHevc = codecId === 12\n track.codecType = isHevc ? VideoCodecType.HEVC : VideoCodecType.AVC\n\n const packetType = data[1]\n const cts = (((data[2] << 16) | (data[3] << 8) | (data[4])) << 8) >> 8\n\n if (packetType === 0) { // DecoderConfigurationRecord\n const configData = data.subarray(5)\n const ret = isHevc\n ? HEVC.parseHEVCDecoderConfigurationRecord(configData)\n : AVC.parseAVCDecoderConfigurationRecord(configData)\n if (ret) {\n const { hvcC, sps, ppsArr, spsArr, vpsArr, nalUnitSize } = ret\n if (hvcC) {\n track.hvcC = track.hvcC || hvcC\n }\n if (sps) {\n track.codec = sps.codec\n track.width = sps.width\n track.height = sps.height\n track.sarRatio = sps.sarRatio\n track.fpsNum = sps.fpsNum\n track.fpsDen = sps.fpsDen\n }\n if (spsArr.length) track.sps = spsArr\n if (ppsArr.length) track.pps = ppsArr\n if (vpsArr && vpsArr.length) track.vps = vpsArr\n if (nalUnitSize) track.nalUnitSize = nalUnitSize\n } else {\n logger.warn(`Cannot parse ${isHevc ? 'HEVC' : 'AVC'}DecoderConfigurationRecord`, data)\n }\n } else if (packetType === 1) { // One or more NALUs\n let units = NALu.parseAvcC(data.subarray(5), track.nalUnitSize)\n\n units = this._checkAddMetaNalToUnits(isHevc, units, track)\n\n if (units && units.length) {\n const sample = new VideoSample(dts + cts, dts, units)\n if (frameType === 1) {\n sample.setToKeyframe()\n }\n track.samples.push(sample)\n\n units.forEach(unit => {\n const type = isHevc ? (unit[0] >>> 1) & 0x3f : unit[0] & 0x1f\n switch (type) {\n case 5: // IDR\n case 16: // HEVC BLA_W_LP\n case 17: // HEVC BLA_W_RADL\n case 18: // HEVC BLA_N_LP\n case 19: // HEVC IDR_W_RADL\n case 20: // HEVC IDR_N_LP\n case 21: // HEVC CRA_NUT\n case 22: // HEVC RSV_IRAP_VCL22\n case 23: // HEVC RSV_IRAP_VCL23\n if ((!isHevc && type !== 5) || (isHevc && type === 5)) break\n sample.setToKeyframe()\n break\n case 6: // SEI\n case 39: // HEVC PREFIX_SEI\n case 40: // HEVC SUFFIX_SEI\n if ((!isHevc && type !== 6) || (isHevc && type === 6)) break\n this.metadataTrack.seiSamples.push(new SeiSample(\n NALu.parseSEI(NALu.removeEPB(unit), isHevc),\n dts + cts\n ))\n break\n default:\n }\n })\n\n if (sample.keyframe) {\n this._gopId++\n }\n sample.gopId = this._gopId\n } else {\n logger.warn('Cannot parse NALUs', data)\n }\n } else if (packetType === 2) {\n // AVC end of sequence, Empty\n } else {\n logger.warn(`Unknown AVCPacketType: ${packetType}`)\n }\n }\n\n _checkAddMetaNalToUnits (hevc, units, track) {\n if (!hevc || !this._needAddMetaBeforeKeyFrameNal) {\n this._needAddMetaBeforeKeyFrameNal = false\n return units\n }\n\n const nalTypes = units.map(x => (x[0] >>> 1) & 0x3f)\n\n if (nalTypes.includes(32)) {\n this._needAddMetaBeforeKeyFrameNal = false\n return units\n }\n\n units.unshift(track.pps[0])\n units.unshift(track.sps[0])\n units.unshift(track.vps[0])\n\n return units.filter(Boolean)\n }\n\n _parseScript (data, pts) {\n this.metadataTrack.flvScriptSamples.push(new FlvScriptSample(AMF.parse(data), pts))\n }\n}\n","import { TsFixer } from './fixer'\nimport { AVC, AAC, HEVC, NALu } from '../codec'\nimport { VideoSample, AudioSample, VideoCodecType, VideoTrack, AudioTrack, MetadataTrack, SeiSample } from '../model'\nimport { Logger, concatUint8Array } from '../utils'\n\nconst logger = new Logger('TsDemuxer')\n\nexport class TsDemuxer {\n _pmtId = -1\n _remainingPacketData = null\n _videoPesData = []\n _audioPesData = []\n _gopId = 0\n\n /**\n * @param {VideoTrack} [videoTrack]\n * @param {AudioTrack} [audioTrack]\n * @param {MetadataTrack} [metadataTrack]\n */\n constructor (videoTrack, audioTrack, metadataTrack) {\n this.videoTrack = videoTrack || new VideoTrack()\n this.audioTrack = audioTrack || new AudioTrack()\n this.metadataTrack = metadataTrack || new MetadataTrack()\n this._fixer = new TsFixer(this.videoTrack, this.audioTrack, this.metadataTrack)\n }\n\n /**\n * @param {Uint8Array} data\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @returns {import('../flv').DemuxResult}\n */\n demux (data, discontinuity = false, contiguous = true) {\n const { audioTrack, videoTrack, metadataTrack } = this\n\n if (discontinuity) {\n this._pmtId = -1\n videoTrack.reset()\n audioTrack.reset()\n metadataTrack.reset()\n }\n\n if (!contiguous || discontinuity) {\n this._remainingPacketData = null\n this._videoPesData = []\n this._audioPesData = []\n } else {\n videoTrack.samples = []\n audioTrack.samples = []\n metadataTrack.seiSamples = []\n videoTrack.warnings = []\n audioTrack.warnings = []\n\n if (this._remainingPacketData) {\n data = concatUint8Array(this._remainingPacketData, data)\n this._remainingPacketData = null\n }\n }\n\n let dataLen = data.length\n const remainingLength = dataLen % 188\n if (remainingLength) {\n this._remainingPacketData = data.subarray(dataLen - remainingLength)\n dataLen -= remainingLength\n }\n\n let videoPid = videoTrack.pid\n let audioPid = audioTrack.pid\n\n for (let start = 0; start < dataLen; start += 188) {\n if (data[start] !== 0x47) throw new Error('TS packet did not start with 0x47')\n const payloadUnitStartIndicator = !!(data[start + 1] & 0x40)\n const pid = ((data[start + 1] & 0x1f) << 8) + data[start + 2]\n const adaptationFiledControl = (data[start + 3] & 0x30) >> 4\n\n let offset\n if (adaptationFiledControl > 1) {\n offset = start + 5 + data[start + 4]\n if (offset === start + 188) continue\n } else {\n offset = start + 4\n }\n\n switch (pid) {\n case 0: // PAT\n if (payloadUnitStartIndicator) offset += data[offset] + 1\n this._pmtId = ((data[offset + 10] & 0x1f) << 8) | data[offset + 11]\n break\n case this._pmtId: {\n if (payloadUnitStartIndicator) offset += data[offset] + 1\n const tableEnd = offset + 3 + (((data[offset + 1] & 0x0f) << 8) | data[offset + 2]) - 4\n const programInfoLength = ((data[offset + 10] & 0x0f) << 8) | data[offset + 11]\n offset += 12 + programInfoLength\n\n while (offset < tableEnd) {\n const esPid = ((data[offset + 1] & 0x1f) << 8) | data[offset + 2]\n switch (data[offset]) {\n case 0x0f: // AAC ADTS\n audioTrack.pid = audioPid = esPid\n break\n case 0x1b: // AVC\n if (videoPid !== -1) break\n videoTrack.codecType = VideoCodecType.AVC\n videoTrack.pid = videoPid = esPid\n break\n case 0x24: // HEVC\n if (videoPid !== -1) break\n videoTrack.codecType = VideoCodecType.HEVC\n videoTrack.pid = videoPid = esPid\n break\n default:\n logger.warn(`Unsupported stream. type: ${data[offset]}, pid: ${esPid}`)\n }\n\n offset += (((data[offset + 3] & 0x0f) << 8) | data[offset + 4]) + 5\n }\n }\n break\n case videoPid:\n if (payloadUnitStartIndicator && this._videoPesData.length) {\n this._parseVideoData()\n }\n this._videoPesData.push(data.subarray(offset, start + 188))\n break\n case audioPid:\n if (payloadUnitStartIndicator && this._audioPesData.length) {\n this._parseAudioData()\n }\n this._audioPesData.push(data.subarray(offset, start + 188))\n break\n case 17:\n case 0x1fff:\n break\n default:\n logger.warn(`Unknown pid: ${pid}`)\n }\n }\n\n this._parseVideoData()\n this._parseAudioData()\n\n audioTrack.formatTimescale = videoTrack.formatTimescale = videoTrack.timescale = metadataTrack.timescale = 90000\n\n audioTrack.timescale = audioTrack.sampleRate || 0\n\n return {\n videoTrack,\n audioTrack,\n metadataTrack\n }\n }\n\n /**\n * @param {number} [startTime=0]\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n */\n fix (startTime, discontinuity, contiguous) {\n this._fixer.fix(startTime, discontinuity, contiguous)\n return {\n videoTrack: this.videoTrack,\n audioTrack: this.audioTrack,\n metadataTrack: this.metadataTrack\n }\n }\n\n /**\n * @param {Uint8Array} data\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @param {number} [startTime=0]\n */\n demuxAndFix (data, discontinuity, contiguous, startTime) {\n this.demux(data, discontinuity, contiguous)\n return this.fix(startTime, discontinuity, contiguous)\n }\n\n /**\n * @param { Uint8Array } data\n * @returns {boolean}\n */\n static probe (data) {\n if (!data.length) return false\n return data[0] === 0x47 && data[188] === 0x47 && data[376] === 0x47\n }\n\n _parseVideoData () {\n if (!this._videoPesData.length) return\n const pes = TsDemuxer._parsePES(concatUint8Array(...this._videoPesData))\n if (!pes) {\n logger.warn('Cannot parse video pes', this._videoPesData)\n return\n }\n\n const units = NALu.parseAnnexB(pes.data)\n if (units) {\n this._createVideoSample(units, pes.pts, pes.dts)\n } else {\n logger.warn('Cannot parse avc units', pes)\n }\n\n this._videoPesData = []\n }\n\n _createVideoSample (units, pts, dts) {\n if (!units.length) return\n const track = this.videoTrack\n const isHevc = track.codecType === VideoCodecType.HEVC\n\n const sample = new VideoSample(pts, dts)\n units.forEach((unit) => {\n const type = isHevc ? (unit[0] >>> 1) & 0x3f : unit[0] & 0x1f\n switch (type) {\n case 5: // IDR\n case 16: // HEVC BLA_W_LP\n case 17: // HEVC BLA_W_RADL\n case 18: // HEVC BLA_N_LP\n case 19: // HEVC IDR_W_RADL\n case 20: // HEVC IDR_N_LP\n case 21: // HEVC CRA_NUT\n case 22: // HEVC RSV_IRAP_VCL22\n case 23: // HEVC RSV_IRAP_VCL23\n if ((!isHevc && type !== 5) || (isHevc && type === 5)) break\n sample.setToKeyframe()\n this._gopId++\n break\n case 6: // SEI\n case 39: // HEVC PREFIX_SEI\n case 40: // HEVC SUFFIX_SEI\n if ((!isHevc && type !== 6) || (isHevc && type === 6)) break\n this.metadataTrack.seiSamples.push(new SeiSample(\n NALu.parseSEI(NALu.removeEPB(unit), isHevc),\n pts\n ))\n // fix 分割nal之前只要sei信息被当做单独一个sample\n return\n case 32: // HEVC VPS\n if (!isHevc) break\n if (!track.vps.length) {\n const hvcC = HEVC.parseVPS(NALu.removeEPB(unit), track.hvcC)\n track.hvcC = track.hvcC || hvcC\n track.vps = [unit]\n }\n break\n case 7: // SPS\n case 33: // HEVC SPS\n if ((!isHevc && type !== 7) || (isHevc && type === 7)) break\n if (!track.sps.length) {\n const data = NALu.removeEPB(unit)\n const spsInfo = isHevc ? HEVC.parseSPS(data, track.hvcC) : AVC.parseSPS(data)\n track.sps = [unit]\n track.hvcC = track.hvcC || spsInfo.hvcC\n track.codec = spsInfo.codec\n track.width = spsInfo.width\n track.height = spsInfo.height\n track.sarRatio = spsInfo.sarRatio\n track.fpsNum = spsInfo.fpsNum\n track.fpsDen = spsInfo.fpsDen\n }\n break\n case 8: // PPS\n case 34: // HEVC PPS\n if ((!isHevc && type !== 8) || (isHevc && type === 8)) break\n if (!track.pps.length) track.pps = [unit]\n break\n case 9: // AUD\n case 35: // HEVC AUD\n // if ((!isHevc && type !== 9) || (isHevc && type === 9)) break\n // sample.gopId = this._gopId\n // if (sample.units.length && !keyFrame) {\n // this._pushVideoSample(track, sample)\n // sample = this.prevAvcSample = new VideoSample(pts, dts)\n // }\n break\n default:\n }\n sample.units.push(unit)\n })\n sample.gopId = this._gopId\n this._pushVideoSample(track, sample)\n }\n\n _pushVideoSample (track, sample) {\n if (sample.units.length) {\n if (sample.pts === null || sample.pts === undefined) {\n logger.warn('Video sample no pts', sample)\n const lastSample = track.samples[track.samples.length - 1]\n if (lastSample) {\n sample.pts = lastSample.pts\n sample.dts = lastSample.dts\n } else {\n logger.warn('Drop video sample', sample)\n }\n } else {\n track.samples.push(sample)\n }\n }\n }\n\n _parseAudioData () {\n if (!this._audioPesData.length) return\n const pes = TsDemuxer._parsePES(concatUint8Array(...this._audioPesData))\n if (!pes) {\n logger.warn('Cannot parse audio pes', this._audioPesData)\n return\n }\n\n this._parseAacData(pes)\n\n this._audioPesData = []\n }\n\n _parseAacData (pes) {\n const track = this.audioTrack\n let pts = pes.pts\n if (pts === null || pts === undefined) {\n logger.warn('AAC pes not pts', track)\n if (!track.samples.length || !track.sampleRate) {\n return\n }\n pts = track.samples[track.samples.length - 1].pts + AAC.getFrameDuration(track.sampleRate)\n }\n\n const ret = AAC.parseADTS(pes.data, pts)\n if (ret) {\n track.codec = ret.codec\n track.channelCount = ret.channelCount\n track.sampleRate = ret.sampleRate\n track.objectType = ret.objectType\n track.sampleRateIndex = ret.samplingFrequencyIndex\n track.config = ret.config\n track.samples.push(...ret.frames.map((s) => new AudioSample(s.pts, s.data)))\n\n if (ret.skip) {\n logger.warn(`Skip aac adts ${ret.skip} bits`)\n }\n if (ret.remaining) {\n logger.warn(`Remaining aac adts ${ret.remaining} bits`)\n }\n } else {\n logger.warn('Cannot parse aac adts', pes)\n }\n }\n\n static _parsePES (data) {\n const headerDataLen = data[8]\n if (headerDataLen === null || headerDataLen === undefined || data.length < (headerDataLen + 9)) return\n const startPrefix = data[0] << 16 | data[1] << 8 | data[2]\n if (startPrefix !== 1) return\n const pesLen = (data[4] << 8) + data[5]\n if (pesLen && pesLen > data.length - 6) return\n\n let pts\n let dts\n const ptsDtsFlags = data[7]\n if (ptsDtsFlags & 0xc0) {\n pts = (data[9] & 0x0e) * 536870912 +\n (data[10] & 0xff) * 4194304 +\n (data[11] & 0xfe) * 16384 +\n (data[12] & 0xff) * 128 +\n (data[13] & 0xfe) / 2\n\n if (ptsDtsFlags & 0x40) {\n dts = (data[14] & 0x0e) * 536870912 +\n (data[15] & 0xff) * 4194304 +\n (data[16] & 0xfe) * 16384 +\n (data[17] & 0xff) * 128 +\n (data[18] & 0xfe) / 2\n if (pts - dts > 60 * 90000) pts = dts\n } else {\n dts = pts\n }\n }\n\n return { data: data.subarray(9 + headerDataLen), pts, dts }\n }\n}\n","import { AudioCodecType, VideoCodecType } from '../model'\nimport { getAvcCodec, readBig16, readBig24, readBig32, readBig64 } from '../utils'\nimport { AAC } from '../codec'\nexport class MP4Parser {\n static findBox (data, names, start = 0) {\n const ret = []\n if (!data) return ret\n\n let size = 0\n let type = ''\n let headerSize = 0\n while (data.length > 7) {\n size = readBig32(data)\n type = String.fromCharCode.apply(null, data.subarray(4, 8))\n headerSize = 8\n if (size === 1) {\n size = readBig64(data, 8)\n headerSize += 8\n } else if (!size) {\n size = data.length\n }\n if (!names[0] || type === names[0]) {\n const subData = data.subarray(0, size)\n if (names.length < 2) {\n ret.push({\n start,\n size,\n headerSize,\n type,\n data: subData\n })\n } else {\n return MP4Parser.findBox(subData.subarray(headerSize), names.slice(1), start + headerSize)\n }\n }\n\n start += size\n data = data.subarray(size)\n }\n\n return ret\n }\n\n static tfhd (box) {\n return parseBox(box, true, (ret, data) => {\n ret.trackId = readBig32(data)\n let start = 4\n const baseDataOffsetPresent = (ret.flags & 0xff) & 0x01\n const sampleDescriptionIndexPresent = (ret.flags & 0xff) & 0x02\n const defaultSampleDurationPresent = (ret.flags & 0xff) & 0x08\n const defaultSampleSizePresent = (ret.flags & 0xff) & 0x10\n const defaultSampleFlagsPresent = (ret.flags & 0xff) & 0x20\n\n if (baseDataOffsetPresent) {\n start += 4 // truncate top 4 bytes\n ret.baseDataOffset = readBig32(data, start)\n start += 4\n }\n if (sampleDescriptionIndexPresent) {\n ret.sampleDescriptionIndex = readBig32(data, start)\n start += 4\n }\n if (defaultSampleDurationPresent) {\n ret.defaultSampleDuration = readBig32(data, start)\n start += 4\n }\n if (defaultSampleSizePresent) {\n ret.defaultSampleSize = readBig32(data, start)\n start += 4\n }\n if (defaultSampleFlagsPresent) {\n ret.defaultSampleFlags = readBig32(data, start)\n }\n })\n }\n\n static sidx (box) {\n return parseBox(box, true, (ret, data) => {\n let start = 0\n ret.reference_ID = readBig32(data, start)// stream.readUint32();\n start += 4\n ret.timescale = readBig32(data, start)\n start += 4\n if (ret.version === 0) {\n ret.earliest_presentation_time = readBig32(data, start)\n start += 4\n ret.first_offset = readBig32(data, start)\n start += 4\n } else {\n ret.earliest_presentation_time = readBig64(data, start)\n start += 8\n ret.first_offset = readBig64(data, start)\n start += 8\n }\n start += 2\n ret.references = []\n const count = readBig16(data, start)\n start += 2\n for (let i = 0; i < count; i++) {\n const ref = {}\n ret.references.push(ref)\n let tmp32 = readBig32(data, start)\n start += 4\n ref.reference_type = (tmp32 >> 31) & 0x1\n ref.referenced_size = tmp32 & 0x7FFFFFFF\n ref.subsegment_duration = readBig32(data, start)\n start += 4\n tmp32 = readBig32(data, start)\n start += 4\n ref.starts_with_SAP = (tmp32 >> 31) & 0x1\n ref.SAP_type = (tmp32 >> 28) & 0x7\n ref.SAP_delta_time = tmp32 & 0xFFFFFFF\n }\n })\n }\n\n static moov (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.mvhd = MP4Parser.mvhd(MP4Parser.findBox(data, ['mvhd'], start)[0])\n ret.trak = MP4Parser.findBox(data, ['trak'], start).map(trak => MP4Parser.trak(trak))\n ret.pssh = MP4Parser.pssh(MP4Parser.findBox(data, ['pssh'], start)[0])\n })\n }\n\n static mvhd (box) {\n return parseBox(box, true, (ret, data) => {\n let start = 0\n if (ret.version === 1) {\n ret.timescale = readBig32(data, 16)\n ret.duration = readBig64(data, 20)\n start += 28\n } else {\n ret.timescale = readBig32(data, 8)\n ret.duration = readBig32(data, 12)\n start += 16\n }\n ret.nextTrackId = readBig32(data, start + 76)\n })\n }\n\n static trak (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.tkhd = MP4Parser.tkhd(MP4Parser.findBox(data, ['tkhd'], start)[0])\n ret.mdia = MP4Parser.mdia(MP4Parser.findBox(data, ['mdia'], start)[0])\n })\n }\n\n static tkhd (box) {\n return parseBox(box, true, (ret, data) => {\n let start = 0\n if (ret.version === 1) {\n ret.trackId = readBig32(data, 16)\n ret.duration = readBig64(data, 24)\n start += 32\n } else {\n ret.trackId = readBig32(data, 8)\n ret.duration = readBig32(data, 16)\n start += 20\n }\n ret.width = readBig32(data, start + 52)\n ret.height = readBig32(data, start + 56)\n })\n }\n\n static mdia (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.mdhd = MP4Parser.mdhd(MP4Parser.findBox(data, ['mdhd'], start)[0])\n ret.hdlr = MP4Parser.hdlr(MP4Parser.findBox(data, ['hdlr'], start)[0])\n ret.minf = MP4Parser.minf(MP4Parser.findBox(data, ['minf'], start)[0])\n })\n }\n\n static mdhd (box) {\n return parseBox(box, true, (ret, data) => {\n let start = 0\n if (ret.version === 1) {\n ret.timescale = readBig32(data, 16)\n ret.duration = readBig64(data, 20)\n start += 28\n } else {\n ret.timescale = readBig32(data, 8)\n ret.duration = readBig32(data, 12)\n start += 16\n }\n const lang = readBig16(data, start)\n ret.language = String.fromCharCode(((lang >> 10) & 0x1F) + 0x60, ((lang >> 5) & 0x1F) + 0x60, (lang & 0x1F) + 0x60)\n })\n }\n\n static hdlr (box) {\n return parseBox(box, true, (ret, data) => {\n if (ret.version === 0) {\n ret.handlerType = String.fromCharCode.apply(null, data.subarray(4, 8))\n }\n })\n }\n\n static minf (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.vmhd = MP4Parser.vmhd(MP4Parser.findBox(data, ['vmhd'], start)[0])\n ret.smhd = MP4Parser.smhd(MP4Parser.findBox(data, ['smhd'], start)[0])\n ret.stbl = MP4Parser.stbl(MP4Parser.findBox(data, ['stbl'], start)[0])\n })\n }\n\n static vmhd (box) {\n return parseBox(box, true, (ret, data) => {\n ret.graphicsmode = readBig16(data)\n ret.opcolor = [readBig16(data, 2), readBig16(data, 4), readBig16(data, 6)]\n })\n }\n\n static smhd (box) {\n return parseBox(box, true, (ret, data) => {\n ret.balance = readBig16(data)\n })\n }\n\n static stbl (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.stsd = MP4Parser.stsd(MP4Parser.findBox(data, ['stsd'], start)[0])\n ret.stts = MP4Parser.stts(MP4Parser.findBox(data, ['stts'], start)[0])\n ret.ctts = MP4Parser.ctts(MP4Parser.findBox(data, ['ctts'], start)[0])\n ret.stsc = MP4Parser.stsc(MP4Parser.findBox(data, ['stsc'], start)[0])\n ret.stsz = MP4Parser.stsz(MP4Parser.findBox(data, ['stsz'], start)[0])\n ret.stco = MP4Parser.stco(MP4Parser.findBox(data, ['stco'], start)[0])\n if (!ret.stco) {\n ret.co64 = MP4Parser.co64(MP4Parser.findBox(data, ['co64'], start)[0])\n ret.stco = ret.co64\n }\n const default_IV_size = ret.stsd.entries[0]?.sinf?.schi?.tenc.default_IV_size\n ret.stss = MP4Parser.stss(MP4Parser.findBox(data, ['stss'], start)[0])\n ret.senc = MP4Parser.senc(MP4Parser.findBox(data, ['senc'], start)[0], default_IV_size)\n })\n }\n\n static senc (box, iv = 8) {\n return parseBox(box, true, (ret, data) => {\n let start = 0\n const sampleCount = readBig32(data, start)\n start += 4\n ret.samples = []\n for (let i = 0; i < sampleCount; i++) {\n const sample = {}\n sample.InitializationVector = []\n for (let j = 0; j < iv; j++){\n sample.InitializationVector[j] = data[start + j]\n }\n start += iv\n if (ret.flags & 0x2) {\n sample.subsamples = []\n const subsampleCount = readBig16(data, start)\n start += 2\n for (let j = 0; j < subsampleCount; j++) {\n const subsample = {}\n subsample.BytesOfClearData = readBig16(data, start)\n start += 2\n subsample.BytesOfProtectedData = readBig32(data, start)\n start += 4\n sample.subsamples.push(subsample)\n }\n }\n ret.samples.push(sample)\n }\n })\n }\n\n static pssh (box) {\n return parseBox(box, true, (ret, data) => {\n const keyIds = []\n const systemId = []\n let start = 0\n for (let i = 0; i < 16; i++) {\n systemId.push(toHex(data[start + i]))\n }\n start += 16\n if (ret.version > 0) {\n const numKeyIds = readBig32(data, start)\n start += 4\n for (let i = 0; i < ('' + numKeyIds).length; i++) {\n for (let j = 0; j < 16; j++) {\n const keyId = data[start]\n start += 1\n keyIds.push(toHex(keyId))\n }\n }\n }\n const dataSize = readBig32(data, start)\n ret.data_size = dataSize\n start += 4\n ret.kid = keyIds\n ret.system_id = systemId\n ret.buffer = data\n })\n }\n\n static stsd (box) {\n return parseBox(box, true, (ret, data, start) => {\n ret.entryCount = readBig32(data)\n ret.entries = MP4Parser.findBox(data.subarray(4), [], start + 4).map(b => {\n switch (b.type) {\n case 'avc1':\n case 'avc2':\n case 'avc3':\n case 'avc4':\n return MP4Parser.avc1(b)\n case 'hvc1':\n case 'hev1':\n return MP4Parser.hvc1(b)\n case 'mp4a':\n return MP4Parser.mp4a(b)\n case 'alaw':\n case 'ulaw':\n return MP4Parser.alaw(b)\n case 'enca':\n // sinf->schi->tenc\n return parseBox(b, false, (ret, data, start) => {\n ret.channelCount = readBig16(data, 16)\n ret.samplesize = readBig16(data, 18)\n ret.sampleRate = (readBig32(data, 24) / (1 << 16))\n data = data.subarray(28)\n ret.sinf = MP4Parser.sinf(MP4Parser.findBox(data, ['sinf'], start)[0])\n ret.esds = MP4Parser.esds(MP4Parser.findBox(data, ['esds'], start)[0])\n })\n case 'encv':\n // sinf->schi->tenc\n return parseBox(b, false, (ret, data, start) => {\n ret.width = readBig16(data, 24)\n ret.height = readBig16(data, 26)\n ret.horizresolution = readBig32(data, 28)\n ret.vertresolution = readBig32(data, 32)\n data = data.subarray(78)\n ret.sinf = MP4Parser.sinf(MP4Parser.findBox(data, ['sinf'], start)[0])\n ret.avcC = MP4Parser.avcC(MP4Parser.findBox(data, ['avcC'], start)[0])\n ret.hvcC = MP4Parser.hvcC(MP4Parser.findBox(data, ['hvcC'], start)[0])\n ret.pasp = MP4Parser.pasp(MP4Parser.findBox(data, ['pasp'], start)[0])\n })\n default:\n }\n }).filter(Boolean)\n })\n }\n\n static tenc (box) {\n return parseBox(box, false, (ret, data) => {\n let start = 6\n ret.default_IsEncrypted = data[start]\n start += 1\n ret.default_IV_size = data[start]\n start += 1\n ret.default_KID = []\n for (let i = 0; i < 16; i++) {\n ret.default_KID.push(toHex(data[start]))\n start += 1\n }\n })\n }\n\n static schi (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.tenc = MP4Parser.tenc(MP4Parser.findBox(data, ['tenc'], start)[0])\n })\n }\n\n static sinf (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.schi = MP4Parser.schi(MP4Parser.findBox(data, ['schi'], start)[0])\n ret.frma = MP4Parser.frma(MP4Parser.findBox(data, ['frma'], start)[0])\n })\n }\n\n static frma (box) {\n return parseBox(box, false, (ret, data) => {\n ret.data_format = ''\n for (let i = 0; i < 4; i++) {\n ret.data_format += String.fromCharCode(data[i])\n }\n })\n }\n\n static avc1 (box) {\n return parseBox(box, false, (ret, data, start) => {\n const bodyStart = parseVisualSampleEntry(ret, data)\n const bodyData = data.subarray(bodyStart)\n start += bodyStart\n ret.avcC = MP4Parser.avcC(MP4Parser.findBox(bodyData, ['avcC'], start)[0])\n ret.pasp = MP4Parser.pasp(MP4Parser.findBox(bodyData, ['pasp'], start)[0])\n })\n }\n\n static avcC (box) {\n return parseBox(box, false, (ret, data) => {\n ret.configurationVersion = data[0]\n ret.AVCProfileIndication = data[1]\n ret.profileCompatibility = data[2]\n ret.AVCLevelIndication = data[3]\n ret.codec = getAvcCodec([data[1], data[2], data[3]])\n ret.lengthSizeMinusOne = data[4] & 0x3\n ret.spsLength = data[5] & 0x1F\n ret.sps = []\n let start = 6\n for (let i = 0; i < ret.spsLength; i++) {\n const size = readBig16(data, start)\n start += 2\n ret.sps.push(data.subarray(start, start + size))\n // ret.spsInfo = SpsParser.parseSPS(ret.sps[i])\n // ret.pixelRatio = ret.spsInfo.par_ratio\n start += size\n }\n ret.ppsLength = data[start]\n start += 1\n ret.pps = []\n for (let i = 0; i < ret.ppsLength; i++) {\n const size = readBig16(data, start)\n start += 2\n ret.pps.push(data.subarray(start, start += size))\n start += size\n }\n })\n }\n\n static hvc1 (box) {\n return parseBox(box, false, (ret, data, start) => {\n const bodyStart = parseVisualSampleEntry(ret, data)\n const bodyData = data.subarray(bodyStart)\n start += bodyStart\n ret.hvcC = MP4Parser.hvcC(MP4Parser.findBox(bodyData, ['hvcC'], start)[0])\n ret.pasp = MP4Parser.pasp(MP4Parser.findBox(bodyData, ['pasp'], start)[0])\n })\n }\n\n static hvcC (box) {\n return parseBox(box, false, (ret, data) => {\n ret.data = box.data\n ret.codec = 'hev1.1.6.L93.B0'\n ret.configurationVersion = data[0]\n const tmp = data[1]\n ret.generalProfileSpace = tmp >> 6\n ret.generalTierFlag = (tmp & 0x20) >> 5\n ret.generalProfileIdc = tmp & 0x1F\n ret.generalProfileCompatibility = readBig32(data, 2)\n ret.generalConstraintIndicatorFlags = data.subarray(6, 12)\n ret.generalLevelIdc = data[12]\n ret.avgFrameRate = readBig16(data, 19)\n ret.numOfArrays = data[22]\n ret.vps = []\n ret.sps = []\n ret.pps = []\n let start = 23\n let type = 0\n let numNalus = 0\n let size = 0\n for (let i = 0; i < ret.numOfArrays; i++) {\n type = data[start] & 0x3F\n numNalus = readBig16(data, start + 1)\n start += 3\n const nalus = []\n for (let j = 0; j < numNalus; j++) {\n size = readBig16(data, start)\n start += 2\n nalus.push(data.subarray(start, start + size))\n start += size\n }\n\n if (type === 32) {\n ret.vps.push(...nalus)\n } else if (type === 33) {\n ret.sps.push(...nalus)\n } else if (type === 34) {\n ret.pps.push(...nalus)\n }\n }\n })\n }\n\n static pasp (box) {\n return parseBox(box, false, (ret, data) => {\n ret.hSpacing = readBig32(data)\n ret.vSpacing = readBig32(data, 4)\n })\n }\n\n static mp4a (box) {\n return parseBox(box, false, (ret, data, start) => {\n const bodyStart = parseAudioSampleEntry(ret, data)\n ret.esds = MP4Parser.esds(MP4Parser.findBox(data.subarray(bodyStart), ['esds'], start + bodyStart)[0])\n })\n }\n\n static esds (box) {\n return parseBox(box, true, (ret, data) => {\n ret.codec = 'mp4a.'\n let start = 0\n let byteRead = 0\n let size = 0\n let tag = 0\n while (data.length) {\n start = 0\n tag = data[start]\n byteRead = data[start + 1]\n start += 2\n while (byteRead & 0x80) {\n size = (byteRead & 0x7F) << 7\n byteRead = data[start]\n start += 1\n }\n size += byteRead & 0x7F\n if (tag === 3) {\n data = data.subarray(start + 3)\n } else if (tag === 4) {\n ret.codec += (data[start].toString(16) + '.').padStart(3, '0')\n data = data.subarray(start + 13)\n } else if (tag === 5) {\n const config = ret.config = data.subarray(start, start + size)\n let objectType = (config[0] & 0xF8) >> 3\n if (objectType === 31 && config.length >= 2) {\n objectType = 32 + ((config[0] & 0x7) << 3) + ((config[1] & 0xE0) >> 5)\n }\n ret.objectType = objectType\n ret.codec += objectType.toString(16)\n if (ret.codec[ret.codec.length - 1] === '.') {\n ret.codec = ret.codec.substring(0, ret.codec.length - 1)\n }\n return\n } else {\n if (ret.codec[ret.codec.length - 1] === '.') {\n ret.codec = ret.codec.substring(0, ret.codec.length - 1)\n }\n return\n }\n }\n })\n }\n\n static alaw (box) {\n return parseBox(box, false, (ret, data) => {\n parseAudioSampleEntry(ret, data)\n })\n }\n\n static stts (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries.push({\n count: readBig32(data, start),\n delta: readBig32(data, start + 4)\n })\n start += 8\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static ctts (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n if (ret.version === 1) {\n for (let i = 0; i < entryCount; i++) {\n entries.push({\n count: readBig32(data, start),\n offset: readBig32(data, start + 4)\n })\n start += 8\n }\n } else {\n for (let i = 0; i < entryCount; i++) {\n entries.push({\n count: readBig32(data, start),\n offset: -(~readBig32(data, start + 4) + 1)\n })\n start += 8\n }\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static stsc (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries.push({\n firstChunk: readBig32(data, start),\n samplesPerChunk: readBig32(data, start + 4),\n sampleDescriptionIndex: readBig32(data, start + 8)\n })\n start += 12\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static stsz (box) {\n return parseBox(box, true, (ret, data) => {\n const sampleSize = readBig32(data)\n const sampleCount = readBig32(data, 4)\n const entrySizes = []\n if (!sampleSize) {\n let start = 8\n for (let i = 0; i < sampleCount; i++) {\n entrySizes.push(readBig32(data, start))\n start += 4\n }\n }\n ret.sampleSize = sampleSize\n ret.sampleCount = sampleCount\n ret.entrySizes = entrySizes\n })\n }\n\n static stco (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries.push(readBig32(data, start))\n start += 4\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static co64 (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries.push(readBig64(data, start))\n start += 8\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static stss (box) {\n return parseBox(box, true, (ret, data) => {\n const entryCount = readBig32(data)\n const entries = []\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries.push(readBig32(data, start))\n start += 4\n }\n ret.entryCount = entryCount\n ret.entries = entries\n })\n }\n\n static moof (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.mfhd = MP4Parser.mfhd(MP4Parser.findBox(data, ['mfhd'], start)[0])\n ret.traf = MP4Parser.findBox(data, ['traf'], start).map(t => MP4Parser.traf(t))\n })\n }\n\n static mfhd (box) {\n return parseBox(box, true, (ret, data) => {\n ret.sequenceNumber = readBig32(data)\n })\n }\n\n static traf (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.tfhd = MP4Parser.tfhd(MP4Parser.findBox(data, ['tfhd'], start)[0])\n ret.tfdt = MP4Parser.tfdt(MP4Parser.findBox(data, ['tfdt'], start)[0])\n ret.trun = MP4Parser.trun(MP4Parser.findBox(data, ['trun'], start)[0])\n })\n }\n\n static trun (box) {\n return parseBox(box, true, (ret, data) => {\n const { version, flags } = ret\n const dataLen = data.length\n const sampleCount = ret.sampleCount = readBig32(data)\n let offset = 4\n if (dataLen > offset && flags & 1) {\n ret.dataOffset = -(~readBig32(data, offset) + 1)\n offset += 4\n }\n if (dataLen > offset && flags & 4) {\n ret.firstSampleFlags = readBig32(data, offset)\n offset += 4\n }\n ret.samples = []\n if (dataLen > offset) {\n let sample\n for (let i = 0; i < sampleCount; i++) {\n sample = {}\n if (flags & 0x100) {\n sample.duration = readBig32(data, offset)\n offset += 4\n }\n if (flags & 0x200) {\n sample.size = readBig32(data, offset)\n offset += 4\n }\n if (flags & 0x400) {\n sample.flags = readBig32(data, offset)\n offset += 4\n }\n if (flags & 0x800) {\n if (version) {\n sample.cts = -(~readBig32(data, offset + 4) + 1)\n } else {\n sample.cts = readBig32(data, offset)\n }\n offset += 4\n }\n ret.samples.push(sample)\n }\n }\n })\n }\n\n static tfdt (box) {\n return parseBox(box, true, (ret, data) => {\n if (ret.version === 1) {\n ret.baseMediaDecodeTime = readBig64(data)\n } else {\n ret.baseMediaDecodeTime = readBig32(data)\n }\n })\n }\n\n static probe (data) {\n return !!MP4Parser.findBox(data, ['ftyp'])\n }\n\n static parseSampleFlags (flags) {\n return {\n isLeading: (flags[0] & 0x0c) >>> 2,\n dependsOn: flags[0] & 0x03,\n isDependedOn: (flags[1] & 0xc0) >>> 6,\n hasRedundancy: (flags[1] & 0x30) >>> 4,\n paddingValue: (flags[1] & 0x0e) >>> 1,\n isNonSyncSample: flags[1] & 0x01,\n degradationPriority: (flags[2] << 8) | flags[3]\n }\n }\n\n static moovToTrack (moov, videoTrack, audioTrack) {\n const tracks = moov.trak\n if (!tracks || !tracks.length) return\n const vTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'vide')\n const aTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'soun')\n if (vTrack && videoTrack) {\n const v = videoTrack\n const _vTrackId = vTrack.tkhd?.trackId\n if (_vTrackId !== null && _vTrackId !== undefined) v.id = vTrack.tkhd.trackId\n v.tkhdDuration = vTrack.tkhd.duration\n v.mvhdDurtion = moov.mvhd.duration\n v.mvhdTimecale = moov.mvhd.timescale\n v.timescale = v.formatTimescale = vTrack.mdia.mdhd.timescale\n v.duration = vTrack.mdia.mdhd.duration || (v.mvhdDurtion / v.mvhdTimecale * v.timescale)\n const e1 = vTrack.mdia.minf.stbl.stsd.entries[0]\n v.width = e1.width\n v.height = e1.height\n if (e1.pasp) {\n v.sarRatio = [e1.pasp.hSpacing, e1.pasp.vSpacing]\n }\n if (e1.hvcC) {\n v.codecType = VideoCodecType.HEVC\n v.codec = e1.hvcC.codec\n v.vps = e1.hvcC.vps\n v.sps = e1.hvcC.sps\n v.pps = e1.hvcC.pps\n v.hvcC = e1.hvcC.data\n } else if (e1.avcC) {\n v.codec = e1.avcC.codec\n v.sps = e1.avcC.sps\n v.pps = e1.avcC.pps\n } else {\n throw new Error('unknown video stsd entry')\n }\n v.present = true\n v.ext = {}\n v.ext.stss = vTrack.mdia?.minf?.stbl?.stss\n v.ext.ctts = vTrack.mdia?.minf?.stbl?.ctts\n\n if (e1 && e1.type === 'encv') {\n v.isVideoEncryption = true\n e1.default_KID = e1.sinf?.schi?.tenc.default_KID\n e1.default_IsEncrypted = e1.sinf?.schi?.tenc.default_IsEncrypted\n e1.default_IV_size = e1.sinf?.schi?.tenc.default_IV_size\n v.videoSenc = vTrack.mdia.minf.stbl.senc && vTrack.mdia.minf.stbl.senc.samples\n e1.data_format = e1.sinf?.frma?.data_format\n v.useEME = moov.useEME\n v.kidValue = moov.kidValue\n v.pssh = moov.pssh\n v.encv = e1\n }\n }\n\n if (aTrack && audioTrack) {\n const a = audioTrack\n const _aTrackId = aTrack.tkhd?.trackId\n if (_aTrackId !== null && _aTrackId !== undefined) a.id = aTrack.tkhd.trackId\n a.tkhdDuration = aTrack.tkhd.duration\n a.mvhdDurtion = moov.mvhd.duration\n a.mvhdTimecale = moov.mvhd.timescale\n a.timescale = a.formatTimescale = aTrack.mdia.mdhd.timescale\n a.duration = aTrack.mdia.mdhd.duration || (a.mvhdDurtion / a.mvhdTimecale * a.timescale)\n const e1 = aTrack.mdia.minf.stbl.stsd.entries[0]\n a.sampleSize = e1.sampleSize\n a.sampleRate = e1.sampleRate\n a.channelCount = e1.channelCount\n a.present = true\n\n switch (e1.type) {\n case 'alaw':\n a.codecType = a.codec = AudioCodecType.G711PCMA\n a.sampleRate = 8000\n break\n case 'ulaw':\n a.codecType = a.codec = AudioCodecType.G711PCMU\n a.sampleRate = 8000\n break\n default:\n a.sampleDuration = AAC.getFrameDuration(a.sampleRate, a.timescale)\n a.sampleRateIndex = AAC.getRateIndexByRate(a.sampleRate)\n a.objectType = e1.esds?.objectType || 2\n if (e1.esds) a.config = Array.from(e1.esds.config)\n a.codec = e1.esds?.codec || 'mp4a.40.2'\n break\n }\n a.sampleDuration = AAC.getFrameDuration(a.sampleRate, a.timescale)\n a.objectType = e1.esds?.objectType || 2\n if (e1.esds) {\n if (e1.esds.config) {\n a.config = Array.from(e1.esds.config)\n } else {\n console.warn('esds config is null')\n }\n }\n a.codec = e1.esds?.codec || 'mp4a.40.2'\n a.sampleRateIndex = AAC.getRateIndexByRate(a.sampleRate)\n a.ext = {}\n a.ext.stss = aTrack.mdia?.minf?.stbl?.stss\n a.ext.ctts = aTrack.mdia?.minf?.stbl?.ctts\n a.present = true\n if (e1 && e1.type === 'enca') {\n a.isAudioEncryption = true\n e1.data_format = e1.sinf?.frma?.data_format\n e1.default_KID = e1.sinf?.schi?.tenc.default_KID\n e1.default_IsEncrypted = e1.sinf?.schi?.tenc.default_IsEncrypted\n e1.default_IV_size = e1.sinf?.schi?.tenc.default_IV_size\n a.audioSenc = aTrack.mdia.minf.stbl.senc && aTrack.mdia.minf.stbl.senc.samples\n a.useEME = moov.useEME\n a.kidValue = moov.kidValue\n a.enca = e1\n }\n }\n\n audioTrack && (audioTrack.isVideoEncryption = videoTrack ? videoTrack.isVideoEncryption : false)\n videoTrack && (videoTrack.isAudioEncryption = audioTrack ? audioTrack.isAudioEncryption : false)\n\n if (videoTrack?.encv || audioTrack?.enca) {\n const vkid = videoTrack?.encv?.default_KID\n const akid = audioTrack?.enca?.default_KID\n const kid = (vkid || akid) ? (vkid || akid).join('') : null\n videoTrack && (videoTrack.kid = kid)\n audioTrack && (audioTrack.kid = kid)\n }\n\n videoTrack && (videoTrack.flags = 0xf01)\n audioTrack && (audioTrack.flags = 0x701)\n\n return {\n videoTrack,\n audioTrack\n }\n }\n\n static evaluateDefaultDuration (videoTrack, audioTrack, videoSampleCount) {\n const audioSampleCount = audioTrack?.samples?.length\n\n // audio\n if (!audioSampleCount) return 1024\n\n const segmentDuration = 1024 * audioSampleCount / audioTrack.timescale\n\n return segmentDuration * videoTrack.timescale / videoSampleCount\n }\n\n static moofToSamples (moof, videoTrack, audioTrack) {\n const ret = {}\n\n if (moof.mfhd) {\n if (videoTrack) videoTrack.sequenceNumber = moof.mfhd.sequenceNumber\n if (audioTrack) audioTrack.sequenceNumber = moof.mfhd.sequenceNumber\n }\n\n moof.traf.forEach(({ tfhd, tfdt, trun }) => {\n if (!tfhd || !trun) return\n if (tfdt) {\n if (videoTrack && videoTrack.id === tfhd.trackId) videoTrack.baseMediaDecodeTime = tfdt.baseMediaDecodeTime\n if (audioTrack && audioTrack.id === tfhd.trackId) audioTrack.baseMediaDecodeTime = tfdt.baseMediaDecodeTime\n }\n const defaultSize = tfhd.defaultSampleSize || 0\n const defaultDuration = tfhd.defaultSampleDuration || MP4Parser.evaluateDefaultDuration(videoTrack, audioTrack, trun.samples.length || trun.sampleCount)\n let offset = trun.dataOffset || 0\n let dts = 0\n let gopId = -1\n if (!trun.samples.length && trun.sampleCount) {\n ret[tfhd.trackId] = []\n for (let i = 0; i < trun.sampleCount; i++) {\n ret[tfhd.trackId].push({\n offset,\n dts,\n duration: defaultDuration,\n size: defaultSize\n })\n dts += defaultDuration\n offset += defaultSize\n }\n } else {\n ret[tfhd.trackId] = trun.samples.map((s, index) => {\n s = {\n offset,\n dts,\n pts: dts + (s.cts || 0),\n duration: s.duration || defaultDuration,\n size: s.size || defaultSize,\n gopId,\n keyframe: index === 0 || ((s.flags !== null && s.flags !== undefined) && ((s.flags & 65536) >>> 0) !== 65536)\n }\n if (s.keyframe) {\n gopId++\n s.gopId = gopId\n }\n dts += s.duration\n offset += s.size\n return s\n })\n }\n })\n\n return ret\n }\n\n static moovToSamples (moov) {\n const tracks = moov.trak\n if (!tracks || !tracks.length) return\n const vTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'vide')\n const aTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'soun')\n if (!vTrack && !aTrack) return\n let videoSamples\n let audioSamples\n if (vTrack) {\n const videoStbl = vTrack.mdia?.minf?.stbl\n if (!videoStbl) return\n const { stts, stsc, stsz, stco, stss, ctts } = videoStbl\n if (!stts || !stsc || !stsz || !stco || !stss) return\n videoSamples = getSamples(stts, stsc, stsz, stco, ctts, stss)\n }\n if (aTrack) {\n const audioStbl = aTrack.mdia?.minf?.stbl\n if (!audioStbl) return\n const timescale = aTrack.mdia.mdhd?.timescale\n const { stts, stsc, stsz, stco } = audioStbl\n if (!timescale || !stts || !stsc || !stsz || !stco) return\n audioSamples = getSamples(stts, stsc, stsz, stco)\n }\n\n return {\n videoSamples,\n audioSamples\n }\n }\n}\n\nfunction getSamples (stts, stsc, stsz, stco, ctts, stss) {\n const samples = []\n const cttsEntries = ctts?.entries\n const stscEntries = stsc.entries\n const stcoEntries = stco.entries\n const stszEntrySizes = stsz.entrySizes\n const stssEntries = stss?.entries\n let keyframeMap\n if (stssEntries) {\n keyframeMap = {}\n stssEntries.forEach(x => { keyframeMap[x - 1] = true })\n }\n let cttsArr\n if (cttsEntries) {\n cttsArr = []\n cttsEntries.forEach(({ count, offset }) => {\n for (let i = 0; i < count; i++) {\n cttsArr.push(offset)\n }\n })\n }\n\n let sample\n let gopId = -1\n let dts = 0\n let pos = 0\n let chunkIndex = 0\n let chunkRunIndex = 0\n let offsetInChunk = 0\n let lastSampleInChunk = stscEntries[0].samplesPerChunk\n let lastChunkInRun = stscEntries[1] ? stscEntries[1].firstChunk - 1 : Infinity\n stts.entries.forEach(({ count, delta }) => {\n for (let i = 0; i < count; i++) {\n sample = {\n dts,\n duration: delta,\n size: stszEntrySizes[pos] || stsz.sampleSize,\n offset: stcoEntries[chunkIndex] + offsetInChunk,\n index: pos\n }\n if (stssEntries) {\n sample.keyframe = keyframeMap[pos]\n if (sample.keyframe) {\n gopId++\n }\n sample.gopId = gopId\n }\n // sample.timeOffset = 0\n if (cttsArr && pos < cttsArr.length) {\n sample.pts = sample.dts + cttsArr[pos]\n // sample.timeOffset = cttsArr[pos]\n // if (pos === 0) {\n // sample.pts = sample.dts\n // sample.timeOffset = 0\n // }\n }\n samples.push(sample)\n dts += delta\n pos++\n\n if (pos < lastSampleInChunk) {\n offsetInChunk += sample.size\n } else {\n chunkIndex++\n offsetInChunk = 0\n if (chunkIndex >= lastChunkInRun) {\n chunkRunIndex++\n lastChunkInRun = stscEntries[chunkRunIndex + 1] ? stscEntries[chunkRunIndex + 1].firstChunk - 1 : Infinity\n }\n lastSampleInChunk += stscEntries[chunkRunIndex].samplesPerChunk\n }\n }\n })\n\n return samples\n}\n\nfunction parseVisualSampleEntry (ret, data) {\n ret.dataReferenceIndex = readBig16(data, 6)\n ret.width = readBig16(data, 24)\n ret.height = readBig16(data, 26)\n ret.horizresolution = readBig32(data, 28)\n ret.vertresolution = readBig32(data, 32)\n ret.frameCount = readBig16(data, 40)\n ret.depth = readBig16(data, 74)\n return 78\n}\n\nfunction parseAudioSampleEntry (ret, data) {\n ret.dataReferenceIndex = readBig16(data, 6)\n ret.channelCount = readBig16(data, 16)\n ret.sampleSize = readBig16(data, 18)\n ret.sampleRate = readBig32(data, 24) / (1 << 16)\n return 28\n}\n\nfunction parseBox (box, isFullBox, parse) {\n if (!box) return\n if (box.size !== box.data.length) throw new Error(`box ${box.type} size !== data.length`)\n const ret = {\n start: box.start,\n size: box.size,\n headerSize: box.headerSize,\n type: box.type\n }\n if (isFullBox) {\n ret.version = box.data[box.headerSize]\n ret.flags = readBig24(box.data, box.headerSize + 1)\n ret.headerSize += 4\n }\n parse(ret, box.data.subarray(ret.headerSize), ret.start + ret.headerSize)\n return ret\n}\n\nconst padStart = function (str, length, pad) {\n const charstr = String(pad)\n const len = length >> 0\n let maxlen = Math.ceil(len / charstr.length)\n const chars = []\n const r = String(str)\n while (maxlen--) {\n chars.push(charstr)\n }\n return chars.join('').substring(0, len - r.length) + r\n}\n\nconst toHex = function (...value) {\n const hex = []\n value.forEach(item => {\n hex.push(padStart(Number(item).toString(16), 2, 0))\n })\n return hex[0]\n}\n","\n// 改造为兼容IE11\nfunction Concat (ResultConstructor, ...arrays){\n let totalLength = 0\n arrays.forEach(function (arr){\n totalLength += arr.length\n })\n const result = new ResultConstructor(totalLength)\n let offset = 0\n arrays.forEach(function (arr){\n result.set(arr, offset)\n offset += arr.length\n })\n return result\n}\n\nclass Buffer {\n constructor () {\n this.buffer = new Uint8Array(0)\n }\n\n write (...buffer) {\n const self = this\n buffer.forEach(item => {\n if (item) {\n self.buffer = Concat(Uint8Array, self.buffer, item)\n } else {\n window.console.warn(item)\n }\n })\n }\n\n static writeUint16 (value) {\n return new Uint8Array([\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n\n static writeUint32 (value) {\n return new Uint8Array([\n value >> 24,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n}\n\nexport default Buffer\n","import { TrackType, VideoCodecType } from '../model'\nimport { concatUint8Array, parse /* hashVal */ } from '../utils'\nimport Buffer from './buffer'\n// import Crypto from './crypto/crypto'\nconst UINT32_MAX = 2 ** 32 - 1\n\nexport class MP4 {\n static types = [\n 'avc1',\n 'avcC',\n 'hvc1',\n 'hvcC',\n 'dinf',\n 'dref',\n 'esds',\n 'ftyp',\n 'hdlr',\n 'mdat',\n 'mdhd',\n 'mdia',\n 'mfhd',\n 'minf',\n 'moof',\n 'moov',\n 'mp4a',\n 'mvex',\n 'mvhd',\n 'pasp',\n 'stbl',\n 'stco',\n 'stsc',\n 'stsd',\n 'stsz',\n 'stts',\n 'tfdt',\n 'tfhd',\n 'traf',\n 'trak',\n 'trex',\n 'tkhd',\n 'vmhd',\n 'smhd',\n 'ctts',\n 'stss',\n 'styp',\n 'pssh',\n 'sidx',\n 'sbgp',\n 'saiz',\n 'saio',\n 'senc',\n 'trun',\n 'encv',\n 'enca',\n 'sinf',\n 'btrt',\n 'frma',\n 'tenc',\n 'schm',\n 'schi',\n 'mehd',\n 'fiel',\n 'sdtp'\n ].reduce((p, c) => {\n p[c] = [c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2), c.charCodeAt(3)]\n return p\n }, Object.create(null));\n\n static HDLR_TYPES = {\n video: new Uint8Array([\n 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,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65, 0x6f, 0x48, 0x61,\n 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]),\n audio: new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x73, 0x6f, 0x75, 0x6e, // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61,\n 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n ])\n }\n\n static FTYPAVC1 = MP4.box(MP4.types.ftyp, new Uint8Array([\n 105, 115, 111, 109, // isom\n 0, 0, 0, 1,\n 105, 115, 111, 109,\n 97, 118, 99, 49 // avc1\n ]))\n\n static FTYPHEV1 = MP4.box(MP4.types.ftyp, new Uint8Array([\n 105, 115, 111, 109, // isom\n 0, 0, 0, 1,\n 105, 115, 111, 109,\n 104, 101, 118, 49 // hev1\n ]))\n\n static DINF = MP4.box(MP4.types.dinf, MP4.box(MP4.types.dref, new Uint8Array([\n 0x00, // version\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\n 0x00, 0x00, 0x01 // entry_flags\n ])))\n\n static VMHD = MP4.box(MP4.types.vmhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphics mode\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // op color\n ]))\n\n static SMHD = MP4.box(MP4.types.smhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]))\n\n static StblTable = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n\n static STTS = MP4.box(MP4.types.stts, MP4.StblTable)\n\n static STSC = MP4.box(MP4.types.stsc, MP4.StblTable)\n\n static STSZ = MP4.box(MP4.types.stsz, 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\n static STCO = MP4.box(MP4.types.stco, MP4.StblTable)\n\n static box (type, ...payload) {\n payload = payload.filter(Boolean)\n const size = 8 + payload.reduce((p, c) => (p + c.byteLength), 0)\n const ret = new Uint8Array(size)\n ret[0] = (size >> 24) & 0xff\n ret[1] = (size >> 16) & 0xff\n ret[2] = (size >> 8) & 0xff\n ret[3] = size & 0xff\n ret.set(type, 4)\n let offset = 8\n payload.forEach((data) => {\n ret.set(data, offset)\n offset += data.byteLength\n })\n return ret\n }\n\n static ftyp (tracks) {\n const isHevc = tracks.find(t => t.type === TrackType.VIDEO && t.codecType === VideoCodecType.HEVC)\n return isHevc ? MP4.FTYPHEV1 : MP4.FTYPAVC1\n }\n\n static initSegment (tracks) {\n const ftyp = MP4.ftyp(tracks)\n // console.log('[remux],ftyp ,len ', ftyp.byteLength, hashVal(ftyp.toString()))\n const init = concatUint8Array(ftyp, MP4.moov(tracks))\n // console.log('[remux],init ,len ', init.byteLength, hashVal(init.toString()))\n return init\n }\n\n static pssh (data) {\n // const buffer = new Buffer()\n const content = new Uint8Array(\n [\n 0x01, 0x00, 0x00, 0x00 // version\n ].concat(\n [\n 0x10, 0x77, 0xef, 0xec,\n 0xc0, 0xb2, 0x4d, 0x02,\n 0xac, 0xe3, 0x3c, 0x1e,\n 0x52, 0xe2, 0xfb, 0x4b\n ],\n [0x00, 0x00, 0x00, 0x01],\n parse(data.kid),\n [0x00, 0x00, 0x00, 0x00]\n )\n )\n return MP4.box(MP4.types.pssh, content)\n }\n\n static moov (tracks) {\n if (tracks[0].useEME && (tracks[0].encv || tracks[0].enca)) {\n if (!tracks[0].pssh) {\n tracks[0].pssh = {\n kid: tracks[0].kid\n }\n }\n const pssh = this.pssh(tracks[0].pssh)\n // console.log('[remux],pssh,', hashVal(pssh.toString()))\n return MP4.box(MP4.types.moov,\n MP4.mvhd(tracks[0].mvhdDurtion || tracks[0].duration, tracks[0].mvhdTimecale || tracks[0].timescale),\n MP4.mvex(tracks),\n ...tracks.map((t) => MP4.trak(t)),\n pssh)\n } else {\n return MP4.box(MP4.types.moov,\n MP4.mvhd(tracks[0].mvhdDurtion || tracks[0].duration, tracks[0].mvhdTimecale || tracks[0].timescale),\n ...tracks.map((t) => MP4.trak(t)),\n MP4.mvex(tracks)\n )\n }\n }\n\n static mvhd (duration, timescale = 90000) {\n const mvhd = MP4.box(MP4.types.mvhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,\n 0x00, 0x01, 0x00, 0x00, // rate\n 0x01, 0x00, // volume\n 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\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, // matrix\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0xff, 0xff, 0xff, 0xff // todo 0xff, 0xff, 0xff, 0xff // next_track_ID\n ]))\n // console.log('[remux],mvhd, len,', mvhd.byteLength, hashVal(mvhd.toString()))\n return mvhd\n }\n\n static trak (track) {\n const trak = MP4.box(\n MP4.types.trak,\n MP4.tkhd(track.id, track.tkhdDuration || 0, track.width, track.height),\n MP4.mdia(track)\n )\n // console.log('[remux],trak, len,', trak.byteLength, track.id, hashVal(trak.toString()))\n return trak\n }\n\n static tkhd (id, duration, width = 0, height = 0) {\n const tkhd = MP4.box(MP4.types.tkhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x07, // flags、todo 0x07\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time todo\n (id >> 24) & 0xff, (id >> 16) & 0xff, (id >> 8) & 0xff, id & 0xff,\n 0x00, 0x00, 0x00, 0x00,\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff, // todo (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, 0x00, // /*0x00*/ alternate_group //todo type === 'video' ? 0x01 : 0x00(第二个位置)\n 0x01, 0x00, // /* 0x01 */, 0x00, // non-audio track volume //todo type === 'audio' ? 0x01 : 0x00(第一个位置)\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, // matrix\n (width >> 8) & 0xff, width & 0xff, 0x00, 0x00,\n (height >> 8) & 0xff, height & 0xff, 0x00, 0x00\n ]))\n // console.log('[remux],tkhd, len,', tkhd.byteLength, hashVal(tkhd.toString()))\n return tkhd\n }\n\n static mdia (track) {\n const mdia = MP4.box(MP4.types.mdia, MP4.mdhd(track.duration, track.timescale), MP4.hdlr(track.type), MP4.minf(track))\n // console.log('[remux],mdia, len,', mdia.byteLength, hashVal(mdia.toString()))\n return mdia\n }\n\n static mdhd (duration, timescale = 90000) {\n const mdhd = MP4.box(MP4.types.mdhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // todo 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff, // (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,//todo\n 0x55, 0xc4, // 'und' language (undetermined) //todo 0x15, 0xC7\n 0x00, 0x00 // pre_defined\n ]))\n // console.log('[remux],mdhd, len,', mdhd.byteLength, hashVal(mdhd.toString()))\n return mdhd\n }\n\n static hdlr (type) {\n const hdlr = MP4.box(MP4.types.hdlr, MP4.HDLR_TYPES[type])\n // console.log('[remux],hdlr, len,', hdlr.byteLength, hashVal(hdlr.toString()))\n return hdlr\n }\n\n static minf (track) {\n const minf = MP4.box(MP4.types.minf, track.type === TrackType.VIDEO ? MP4.VMHD : MP4.SMHD, MP4.DINF, MP4.stbl(track))\n // console.log('[remux],minf, len,', minf.byteLength, hashVal(minf.toString()))\n return minf\n }\n\n static stbl (track) {\n const extBox = []\n if (track && track.ext) {\n track.ext.stss && extBox.push(MP4.stss(track.ext.stss.entries))\n // track.ext.stss && extBox.push(MP4.ctts(track.ext.stss.entries))\n }\n const stbl = MP4.box(MP4.types.stbl, MP4.stsd(track), MP4.STTS, extBox[0], MP4.STSC, MP4.STSZ, MP4.STCO)\n // console.log('[remux],stbl, len,', stbl.byteLength, hashVal(stbl.toString()))\n return stbl\n }\n\n static stsd (track) {\n let content\n if (track.type === 'audio') {\n if (track.useEME && track.enca) {\n content = MP4.enca(track)\n // console.log('[remux],enca, len,', content.byteLength, track.type, hashVal(content.toString()))\n } else {\n content = MP4.mp4a(track)\n // console.log('[remux],mp4a, len,', content.byteLength, track.type, hashVal(content.toString()))\n }\n } else if (track.useEME && track.encv) {\n content = MP4.encv(track)\n // console.log('[remux],encv, len,', content.byteLength, track.type, hashVal(content.toString()))\n } else {\n content = MP4.avc1hev1(track)\n // console.log('[remux],avc1hev1, len,', content.byteLength, track.type, hashVal(content.toString()))\n }\n const stsd = MP4.box(MP4.types.stsd, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01 // entry_count\n ]), content)\n // console.log('[remux],stsd, len,', stsd.byteLength, hashVal(stsd.toString()))\n return stsd\n }\n\n static enca (data) {\n const channelCount = data.enca.channelCount\n const sampleRate = data.enca.sampleRate\n const 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, channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n (sampleRate >> 8) & 0xff,\n sampleRate & 0xff, //\n 0x00, 0x00\n ])\n const esds = MP4.esds(data.config)\n // console.log('[remux],esds, len,', esds.byteLength, hashVal(esds.toString()))\n const sinf = MP4.sinf(data.enca)\n // console.log('[remux],sinf, len,', sinf.byteLength, hashVal(sinf.toString()))\n return MP4.box(MP4.types.enca, content, esds, sinf)\n }\n\n static encv (track) {\n const sps = track.sps.length > 0 ? track.sps[0] : []\n const pps = track.pps.length > 0 ? track.pps[0] : []\n const width = track.width\n const height = track.height\n const hSpacing = track.sarRatio[0]\n const vSpacing = track.sarRatio[1]\n\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n\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\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 const 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 sps.length >>> 8 & 0xff,\n sps.length & 0xff\n ].concat(...sps).concat([\n 0x01,\n pps.length >>> 8 & 0xff,\n pps.length & 0xff\n ]).concat(...pps))\n const btrt = new Uint8Array([\n 0x00, 0x00, 0x58, 0x39,\n 0x00, 0x0F, 0xC8, 0xC0,\n 0x00, 0x04, 0x56, 0x48\n ])\n const sinf = MP4.sinf(track.encv)\n const 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 return MP4.box(MP4.types.encv, content, MP4.box(MP4.types.avcC, avcc), MP4.box(MP4.types.btrt, btrt), sinf, MP4.box(MP4.types.pasp, pasp))\n }\n\n static schi (data) {\n const content = new Uint8Array([])\n const tenc = MP4.tenc(data)\n return MP4.box(MP4.types.schi, content, tenc)\n }\n\n static tenc (data) {\n // 用于每个track的加密参数(包括KID、初始化向量、加密标志位),包含在TrackEncryptionBox(‘tenc’)中。\n const content = new Uint8Array(\n [\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // skip\n data.default_IsEncrypted & 0xff, // default_isProtected\n data.default_IV_size & 0xff // default_Per_Sample_IV_Size\n ].concat(parse(data.default_KID)))\n return MP4.box(MP4.types.tenc, content)\n }\n\n static sinf (data) {\n const content = new Uint8Array([])\n const frma = new Uint8Array([\n data.data_format.charCodeAt(0),\n data.data_format.charCodeAt(1),\n data.data_format.charCodeAt(2),\n data.data_format.charCodeAt(3)\n ])\n const schm = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00,\n 0x63, 0x65, 0x6E, 0x63, // cenc\n 0x00, 0x01, 0x00, 0x00 // version\n ])\n const schi = MP4.schi(data)\n return MP4.box(MP4.types.sinf, content, MP4.box(MP4.types.frma, frma), MP4.box(MP4.types.schm, schm), schi)\n }\n\n static avc1hev1 (track) {\n const isHevc = track.codecType === VideoCodecType.HEVC\n const typ = isHevc ? MP4.types.hvc1 : MP4.types.avc1\n const config = isHevc ? MP4.hvcC(track) : MP4.avcC(track)\n const boxes = [\n new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pre_defined\n (track.width >> 8) & 0xff, track.width & 0xff, // width\n (track.height >> 8) & 0xff, track.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, 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, 0x00,\n 0x00, 0x00, 0x00, 0x00, // compressor name\n 0x00, 0x18, // depth\n 0x11, 0x11 // pre_defined = -1 //todo\n ]), config\n ]\n // console.log('[remux],avc1hev1_0, len,', boxes[0].byteLength, hashVal(boxes[0].toString()))\n // console.log('[remux],avc1hev1_1, len,', boxes[1].byteLength, hashVal(boxes[1].toString()))\n if (isHevc) {\n boxes.push(MP4.box(MP4.types.fiel, new Uint8Array([0x01, 0x00])))\n // console.log('[remux],fiel, len,', boxes[2].byteLength, hashVal(boxes[2].toString()))\n } else if (track.sarRatio && track.sarRatio.length > 1) {\n boxes.push(MP4.pasp(track.sarRatio))\n // console.log('[remux],pasp, len,', boxes[2].byteLength, hashVal(boxes[2].toString()))\n }\n return MP4.box(typ, ...boxes)\n }\n\n static avcC (track) {\n const sps = []\n const pps = []\n\n let len\n track.sps.forEach((s) => {\n len = s.byteLength\n sps.push((len >>> 8) & 0xff)\n sps.push(len & 0xff)\n sps.push(...s)\n })\n\n track.pps.forEach((p) => {\n len = p.byteLength\n pps.push((len >>> 8) & 0xff)\n pps.push(len & 0xff)\n pps.push(...p)\n })\n\n return MP4.box(MP4.types.avcC, new Uint8Array([\n 0x01, // configurationVersion\n sps[3], // AVCProfileIndication\n sps[4], // profile_compatibility\n sps[5], // AVCLevelIndication\n 0xfc | 3, // lengthSizeMinusOne\n 0xe0 | track.sps.length // 3bit reserved (111) + numOfSequenceParameterSets\n ].concat(...sps)\n .concat([track.pps.length]) // numOfPictureParameterSets\n .concat(...pps)))\n }\n\n static hvcC (track) {\n const hvcC = track.hvcC\n if (hvcC instanceof ArrayBuffer || hvcC instanceof Uint8Array) return hvcC\n const { vps, sps, pps } = track\n let data\n if (hvcC) {\n const pcf = hvcC.generalProfileCompatibilityFlags\n const cif = hvcC.generalConstraintIndicatorFlags\n const numOfArrays = (vps.length && 1) + (sps.length && 1) + (pps.length && 1)\n data = [\n 0x01, // configurationVersion\n hvcC.generalProfileSpace << 6 | hvcC.generalTierFlag << 5 | hvcC.generalProfileIdc,\n pcf >>> 24, pcf >>> 16, pcf >>> 8, pcf,\n cif[0], cif[1], cif[2], cif[3], cif[4], cif[5],\n hvcC.generalLevelIdc,\n 0xF0, 0x00, // min_spatial_segmentation_idc\n 0xFC, // parallelismType\n hvcC.chromaFormatIdc | 0xFC,\n hvcC.bitDepthLumaMinus8 | 0xF8,\n hvcC.bitDepthChromaMinus8 | 0xF8,\n 0x00, 0x00, // avgFrameRate\n hvcC.numTemporalLayers << 3 | hvcC.temporalIdNested << 2 | 3,\n numOfArrays\n ]\n const write = (x) => {\n data.push(x.length >> 8, x.length)\n data.push(...x)\n }\n if (vps.length) {\n data.push(0xA0, 0x00, vps.length)\n vps.forEach(write)\n }\n if (sps.length) {\n data.push(0xA1, 0x00, sps.length)\n sps.forEach(write)\n }\n if (pps.length) {\n data.push(0xA2, 0x00, pps.length)\n pps.forEach(write)\n }\n } else {\n data = [\n 0x01, // configurationVersion\n 0x01, // profile_space + tier_flag + profile_idc\n 0x60, 0x00, 0x00, 0x00, // general_profile_compatibility\n 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, // constraint_indicator_flags\n 0x5D, // level_idc=90\n 0xF0, 0x00, 0xFC, 0xFD, // profile_compatibility_indications\n 0xF8, // ‘11111’b + bitDepthLumaMinus8\n 0xF8, // ‘11111’b + bitDepthChromaMinus8\n 0x00, 0x00, // avgFrameRate\n 0x0F, // constantFrameRate + numTemporalLayers + ‘1’b + lengthSizeMinusOne\n 0x03, // numOfArrays\n\n // vps\n 0xA0, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x18, // nalUnitLength\n 0x40, 0x01, 0x0C, 0x01, 0xFF, 0xFF, 0x01, 0x60, 0x00, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x5D, 0x99, 0x98, 0x09,\n\n // sps\n 0xA1, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x2D, // nalUnitLength\n 0x42, 0x01, 0x01, 0x01, 0x60, 0x00, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x5D, 0xA0, 0x02,\n 0x80, 0x80, 0x2D, 0x16, 0x59, 0x99, 0xA4, 0x93, 0x2B, 0x9A, 0x80, 0x80, 0x80, 0x82, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00,\n 0x00, 0x03, 0x00, 0x32, 0x10,\n\n // pps\n 0xA2, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x07, // nalUnitLength\n 0x44, 0x01, 0xC1, 0x72, 0xB4, 0x62, 0x40\n ]\n }\n return MP4.box(MP4.types.hvcC, new Uint8Array(data))\n }\n\n static pasp ([hSpacing, vSpacing]) {\n return MP4.box(MP4.types.pasp, new Uint8Array([\n hSpacing >> 24, (hSpacing >> 16) & 0xff, (hSpacing >> 8) & 0xff, hSpacing & 0xff,\n vSpacing >> 24, (vSpacing >> 16) & 0xff, (vSpacing >> 8) & 0xff, vSpacing & 0xff\n ]))\n }\n\n static mp4a (track) {\n return MP4.box(MP4.types.mp4a, new Uint8Array([\n 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, track.channelCount,\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n (track.sampleRate >> 8) & 0xff, track.sampleRate & 0xff,\n 0x00, 0x00\n ]), track.config.length ? MP4.esds(track.config) : undefined)\n }\n\n static esds (config) {\n const len = config.length\n const esds = MP4.box(MP4.types.esds, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x03, // tag\n 0x17 + len, // length\n 0x00, 0x00, // ES_ID\n 0x00, // streamDependenceFlag, URL_flag, reserved, streamPriority\n 0x04, // tag\n 0x0f + len, // length\n 0x40, // object type\n 0x15, // streamType\n 0x00, 0x06, 0x00, // bufferSizeDB\n 0x00, 0x00, 0xda, 0xc0, // maxBitrate\n 0x00, 0x00, 0xda, 0xc0, // avgBitrate\n 0x05 // tag, DecoderSpecificInfoTag\n ].concat([len])\n .concat(config)\n .concat(\n [0x06, 0x01, 0x02]// GASpecificConfig\n )\n ))\n // console.log('[remux],esds ,len ', esds.byteLength, hashVal(esds.toString()))\n return esds\n }\n\n static mvex (tracks) {\n // const mehd = MP4.box(MP4.types.mehd, this.extension(0, 0), Buffer.writeUint32(tracks[0].tkhdDuration))\n // const mvex = MP4.box(MP4.types.mvex, mehd, MP4.trex1(1), MP4.trex2(2))\n // // console.log('[remux],mvex, len,', mvex.byteLength, hashVal(mvex.toString()))\n // const mvex = MP4.box(MP4.types.mvex, MP4.trex1(1), MP4.trex2(2))\n const mvex = MP4.box(MP4.types.mvex, ...tracks.map((t) => MP4.trex(t.id)))\n // console.log('[remux],mvex, len,', mvex.byteLength, hashVal(mvex.toString()))\n return mvex\n }\n\n static trex (id) {\n const trex = MP4.box(MP4.types.trex, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n id >> 24, (id >> 16) & 0xff, (id >> 8) & 0xff, 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 // console.log('[remux],trex, len,', trex.byteLength, hashVal(trex.toString()))\n return trex\n }\n\n static trex1 (id) {\n const trex = MP4.box(MP4.types.trex, 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 // console.log('[remux],trex, len,', trex.byteLength, hashVal(trex.toString()))\n return trex\n }\n\n static trex2 (id) {\n const trex = MP4.box(MP4.types.trex, 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 // console.log('[remux],trex, len,', trex.byteLength, hashVal(trex.toString()))\n return trex\n }\n\n static moof (tracks) {\n const moof = MP4.box(MP4.types.moof, MP4.mfhd(tracks[0].samples ? tracks[0].samples[0].gopId : 0), ...tracks.map((t) => MP4.traf(t)))\n // console.log('[remux],moof, len', moof.byteLength)\n return moof\n // return MP4.box(MP4.types.moof, MP4.mfhd(tracks[0].gopId), ...tracks.map((t) => MP4.traf(t)))\n }\n\n static mfhd (sequenceNumber) {\n // sequenceNumber += 1\n const mfhd = MP4.box(MP4.types.mfhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n sequenceNumber >> 24, (sequenceNumber >> 16) & 0xff, (sequenceNumber >> 8) & 0xff, sequenceNumber & 0xff\n ]))\n // console.log('[remux],mfhd, len,', mfhd.byteLength, hashVal(mfhd.toString()))\n return mfhd\n }\n\n static traf (track) {\n const tfhd = MP4.tfhd(track.id)\n // console.log('[remux],tfhd, len,', tfhd.byteLength, hashVal(tfhd.toString()), ', trackid = ', track.id)\n // console.log('[remux],tfdt,baseMediaDecodeTime,', track.baseMediaDecodeTime)\n const tfdt = MP4.tfdt(track, track.baseMediaDecodeTime)\n let sencLength = 0\n let samples\n if (track.isVideo && track.videoSenc) {\n samples = track.videoSenc\n samples.forEach(function (item) {\n sencLength = sencLength + 8\n if (item.subsamples && item.subsamples.length) {\n sencLength = sencLength + 2\n sencLength = sencLength + item.subsamples.length * 6\n }\n })\n }\n track.videoSencLength = sencLength\n // console.log('[remux],tfdt, len,', tfdt.toString().length)\n // console.log('[remux],tfdt, len,', tfdt.byteLength, hashVal(tfdt.toString()))\n if (!track.useEME || (!track.isVideoEncryption && !track.isAudioEncryption)) {\n const sdtp = MP4.sdtp(track)\n // console.log('[remux],sdtp, len,', sdtp.byteLength, hashVal(sdtp.toString()))\n const offset = 16 + // tfhd\n 20 + // tfdt\n 8 + // traf header\n 16 + // mfhd\n 8 + // moof header\n 8 // mdat header\n return MP4.box(MP4.types.traf, tfhd, tfdt, sdtp, MP4.trun(track.samples, sdtp.byteLength + offset))\n } else if (track.isVideoEncryption) {\n if (track.isVideo) {\n // 加密视频\n const saiz = MP4.saiz(track)\n const saio = MP4.saio(track)\n const trun = MP4.trun1(track)\n const senc = MP4.senc(track)\n const traf = MP4.box(MP4.types.traf, tfhd, tfdt, saiz, saio, trun, senc)\n // console.log('[remux],trex_video, len,', traf.byteLength, hashVal(traf.toString()))\n return traf\n } else {\n // 视频加密,音频加密和未加密处理\n if (!track.isAudioEncryption) {\n // 音频未加密\n const sbgp = MP4.sbgp()\n const trun = MP4.trun1(track)\n return MP4.box(MP4.types.traf, tfhd, tfdt, sbgp, trun)\n } else {\n // 音频加密\n const sbgp = MP4.sbgp()\n const saiz = MP4.saiz(track)\n const saio = MP4.saio(track)\n const senc = MP4.senc(track)\n const trun = MP4.trun1(track)\n const traf = MP4.box(MP4.types.traf, tfhd, tfdt, sbgp, saiz, saio, senc, trun)\n // console.log('[remux],trex_audio, len,', traf.byteLength, hashVal(traf.toString()))\n return traf\n }\n }\n } else {\n // 视频未加密,音频加密\n if (track.isVideo) {\n const trun = MP4.trun1(track)\n return MP4.box(MP4.types.traf, tfhd, tfdt, trun)\n } else {\n const sbgp = MP4.sbgp()\n const saiz = MP4.saiz(track)\n const saio = MP4.saio(track)\n const senc = MP4.senc(track)\n const trun = MP4.trun1(track)\n const traf = MP4.box(MP4.types.traf, tfhd, tfdt, sbgp, saiz, saio, senc, trun)\n // console.log('[remux],trex, len,', traf.byteLength, hashVal(traf.toString()))\n return traf\n }\n }\n }\n\n static sdtp (data) {\n const buffer = new Buffer()\n data.samples.forEach(item => {\n buffer.write(new Uint8Array(data.isVideo ? [item.keyframe ? 32 : 16] : [16]))\n })\n return MP4.box(MP4.types.sdtp, this.extension(0, 0), buffer.buffer)\n }\n\n static trun1 (data) {\n // const id = data.id\n // const ceil = id === 1 ? 12 : 4\n const buffer = new Buffer()\n const sampleCount = Buffer.writeUint32(data.samples.length)\n let offset = null\n if (data.isVideo) {\n const sencLength = data.videoSencLength\n /*\n 16 + // mfhd\n 16 + // tfhd\n 20 + // tfdt\n 17 + //saiz\n 24 + //saio\n data.samples.length*16\n 4(offset) + 4(sampleCount) + 12(header) //trun\n 12(header) + sencLength //senc\n 8 + // traf header\n 8 + // moof header\n 8 // mdat header\n = 149+data.samples.length * 16 + sencLength\n */\n offset = Buffer.writeUint32(data.samples.length * 16 + sencLength + 149)\n if (!data.isVideoEncryption && data.isAudioEncryption) {\n offset = Buffer.writeUint32(data.samples.length * 16 + 92)\n }\n } else {\n /*\n 16 + // mfhd\n 16 + // tfhd\n 20 + // tfdt\n 28 + //sbgp\n 4(offset) + 4(sampleCount) + 12(header) //trun\n 8 + // traf header\n 8 + // moof header\n 8 // mdat header\n */\n let len = data.samples.length * 12 + 124\n if (data.isAudioEncryption) {\n len = data.samples.length * 12 + 8 * data.audioSenc.length + 177\n }\n offset = Buffer.writeUint32(len)\n }\n\n data.samples.forEach(item => {\n buffer.write(Buffer.writeUint32(item.duration))\n buffer.write(Buffer.writeUint32(item.size))\n buffer.write(Buffer.writeUint32(item.keyframe ? 0x02000000 : 0x00010000))\n if (data.isVideo) {\n buffer.write(Buffer.writeUint32(item.cts ? item.cts : 0))\n }\n })\n\n return MP4.box(MP4.types.trun, this.extension(0, data.flags), sampleCount, offset, buffer.buffer)\n }\n\n static senc (data) {\n const buffer = new Buffer()\n const len = data.samples.length\n const ceil = data.isVideo ? 16 : 8\n const flag = data.isVideo ? 2 : 0\n let samples = []\n let samplesLength = 0\n if (data.isVideo) {\n samples = data.videoSenc\n samplesLength = data.videoSencLength\n } else {\n samples = data.audioSenc\n }\n samplesLength = samplesLength || ceil * len\n buffer.write(\n Buffer.writeUint32(16 + samplesLength), MP4.types.senc, this.extension(0, flag)\n )\n buffer.write(Buffer.writeUint32(len))\n samples.forEach(item => {\n for (let i = 0; i < item.InitializationVector.length; i++) {\n buffer.write(new Uint8Array([item.InitializationVector[i]]))\n }\n if (item.subsamples && item.subsamples.length) {\n buffer.write(Buffer.writeUint16(item.subsamples.length))\n item.subsamples.forEach(value => {\n buffer.write(Buffer.writeUint16(value.BytesOfClearData))\n buffer.write(Buffer.writeUint32(value.BytesOfProtectedData))\n })\n }\n })\n return buffer.buffer\n // return MP4.box(MP4.types.senc, this.extension(0, flag), buffer.buffer)\n }\n\n static saio (data) {\n let length = data.samples.length * 12 + 141\n if (!data.isVideo && data.isAudioEncryption) {\n length = 149\n }\n const content = new Uint8Array([\n 0x01, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x01,\n 0x00, 0x00, 0x00, 0x00,\n (length >> 24) & 0xff,\n (length >> 16) & 0xff,\n (length >> 8) & 0xff,\n length & 0xff\n ])\n return MP4.box(MP4.types.saio, content)\n }\n\n static saiz (data) {\n const samplesLength = data.samples.length\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00,\n 0x10, // default sample info size\n (samplesLength >> 24) & 0xff,\n (samplesLength >> 16) & 0xff,\n (samplesLength >> 8) & 0xff,\n samplesLength & 0xff\n ])\n return MP4.box(MP4.types.saiz, content)\n }\n\n static sbgp () {\n const content = new Uint8Array([\n 0x72, 0x6F, 0x6C, 0x6C, // sgpd, grouping_type\n 0x00, 0x00, 0x00, 0x01,\n 0x00, 0x00, 0x01, 0x19,\n 0x00, 0x00, 0x00, 0x01\n ])\n return MP4.box(MP4.types.sbgp, this.extension(0, 0), content)\n }\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\n static tfhd (id) {\n return MP4.box(MP4.types.tfhd, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags todo 0x00\n id >> 24, (id >> 16) & 0xff, (id >> 8) & 0xff, id & 0xff // track_ID\n ]))\n }\n\n static tfdt (data, baseMediaDecodeTime) {\n const upperWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1))\n const lowerWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1))\n if (data.useEME && (data.isVideoEncryption || data.isAudioEncryption)) {\n return MP4.box(MP4.types.tfdt, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n lowerWordBaseMediaDecodeTime >> 24,\n (lowerWordBaseMediaDecodeTime >> 16) & 0xff,\n (lowerWordBaseMediaDecodeTime >> 8) & 0xff,\n lowerWordBaseMediaDecodeTime & 0xff\n ]))\n } else {\n return MP4.box(MP4.types.tfdt, new Uint8Array([\n 0x01, // version 1\n 0x00, 0x00, 0x00, // flags\n upperWordBaseMediaDecodeTime >> 24,\n (upperWordBaseMediaDecodeTime >> 16) & 0xff,\n (upperWordBaseMediaDecodeTime >> 8) & 0xff,\n upperWordBaseMediaDecodeTime & 0xff,\n lowerWordBaseMediaDecodeTime >> 24,\n (lowerWordBaseMediaDecodeTime >> 16) & 0xff,\n (lowerWordBaseMediaDecodeTime >> 8) & 0xff,\n lowerWordBaseMediaDecodeTime & 0xff\n ]))\n }\n }\n\n static trun (samples, offset) {\n const sampleLen = samples.length\n const dataLen = 12 + (16 * sampleLen)\n offset += 8 + dataLen\n const data = new Uint8Array(dataLen)\n data.set([\n 0x00, // version\n 0x00, 0x0f, 0x01, // flags\n (sampleLen >>> 24) & 0xff, (sampleLen >>> 16) & 0xff, (sampleLen >>> 8) & 0xff, sampleLen & 0xff,\n (offset >>> 24) & 0xff, (offset >>> 16) & 0xff, (offset >>> 8) & 0xff, offset & 0xff // data_offset\n ], 0)\n for (let i = 0; i < sampleLen; i++) {\n const {\n duration, size, flag = {}, cts = 0\n } = samples[i]\n data.set([\n (duration >>> 24) & 0xff, (duration >>> 16) & 0xff, (duration >>> 8) & 0xff, duration & 0xff,\n (size >>> 24) & 0xff, (size >>> 16) & 0xff, (size >>> 8) & 0xff, size & 0xff,\n (flag.isLeading << 2) | (flag.dependsOn === null || flag.dependsOn === undefined ? 1 : flag.dependsOn),\n (flag.isDependedOn << 6) | (flag.hasRedundancy << 4) | (flag.paddingValue << 1) | (flag.isNonSyncSample === null || flag.isNonSyncSample === undefined ? 1 : flag.isNonSyncSample),\n flag.degradationPriority & (0xf0 << 8), flag.degradationPriority & 0x0f, // sample_flags\n (cts >>> 24) & 0xff, (cts >>> 16) & 0xff, (cts >>> 8) & 0xff, cts & 0xff // sample_composition_time_offset\n ], 12 + 16 * i)\n }\n\n return MP4.box(MP4.types.trun, data)\n }\n\n static moovMP4 (tracks) {\n return MP4.box(MP4.types.moov,\n MP4.mvhd(tracks[0].duration, tracks[0].timescale),\n ...tracks.map((t) => MP4.trackMP4(t)))\n }\n\n static trackMP4 (track) {\n return MP4.box(\n MP4.types.trak,\n MP4.tkhd(track.id, track.duration, track.width, track.height),\n MP4.mdiaMP4(track)\n )\n }\n\n static mdiaMP4 (track) {\n return MP4.box(MP4.types.mdia, MP4.mdhd(track.duration, track.timescale), MP4.hdlr(track.type), MP4.minfMP4(track))\n }\n\n static minfMP4 (track) {\n return MP4.box(MP4.types.minf, track.type === TrackType.VIDEO ? MP4.VMHD : MP4.SMHD, MP4.DINF, MP4.stblMP4(track))\n }\n\n static stblMP4 (track) {\n const { ext } = track\n const boxes = [\n MP4.stsd(track),\n MP4.stts(ext.stts),\n MP4.stsc(ext.stsc),\n MP4.stsz(ext.stsz),\n MP4.stco(ext.stco)\n ]\n\n if (ext.stss.length) {\n boxes.push(MP4.stss(ext.stss))\n }\n\n if (ext.ctts.length) {\n boxes.push(MP4.ctts(ext.ctts))\n }\n\n return MP4.box(MP4.types.stbl, ...boxes)\n }\n\n static stts (samples) {\n const len = samples.length\n const data = new Uint8Array(8 * len)\n let offset = 0\n samples.forEach(({ value, count }) => {\n data.set([\n count >> 24, (count >> 16) & 0xff, (count >> 8) & 0xff, count & 0xff,\n value >> 24, (value >> 16) & 0xff, (value >> 8) & 0xff, value & 0xff\n ], offset)\n offset += 8\n })\n\n return MP4.box(MP4.types.stts, concatUint8Array(new Uint8Array([\n 0, 0, 0, 0,\n (len >> 24), (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]), data))\n }\n\n static stsc (entries) {\n const len = entries.length\n const data = new Uint8Array(12 * len)\n let offset = 0\n entries.forEach(({ firstChunk, samplesPerChunk, sampleDescIndex }) => {\n data.set([\n firstChunk >> 24, (firstChunk >> 16) & 0xff, (firstChunk >> 8) & 0xff, firstChunk & 0xff,\n samplesPerChunk >> 24, (samplesPerChunk >> 16) & 0xff, (samplesPerChunk >> 8) & 0xff, samplesPerChunk & 0xff,\n sampleDescIndex >> 24, (sampleDescIndex >> 16) & 0xff, (sampleDescIndex >> 8) & 0xff, sampleDescIndex & 0xff\n ], offset)\n offset += 12\n })\n return MP4.box(MP4.types.stsc, concatUint8Array(new Uint8Array([\n 0, 0, 0, 0,\n (len >> 24), (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]), data))\n }\n\n static stsz (samplesSizes) {\n const len = samplesSizes.length\n const data = new Uint8Array(4 * len)\n let offset = 0\n samplesSizes.forEach((x) => {\n data.set([\n x >> 24, (x >> 16) & 0xff, (x >> 8) & 0xff, x & 0xff\n ], offset)\n offset += 4\n })\n return MP4.box(MP4.types.stsz, concatUint8Array(\n new Uint8Array([\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n len >> 24, (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]),\n data\n ))\n }\n\n static stco (offsets) {\n const len = offsets.length\n const data = new Uint8Array(4 * len)\n let offset = 0\n offsets.forEach((x) => {\n data.set([\n x >> 24, (x >> 16) & 0xff, (x >> 8) & 0xff, x & 0xff\n ], offset)\n offset += 4\n })\n return MP4.box(MP4.types.stco, concatUint8Array(\n new Uint8Array([\n 0, 0, 0, 0,\n len >> 24, (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]),\n data\n ))\n }\n\n static stss (keyframeIndexes) {\n const len = keyframeIndexes.length\n const data = new Uint8Array(4 * len)\n let offset = 0\n keyframeIndexes.forEach((x) => {\n data.set([\n x >> 24, (x >> 16) & 0xff, (x >> 8) & 0xff, x & 0xff\n ], offset)\n offset += 4\n })\n return MP4.box(MP4.types.stss, concatUint8Array(\n new Uint8Array([\n 0, 0, 0, 0,\n len >> 24, (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]),\n data\n ))\n }\n\n static ctts (samples) {\n const len = samples.length\n const data = new Uint8Array(8 * len)\n let offset = 0\n samples.forEach(({ value, count }) => {\n data.set([\n count >> 24, (count >> 16) & 0xff, (count >> 8) & 0xff, count & 0xff,\n value >> 24, (value >> 16) & 0xff, (value >> 8) & 0xff, value & 0xff\n ], offset)\n offset += 8\n })\n return MP4.box(MP4.types.ctts, concatUint8Array(new Uint8Array([\n 0, 0, 0, 0,\n len >> 24, (len >> 16) & 0xff, (len >> 8) & 0xff, len & 0xff\n ]), data))\n }\n\n static styp () {\n return MP4.box(MP4.types.styp, new Uint8Array([\n 0x6D, 0x73, 0x64, 0x68,\n 0x00, 0x00, 0x00, 0x00,\n 0x6D, 0x73, 0x64, 0x68,\n 0x6D, 0x73, 0x69, 0x78\n ]))\n }\n\n // data.sampleOffset 指的是samples的序列号。_samples[0].idx\n static sidx (data) {\n // const buffer = new Buffer()\n const timescale = data.timescale\n const duration = data.samples[0].duration\n const durationCount = duration * data.samples.length\n const earliestTime = data.samples[0].sampleOffset * duration\n let mdatSize = 8\n data.samples.forEach(item => {\n mdatSize += item.size\n })\n let length = 0\n if (data.isVideo) {\n let sencLength = 0\n let samples\n if (data.videoSenc) {\n samples = data.videoSenc\n }\n if (data.isVideo) {\n samples.forEach(item => {\n sencLength = sencLength + 8\n if (item.subsamples && item.subsamples.length) {\n sencLength = sencLength + 2\n sencLength = sencLength + item.subsamples.length * 6\n }\n })\n }\n data.videoSencLength = sencLength\n length = mdatSize + 141 + data.samples.length * 16 + sencLength\n if (data.useEME && data.isAudioEncryption && !data.isVideoEncryption) {\n length = mdatSize + (data.samples.length * 16) + 84\n }\n } else {\n length = mdatSize + 116 + data.samples.length * 12\n if (data.useEME && data.isAudioEncryption) {\n length = mdatSize + 169 + data.samples.length * 12 + 8 * data.audioSenc.length\n }\n }\n\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, data.id & 0xff, // ref_id\n (timescale >> 24) & 0xff,\n (timescale >> 16) & 0xff,\n (timescale >> 8) & 0xff,\n timescale & 0xff, // timescale\n (earliestTime >> 24) & 0xff,\n (earliestTime >> 16) & 0xff,\n (earliestTime >> 8) & 0xff,\n earliestTime & 0xff, // earliest_presentation_time\n 0x00, 0x00, 0x00, 0x00, // first_offset\n 0x00, 0x00, // reserved\n 0x00, 0x01, // ref_count\n // 0x00, 0x04, 0x11, 0xCF, // ref_size + ref_type\n // 0x00, 0x01, 0x0A, 0xA6, // ref_size + ref_type\n 0x00, // ref_size + ref_type ref_size = moof.size + mdat.size\n (length >> 16) & 0xff,\n (length >> 8) & 0xff,\n length & 0xff,\n (durationCount >> 24) & 0xff,\n (durationCount >> 16) & 0xff,\n (durationCount >> 8) & 0xff,\n durationCount & 0xff,\n 0x90, 0x00, 0x00, 0x00\n ])\n return MP4.box(MP4.types.sidx, content)\n }\n\n static mdat (data) {\n const mdat = MP4.box(MP4.types.mdat, data)\n // console.log('[remux],mdat ,len ', mdat.byteLength, hashVal(mdat.toString()))\n return mdat\n }\n}\n","\nexport class Logger {\n constructor (name, enable) {\n this.name = name || ''\n this._prefix = `[${this.name}]`\n Logger.disabled = enable\n }\n\n debug (...args) {\n if (Logger.disabled) return\n console.debug(this._prefix, ...args)\n }\n\n log (...args) {\n if (Logger.disabled) return\n console.log(this._prefix, ...args)\n }\n\n warn (...args) {\n if (Logger.disabled) return\n console.warn(this._prefix, ...args)\n }\n\n error (...args) {\n if (Logger.disabled) return\n console.error(this._prefix, ...args)\n }\n\n table (...args) {\n if (Logger.disabled) return\n console.group(this._prefix)\n console.table(...args)\n console.groupEnd()\n }\n\n static disabled = true\n\n static enable () {\n Logger.disabled = false\n }\n\n static disable () {\n Logger.disabled = true\n }\n}\n","import {\n WordArray,\n Hasher,\n} from './core.js';\n\n// Constants table\nconst T = [];\n\n// Compute constants\nfor (let i = 0; i < 64; i += 1) {\n T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n}\n\nconst FF = (a, b, c, d, x, s, t) => {\n const n = a + ((b & c) | (~b & d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\nconst GG = (a, b, c, d, x, s, t) => {\n const n = a + ((b & d) | (c & ~d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\nconst HH = (a, b, c, d, x, s, t) => {\n const n = a + (b ^ c ^ d) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\nconst II = (a, b, c, d, x, s, t) => {\n const n = a + (c ^ (b | ~d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n};\n\n/**\n * MD5 hash algorithm.\n */\nexport class MD5Algo extends Hasher {\n _doReset() {\n this._hash = new WordArray([\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n ]);\n }\n\n _doProcessBlock(M, offset) {\n const _M = M;\n\n // Swap endian\n for (let i = 0; i < 16; i += 1) {\n // Shortcuts\n const offset_i = offset + i;\n const M_offset_i = M[offset_i];\n\n _M[offset_i] = (\n (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff)\n | (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n );\n }\n\n // Shortcuts\n const H = this._hash.words;\n\n const M_offset_0 = _M[offset + 0];\n const M_offset_1 = _M[offset + 1];\n const M_offset_2 = _M[offset + 2];\n const M_offset_3 = _M[offset + 3];\n const M_offset_4 = _M[offset + 4];\n const M_offset_5 = _M[offset + 5];\n const M_offset_6 = _M[offset + 6];\n const M_offset_7 = _M[offset + 7];\n const M_offset_8 = _M[offset + 8];\n const M_offset_9 = _M[offset + 9];\n const M_offset_10 = _M[offset + 10];\n const M_offset_11 = _M[offset + 11];\n const M_offset_12 = _M[offset + 12];\n const M_offset_13 = _M[offset + 13];\n const M_offset_14 = _M[offset + 14];\n const M_offset_15 = _M[offset + 15];\n\n // Working varialbes\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n\n // Computation\n a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n a = II(a, b, c, d, M_offset_0, 6, T[48]);\n d = II(d, a, b, c, M_offset_7, 10, T[49]);\n c = II(c, d, a, b, M_offset_14, 15, T[50]);\n b = II(b, c, d, a, M_offset_5, 21, T[51]);\n a = II(a, b, c, d, M_offset_12, 6, T[52]);\n d = II(d, a, b, c, M_offset_3, 10, T[53]);\n c = II(c, d, a, b, M_offset_10, 15, T[54]);\n b = II(b, c, d, a, M_offset_1, 21, T[55]);\n a = II(a, b, c, d, M_offset_8, 6, T[56]);\n d = II(d, a, b, c, M_offset_15, 10, T[57]);\n c = II(c, d, a, b, M_offset_6, 15, T[58]);\n b = II(b, c, d, a, M_offset_13, 21, T[59]);\n a = II(a, b, c, d, M_offset_4, 6, T[60]);\n d = II(d, a, b, c, M_offset_11, 10, T[61]);\n c = II(c, d, a, b, M_offset_2, 15, T[62]);\n b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n // Intermediate hash value\n H[0] = (H[0] + a) | 0;\n H[1] = (H[1] + b) | 0;\n H[2] = (H[2] + c) | 0;\n H[3] = (H[3] + d) | 0;\n }\n /* eslint-ensable no-param-reassign */\n\n _doFinalize() {\n // Shortcuts\n const data = this._data;\n const dataWords = data.words;\n\n const nBitsTotal = this._nDataBytes * 8;\n const nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - (nBitsLeft % 32));\n\n const nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n const nBitsTotalL = nBitsTotal;\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff)\n | (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n );\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff)\n | (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n );\n\n data.sigBytes = (dataWords.length + 1) * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n const hash = this._hash;\n const H = hash.words;\n\n // Swap endian\n for (let i = 0; i < 4; i += 1) {\n // Shortcut\n const H_i = H[i];\n\n H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff)\n | (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n }\n\n // Return final computed hash\n return hash;\n }\n\n clone() {\n const clone = super.clone.call(this);\n clone._hash = this._hash.clone();\n\n return clone;\n }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.MD5('message');\n * var hash = CryptoJS.MD5(wordArray);\n */\nexport const MD5 = Hasher._createHelper(MD5Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacMD5(message, key);\n */\nexport const HmacMD5 = Hasher._createHmacHelper(MD5Algo);\n","/* eslint-disable no-use-before-define */\n\n/**\n * Base class for inheritance.\n */\nexport class Base {\n /**\n * Extends this object and runs the init method.\n * Arguments to create() will be passed to init().\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var instance = MyType.create();\n */\n static create(...args) {\n return new this(...args);\n }\n\n /**\n * Copies properties into this object.\n *\n * @param {Object} properties The properties to mix in.\n *\n * @example\n *\n * MyType.mixIn({\n * field: 'value'\n * });\n */\n mixIn(properties) {\n return Object.assign(this, properties);\n }\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = instance.clone();\n */\n clone() {\n const clone = new this.constructor();\n Object.assign(clone, this);\n return clone;\n }\n}\n\n/**\n * An array of 32-bit words.\n *\n * @property {Array} words The array of 32-bit words.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\nexport class WordArray extends Base {\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of 32-bit words.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.create();\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n */\n constructor(words = [], sigBytes = words.length * 4) {\n super();\n\n let typedArray = words;\n // Convert buffers to uint8\n if (typedArray instanceof ArrayBuffer) {\n typedArray = new Uint8Array(typedArray);\n }\n\n // Convert other array views to uint8\n if (\n typedArray instanceof Int8Array\n || typedArray instanceof Uint8ClampedArray\n || typedArray instanceof Int16Array\n || typedArray instanceof Uint16Array\n || typedArray instanceof Int32Array\n || typedArray instanceof Uint32Array\n || typedArray instanceof Float32Array\n || typedArray instanceof Float64Array\n ) {\n typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n }\n\n // Handle Uint8Array\n if (typedArray instanceof Uint8Array) {\n // Shortcut\n const typedArrayByteLength = typedArray.byteLength;\n\n // Extract bytes\n const _words = [];\n for (let i = 0; i < typedArrayByteLength; i += 1) {\n _words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n }\n\n // Initialize this word array\n this.words = _words;\n this.sigBytes = typedArrayByteLength;\n } else {\n // Else call normal init\n this.words = words;\n this.sigBytes = sigBytes;\n }\n }\n\n /**\n * Creates a word array filled with random bytes.\n *\n * @param {number} nBytes The number of random bytes to generate.\n *\n * @return {WordArray} The random word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.random(16);\n */\n static random(nBytes) {\n const words = [];\n\n const r = (m_w) => {\n let _m_w = m_w;\n let _m_z = 0x3ade68b1;\n const mask = 0xffffffff;\n\n return () => {\n _m_z = (0x9069 * (_m_z & 0xFFFF) + (_m_z >> 0x10)) & mask;\n _m_w = (0x4650 * (_m_w & 0xFFFF) + (_m_w >> 0x10)) & mask;\n let result = ((_m_z << 0x10) + _m_w) & mask;\n result /= 0x100000000;\n result += 0.5;\n return result * (Math.random() > 0.5 ? 1 : -1);\n };\n };\n\n for (let i = 0, rcache; i < nBytes; i += 4) {\n const _r = r((rcache || Math.random()) * 0x100000000);\n\n rcache = _r() * 0x3ade67b7;\n words.push((_r() * 0x100000000) | 0);\n }\n\n return new WordArray(words, nBytes);\n }\n\n /**\n * Converts this word array to a string.\n *\n * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n *\n * @return {string} The stringified word array.\n *\n * @example\n *\n * var string = wordArray + '';\n * var string = wordArray.toString();\n * var string = wordArray.toString(CryptoJS.enc.Utf8);\n */\n toString(encoder = Hex) {\n return encoder.stringify(this);\n }\n\n /**\n * Concatenates a word array to this word array.\n *\n * @param {WordArray} wordArray The word array to append.\n *\n * @return {WordArray} This word array.\n *\n * @example\n *\n * wordArray1.concat(wordArray2);\n */\n concat(wordArray) {\n // Shortcuts\n const thisWords = this.words;\n const thatWords = wordArray.words;\n const thisSigBytes = this.sigBytes;\n const thatSigBytes = wordArray.sigBytes;\n\n // Clamp excess bits\n this.clamp();\n\n // Concat\n if (thisSigBytes % 4) {\n // Copy one byte at a time\n for (let i = 0; i < thatSigBytes; i += 1) {\n const thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n }\n } else {\n // Copy one word at a time\n for (let i = 0; i < thatSigBytes; i += 4) {\n thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n }\n }\n this.sigBytes += thatSigBytes;\n\n // Chainable\n return this;\n }\n\n /**\n * Removes insignificant bits.\n *\n * @example\n *\n * wordArray.clamp();\n */\n clamp() {\n // Shortcuts\n const { words, sigBytes } = this;\n\n // Clamp\n words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n words.length = Math.ceil(sigBytes / 4);\n }\n\n /**\n * Creates a copy of this word array.\n *\n * @return {WordArray} The clone.\n *\n * @example\n *\n * var clone = wordArray.clone();\n */\n clone() {\n const clone = super.clone.call(this);\n clone.words = this.words.slice(0);\n\n return clone;\n }\n}\n\n/**\n * Hex encoding strategy.\n */\nexport const Hex = {\n /**\n * Converts a word array to a hex string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The hex string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n */\n stringify(wordArray) {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n\n // Convert\n const hexChars = [];\n for (let i = 0; i < sigBytes; i += 1) {\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n\n return hexChars.join('');\n },\n\n /**\n * Converts a hex string to a word array.\n *\n * @param {string} hexStr The hex string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n */\n parse(hexStr) {\n // Shortcut\n const hexStrLength = hexStr.length;\n\n // Convert\n const words = [];\n for (let i = 0; i < hexStrLength; i += 2) {\n words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n }\n\n return new WordArray(words, hexStrLength / 2);\n },\n};\n\n/**\n * Latin1 encoding strategy.\n */\nexport const Latin1 = {\n /**\n * Converts a word array to a Latin1 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Latin1 string.\n *\n * @static\n *\n * @example\n *\n * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n */\n stringify(wordArray) {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n\n // Convert\n const latin1Chars = [];\n for (let i = 0; i < sigBytes; i += 1) {\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n latin1Chars.push(String.fromCharCode(bite));\n }\n\n return latin1Chars.join('');\n },\n\n /**\n * Converts a Latin1 string to a word array.\n *\n * @param {string} latin1Str The Latin1 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n */\n parse(latin1Str) {\n // Shortcut\n const latin1StrLength = latin1Str.length;\n\n // Convert\n const words = [];\n for (let i = 0; i < latin1StrLength; i += 1) {\n words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n }\n\n return new WordArray(words, latin1StrLength);\n },\n};\n\n/**\n * UTF-8 encoding strategy.\n */\nexport const Utf8 = {\n /**\n * Converts a word array to a UTF-8 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-8 string.\n *\n * @static\n *\n * @example\n *\n * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n */\n stringify(wordArray) {\n try {\n return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n } catch (e) {\n throw new Error('Malformed UTF-8 data');\n }\n },\n\n /**\n * Converts a UTF-8 string to a word array.\n *\n * @param {string} utf8Str The UTF-8 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n */\n parse(utf8Str) {\n return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n },\n};\n\n/**\n * Abstract buffered block algorithm template.\n *\n * The property blockSize must be implemented in a concrete subtype.\n *\n * @property {number} _minBufferSize\n *\n * The number of blocks that should be kept unprocessed in the buffer. Default: 0\n */\nexport class BufferedBlockAlgorithm extends Base {\n constructor() {\n super();\n this._minBufferSize = 0;\n }\n\n /**\n * Resets this block algorithm's data buffer to its initial state.\n *\n * @example\n *\n * bufferedBlockAlgorithm.reset();\n */\n reset() {\n // Initial values\n this._data = new WordArray();\n this._nDataBytes = 0;\n }\n\n /**\n * Adds new data to this block algorithm's buffer.\n *\n * @param {WordArray|string} data\n *\n * The data to append. Strings are converted to a WordArray using UTF-8.\n *\n * @example\n *\n * bufferedBlockAlgorithm._append('data');\n * bufferedBlockAlgorithm._append(wordArray);\n */\n _append(data) {\n let m_data = data;\n\n // Convert string to WordArray, else assume WordArray already\n if (typeof m_data === 'string') {\n m_data = Utf8.parse(m_data);\n }\n\n // Append\n this._data.concat(m_data);\n this._nDataBytes += m_data.sigBytes;\n }\n\n /**\n * Processes available data blocks.\n *\n * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n *\n * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n *\n * @return {WordArray} The processed data.\n *\n * @example\n *\n * var processedData = bufferedBlockAlgorithm._process();\n * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n */\n _process(doFlush) {\n let processedWords;\n\n // Shortcuts\n const { _data: data, blockSize } = this;\n const dataWords = data.words;\n const dataSigBytes = data.sigBytes;\n const blockSizeBytes = blockSize * 4;\n\n // Count blocks ready\n let nBlocksReady = dataSigBytes / blockSizeBytes;\n if (doFlush) {\n // Round up to include partial blocks\n nBlocksReady = Math.ceil(nBlocksReady);\n } else {\n // Round down to include only full blocks,\n // less the number of blocks that must remain in the buffer\n nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n }\n\n // Count words ready\n const nWordsReady = nBlocksReady * blockSize;\n\n // Count bytes ready\n const nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n // Process blocks\n if (nWordsReady) {\n for (let offset = 0; offset < nWordsReady; offset += blockSize) {\n // Perform concrete-algorithm logic\n this._doProcessBlock(dataWords, offset);\n }\n\n // Remove processed words\n processedWords = dataWords.splice(0, nWordsReady);\n data.sigBytes -= nBytesReady;\n }\n\n // Return processed words\n return new WordArray(processedWords, nBytesReady);\n }\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = bufferedBlockAlgorithm.clone();\n */\n clone() {\n const clone = super.clone.call(this);\n clone._data = this._data.clone();\n\n return clone;\n }\n}\n\n/**\n * Abstract hasher template.\n *\n * @property {number} blockSize\n *\n * The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n */\nexport class Hasher extends BufferedBlockAlgorithm {\n constructor(cfg) {\n super();\n\n this.blockSize = 512 / 32;\n\n /**\n * Configuration options.\n */\n this.cfg = Object.assign(new Base(), cfg);\n\n // Set initial values\n this.reset();\n }\n\n /**\n * Creates a shortcut function to a hasher's object interface.\n *\n * @param {Hasher} SubHasher The hasher to create a helper for.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n */\n static _createHelper(SubHasher) {\n return (message, cfg) => new SubHasher(cfg).finalize(message);\n }\n\n /**\n * Creates a shortcut function to the HMAC's object interface.\n *\n * @param {Hasher} SubHasher The hasher to use in this HMAC helper.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n */\n static _createHmacHelper(SubHasher) {\n return (message, key) => new HMAC(SubHasher, key).finalize(message);\n }\n\n /**\n * Resets this hasher to its initial state.\n *\n * @example\n *\n * hasher.reset();\n */\n reset() {\n // Reset data buffer\n super.reset.call(this);\n\n // Perform concrete-hasher logic\n this._doReset();\n }\n\n /**\n * Updates this hasher with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {Hasher} This hasher.\n *\n * @example\n *\n * hasher.update('message');\n * hasher.update(wordArray);\n */\n update(messageUpdate) {\n // Append\n this._append(messageUpdate);\n\n // Update the hash\n this._process();\n\n // Chainable\n return this;\n }\n\n /**\n * Finalizes the hash computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The hash.\n *\n * @example\n *\n * var hash = hasher.finalize();\n * var hash = hasher.finalize('message');\n * var hash = hasher.finalize(wordArray);\n */\n finalize(messageUpdate) {\n // Final message update\n if (messageUpdate) {\n this._append(messageUpdate);\n }\n\n // Perform concrete-hasher logic\n const hash = this._doFinalize();\n\n return hash;\n }\n}\n\n/**\n * HMAC algorithm.\n */\nexport class HMAC extends Base {\n /**\n * Initializes a newly created HMAC.\n *\n * @param {Hasher} SubHasher The hash algorithm to use.\n * @param {WordArray|string} key The secret key.\n *\n * @example\n *\n * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n */\n constructor(SubHasher, key) {\n super();\n\n const hasher = new SubHasher();\n this._hasher = hasher;\n\n // Convert string to WordArray, else assume WordArray already\n let _key = key;\n if (typeof _key === 'string') {\n _key = Utf8.parse(_key);\n }\n\n // Shortcuts\n const hasherBlockSize = hasher.blockSize;\n const hasherBlockSizeBytes = hasherBlockSize * 4;\n\n // Allow arbitrary length keys\n if (_key.sigBytes > hasherBlockSizeBytes) {\n _key = hasher.finalize(key);\n }\n\n // Clamp excess bits\n _key.clamp();\n\n // Clone key for inner and outer pads\n const oKey = _key.clone();\n this._oKey = oKey;\n const iKey = _key.clone();\n this._iKey = iKey;\n\n // Shortcuts\n const oKeyWords = oKey.words;\n const iKeyWords = iKey.words;\n\n // XOR keys with pad constants\n for (let i = 0; i < hasherBlockSize; i += 1) {\n oKeyWords[i] ^= 0x5c5c5c5c;\n iKeyWords[i] ^= 0x36363636;\n }\n oKey.sigBytes = hasherBlockSizeBytes;\n iKey.sigBytes = hasherBlockSizeBytes;\n\n // Set initial values\n this.reset();\n }\n\n /**\n * Resets this HMAC to its initial state.\n *\n * @example\n *\n * hmacHasher.reset();\n */\n reset() {\n // Shortcut\n const hasher = this._hasher;\n\n // Reset\n hasher.reset();\n hasher.update(this._iKey);\n }\n\n /**\n * Updates this HMAC with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {HMAC} This HMAC instance.\n *\n * @example\n *\n * hmacHasher.update('message');\n * hmacHasher.update(wordArray);\n */\n update(messageUpdate) {\n this._hasher.update(messageUpdate);\n\n // Chainable\n return this;\n }\n\n /**\n * Finalizes the HMAC computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The HMAC.\n *\n * @example\n *\n * var hmac = hmacHasher.finalize();\n * var hmac = hmacHasher.finalize('message');\n * var hmac = hmacHasher.finalize(wordArray);\n */\n finalize(messageUpdate) {\n // Shortcut\n const hasher = this._hasher;\n\n // Compute HMAC\n const innerHash = hasher.finalize(messageUpdate);\n hasher.reset();\n const hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n return hmac;\n }\n}\n","import {\n WordArray,\n} from './core.js';\n\nconst parseLoop = (base64Str, base64StrLength, reverseMap) => {\n const words = [];\n let nBytes = 0;\n for (let i = 0; i < base64StrLength; i += 1) {\n if (i % 4) {\n const bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n const bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n const bitsCombined = bits1 | bits2;\n words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n nBytes += 1;\n }\n }\n return WordArray.create(words, nBytes);\n};\n\n/**\n * Base64 encoding strategy.\n */\nexport const Base64 = {\n /**\n * Converts a word array to a Base64 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Base64 string.\n *\n * @static\n *\n * @example\n *\n * const base64String = CryptoJS.enc.Base64.stringify(wordArray);\n */\n stringify(wordArray) {\n // Shortcuts\n const { words, sigBytes } = wordArray;\n const map = this._map;\n\n // Clamp excess bits\n wordArray.clamp();\n\n // Convert\n const base64Chars = [];\n for (let i = 0; i < sigBytes; i += 3) {\n const byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n const byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n const byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n const triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n for (let j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j += 1) {\n base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n }\n }\n\n // Add padding\n const paddingChar = map.charAt(64);\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n\n return base64Chars.join('');\n },\n\n /**\n * Converts a Base64 string to a word array.\n *\n * @param {string} base64Str The Base64 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * const wordArray = CryptoJS.enc.Base64.parse(base64String);\n */\n parse(base64Str) {\n // Shortcuts\n let base64StrLength = base64Str.length;\n const map = this._map;\n let reverseMap = this._reverseMap;\n\n if (!reverseMap) {\n this._reverseMap = [];\n reverseMap = this._reverseMap;\n for (let j = 0; j < map.length; j += 1) {\n reverseMap[map.charCodeAt(j)] = j;\n }\n }\n\n // Ignore padding\n const paddingChar = map.charAt(64);\n if (paddingChar) {\n const paddingIndex = base64Str.indexOf(paddingChar);\n if (paddingIndex !== -1) {\n base64StrLength = paddingIndex;\n }\n }\n\n // Convert\n return parseLoop(base64Str, base64StrLength, reverseMap);\n },\n\n _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n};\n","import {\n Base,\n WordArray,\n} from './core.js';\nimport { MD5Algo } from './md5.js';\n\n/**\n * This key derivation function is meant to conform with EVP_BytesToKey.\n * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n */\nexport class EvpKDFAlgo extends Base {\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * const kdf = CryptoJS.algo.EvpKDF.create();\n * const kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n * const kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n */\n constructor(cfg) {\n super();\n\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n this.cfg = Object.assign(\n new Base(),\n {\n keySize: 128 / 32,\n hasher: MD5Algo,\n iterations: 1,\n },\n cfg,\n );\n }\n\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * const key = kdf.compute(password, salt);\n */\n compute(password, salt) {\n let block;\n\n // Shortcut\n const { cfg } = this;\n\n // Init hasher\n const hasher = cfg.hasher.create();\n\n // Initial values\n const derivedKey = WordArray.create();\n\n // Shortcuts\n const derivedKeyWords = derivedKey.words;\n const { keySize, iterations } = cfg;\n\n // Generate key\n while (derivedKeyWords.length < keySize) {\n if (block) {\n hasher.update(block);\n }\n block = hasher.update(password).finalize(salt);\n hasher.reset();\n\n // Iterations\n for (let i = 1; i < iterations; i += 1) {\n block = hasher.finalize(block);\n hasher.reset();\n }\n\n derivedKey.concat(block);\n }\n derivedKey.sigBytes = keySize * 4;\n\n return derivedKey;\n }\n}\n\n/**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.EvpKDF(password, salt);\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n */\nexport const EvpKDF = (password, salt, cfg) => EvpKDFAlgo.create(cfg).compute(password, salt);\n","/* eslint-disable no-use-before-define */\n\nimport {\n Base,\n WordArray,\n BufferedBlockAlgorithm,\n} from './core.js';\nimport { Base64 } from './enc-base64.js';\nimport { EvpKDFAlgo } from './evpkdf.js';\n\n/**\n * Abstract base cipher template.\n *\n * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n */\nexport class Cipher extends BufferedBlockAlgorithm {\n /**\n * Initializes a newly created cipher.\n *\n * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @example\n *\n * const cipher = CryptoJS.algo.AES.create(\n * CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }\n * );\n */\n constructor(xformMode, key, cfg) {\n super();\n\n /**\n * Configuration options.\n *\n * @property {WordArray} iv The IV to use for this operation.\n */\n this.cfg = Object.assign(new Base(), cfg);\n\n // Store transform mode and key\n this._xformMode = xformMode;\n this._key = key;\n\n // Set initial values\n this.reset();\n }\n\n /**\n * Creates this cipher in encryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * const cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n */\n static createEncryptor(key, cfg) {\n return this.create(this._ENC_XFORM_MODE, key, cfg);\n }\n\n /**\n * Creates this cipher in decryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * const cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n */\n static createDecryptor(key, cfg) {\n return this.create(this._DEC_XFORM_MODE, key, cfg);\n }\n\n /**\n * Creates shortcut functions to a cipher's object interface.\n *\n * @param {Cipher} cipher The cipher to create a helper for.\n *\n * @return {Object} An object with encrypt and decrypt shortcut functions.\n *\n * @static\n *\n * @example\n *\n * const AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n */\n static _createHelper(SubCipher) {\n const selectCipherStrategy = (key) => {\n if (typeof key === 'string') {\n return PasswordBasedCipher;\n }\n return SerializableCipher;\n };\n\n return {\n encrypt(message, key, cfg) {\n return selectCipherStrategy(key).encrypt(SubCipher, message, key, cfg);\n },\n\n decrypt(ciphertext, key, cfg) {\n return selectCipherStrategy(key).decrypt(SubCipher, ciphertext, key, cfg);\n },\n };\n }\n\n /**\n * Resets this cipher to its initial state.\n *\n * @example\n *\n * cipher.reset();\n */\n reset() {\n // Reset data buffer\n super.reset.call(this);\n\n // Perform concrete-cipher logic\n this._doReset();\n }\n\n /**\n * Adds data to be encrypted or decrypted.\n *\n * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n *\n * @return {WordArray} The data after processing.\n *\n * @example\n *\n * const encrypted = cipher.process('data');\n * const encrypted = cipher.process(wordArray);\n */\n process(dataUpdate) {\n // Append\n this._append(dataUpdate);\n\n // Process available blocks\n return this._process();\n }\n\n /**\n * Finalizes the encryption or decryption process.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n *\n * @return {WordArray} The data after final processing.\n *\n * @example\n *\n * const encrypted = cipher.finalize();\n * const encrypted = cipher.finalize('data');\n * const encrypted = cipher.finalize(wordArray);\n */\n finalize(dataUpdate) {\n // Final data update\n if (dataUpdate) {\n this._append(dataUpdate);\n }\n\n // Perform concrete-cipher logic\n const finalProcessedData = this._doFinalize();\n\n return finalProcessedData;\n }\n}\nCipher._ENC_XFORM_MODE = 1;\nCipher._DEC_XFORM_MODE = 2;\nCipher.keySize = 128 / 32;\nCipher.ivSize = 128 / 32;\n\n/**\n * Abstract base stream cipher template.\n *\n * @property {number} blockSize\n *\n * The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n */\nexport class StreamCipher extends Cipher {\n constructor(...args) {\n super(...args);\n\n this.blockSize = 1;\n }\n\n _doFinalize() {\n // Process partial blocks\n const finalProcessedBlocks = this._process(!!'flush');\n\n return finalProcessedBlocks;\n }\n}\n\n/**\n * Abstract base block cipher mode template.\n */\nexport class BlockCipherMode extends Base {\n /**\n * Initializes a newly created mode.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @example\n *\n * const mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n */\n constructor(cipher, iv) {\n super();\n\n this._cipher = cipher;\n this._iv = iv;\n }\n\n /**\n * Creates this mode for encryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * const mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n */\n static createEncryptor(cipher, iv) {\n return this.Encryptor.create(cipher, iv);\n }\n\n /**\n * Creates this mode for decryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * const mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n */\n static createDecryptor(cipher, iv) {\n return this.Decryptor.create(cipher, iv);\n }\n}\n\nfunction xorBlock(words, offset, blockSize) {\n const _words = words;\n let block;\n\n // Shortcut\n const iv = this._iv;\n\n // Choose mixing block\n if (iv) {\n block = iv;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n } else {\n block = this._prevBlock;\n }\n\n // XOR blocks\n for (let i = 0; i < blockSize; i += 1) {\n _words[offset + i] ^= block[i];\n }\n}\n\n/**\n * Cipher Block Chaining mode.\n */\n\n/**\n * Abstract base CBC mode.\n */\nexport class CBC extends BlockCipherMode {\n}\n/**\n * CBC encryptor.\n */\nCBC.Encryptor = class extends CBC {\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock(words, offset) {\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n\n // XOR and encrypt\n xorBlock.call(this, words, offset, blockSize);\n cipher.encryptBlock(words, offset);\n\n // Remember this block to use with next block\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n};\n/**\n * CBC decryptor.\n */\nCBC.Decryptor = class extends CBC {\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock(words, offset) {\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n\n // Remember this block to use with next block\n const thisBlock = words.slice(offset, offset + blockSize);\n\n // Decrypt and XOR\n cipher.decryptBlock(words, offset);\n xorBlock.call(this, words, offset, blockSize);\n\n // This block becomes the previous block\n this._prevBlock = thisBlock;\n }\n};\n\n/**\n * PKCS #5/7 padding strategy.\n */\nexport const Pkcs7 = {\n /**\n * Pads data using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to pad.\n * @param {number} blockSize The multiple that the data should be padded to.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n */\n pad(data, blockSize) {\n // Shortcut\n const blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n const nPaddingBytes = blockSizeBytes - (data.sigBytes % blockSizeBytes);\n\n // Create padding word\n const paddingWord = (nPaddingBytes << 24)\n | (nPaddingBytes << 16)\n | (nPaddingBytes << 8)\n | nPaddingBytes;\n\n // Create padding\n const paddingWords = [];\n for (let i = 0; i < nPaddingBytes; i += 4) {\n paddingWords.push(paddingWord);\n }\n const padding = WordArray.create(paddingWords, nPaddingBytes);\n\n // Add padding\n data.concat(padding);\n },\n\n /**\n * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to unpad.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.unpad(wordArray);\n */\n unpad(data) {\n const _data = data;\n\n // Get number of padding bytes from last byte\n const nPaddingBytes = _data.words[(_data.sigBytes - 1) >>> 2] & 0xff;\n\n // Remove padding\n _data.sigBytes -= nPaddingBytes;\n },\n};\n\n/**\n * Abstract base block cipher template.\n *\n * @property {number} blockSize\n *\n * The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n */\nexport class BlockCipher extends Cipher {\n constructor(xformMode, key, cfg) {\n /**\n * Configuration options.\n *\n * @property {Mode} mode The block mode to use. Default: CBC\n * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n */\n super(xformMode, key, Object.assign(\n {\n mode: CBC,\n padding: Pkcs7,\n },\n cfg,\n ));\n\n this.blockSize = 128 / 32;\n }\n\n reset() {\n let modeCreator;\n\n // Reset cipher\n super.reset.call(this);\n\n // Shortcuts\n const { cfg } = this;\n const { iv, mode } = cfg;\n\n // Reset block mode\n if (this._xformMode === this.constructor._ENC_XFORM_MODE) {\n modeCreator = mode.createEncryptor;\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n modeCreator = mode.createDecryptor;\n // Keep at least one block in the buffer for unpadding\n this._minBufferSize = 1;\n }\n\n this._mode = modeCreator.call(mode, this, iv && iv.words);\n this._mode.__creator = modeCreator;\n }\n\n _doProcessBlock(words, offset) {\n this._mode.processBlock(words, offset);\n }\n\n _doFinalize() {\n let finalProcessedBlocks;\n\n // Shortcut\n const { padding } = this.cfg;\n\n // Finalize\n if (this._xformMode === this.constructor._ENC_XFORM_MODE) {\n // Pad data\n padding.pad(this._data, this.blockSize);\n\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n // Process final blocks\n finalProcessedBlocks = this._process(!!'flush');\n\n // Unpad data\n padding.unpad(finalProcessedBlocks);\n }\n\n return finalProcessedBlocks;\n }\n}\n\n/**\n * A collection of cipher parameters.\n *\n * @property {WordArray} ciphertext The raw ciphertext.\n * @property {WordArray} key The key to this ciphertext.\n * @property {WordArray} iv The IV used in the ciphering operation.\n * @property {WordArray} salt The salt used with a key derivation function.\n * @property {Cipher} algorithm The cipher algorithm.\n * @property {Mode} mode The block mode used in the ciphering operation.\n * @property {Padding} padding The padding scheme used in the ciphering operation.\n * @property {number} blockSize The block size of the cipher.\n * @property {Format} formatter\n * The default formatting strategy to convert this cipher params object to a string.\n */\nexport class CipherParams extends Base {\n /**\n * Initializes a newly created cipher params object.\n *\n * @param {Object} cipherParams An object with any of the possible cipher parameters.\n *\n * @example\n *\n * var cipherParams = CryptoJS.lib.CipherParams.create({\n * ciphertext: ciphertextWordArray,\n * key: keyWordArray,\n * iv: ivWordArray,\n * salt: saltWordArray,\n * algorithm: CryptoJS.algo.AES,\n * mode: CryptoJS.mode.CBC,\n * padding: CryptoJS.pad.PKCS7,\n * blockSize: 4,\n * formatter: CryptoJS.format.OpenSSL\n * });\n */\n constructor(cipherParams) {\n super();\n\n this.mixIn(cipherParams);\n }\n\n /**\n * Converts this cipher params object to a string.\n *\n * @param {Format} formatter (Optional) The formatting strategy to use.\n *\n * @return {string} The stringified cipher params.\n *\n * @throws Error If neither the formatter nor the default formatter is set.\n *\n * @example\n *\n * var string = cipherParams + '';\n * var string = cipherParams.toString();\n * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n */\n toString(formatter) {\n return (formatter || this.formatter).stringify(this);\n }\n}\n\n/**\n * OpenSSL formatting strategy.\n */\nexport const OpenSSLFormatter = {\n /**\n * Converts a cipher params object to an OpenSSL-compatible string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The OpenSSL-compatible string.\n *\n * @static\n *\n * @example\n *\n * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n */\n stringify(cipherParams) {\n let wordArray;\n\n // Shortcuts\n const { ciphertext, salt } = cipherParams;\n\n // Format\n if (salt) {\n wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n } else {\n wordArray = ciphertext;\n }\n\n return wordArray.toString(Base64);\n },\n\n /**\n * Converts an OpenSSL-compatible string to a cipher params object.\n *\n * @param {string} openSSLStr The OpenSSL-compatible string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n */\n parse(openSSLStr) {\n let salt;\n\n // Parse base64\n const ciphertext = Base64.parse(openSSLStr);\n\n // Shortcut\n const ciphertextWords = ciphertext.words;\n\n // Test for salt\n if (ciphertextWords[0] === 0x53616c74 && ciphertextWords[1] === 0x65645f5f) {\n // Extract salt\n salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n // Remove salt from ciphertext\n ciphertextWords.splice(0, 4);\n ciphertext.sigBytes -= 16;\n }\n\n return CipherParams.create({ ciphertext, salt });\n },\n};\n\n/**\n * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n */\nexport class SerializableCipher extends Base {\n /**\n * Encrypts a message.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * .encrypt(CryptoJS.algo.AES, message, key);\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * .encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * .encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n static encrypt(cipher, message, key, cfg) {\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Encrypt\n const encryptor = cipher.createEncryptor(key, _cfg);\n const ciphertext = encryptor.finalize(message);\n\n // Shortcut\n const cipherCfg = encryptor.cfg;\n\n // Create and return serializable cipher params\n return CipherParams.create({\n ciphertext,\n key,\n iv: cipherCfg.iv,\n algorithm: cipher,\n mode: cipherCfg.mode,\n padding: cipherCfg.padding,\n blockSize: encryptor.blockSize,\n formatter: _cfg.format,\n });\n }\n\n /**\n * Decrypts serialized ciphertext.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.SerializableCipher\n * .decrypt(CryptoJS.algo.AES, formattedCiphertext, key,\n * { iv: iv, format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.SerializableCipher\n * .decrypt(CryptoJS.algo.AES, ciphertextParams, key,\n * { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n static decrypt(cipher, ciphertext, key, cfg) {\n let _ciphertext = ciphertext;\n\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Convert string to CipherParams\n _ciphertext = this._parse(_ciphertext, _cfg.format);\n\n // Decrypt\n const plaintext = cipher.createDecryptor(key, _cfg).finalize(_ciphertext.ciphertext);\n\n return plaintext;\n }\n\n /**\n * Converts serialized ciphertext to CipherParams,\n * else assumed CipherParams already and returns ciphertext unchanged.\n *\n * @param {CipherParams|string} ciphertext The ciphertext.\n * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n *\n * @return {CipherParams} The unserialized ciphertext.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher\n * ._parse(ciphertextStringOrParams, format);\n */\n static _parse(ciphertext, format) {\n if (typeof ciphertext === 'string') {\n return format.parse(ciphertext, this);\n }\n return ciphertext;\n }\n}\n/**\n * Configuration options.\n *\n * @property {Formatter} format\n *\n * The formatting strategy to convert cipher param objects to and from a string.\n * Default: OpenSSL\n */\nSerializableCipher.cfg = Object.assign(\n new Base(),\n { format: OpenSSLFormatter },\n);\n\n/**\n * OpenSSL key derivation function.\n */\nexport const OpenSSLKdf = {\n /**\n * Derives a key and IV from a password.\n *\n * @param {string} password The password to derive from.\n * @param {number} keySize The size in words of the key to generate.\n * @param {number} ivSize The size in words of the IV to generate.\n * @param {WordArray|string} salt\n * (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n *\n * @return {CipherParams} A cipher params object with the key, IV, and salt.\n *\n * @static\n *\n * @example\n *\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n */\n execute(password, keySize, ivSize, salt) {\n let _salt = salt;\n\n // Generate random salt\n if (!_salt) {\n _salt = WordArray.random(64 / 8);\n }\n\n // Derive key and IV\n const key = EvpKDFAlgo.create({ keySize: keySize + ivSize }).compute(password, _salt);\n\n // Separate key and IV\n const iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n key.sigBytes = keySize * 4;\n\n // Return params\n return CipherParams.create({ key, iv, salt: _salt });\n },\n};\n\n/**\n * A serializable cipher wrapper that derives the key from a password,\n * and returns ciphertext as a serializable cipher params object.\n */\nexport class PasswordBasedCipher extends SerializableCipher {\n /**\n * Encrypts a message using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher\n * .encrypt(CryptoJS.algo.AES, message, 'password');\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher\n * .encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n */\n static encrypt(cipher, message, password, cfg) {\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Derive key and other params\n const derivedParams = _cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n // Add IV to config\n _cfg.iv = derivedParams.iv;\n\n // Encrypt\n const ciphertext = SerializableCipher.encrypt\n .call(this, cipher, message, derivedParams.key, _cfg);\n\n // Mix in derived params\n ciphertext.mixIn(derivedParams);\n\n return ciphertext;\n }\n\n /**\n * Decrypts serialized ciphertext using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.PasswordBasedCipher\n * .decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password',\n * { format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.PasswordBasedCipher\n * .decrypt(CryptoJS.algo.AES, ciphertextParams, 'password',\n * { format: CryptoJS.format.OpenSSL });\n */\n static decrypt(cipher, ciphertext, password, cfg) {\n let _ciphertext = ciphertext;\n\n // Apply config defaults\n const _cfg = Object.assign(new Base(), this.cfg, cfg);\n\n // Convert string to CipherParams\n _ciphertext = this._parse(_ciphertext, _cfg.format);\n\n // Derive key and other params\n const derivedParams = _cfg.kdf\n .execute(password, cipher.keySize, cipher.ivSize, _ciphertext.salt);\n\n // Add IV to config\n _cfg.iv = derivedParams.iv;\n\n // Decrypt\n const plaintext = SerializableCipher.decrypt\n .call(this, cipher, _ciphertext, derivedParams.key, _cfg);\n\n return plaintext;\n }\n}\n/**\n * Configuration options.\n *\n * @property {KDF} kdf\n * The key derivation function to use to generate a key and IV from a password.\n * Default: OpenSSL\n */\nPasswordBasedCipher.cfg = Object.assign(SerializableCipher.cfg, { kdf: OpenSSLKdf });\n","import {\n BlockCipher,\n} from './cipher-core.js';\n\n// Lookup tables\nconst _SBOX = [];\nconst INV_SBOX = [];\nconst _SUB_MIX_0 = [];\nconst _SUB_MIX_1 = [];\nconst _SUB_MIX_2 = [];\nconst _SUB_MIX_3 = [];\nconst INV_SUB_MIX_0 = [];\nconst INV_SUB_MIX_1 = [];\nconst INV_SUB_MIX_2 = [];\nconst INV_SUB_MIX_3 = [];\n\n// Compute lookup tables\n\n// Compute double table\nconst d = [];\nfor (let i = 0; i < 256; i += 1) {\n if (i < 128) {\n d[i] = i << 1;\n } else {\n d[i] = (i << 1) ^ 0x11b;\n }\n}\n\n// Walk GF(2^8)\nlet x = 0;\nlet xi = 0;\nfor (let i = 0; i < 256; i += 1) {\n // Compute sbox\n let sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n _SBOX[x] = sx;\n INV_SBOX[sx] = x;\n\n // Compute multiplication\n const x2 = d[x];\n const x4 = d[x2];\n const x8 = d[x4];\n\n // Compute sub bytes, mix columns tables\n let t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n _SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n _SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n _SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n _SUB_MIX_3[x] = t;\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n INV_SUB_MIX_3[sx] = t;\n\n // Compute next counter\n if (!x) {\n xi = 1;\n x = xi;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n}\n\n// Precomputed Rcon lookup\nconst RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n/**\n * AES block cipher algorithm.\n */\nexport class AESAlgo extends BlockCipher {\n _doReset() {\n let t;\n\n // Skip reset of nRounds has been set before and key did not change\n if (this._nRounds && this._keyPriorReset === this._key) {\n return;\n }\n\n // Shortcuts\n this._keyPriorReset = this._key;\n const key = this._keyPriorReset;\n const keyWords = key.words;\n const keySize = key.sigBytes / 4;\n\n // Compute number of rounds\n this._nRounds = keySize + 6;\n const nRounds = this._nRounds;\n\n // Compute number of key schedule rows\n const ksRows = (nRounds + 1) * 4;\n\n // Compute key schedule\n this._keySchedule = [];\n const keySchedule = this._keySchedule;\n for (let ksRow = 0; ksRow < ksRows; ksRow += 1) {\n if (ksRow < keySize) {\n keySchedule[ksRow] = keyWords[ksRow];\n } else {\n t = keySchedule[ksRow - 1];\n\n if (!(ksRow % keySize)) {\n // Rot word\n t = (t << 8) | (t >>> 24);\n\n // Sub word\n t = (_SBOX[t >>> 24] << 24)\n | (_SBOX[(t >>> 16) & 0xff] << 16)\n | (_SBOX[(t >>> 8) & 0xff] << 8)\n | _SBOX[t & 0xff];\n\n // Mix Rcon\n t ^= RCON[(ksRow / keySize) | 0] << 24;\n } else if (keySize > 6 && ksRow % keySize === 4) {\n // Sub word\n t = (_SBOX[t >>> 24] << 24)\n | (_SBOX[(t >>> 16) & 0xff] << 16)\n | (_SBOX[(t >>> 8) & 0xff] << 8)\n | _SBOX[t & 0xff];\n }\n\n keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n }\n }\n\n // Compute inv key schedule\n this._invKeySchedule = [];\n const invKeySchedule = this._invKeySchedule;\n for (let invKsRow = 0; invKsRow < ksRows; invKsRow += 1) {\n const ksRow = ksRows - invKsRow;\n\n if (invKsRow % 4) {\n t = keySchedule[ksRow];\n } else {\n t = keySchedule[ksRow - 4];\n }\n\n if (invKsRow < 4 || ksRow <= 4) {\n invKeySchedule[invKsRow] = t;\n } else {\n invKeySchedule[invKsRow] = INV_SUB_MIX_0[_SBOX[t >>> 24]]\n ^ INV_SUB_MIX_1[_SBOX[(t >>> 16) & 0xff]]\n ^ INV_SUB_MIX_2[_SBOX[(t >>> 8) & 0xff]]\n ^ INV_SUB_MIX_3[_SBOX[t & 0xff]];\n }\n }\n }\n\n encryptBlock(M, offset) {\n this._doCryptBlock(\n M, offset, this._keySchedule, _SUB_MIX_0, _SUB_MIX_1, _SUB_MIX_2, _SUB_MIX_3, _SBOX,\n );\n }\n\n decryptBlock(M, offset) {\n const _M = M;\n\n // Swap 2nd and 4th rows\n let t = _M[offset + 1];\n _M[offset + 1] = _M[offset + 3];\n _M[offset + 3] = t;\n\n this._doCryptBlock(\n _M,\n offset,\n this._invKeySchedule,\n INV_SUB_MIX_0,\n INV_SUB_MIX_1,\n INV_SUB_MIX_2,\n INV_SUB_MIX_3,\n INV_SBOX,\n );\n\n // Inv swap 2nd and 4th rows\n t = _M[offset + 1];\n _M[offset + 1] = _M[offset + 3];\n _M[offset + 3] = t;\n }\n\n _doCryptBlock(M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n const _M = M;\n\n // Shortcut\n const nRounds = this._nRounds;\n\n // Get input, add round key\n let s0 = _M[offset] ^ keySchedule[0];\n let s1 = _M[offset + 1] ^ keySchedule[1];\n let s2 = _M[offset + 2] ^ keySchedule[2];\n let s3 = _M[offset + 3] ^ keySchedule[3];\n\n // Key schedule row counter\n let ksRow = 4;\n\n // Rounds\n for (let round = 1; round < nRounds; round += 1) {\n // Shift rows, sub bytes, mix columns, add round key\n const t0 = SUB_MIX_0[s0 >>> 24]\n ^ SUB_MIX_1[(s1 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s2 >>> 8) & 0xff]\n ^ SUB_MIX_3[s3 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n const t1 = SUB_MIX_0[s1 >>> 24]\n ^ SUB_MIX_1[(s2 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s3 >>> 8) & 0xff]\n ^ SUB_MIX_3[s0 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n const t2 = SUB_MIX_0[s2 >>> 24]\n ^ SUB_MIX_1[(s3 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s0 >>> 8) & 0xff]\n ^ SUB_MIX_3[s1 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n const t3 = SUB_MIX_0[s3 >>> 24]\n ^ SUB_MIX_1[(s0 >>> 16) & 0xff]\n ^ SUB_MIX_2[(s1 >>> 8) & 0xff]\n ^ SUB_MIX_3[s2 & 0xff]\n ^ keySchedule[ksRow];\n ksRow += 1;\n\n // Update state\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n }\n\n // Shift rows, sub bytes, add round key\n const t0 = (\n (SBOX[s0 >>> 24] << 24)\n | (SBOX[(s1 >>> 16) & 0xff] << 16)\n | (SBOX[(s2 >>> 8) & 0xff] << 8)\n | SBOX[s3 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n const t1 = (\n (SBOX[s1 >>> 24] << 24)\n | (SBOX[(s2 >>> 16) & 0xff] << 16)\n | (SBOX[(s3 >>> 8) & 0xff] << 8)\n | SBOX[s0 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n const t2 = (\n (SBOX[s2 >>> 24] << 24)\n | (SBOX[(s3 >>> 16) & 0xff] << 16)\n | (SBOX[(s0 >>> 8) & 0xff] << 8)\n | SBOX[s1 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n const t3 = (\n (SBOX[s3 >>> 24] << 24)\n | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]\n ) ^ keySchedule[ksRow];\n ksRow += 1;\n\n // Set output\n _M[offset] = t0;\n _M[offset + 1] = t1;\n _M[offset + 2] = t2;\n _M[offset + 3] = t3;\n }\n}\nAESAlgo.keySize = 256 / 32;\n\n/**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n */\nexport const AES = BlockCipher._createHelper(AESAlgo);\n","/**\n * Counter block mode.\n */\nimport {\n BlockCipherMode,\n} from './cipher-core.js';\n\nexport class CTR extends BlockCipherMode {\n}\nCTR.Encryptor = class extends CTR {\n processBlock(words, offset) {\n const _words = words;\n\n // Shortcuts\n const cipher = this._cipher;\n const { blockSize } = cipher;\n const iv = this._iv;\n let counter = this._counter;\n\n // Generate keystream\n if (iv) {\n this._counter = iv.slice(0);\n counter = this._counter;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n }\n const keystream = counter.slice(0);\n cipher.encryptBlock(keystream, 0);\n\n // Increment counter\n counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0;\n\n // Encrypt\n for (let i = 0; i < blockSize; i += 1) {\n _words[offset + i] ^= keystream[i];\n }\n }\n};\nCTR.Decryptor = CTR.Encryptor;\n","export class MediaError {\n constructor (msg, data) {\n this.type = 'file'\n this.message = msg\n this.data = data\n }\n}\n","export class Cache {\n _data = Object.create(null)\n\n set (id, data) {\n this._data[id] = data\n }\n\n get (id) {\n return this._data[id]\n }\n\n clear () {\n this._data = Object.create(null)\n }\n}\n","\nexport function moovToSegments (moov, duration) {\n const tracks = moov.trak\n if (!tracks || !tracks.length) return\n const videoTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'vide')\n const audioTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'soun')\n if (!videoTrack && !audioTrack) return\n\n let videoSegments = []\n let audioSegments = []\n\n let segmentDurations\n if (videoTrack) {\n const videoStbl = videoTrack.mdia?.minf?.stbl\n if (!videoStbl) return\n const timescale = videoTrack.mdia.mdhd?.timescale\n const { stts, stsc, stsz, stco, stss, ctts } = videoStbl\n if (!timescale || !stts || !stsc || !stsz || !stco || !stss) return\n videoSegments = getSegments(duration, timescale, stts, stsc, stsz, stco, stss, ctts)\n segmentDurations = videoSegments.map(x => x.duration)\n }\n if (audioTrack) {\n const audioStbl = audioTrack.mdia?.minf?.stbl\n if (!audioStbl) return\n const timescale = audioTrack.mdia.mdhd?.timescale\n const { stts, stsc, stsz, stco } = audioStbl\n if (!timescale || !stts || !stsc || !stsz || !stco) return\n audioSegments = getSegments(duration, timescale, stts, stsc, stsz, stco, null, null, segmentDurations)\n }\n\n return {\n videoSegments,\n audioSegments\n }\n}\n\nfunction getSegments (segDuration, timescale, stts, stsc, stsz, stco, stss, ctts, segmentDurations) {\n const frames = []\n const gop = []\n const gopDuration = []\n const stscEntries = stsc.entries\n const stcoEntries = stco.entries\n const stszEntrySizes = stsz.entrySizes\n const stssEntries = stss?.entries\n const cttsEntries = ctts?.entries\n let cttsArr\n if (cttsEntries) {\n cttsArr = []\n cttsEntries.forEach(({ count, offset }) => {\n for (let i = 0; i < count; i++) {\n cttsArr.push(offset)\n }\n })\n }\n let keyframeMap\n if (stssEntries) {\n keyframeMap = {}\n stssEntries.forEach(x => { keyframeMap[x - 1] = true })\n }\n\n let frame\n let duration\n let startTime = 0\n let pos = 0\n let chunkIndex = 0\n let chunkRunIndex = 0\n let offsetInChunk = 0\n let lastSampleInChunk = stscEntries[0].samplesPerChunk\n let lastChunkInRun = stscEntries[1] ? stscEntries[1].firstChunk - 1 : Infinity\n let dts = 0\n let gopId = -1\n stts.entries.forEach(({ count, delta }) => {\n duration = delta // / timescale\n for (let i = 0; i < count; i++) {\n frame = {\n dts,\n startTime,\n duration,\n size: stszEntrySizes[pos] || stsz.sampleSize,\n offset: stcoEntries[chunkIndex] + offsetInChunk,\n index: pos\n }\n if (stssEntries) {\n frame.keyframe = keyframeMap[pos]\n if (frame.keyframe) {\n gopId++\n gop.push([frame])\n gopDuration.push(frame.duration)\n } else {\n gop[gop.length - 1].push(frame)\n gopDuration[gop.length - 1] += frame.duration\n }\n frame.gopId = gopId\n }\n if (cttsArr && pos < cttsArr.length) {\n frame.pts = dts + cttsArr[pos]\n }\n if (pos === 0) {\n frame.pts = 0\n }\n frames.push(frame)\n startTime += duration\n dts += delta\n pos++\n\n if (pos < lastSampleInChunk) {\n offsetInChunk += frame.size\n } else {\n chunkIndex++\n offsetInChunk = 0\n if (chunkIndex >= lastChunkInRun) {\n chunkRunIndex++\n lastChunkInRun = stscEntries[chunkRunIndex + 1] ? stscEntries[chunkRunIndex + 1].firstChunk - 1 : Infinity\n }\n lastSampleInChunk += stscEntries[chunkRunIndex].samplesPerChunk\n }\n }\n })\n\n const l = frames.length\n if (!l || (stss && !frames[0].keyframe)) return\n\n const segments = []\n let segFrames = []\n let time = 0\n let lastFrame\n let adjust = 0\n const pushSegment = (duration) => {\n lastFrame = segFrames[segFrames.length - 1]\n segments.push({\n index: segments.length,\n startTime: (segments[segments.length - 1]?.endTime || segFrames[0].startTime / timescale),\n endTime: (lastFrame.startTime + lastFrame.duration) / timescale,\n duration: duration,\n range: [segFrames[0].offset, lastFrame.offset + lastFrame.size],\n frames: segFrames\n })\n time = 0\n segFrames = []\n }\n\n if (stss) {\n const duration = segDuration * timescale\n for (let i = 0, l = gop.length; i < l; i++) {\n time += gopDuration[i]\n segFrames.push(...gop[i])\n if (i + 1 < l) {\n if (i === 0 || time > duration) {\n pushSegment(time / timescale)\n }\n } else {\n pushSegment(time / timescale)\n }\n }\n } else {\n segmentDurations = segmentDurations || []\n let duration = segmentDurations[0] || segDuration\n for (let i = 0; i < l; i++) {\n segFrames.push(frames[i])\n time += frames[i].duration\n const curTime = time / timescale\n if (i + 1 >= l || curTime + adjust >= duration) {\n adjust += curTime - duration\n pushSegment(curTime)\n duration = segmentDurations[segments.length] || segDuration\n }\n }\n }\n\n return segments\n}\n\nexport function moovToMeta (moov) {\n let videoCodec = ''\n let audioCodec = ''\n let width = 0\n let height = 0\n let audioChannelCount = 0\n let audioSampleRate = 0\n let duration = 0\n let videoTimescale = 0\n let audioTimescale = 0\n if (moov.mvhd) {\n duration = moov.mvhd.duration / moov.mvhd.timescale\n }\n\n const tracks = moov.trak\n\n if (tracks) {\n const videoTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'vide')\n const audioTrack = tracks.find(t => t.mdia?.hdlr?.handlerType === 'soun')\n let e1 = null\n let defaultKID\n if (videoTrack) {\n e1 = videoTrack.mdia?.minf?.stbl?.stsd.entries[0]\n if (e1) {\n width = e1.width\n height = e1.height\n videoTimescale = videoTrack.mdia?.mdhd?.timescale\n videoCodec = (e1.avcC || e1.hvcC)?.codec\n if (e1.type === 'encv') {\n defaultKID = e1.sinf?.schi?.tenc.default_KID\n }\n }\n }\n if (audioTrack) {\n e1 = audioTrack.mdia?.minf?.stbl?.stsd.entries[0]\n if (e1) {\n audioChannelCount = e1.channelCount\n audioSampleRate = e1.sampleRate\n audioCodec = e1.esds?.codec\n audioTimescale = audioTrack.mdia?.mdhd?.timescale\n if (e1.type === 'enca') {\n defaultKID = defaultKID || e1.sinf?.schi?.tenc.default_KID\n }\n }\n }\n return {\n kid: defaultKID ? defaultKID.join('') : null,\n videoCodec,\n audioCodec,\n width,\n height,\n videoTimescale,\n audioChannelCount,\n audioSampleRate,\n duration,\n audioTimescale,\n moov\n }\n }\n}\n\nexport function isNumber (n) {\n return typeof n === 'number' && !Number.isNaN(n)\n}\n","import { NetLoader, concatUint8Array, Logger, EVENT } from 'xgplayer-streaming-shared'\nimport { MP4Parser } from 'xgplayer-transmuxer'\nimport { getConfig } from './config'\nimport { MediaError } from './error'\nimport { Cache } from './cache'\nimport { isNumber, moovToMeta, moovToSegments } from './utils'\nimport EventEmitter from 'eventemitter3'\n\nexport class MP4Loader extends EventEmitter {\n vid = ''\n url = ''\n meta = {}\n downloadInfo = []\n videoSegments = []\n audioSegments = []\n cache = null\n _currentSegmentIndex = -1\n _currentLoadingSegmentIndex = -1\n buffer\n _error\n\n constructor (config) {\n super()\n this._config = getConfig(config)\n const {\n vid,\n cache,\n ...rest\n } = this._config\n this.cache = cache || new Cache()\n this.vid = vid || rest.url\n this.url = rest.url\n rest.transformError = this._transformError\n this.logger = new Logger('MP4Loader_' + this.vid)\n !!config.openLog && Logger.enable()\n rest.logger = this.logger\n\n this._loader = new NetLoader(rest)\n this._loader.on(EVENT.REAL_TIME_SPEED, (data) => {\n this.emit(EVENT.REAL_TIME_SPEED, data)\n })\n }\n\n get isMetaLoaded () {\n return this.videoSegments.length || this.audioSegments.length\n }\n\n setCurrentSegment (segIndex) {\n if (isNumber(segIndex)) {\n this._currentSegmentIndex = segIndex\n }\n }\n\n isLastSegment (segIndex) {\n if (isNumber(segIndex)) {\n const lastIndex = this.videoSegments[this.videoSegments.length - 1]?.index || this.audioSegments[this.audioSegments.length - 1]?.index || 0\n return segIndex >= lastIndex\n }\n\n return false\n }\n\n isSegmentLoading (segIndex) {\n return segIndex === this._currentLoadingSegmentIndex\n }\n\n async changeUrl (url, vid = url, moovEnd, notCancelLoader) {\n await this.reset(notCancelLoader)\n if (url) this.url = url\n if (vid) this.vid = vid\n if (moovEnd) this._config.moovEnd = moovEnd\n }\n\n async getOrLoadMeta (cache) {\n if (!this.isMetaLoaded) await this.loadMeta(cache)\n return this.meta\n }\n\n async loadMetaProcess (cache, [moovStart, moovEnd], onProgress, config) {\n this._error = false\n this.logger.debug('[loadMetaProcess start], range,', [moovStart, moovEnd])\n const OnProgressHandle = async (data, state, options) => {\n if (this.meta && options?.range && options.range.length > 0 && options.range[1] >= moovEnd) {\n state = true\n this.logger.debug('[loadMetaProcess],data done,setstate true,[', moovStart, moovEnd, ']')\n }\n if (state && options?.range && options.range.length > 0 && options.range[1] < moovEnd) {\n state = false // 为了修复state为true但数据还么全部返回的问题\n this.logger.debug('[loadMetaProcess],data not done,setstate false,[', moovStart, moovEnd, ']')\n }\n this.logger.debug('[loadMetaProcess],task,[', moovStart, moovEnd, '], range,', options.range, ',dataLen,', (data ? data.byteLength : undefined), ', state,', state, ',err,',this._error)\n !this._error && data && data.byteLength > 0 && onProgress(data, state, options)\n if (this.meta.moov || this._error) return\n if (data && data.byteLength > 0) {\n this.buffer = concatUint8Array(this.buffer, data)\n let moov = MP4Parser.findBox(this.buffer, ['moov'])[0]\n if (!moov) {\n const mdat = MP4Parser.findBox(this.buffer, ['mdat'])[0]\n if (state) {\n if (!mdat) {\n this._error = true\n onProgress(null, state, options, {err:'cannot find moov or mdat box'})\n return\n // throw new MediaError('cannot find moov or mdat box')\n } else {\n const moovStart = mdat.start + mdat.size\n const res = await this.loadData([moovStart, ''], cache, config)\n if (res) {\n moov = MP4Parser.findBox(res.data, ['moov'])[0]\n }\n }\n }\n }\n if (moov && state && moov.size > moov.data.length) {\n this.logger.debug('[loadMetaProcess],moov not all, range,', options.range[1], ',dataLen,', this.buffer.byteLength, ', state,', state)\n await this.loadMetaProcess(cache, [options.range[1], moov.start + moov.size - 1], onProgress)\n }\n if (moov && moov.size <= moov.data.length && !this.meta.moov) {\n const parsedMoov = MP4Parser.moov(moov)\n if (!parsedMoov) {\n this._error = true\n onProgress(null, state, options, {err:'cannot parse moov box'})\n return\n // throw new MediaError('cannot parse moov box', moov.data)\n }\n\n const segments = moovToSegments(parsedMoov, this._config.segmentDuration)\n if (!segments) {\n this._error = true\n onProgress(null, state, options, {err:'cannot parse segments'})\n return\n // throw new MediaError('cannot parse segments', moov.data)\n }\n\n this.meta = moovToMeta(parsedMoov)\n const { videoSegments, audioSegments } = segments\n this.videoSegments = videoSegments\n this.audioSegments = audioSegments\n this.logger.debug('[loadMetaProcess] moov ok')\n onProgress(undefined, state, {\n meta: {\n meta: this.meta,\n videoSegments,\n audioSegments\n }\n })\n }\n }\n }\n await this.loadData([moovStart, moovEnd || this._config.moovEnd], cache, { onProgress: OnProgressHandle, ...config})\n }\n\n async loadMeta (cache, moovEnd, config) {\n const responses = []\n this.logger.debug('[loadMeta start]')\n let res = await this.loadData([0, moovEnd || this._config.moovEnd], cache, config)\n if (!res) return\n responses.push(res)\n let moov = MP4Parser.findBox(res.data, ['moov'])[0]\n if (!moov) {\n const mdat = MP4Parser.findBox(res.data, ['mdat'])[0]\n if (!mdat) {\n throw new MediaError('cannot find moov or mdat box', res.data)\n }\n const moovStart = mdat.start + mdat.size\n res = await this.loadData([moovStart], cache, config)\n if (!res) return\n responses.push(res)\n moov = MP4Parser.findBox(res.data, ['moov'], moovStart)[0]\n if (!moov) {\n throw new MediaError('cannot find moov box', res.data)\n }\n }\n if (moov.size > moov.data.length) {\n res = await this.loadData([res.data.length, moov.start + moov.size - 1], cache, config)\n if (!res) return\n responses.push(res)\n moov.data = concatUint8Array(moov.data, res.data)\n }\n const parsedMoov = MP4Parser.moov(moov)\n if (!parsedMoov) {\n throw new MediaError('cannot parse moov box', moov.data)\n }\n\n const segments = moovToSegments(parsedMoov, this._config.segmentDuration)\n if (!segments) {\n throw new MediaError('cannot parse segments', moov.data)\n }\n\n this.meta = moovToMeta(parsedMoov)\n const { videoSegments, audioSegments } = segments\n this.videoSegments = videoSegments\n this.audioSegments = audioSegments\n this.logger.debug('[load moov end!!!!!]')\n return {\n meta: this.meta,\n videoSegments,\n audioSegments,\n responses\n }\n }\n\n loadCacheMeta (meta, segmentIndex){\n const { moov } = meta\n const segments = moovToSegments(moov, this._config.segmentDuration)\n const { videoSegments, audioSegments } = segments\n this.videoSegments = videoSegments\n this.audioSegments = audioSegments\n this._currentSegmentIndex = segmentIndex\n this.meta = meta\n }\n\n getSegmentByTime (time) {\n let video\n let audio\n if (!this.videoSegments.length) {\n audio = this.audioSegments.find(x => x.startTime <= time && x.endTime > time)\n } else {\n video = this.videoSegments.find(x => x.startTime <= time && x.endTime > time)\n if (video) {\n audio = this.audioSegments[video.index]\n }\n }\n\n return {\n video,\n audio\n }\n }\n\n async loadSegmentByTime (time, cache, changeCurrent = true, config = {}) {\n if (!this.isMetaLoaded) {\n await this.loadMeta(cache)\n }\n const { video, audio } = this.getSegmentByTime(time)\n return this._loadSegment(video, audio, cache, changeCurrent, config)\n }\n\n async loadNextSegment (cache, changeCurrent = true, config = {}) {\n if (!this.isMetaLoaded) {\n await this.loadMeta()\n }\n const video = this.videoSegments[this._currentSegmentIndex + 1]\n const audio = this.audioSegments[this._currentSegmentIndex + 1]\n return this._loadSegment(video, audio, cache, changeCurrent, config)\n }\n\n async preload (time) {\n if (!this.isMetaLoaded) {\n await this.loadMeta(true)\n }\n if (!time || time < 0) return\n const { video, audio } = this.getSegmentByTime(time)\n const index = Math.max(video?.index || 0, audio?.index || 0)\n if (!index) return\n\n const videos = this.videoSegments.slice(0, index)\n const audios = this.audioSegments.slice(0, index)\n\n const load = async (i) => {\n if (i > index) return\n await this._loadSegment(videos[i], audios[i], true, false)\n await load(i + 1)\n }\n\n await load(0)\n }\n\n cancel () {\n return this._loader.cancel()\n }\n\n async reset (notCancelLoader = false) {\n if (!notCancelLoader) {\n this.logger.debug('[MP4loader reset func call loader.cancel]')\n await this._loader.cancel()\n }\n this.vid = this.url = ''\n this.meta = {}\n this.downloadInfo = []\n this.videoSegments = []\n this.audioSegments = []\n this._currentSegmentIndex = -1\n this._currentLoadingSegmentIndex = -1\n }\n\n async destroy () {\n await this.reset()\n // await this.cancel()\n this.cache.clear()\n }\n\n async _loadSegment (video, audio, cache, changeCurrent, config) {\n if (!video && !audio) return\n const segIndex = video?.index || audio?.index || 0\n this._currentLoadingSegmentIndex = segIndex\n let res\n try {\n res = await this.loadData([\n Math.min(video?.range[0] || Infinity, audio?.range[0] || Infinity),\n Math.max(video?.range[1] || 0, audio?.range[1] || 0)\n ], cache, config)\n } finally {\n this._currentLoadingSegmentIndex = -1\n }\n if (!res) return\n\n if (changeCurrent) {\n this._currentSegmentIndex = segIndex\n }\n\n res.video = video\n res.audio = audio\n\n return res\n }\n\n async loadData (range, cache, config) {\n const cacheKey = this._getCacheKey(range)\n const data = await this.cache.get(cacheKey)\n let res\n if (!data) {\n const url = config && config.url ? config.url : this.url\n res = await this._loader.load(url, { range, vid: this.vid, ...config })\n } else {\n res = { data, state: true, options: { fromCache: true, range, vid: this.vid } }\n }\n if (!res) return\n if (!data) {\n res.data && this.downloadInfo.push({\n startTime: res.startTime,\n endTime: res.endTime,\n size: res.data.byteLength,\n range\n })\n if (this.downloadInfo && this.downloadInfo.length > this._config.maxDownloadInfoSize) {\n this.downloadInfo = this.downloadInfo.slice(-this._config.maxDownloadInfoSize)\n }\n }\n\n if (!data && cache) {\n // this.cache.set(cacheKey, res.data)\n }\n\n // res.range = range\n return res\n }\n\n _transformError = (error) => {\n // error.type = 'network'\n return error\n }\n\n _getCacheKey (range) {\n return (this.vid || this.url) + ':' + range\n }\n}\n","export function getConfig (cfg) {\n return {\n vid: '',\n moovEnd: 80000,\n segmentDuration: 2,\n maxDownloadInfoSize: 30,\n responseType: 'arraybuffer',\n cache: null,\n // ...xgplayer-streaming-shared/src/net/config\n ...cfg\n }\n}\n"],"names":["createPublicPromise","res","rej","promise","Promise","resolve","reject","used","apply","arguments","nowTime","parseInt","performance","now","e","Date","getTime","Buffer","_classCallCheck","key","value","buf","length","end","start","b","buffered","error","maxHole","buffers","i","l","bufLen","last","lastEnd","push","reduce","a","c","pos","undefined","index","nextStart","nextEnd","prevStart","prevEnd","item","currentTime","behind","remaining","totalLength","ERR","FLV","HLS","MP4","FMP4","MSE_ADD_SB","MSE_APPEND_BUFFER","MSE_OTHER","MSE_FULL","OPTION","DASH","LICENSE","CUSTOM_LICENSE","MSE_HIJACK","EME_HIJACK","SIDX","NO_CANPLAY_ERROR","BUFFERBREAK_ERROR","MEDIA_ERR_ABORTED","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","MEDIA_ERR_CODEC_NOT_SUPPORTED","MEDIA_ERR_URL_EMPTY","ERR_CODE","_defineProperty","_ERR_CODE","StreamingError","_Error","_inherits","_super","_createSuper","type","subType","origin","payload","msg","_this","call","message","errorType","originError","ext","errorCode","errorMessage","Error","_error$response","isTimeout","url","response","httpCode","status","isBrowser","window","LogCacheLevel","DEBUG","LOG","WARN","ERROR","SIMPLE_TYPE","Logger","name","config","this","_prefix","concat","disabled","logCacheLevel","logMaxSize","logSize","logTextArray","_createClass","_console","_len","args","Array","_key","logCache","console","debug","_console2","_len2","_key2","log","_console3","_len3","_key3","warn","_console4","_len4","_key4","text","_len5","logText","_key5","finLogText","map","logable","JSON","stringify","delLog","shift","join","reset","_console5","group","table","groupEnd","val","toLocaleString","reduceDepth","_typeof","objType","Object","prototype","toString","slice","obj","maxDepth","depth","result","includes","hasOwnProperty","MediaSource","getMediaSource","OP_NAME","MSE","media","_this2","create","queue","_queue","op","costtime","_opst","_logger","opName","context","_startQueue","event","_config","assign","getDefaultConfig","bindMedia","openLog","enable","_enqueueBlockingOp2","_unbindMedia","_bindMedia","get","_this$mediaSource","mediaSource","readyState","_url","_this$mediaSource2","duration","_mseFullFlag","VIDEO","_this3","_enqueueBlockingOp","isEnded","_this4","_openPromise","isOpened","ms","addEventListener","onOpen","_st","removeEventListener","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_this5","wrap","_context","prev","next","unbindMedia","revokeObjectURL","src","URL","createObjectURL","abrupt","stop","_x","_callee2","hasMetadata","mseOpen","_this6","_context2","keys","forEach","t","x","endOfStream","_sourceBuffer","k","removeSourceBuffer","removeAttribute","load","mimeType","sb","addSourceBuffer","_onSBUpdateEnd","bind","_onSBUpdateError","_this7","changeType","_enqueueOp","createSource","buffer","_this8","byteLength","_this8$_sourceBuffer$","appendBuffer","startTime","endTime","_this9","isInsertHead","remove","p","_this10","_this11","_this$_queue$type","initOpque","isinit","reason","_this12","setLiveSeekableRange","exec","_this13","splice","then","_callee3","types","waiters","_this14","_context3","prom","all","updating","_x2","_x3","indexOf","timestampOffset","_this15","_this16","abort","mime","isTypeSupported","LoaderType","ResponseType","NetError","request","_assertThisInitialized","isPlainObject","getPrototypeOf","getRangeValue","ret","encode","encodeURIComponent","replace","setUrlParams","params","v","str","isArray","toISOString","isObject","filter","Boolean","hashIndex","createResponse","data","done","contentLength","age","firstByteTime","range","vid","priOptions","parseFloat","Number","isNaN","option","calculateSpeed","byteLen","millisec","Math","round","EVENT","has","prefix","Events","EE","fn","once","addListener","emitter","TypeError","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","__proto__","eventNames","names","events","getOwnPropertySymbols","listeners","handlers","ee","listenerCount","emit","a1","a2","a3","a4","a5","len","removeListener","j","on","removeAllListeners","off","prefixed","module","exports","CACHESIZE","FetchLoader","_EventEmitter","_cancel","_ref","_this$_abortControlle","timeout","responseType","onProgress","onTimeout","onCancel","transformResponse","logger","method","headers","body","mode","credentials","cache","redirect","referrer","referrerPolicy","onProcessMinLen","_aborted","_onProcessMinLen","_onCancel","_abortController","AbortController","_running","_index","_range","_vid","_priOptions","init","signal","clearTimeout","_timeoutTimer","rangeValue","Headers","append","Range","setTimeout","cancel","fetch","_ref2","costTime","speed","_response","ok","sent","json","_loadChunk","arrayBuffer","Uint8Array","time","catch","_error","options","_reader","t0","st","getReader","err","_cache","_writeIdx","reader","pump","_ref3","_this3$_range","startRange","startByte","curLen","retData","temp","read","_receivedLength","set","XhrLoader","req","_onProgress","_headers","_withCredentials","_body","_method","_timeout","_runing","_responseType","_firstRtt","_onTimeout","_request","_loadCompleteResolve","_loadCompleteReject","_startLoad","chunkSize","_currentChunkSizeKB","from","to","_internalOpen","_startTime","xhr","_xhr","XMLHttpRequest","open","withCredentials","onload","_onLoad","onreadystatechange","_onReadyStatechange","onerror","errorEvent","_errorEvent$currentTa","_errorEvent$currentTa2","_errorEvent$currentTa3","currentTarget","statusText","ontimeout","setRequestHeader","send","target","_this$_range","_objectSpread","byteStart","_this$_range2","chunk","responseURL","_getHeaders","_transformResponse","_getPrototypeOf","_step","_iterator","_createForOfIteratorHelper","getAllResponseHeaders","trim","split","s","n","parts","toLowerCase","f","Task","alive","_loaderType","_loader","_retryCount","_retryTimer","_canceled","_retryCheckFunc","retryCheckFunc","_this$_config","retry","retryDelay","onRetryError","transformError","rest","_objectWithoutProperties","_excluded","isRetry","running","loaderType","retryCount","concatUint8Array","arr","prevLen","d","sleep","NetLoader","cfg","transformRequest","integrity","getConfig","isSupported","task","loader","_currentTask","_processTask","cancels","_alive","finally","_this3$_currentTask","_this3$_alive","TrackType","VideoCodecType","AudioCodecType","WarningType","VideoTrack","sequenceNumber","width","height","fpsDen","fpsNum","baseMediaDecodeTime","timescale","codec","present","pid","pps","sps","vps","sarRatio","samples","warnings","hvcC","isVideoEncryption","AudioTrack","sampleDuration","sampleRate","channelCount","codecType","isAudioEncryption","VideoSample","pts","dts","units","originPts","originDts","keyframe","flag","dependsOn","isNonSyncSample","AudioSample","sampleOffset","size","Sample","FlvScriptSample","_Sample","SeiSample","_Sample2","_super2","MetadataTrack","flvScriptSamples","seiSamples","ExpGolomb","_data","_bytesAvailable","_loadWord","position","availableBytes","min","workingBytes","subarray","_word","DataView","getUint32","_bitsAvailable","count","skipBytes","floor","bits","readBits","leadingZeroCount","skipLZ","skipBits","clz","readUEG","lastScale","nextScale","readEG","UTF8","uint8array","out","input","String","fromCharCode","_checkContinuation","ucs4","_ucs2","checkLength","array","ua","navigator","userAgent","toLocaleLowerCase","isSafari","test","isFirefox","isAndroid","MAX_SIZE","pow","readBig16","readBig32","readBig64","getAvcCodec","codecs","h","parse","NALu","offset","dataLen","unit","isHevc","uuid","uint","emulationPreventionBytesPositions","newLength","newData","sourceIndex","AVC","nalUnitSize","spsParsed","spsSize","spsArr","ppsArr","spsCount","parseSPS","removeEPB","ppsSize","ppsCount","eg","readUByte","profileIdc","profileCompatibility","levelIdc","skipUEG","chromaFormat","chromaFormatIdc","readBool","scalingListCount","skipScalingList","picOrderCntType","numRefFramesInPicOrderCntCycle","picWidthInMbsMinus1","picHeightInMapUnitsMinus1","frameMbsOnlyFlag","fixedFrame","fps","frameCropLeftOffset","frameCropRightOffset","frameCropTopOffset","frameCropBottomOffset","aspectRatioIdc","numUnitsInTick","timeScale","ceil","AAC","rate","FREQ","skip","frames","samplingFrequencyIndex","protectionSkipBytes","frameLength","objectType","_AAC$_getConfig","_getConfig","frameIndex","getFrameDuration","originCodec","_AAC$_getConfig2","samplingIndex","originObjectType","extensionSamplingIndex","HEVC","vpsParsed","nalUnitType","numNalus","nalSize","vpsArr","numOfArrays","parseVPS","vpsMaxSubLayersMinus1","numTemporalLayers","max","_parseProfileTierLevel","spsMaxSubLayersMinus1","temporalIdNested","separateColourPlaneFlag","confWinLeftOffset","confWinRightOffset","confWinTopOffset","confWinBottomOffset","conformanceWindowFlag","bitDepthLumaMinus8","bitDepthChromaMinus8","subWidthC","subHeightC","maxSubLayersMinus1","generalTierFlag","generalProfileSpace","generalProfileIdc","generalProfileCompatibilityFlags","generalConstraintIndicatorFlags","generalLevelIdc","subLayerProfilePresentFlag","subLayerLevelPresentFlag","MAX_SILENT_FRAME_DURATION","AUDIO_EXCETION_LOG_EMIT_DURATION","FlvFixer","videoTrack","audioTrack","metadataTrack","_baseDts","_baseDtsInited","_audioNextPts","_videoNextDts","_audioTimestampBreak","_videoTimestampBreak","_lastVideoDuration","_keyFrameInNextChunk","_lastAudioExceptionGapDot","Infinity","_lastAudioExceptionOverlapDot","_lastAudioExceptionLargeGapDot","_lastVideoExceptionLargeGapDot","_lastVideoExceptionChunkFirstDtsDot","discontinuity","contiguous","_videoLastSample","_calculateBaseDts","resetBaseDts","exist","_resetBaseDtsWhenStreamBreaked","_fixAudio","_fixVideo","refSampleDurationInt","first","lastSample","pop","unshift","samp0","firstSample","vDelta","abs","_samples$","nextDts","firstSampleDts","nextSampleDts","nextSample","refSampleDuration","_doFixAudioInternal","audioSamps","videoSamps","audioBasePts","videoBaseDts","baseDts","delta","isFinite","_getG711Duration","sampleDurationInSampleRate","nextPts","sample","silentFrame","_getSilentFrame","silentSample","track","sampleSize","getSilentFrame","AMF","_parseValue","byteOffset","view","isEnd","getUint8","getFloat64","_AMF$_parseString","_parseString","terminal","_AMF$_parseObject","_parseObject","_terminal","_AMF$_parseObject2","strictArrayLength","_AMF$_parseValue","timestamp","getInt16","decode","getUint16","FlvDemuxer","_fixer","_remainingData","_headerParsed","probe","tagType","dataSize","bodyData","prevTagSize","_parseAudio","_parseVideo","_parseScript","formatTimescale","hasSample","fix","demux","format","soundRate","soundSize","soundType","AUDIO_RATE","_parseAac","_parseG711","parseAudioSpecificConfig","sampleRateIndex","frameType","codecId","packetType","cts","configData","parseHEVCDecoderConfigurationRecord","parseAVCDecoderConfigurationRecord","parseAvcC","_checkAddMetaNalToUnits","setToKeyframe","parseSEI","_gopId","gopId","hevc","_needAddMetaBeforeKeyFrameNal","MP4Parser","headerSize","subData","findBox","box","parseBox","trackId","baseDataOffsetPresent","flags","sampleDescriptionIndexPresent","defaultSampleDurationPresent","defaultSampleSizePresent","defaultSampleFlagsPresent","baseDataOffset","sampleDescriptionIndex","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","reference_ID","version","earliest_presentation_time","first_offset","references","ref","tmp32","reference_type","referenced_size","subsegment_duration","starts_with_SAP","SAP_type","SAP_delta_time","mvhd","trak","pssh","nextTrackId","tkhd","mdia","mdhd","hdlr","minf","lang","language","handlerType","vmhd","smhd","stbl","graphicsmode","opcolor","balance","_ret$stsd$entries$","_ret$stsd$entries$$si","_ret$stsd$entries$$si2","stsd","stts","ctts","stsc","stsz","stco","co64","default_IV_size","entries","sinf","schi","tenc","stss","senc","iv","sampleCount","InitializationVector","subsamples","subsampleCount","subsample","BytesOfClearData","BytesOfProtectedData","keyIds","systemId","toHex","numKeyIds","keyId","data_size","kid","system_id","entryCount","avc1","hvc1","mp4a","alaw","samplesize","esds","horizresolution","vertresolution","avcC","pasp","default_IsEncrypted","default_KID","frma","data_format","bodyStart","parseVisualSampleEntry","configurationVersion","AVCProfileIndication","AVCLevelIndication","lengthSizeMinusOne","spsLength","ppsLength","tmp","generalProfileCompatibility","avgFrameRate","_ret$vps","nalus","_ret$sps","_ret$pps","hSpacing","vSpacing","parseAudioSampleEntry","byteRead","tag","substring","padStart","firstChunk","samplesPerChunk","entrySizes","mfhd","traf","tfhd","tfdt","trun","dataOffset","firstSampleFlags","isLeading","isDependedOn","hasRedundancy","paddingValue","degradationPriority","moov","_e$esds","_e$esds2","tracks","vTrack","find","_t$mdia","_t$mdia$hdlr","aTrack","_t$mdia2","_t$mdia2$hdlr","_vTrack$tkhd","_vTrack$mdia","_vTrack$mdia$minf","_vTrack$mdia$minf$stb","_vTrack$mdia2","_vTrack$mdia2$minf","_vTrack$mdia2$minf$st","_vTrackId","id","tkhdDuration","mvhdDurtion","mvhdTimecale","_e1$sinf","_e1$sinf$schi","_e1$sinf2","_e1$sinf2$schi","_e1$sinf3","_e1$sinf3$schi","_e1$sinf4","_e1$sinf4$frma","e1","videoSenc","useEME","kidValue","encv","_aTrack$tkhd","_e$esds3","_e$esds4","_aTrack$mdia","_aTrack$mdia$minf","_aTrack$mdia$minf$stb","_aTrack$mdia2","_aTrack$mdia2$minf","_aTrack$mdia2$minf$st","_aTrackId","_e$sinf","_e$sinf$frma","_e$sinf2","_e$sinf2$schi","_e$sinf3","_e$sinf3$schi","_e$sinf4","_e$sinf4$schi","getRateIndexByRate","audioSenc","enca","_videoTrack$encv","_audioTrack$enca","vkid","akid","videoSampleCount","_audioTrack$samples","audioSampleCount","moof","defaultSize","defaultDuration","evaluateDefaultDuration","_t$mdia3","_t$mdia3$hdlr","_t$mdia4","_t$mdia4$hdlr","videoSamples","audioSamples","_vTrack$mdia3","_vTrack$mdia3$minf","videoStbl","getSamples","_aTrack$mdia3","_aTrack$mdia3$minf","_aTrack$mdia$mdhd","audioStbl","keyframeMap","cttsArr","cttsEntries","stscEntries","stcoEntries","stszEntrySizes","stssEntries","chunkIndex","chunkRunIndex","offsetInChunk","lastSampleInChunk","lastChunkInRun","dataReferenceIndex","frameCount","isFullBox","readBig24","pad","charstr","maxlen","chars","r","hex","Concat","ResultConstructor","arrays","self","UINT32_MAX","FTYPHEV1","FTYPAVC1","ftyp","content","mvex","_toConsumableArray","HDLR_TYPES","VMHD","SMHD","DINF","extBox","STTS","STSC","STSZ","STCO","avc1hev1","_concat$concat","avcc","btrt","charCodeAt","schm","typ","boxes","fiel","_concat$concat2","ArrayBuffer","pcf","cif","write","_ref4","_slicedToArray","trex","sencLength","isVideo","videoSencLength","saiz","saio","trun1","sbgp","sdtp","extension","writeUint32","samplesLength","writeUint16","upperWordBaseMediaDecodeTime","lowerWordBaseMediaDecodeTime","sampleLen","_samples$i","_samples$i$flag","_samples$i$cts","trackMP4","mdiaMP4","minfMP4","stblMP4","_ref5","_ref6","sampleDescIndex","samplesSizes","offsets","keyframeIndexes","_ref7","styp","durationCount","earliestTime","mdatSize","sidx","mdat","video","audio","dinf","dref","StblTable","Base","properties","clone","constructor","_construct","WordArray","_Base","words","sigBytes","typedArray","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","typedArrayByteLength","_words","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","_get","nBytes","rcache","m_w","_m_w","_m_z","mask","random","_r","hexChars","bite","hexStr","hexStrLength","substr","Latin1","latin1Str","latin1StrLength","Utf8","utf8Str","unescape","BufferedBlockAlgorithm","_Base2","_minBufferSize","_nDataBytes","m_data","doFlush","processedWords","blockSize","dataWords","dataSigBytes","nBlocksReady","nWordsReady","nBytesReady","_doProcessBlock","Hasher","_BufferedBlockAlgorit","_super3","_doReset","messageUpdate","_append","_process","hash","_doFinalize","SubHasher","finalize","HMAC","_Base3","_super4","hasher","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","update","innerHash","hmac","Base64","_map","base64Chars","triplet","charAt","paddingChar","base64Str","base64StrLength","reverseMap","_reverseMap","paddingIndex","parseLoop","bits1","bitsCombined","T","sin","FF","GG","HH","II","MD5Algo","_Hasher","_hash","M","_M","offset_i","M_offset_i","H","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","H_i","_createHelper","_createHmacHelper","EvpKDFAlgo","keySize","iterations","password","salt","derivedKeyWords","block","derivedKey","Cipher","xformMode","_xformMode","dataUpdate","finalProcessedData","_ENC_XFORM_MODE","_DEC_XFORM_MODE","SubCipher","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","encrypt","decrypt","ciphertext","ivSize","BlockCipherMode","cipher","_cipher","_iv","Encryptor","Decryptor","xorBlock","_prevBlock","CBC","_BlockCipherMode","_CBC","_class","_super5","encryptBlock","_CBC2","_class2","_super6","thisBlock","decryptBlock","Pkcs7","blockSizeBytes","nPaddingBytes","paddingWord","paddingWords","padding","unpad","BlockCipher","_Cipher2","_super7","modeCreator","createEncryptor","createDecryptor","_mode","__creator","processBlock","finalProcessedBlocks","CipherParams","_super8","cipherParams","mixIn","formatter","OpenSSLFormatter","openSSLStr","ciphertextWords","_super9","_cfg","encryptor","cipherCfg","algorithm","_ciphertext","plaintext","_parse","OpenSSLKdf","execute","_salt","compute","_SerializableCipher","_super10","derivedParams","kdf","_SBOX","INV_SBOX","_SUB_MIX_0","_SUB_MIX_1","_SUB_MIX_2","_SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","xi","sx","x2","x4","x8","RCON","AESAlgo","_BlockCipher","_nRounds","_keyPriorReset","keyWords","ksRows","_keySchedule","keySchedule","ksRow","_invKeySchedule","invKeySchedule","invKsRow","_doCryptBlock","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","SBOX","nRounds","s0","s1","s2","s3","t1","t2","t3","CTR","_CTR","counter","_counter","keystream","MediaError","Cache","moovToSegments","segmentDurations","videoSegments","audioSegments","_videoTrack$mdia","_videoTrack$mdia$minf","_videoTrack$mdia$mdhd","getSegments","_audioTrack$mdia","_audioTrack$mdia$minf","_audioTrack$mdia$mdhd","segDuration","frame","gop","gopDuration","lastFrame","segments","segFrames","adjust","pushSegment","_segments","_segFrames","curTime","moovToMeta","videoCodec","audioCodec","audioChannelCount","audioSampleRate","videoTimescale","audioTimescale","defaultKID","_videoTrack$mdia2","_videoTrack$mdia2$min","_videoTrack$mdia2$min2","_videoTrack$mdia3","_videoTrack$mdia3$mdh","_audioTrack$mdia2","_audioTrack$mdia2$min","_audioTrack$mdia2$min2","_e1$esds","_audioTrack$mdia3","_audioTrack$mdia3$mdh","isNumber","MP4Loader","_loadData","_loadSegment2","_destroy","_reset","_preload","_loadNextSegment","_loadSegmentByTime","_loadMeta","_loadMetaProcess","_getOrLoadMeta","_changeUrl","moovEnd","segmentDuration","maxDownloadInfoSize","_transformError","segIndex","_currentSegmentIndex","_this$videoSegments","_this$audioSegments","_currentLoadingSegmentIndex","notCancelLoader","_args","isMetaLoaded","loadMeta","meta","_callee4","moovStart","OnProgressHandle","_context4","state","_moovStart","parsedMoov","loadData","loadMetaProcess","_x7","_x8","_x9","_x4","_x5","_x6","_callee5","responses","_context5","_x10","_x11","_x12","segmentIndex","_callee6","changeCurrent","_this$getSegmentByTim","_args6","_context6","getSegmentByTime","_loadSegment","loadSegmentByTime","_x13","_x14","_callee7","_args7","_context7","_x15","_callee9","_this$getSegmentByTim2","videos","audios","_context9","_callee8","_context8","_x17","_x16","_callee10","_args10","_context10","downloadInfo","_callee11","_context11","clear","_callee12","_context12","finish","_x18","_x19","_x20","_x21","_x22","_callee13","cacheKey","_context13","_getCacheKey","fromCache","_x23","_x24","_x25"],"mappings":"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"}
|