xgplayer-mp4-loader 3.0.9-alpha.2 → 3.0.9-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"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/expGolomb.js","../../xgplayer-transmuxer/src/codec/vvc.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 NETWORK_NOTFOUND: 'network_notfound',\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 WAITING_TIMEOUT_ERROR: 'WAITING_TIMEOUT_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.NETWORK_NOTFOUND]:2104,\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 WAITING_TIMEOUT_ERROR:9003\n }\n}\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 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 UPDATE_DURATION:'updateDuration'\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 const isReduceDuration = this.mediaSource && this.mediaSource.duration > duration\n if (this.mediaSource && this.mediaSource.duration > duration) {\n let bufferEnd = 0\n Object.keys(this._sourceBuffer).forEach(k => {\n try {\n bufferEnd = Math.max(this.bufferEnd(k) || 0, bufferEnd)\n } catch (error) {\n // ignore\n }\n })\n if (duration < bufferEnd) {\n // 设置值比bufferEnd值小,会导致异常\n return Promise.resolve()\n }\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 }, OP_NAME.UPDATE_DURATION, {isReduceDuration})\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) return Promise.resolve()\n\n if (typeof sb.changeType !== 'function') return Promise.reject()\n\n return this._enqueueOp(type, () => {\n sb.changeType(mimeType)\n sb.mimeType = mimeType\n this._onSBUpdateEnd(type)\n }, 'changeType', {mimeType})\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 || this.media.error) 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 || this.media.error) 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 || this.media.error) return\n const sb = this._sourceBuffer[k]\n this._logger.debug('MSE clearBuffer START', k, startTime, endTime)\n sb.remove(startTime, endTime)\n }, OP_NAME.REMOVE)\n })\n return p || Promise.resolve()\n }\n\n clearAllBuffer () {\n let p\n Object.keys(this._sourceBuffer).forEach(k => {\n p = this._enqueueOp(k, () => {\n if (!this.mediaSource || this.media.error) 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, allClear) {\n this._logger.debug('MSE clearOpQueue START')\n const queue = this._queue[type]\n if (allClear && queue) {\n this._queue[type] = []\n return\n }\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 || this.isEnded) {\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, context) {\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: () => {\n prom.resolve()}, promise: prom, opName, context})\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[0]\n if (!(op?.opName === OP_NAME.UPDATE_DURATION)) {\n queue.shift()\n }\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 options = { range, vid, index, contentLength, age, startTime, firstByteTime, endTime: Date.now(), priOptions }\n return { data, done, options, 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 VVCC: 'vvcC'\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","export default 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 bitsPos () {\n return this._bytesAvailable * 8 - this._bitsAvailable\n }\n\n bitsLeft () {\n return this._data.length * 8 - this.bitsPos()\n }\n\n byteAligned () {\n return this.bitsPos() === 0 || (this.bitsPos() % 8 === 0)\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","\n// import { avc } from 'xgplayer-helper-codec'\nimport ExpGolomb from './expGolomb'\n\n\n// bvc2结构体定义\n// aligned(8) class VvcDecoderConfigurationRecord {\n// unsigned int(8) configurationVersion = 1;\n// bit(5) reserved = '0'b;\n// unsigned int(2) lengthSizeMinusOne;\n// unsigned int(1) ptl_present_flag;\n// if (ptl_present_flag) {\n// unsigned int(2) chroma_format_idc;\n// unsigned int(3) bit_depth_minus8;\n// unsigned int(3) numTemporalLayers;\n// unsigned int(2) constantFrameRate;\n// bit(6) reserved = '0'b;\n// VvcPTLRecord(numTemporalLayers) track_ptl;\n// unsigned int(16) output_layer_set_idx;\n// unsigned_int(16) picture_width;\n// unsigned_int(16) picture_height;\n// unsigned int(16) avgFrameRate;\n// }\n// unsigned int(8) numOfArrays;\n// for (j=0; j < numOfArrays; j++) {\n// unsigned int(1) array_completeness;\n// bit(2) reserved = 0;\n// unsigned int(5) NAL_unit_type;\n// unsigned int(16) numNalus;\n// for (i=0; i< numNalus; i++) {\n// unsigned int(16) nalUnitLength;\n// bit(8*nalUnitLength) nalUnit;\n// }\n// }\n// }\n\n// aligned(8) class VvcPTLRecord(num_sublayers) {\n// bit(2) reserved = 0;\n// unsigned int(6) num_bytes_constraint_info;\n// unsigned int(7) general_profile_idc;\n// unsigned int(1) general_tier_flag;\n// unsigned int(8) general_level_idc;\n// unsigned int(1) ptl_frame_only_constraint_flag;\n// unsigned int(1) ptl_multilayer_enabled_flag;\n// unsigned int(8*num_bytes_constraint_info - 2) general_constraint_info;\n// for (i=num_sublayers - 2; i >= 0; i--)\n// unsigned int(1) ptl_sublayer_level_present_flag[i];\n// for (j=num_sublayers; j<=8 && num_sublayers > 1; j++)\n// bit(1) ptl_reserved_zero_bit = 0;\n// for (i=num_sublayers-2; i >= 0; i--)\n// if (ptl_sublayer_level_present[i])\n// unsigned int(8) sublayer_level_idc[i];\n// unsigned int(8) num_sub_profiles;\n// for (j=0; j < num_sub_profiles; j++)\n// unsigned int(32) general_sub_profile_idc[j];\n// }\n\n\nclass StreamReader {\n\n constructor (uint8Arr) {\n this._buffer = uint8Arr\n this._offset = 0\n this._heldBits = 0\n this._numHeldBits = 0\n }\n\n readUint8 () {\n return this._buffer[this._offset++]\n }\n\n readUint16 () {\n return (this._buffer[this._offset++] << 8) | this._buffer[this._offset++]\n }\n\n readUint32 () {\n return (this._buffer[this._offset++] << 24) |\n (this._buffer[this._offset++] << 16) |\n (this._buffer[this._offset++] << 8) |\n (this._buffer[this._offset++])\n }\n\n readUint8Array (len) {\n const ret = this._buffer.slice(this._offset, this._offset + len)\n this._offset += len\n return ret\n }\n\n streamRead1Bytes () {\n this._heldBits = this.readUint8()\n this._numHeldBits = 1 * 8\n }\n\n streamRead2Bytes () {\n this._heldBits = this.readUint16()\n this._numHeldBits = 2 * 8\n }\n\n extractBits (numBits) {\n const ret = (this._heldBits >> (this._numHeldBits - numBits)) & ((1 << numBits) - 1)\n this._numHeldBits -= numBits\n return ret\n }\n\n}\n\nexport class VVC {\n static parseVVCDecoderConfigurationRecord (data) {\n\n const reader = new StreamReader(data)\n const configurationVersion = reader.readUint8()\n // VvcDecoderConfigurationRecord\n reader.streamRead1Bytes()\n reader.extractBits(5)\n\n const lengthSizeMinusOne = reader.extractBits(2) + 1\n const ptlPresentFlag = reader.extractBits(1)\n\n let olsIdx\n let numSublayers\n let constantFrameRate\n let chromaFormatIdc\n let bitDepthLumaMinus8\n let ptlRecord = {}\n let maxPictrueWidth\n let maxPictureHeight\n let avgFrameRate\n\n\n if (ptlPresentFlag) {\n reader.streamRead2Bytes()\n\n chromaFormatIdc = reader.extractBits(2)\n bitDepthLumaMinus8 = reader.extractBits(3)\n numSublayers = reader.extractBits(3)\n constantFrameRate = reader.extractBits(2)\n reader.extractBits(6) // reserved\n\n ptlRecord = VVC.parseVVCPTLRecord(reader, numSublayers)\n olsIdx = reader.readUint16()\n maxPictrueWidth = reader.readUint16()\n maxPictureHeight = reader.readUint16()\n avgFrameRate = reader.readUint16()\n\n } // end if\n\n const VVC_NALU_OPI = 12\n const VVC_NALU_DEC_PARAM = 13\n\n // const naluArrays= []\n const numOfArrays = reader.readUint8()\n\n const vpsArr = []\n const spsArr = []\n const ppsArr = []\n let spsParsed = null\n\n for (let i = 0; i < numOfArrays; i++) {\n reader.streamRead1Bytes()\n reader.extractBits(1)\n\n reader.extractBits(2)\n const naluType = reader.extractBits(5)\n\n let numNalus = 1\n if (naluType !== VVC_NALU_DEC_PARAM && naluType !== VVC_NALU_OPI) {\n numNalus = reader.readUint16()\n }\n\n for (let j = 0; j < numNalus; j++) {\n const len = reader.readUint16()\n\n switch (naluType) {\n case 14:\n vpsArr.push(reader.readUint8Array(len))\n break\n case 15:\n const sps = reader.readUint8Array(len)\n if (!spsParsed) {\n spsParsed = VVC.parseSPS(VVC.removeEPB(sps))\n }\n spsArr.push(sps)\n break\n case 16:\n ppsArr.push(reader.readUint8Array(len))\n break\n default:\n }\n }\n }\n\n const ret = {\n data,\n configurationVersion,\n codec: 'bvc2.1.6.L93.B0',\n nalUnitSize: lengthSizeMinusOne,\n ptlPresentFlag,\n olsIdx,\n numSublayers,\n constantFrameRate,\n chromaFormatIdc,\n bitDepthLumaMinus8,\n ptlRecord,\n width:maxPictrueWidth,\n height:maxPictureHeight,\n sampleRate:avgFrameRate,\n numOfArrays,\n vps:vpsArr,\n sps:spsArr,\n pps:ppsArr,\n spsParsed\n }\n\n // console.log('parseVVCDecoderConfigurationRecord:', data)\n // console.log(ret)\n\n return ret\n }\n\n static parseVVCPTLRecord (reader, numSublayers) {\n reader.streamRead2Bytes()\n reader.extractBits(2)\n const numBytesConstraintInfo = reader.extractBits(6)\n const generalProfileIdc = reader.extractBits(7)\n const generalTierFlag = reader.extractBits(1)\n const generalLevelIdc = reader.readUint8()\n\n reader.streamRead1Bytes()\n const ptlFrameOnlyConstraintFlag = reader.extractBits(1)\n const ptlMultilayerEnabledFlag = reader.extractBits(1)\n const generalConstraintInfo = new Uint8Array(numBytesConstraintInfo)\n if (numBytesConstraintInfo) {\n for (let i = 0; i < numBytesConstraintInfo - 1; i++) {\n const cnstr1 = reader.extractBits(6)\n reader.streamRead1Bytes()\n const cnstr2 = reader.extractBits(2)\n generalConstraintInfo[i] = ((cnstr1 << 2) | cnstr2)\n }\n generalConstraintInfo[numBytesConstraintInfo - 1] = reader.extractBits(6)\n } else {\n reader.extractBits(6)\n }\n\n const subLayerLevelIdc = []\n if (numSublayers > 1) {\n reader.streamRead1Bytes()\n let ptlSublayerPresentMask = 0\n\n for (let j = numSublayers - 2; j >= 0; --j) {\n const val = reader.extractBits(1)\n ptlSublayerPresentMask |= val << j\n }\n\n for (let j = numSublayers; j <= 8 && numSublayers > 1; ++j) {\n reader.extractBits(1)\n }\n\n for (let j = numSublayers - 2; j >= 0; --j) {\n if (ptlSublayerPresentMask & (1 << j)) {\n subLayerLevelIdc[j] = reader.readUint8()\n }\n }\n }\n\n const ptlNumSubProfiles = reader.readUint8()\n const generalSubProfileIdc = []\n if (ptlNumSubProfiles) {\n for (let i = 0; i < ptlNumSubProfiles; i++) {\n generalSubProfileIdc.push(reader.readUint32())\n }\n }\n\n return {\n generalProfileIdc,\n generalTierFlag,\n generalLevelIdc,\n ptlFrameOnlyConstraintFlag,\n ptlMultilayerEnabledFlag,\n generalConstraintInfo,\n subLayerLevelIdc,\n generalSubProfileIdc,\n ptlNumSubProfiles,\n numBytesConstraintInfo\n }\n\n }\n\n static getAvccNals (buffer) {\n const nals = []\n while (buffer.position < buffer.length - 4) {\n const length = buffer.dataview.getInt32(buffer.dataview.position)\n if (buffer.length - buffer.position >= length) {\n const header = buffer.buffer.slice(buffer.position, buffer.position + 4)\n buffer.skip(4)\n const body = new Uint8Array(buffer.buffer.slice(buffer.position, buffer.position + length))\n buffer.skip(length)\n nals.push({header, body})\n continue\n }\n break\n }\n return nals\n }\n\n static analyseNal (unit) {\n const type = (unit.body[1] & 0xf8) >> 3\n unit.type = type\n switch (type) {\n case 23:\n case 24:\n // try {\n // unit.sei = SEIParser.parse(unit.body.slice(1))\n // } catch (e) {}\n break\n case 7:\n case 8:\n unit.key = true\n break\n case 14:\n unit.vps = true\n break\n case 15:\n unit.sps = true\n // todo: parse sps\n break\n case 16:\n unit.pps = true\n break\n case 17:\n unit.aps = true\n break\n default:\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 static parseVps () {\n\n }\n\n static parseSPS (sps) {\n // console.log(sps)\n const eg = new ExpGolomb(sps)\n\n eg.readUByte()\n eg.readUByte()\n\n eg.skipBits(4)\n\n const spsVideoParameterSetId = eg.readBits(4)\n const spsMaxSubLayerMinus1 = eg.readBits(3)\n const chromaFormatIdc = eg.readBits(2)\n let chromaFormat = 420\n if (chromaFormatIdc <= 3) chromaFormat = [0, 420, 422, 444][chromaFormatIdc]\n\n eg.readBits(2)\n eg.readBits(1)\n\n\n const ptlInfo = VVC._parseProfileTierLevel(eg, 1, spsMaxSubLayerMinus1)\n\n eg.readBits(1)\n if (eg.readBits(1)) {\n eg.readBits(1)\n }\n\n const width = eg.readUEG()\n const height = eg.readUEG()\n\n return {\n width,\n height,\n spsMaxSubLayerMinus1,\n spsVideoParameterSetId,\n chromaFormatIdc,\n chromaFormat,\n ptlInfo\n }\n }\n\n static _parseProfileTierLevel (eg, ptPresentFlag, spsMaxSubLayerMinus1) {\n const generalProfileIdc = eg.readBits(7)\n const generalTierFlag = eg.readBits(1)\n const generalLevelIdc = eg.readBits(8)\n const ptlFrameOnlyConstraintFlag = eg.readBits(1)\n const ptlMultilayerEnabledFlag = eg.readBits(1)\n let gciInfo\n if (ptPresentFlag) {\n gciInfo = VVC._parseGeneralConstraintsInfo(eg)\n }\n\n const loop = spsMaxSubLayerMinus1 - 1\n const ptlSublayerLevelPresentFlags = []\n const ptlSublayerLevelIdcs = []\n const ptlSubProfileIdcs = []\n\n for (let i = loop; i >= 0; --i) {\n ptlSublayerLevelPresentFlags[i] = eg.readBits(1)\n }\n\n while (!eg.byteAligned()) {\n eg.readBits(1)\n }\n\n for (let i = loop; i >= 0; --i) {\n if (ptlSublayerLevelPresentFlags[i]) {\n ptlSublayerLevelIdcs[i] = eg.readUByte()\n }\n }\n\n if (ptPresentFlag) {\n const ptlNumSubProfiles = eg.readUByte()\n for (let i = 0; i < ptlNumSubProfiles; i++) {\n ptlSubProfileIdcs[i] = eg.readBits(32)\n }\n }\n\n return {\n generalProfileIdc,\n generalTierFlag,\n generalLevelIdc,\n ptlFrameOnlyConstraintFlag,\n ptlMultilayerEnabledFlag,\n ptlSublayerLevelPresentFlags,\n ptlSublayerLevelIdcs,\n ptlSubProfileIdcs,\n gciInfo\n }\n\n }\n\n static _parseGeneralConstraintsInfo (eg) {\n const gciPresentFlag = eg.readBits(1)\n\n if (gciPresentFlag) {\n eg.skipBits(71)\n const gciNumReservedBits = eg.readBits(8)\n if (gciNumReservedBits) {\n eg.skipBits(gciNumReservedBits)\n }\n }\n\n const zeroBits = 8 - eg.bitsPos() % 8\n eg.skipBits(zeroBits)\n\n return{\n gciPresentFlag\n }\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, VVC } 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\n static bvc2 (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.vvcC = MP4Parser.bv2C(MP4Parser.findBox(bodyData, ['bv2C'], start)[0])\n ret.pasp = MP4Parser.pasp(MP4Parser.findBox(bodyData, ['pasp'], start)[0])\n })\n }\n\n static bv2C (box) {\n return parseBox(box, false, (ret, data, start) => {\n const record = VVC.parseVVCDecoderConfigurationRecord(data)\n for (const key in record) {\n if (Object.prototype.hasOwnProperty.call(record, key)) {\n ret[key] = record[key]\n }\n }\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 // 266\n case 'bvc2':\n return MP4Parser.bvc2(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 if (e1.vvcC) {\n v.codecType = VideoCodecType.VVCC\n v.codec = e1.vvcC.codec\n v.sps = e1.vvcC.sps\n v.pps = e1.vvcC.pps\n v.vps = e1.vvcC.vps\n v.vvcC = e1.vvcC.data\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 'bvc2',\n 'bv2C'\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.avc1hev1vvc1(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 avc1hev1vvc1 (track) {\n let config\n let typ\n if (track.codecType === VideoCodecType.HEVC) {\n config = MP4.hvcC(track)\n typ = MP4.types.hvc1\n } else if (track.codecType === VideoCodecType.VVCC){\n config = MP4.vvcC(track)\n typ = MP4.types.bvc2\n } else {\n config = MP4.avcC(track)\n typ = MP4.types.avc1\n }\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 (track.codecType === VideoCodecType.HEVC) {\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 vvcC (track) {\n const vvcC = track.vvcC\n return MP4.box(MP4.types.bv2C, new Uint8Array(vvcC))\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 || e1.vvcC)?.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, response) => {\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, null, response)\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'}, response)\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'},response)\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'},response)\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 }, null, response)\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","WAITING_TIMEOUT_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","logCacheLevel","logMaxSize","logSize","logTextArray","_createClass","_console","_len","args","Array","_key","logCache","disabled","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","opName","costtime","_opst","_logger","context","_startQueue","event","_config","assign","getDefaultConfig","bindMedia","openLog","enable","_enqueueBlockingOp2","_unbindMedia","_bindMedia","get","_this$mediaSource","mediaSource","readyState","_url","_this$mediaSource2","duration","_mseFullFlag","VIDEO","_this3","isReduceDuration","bufferEnd","keys","_sourceBuffer","forEach","k","Math","max","_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","t","x","_x$promise","_x$promise$resolve","endOfStream","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","allClear","_this$_queue$type","initOpque","isinit","reason","_this12","setLiveSeekableRange","exec","_this13","splice","then","_callee3","types","waiters","_this14","_context3","prom","all","updating","_x2","_x3","_x4","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","options","calculateSpeed","byteLen","millisec","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","_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","bitsPos","StreamReader","uint8Arr","_buffer","_offset","_heldBits","_numHeldBits","readUint8","readUint16","numBits","VVC","configurationVersion","streamRead1Bytes","extractBits","olsIdx","numSublayers","constantFrameRate","bitDepthLumaMinus8","maxPictrueWidth","maxPictureHeight","avgFrameRate","lengthSizeMinusOne","ptlPresentFlag","ptlRecord","streamRead2Bytes","parseVVCPTLRecord","numOfArrays","vpsArr","naluType","numNalus","readUint8Array","numBytesConstraintInfo","generalProfileIdc","generalTierFlag","generalLevelIdc","ptlFrameOnlyConstraintFlag","ptlMultilayerEnabledFlag","generalConstraintInfo","cnstr1","cnstr2","subLayerLevelIdc","ptlSublayerPresentMask","ptlNumSubProfiles","generalSubProfileIdc","readUint32","nals","dataview","getInt32","header","aps","spsVideoParameterSetId","spsMaxSubLayerMinus1","ptlInfo","_parseProfileTierLevel","ptPresentFlag","gciInfo","_parseGeneralConstraintsInfo","loop","ptlSublayerLevelPresentFlags","ptlSublayerLevelIdcs","ptlSubProfileIdcs","byteAligned","gciPresentFlag","gciNumReservedBits","zeroBits","HEVC","vpsParsed","nalUnitType","nalSize","parseVPS","vpsMaxSubLayersMinus1","numTemporalLayers","spsMaxSubLayersMinus1","temporalIdNested","separateColourPlaneFlag","confWinLeftOffset","confWinRightOffset","confWinTopOffset","confWinBottomOffset","conformanceWindowFlag","bitDepthChromaMinus8","subWidthC","subHeightC","maxSubLayersMinus1","generalProfileSpace","generalProfileCompatibilityFlags","generalConstraintIndicatorFlags","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","bodyStart","parseVisualSampleEntry","vvcC","bv2C","pasp","record","parseVVCDecoderConfigurationRecord","entryCount","avc1","hvc1","bvc2","mp4a","alaw","samplesize","esds","horizresolution","vertresolution","avcC","default_IsEncrypted","default_KID","frma","data_format","AVCProfileIndication","AVCLevelIndication","spsLength","ppsLength","tmp","generalProfileCompatibility","_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","avc1hev1vvc1","_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","_x10","_x5","_x6","_callee5","responses","_context5","_x11","_x12","_x13","segmentIndex","_callee6","changeCurrent","_this$getSegmentByTim","_args6","_context6","getSegmentByTime","_loadSegment","loadSegmentByTime","_x14","_x15","_callee7","_args7","_context7","_x16","_callee9","_this$getSegmentByTim2","videos","audios","_context9","_callee8","_context8","_x18","_x17","_callee10","_args10","_context10","downloadInfo","_callee11","_context11","clear","_callee12","_context12","finish","_x19","_x20","_x21","_x22","_x23","_callee13","cacheKey","_context13","_getCacheKey","fromCache","_x24","_x25","_x26"],"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/expGolomb.js","../../xgplayer-transmuxer/src/codec/vvc.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 NETWORK_NOTFOUND: 'network_notfound',\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 WAITING_TIMEOUT_ERROR: 'WAITING_TIMEOUT_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.NETWORK_NOTFOUND]:2104,\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 WAITING_TIMEOUT_ERROR:9003\n }\n}\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 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 UPDATE_DURATION:'updateDuration'\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 const isReduceDuration = this.mediaSource && this.mediaSource.duration > duration\n if (this.mediaSource && this.mediaSource.duration > duration) {\n let bufferEnd = 0\n Object.keys(this._sourceBuffer).forEach(k => {\n try {\n bufferEnd = Math.max(this.bufferEnd(k) || 0, bufferEnd)\n } catch (error) {\n // ignore\n }\n })\n if (duration < bufferEnd) {\n // 设置值比bufferEnd值小,会导致异常\n return Promise.resolve()\n }\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 }, OP_NAME.UPDATE_DURATION, {isReduceDuration})\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) return Promise.resolve()\n\n if (typeof sb.changeType !== 'function') return Promise.reject()\n\n return this._enqueueOp(type, () => {\n sb.changeType(mimeType)\n sb.mimeType = mimeType\n this._onSBUpdateEnd(type)\n }, 'changeType', {mimeType})\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 || this.media.error) 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 || this.media.error) 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.remove(k, startTime, endTime)\n })\n return p || Promise.resolve()\n }\n\n clearAllBuffer () {\n let p\n Object.keys(this._sourceBuffer).forEach(k => {\n const sb = this._sourceBuffer[k]\n p = this.remove(k, 0, Buffer.end(Buffer.get(sb)))\n })\n return p\n }\n\n clearOpQueues (type, allClear) {\n this._logger.debug('MSE clearOpQueue START')\n const queue = this._queue[type]\n if (allClear && queue) {\n this._queue[type] = []\n return\n }\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 || this.isEnded) {\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, context) {\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: () => {\n prom.resolve()}, promise: prom, opName, context})\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[0]\n if (!(op?.opName === OP_NAME.UPDATE_DURATION)) {\n queue.shift()\n }\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 options = { range, vid, index, contentLength, age, startTime, firstByteTime, endTime: Date.now(), priOptions }\n return { data, done, options, 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 _finnalUrl = ''\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\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 VVCC: 'vvcC'\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 readInt32 (data, i = 0) {\n const dv = new DataView(data.buffer, data.byteOffset, data.byteLength)\n return dv.getInt32(i)\n}\n\nexport function readBig64 (data, i = 0) {\n return readBig32(data, i) * MAX_SIZE + readBig32(data, i + 4)\n}\n\nexport function readInt64 (data, i = 0) {\n const dv = new DataView(data.buffer, data.byteOffset, data.byteLength)\n return (dv.getUint32(i) << 32) | dv.getUint32(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","export default 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 bitsPos () {\n return this._bytesAvailable * 8 - this._bitsAvailable\n }\n\n bitsLeft () {\n return this._data.length * 8 - this.bitsPos()\n }\n\n byteAligned () {\n return this.bitsPos() === 0 || (this.bitsPos() % 8 === 0)\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","\n// import { avc } from 'xgplayer-helper-codec'\nimport ExpGolomb from './expGolomb'\n\n\n// bvc2结构体定义\n// aligned(8) class VvcDecoderConfigurationRecord {\n// unsigned int(8) configurationVersion = 1;\n// bit(5) reserved = '0'b;\n// unsigned int(2) lengthSizeMinusOne;\n// unsigned int(1) ptl_present_flag;\n// if (ptl_present_flag) {\n// unsigned int(2) chroma_format_idc;\n// unsigned int(3) bit_depth_minus8;\n// unsigned int(3) numTemporalLayers;\n// unsigned int(2) constantFrameRate;\n// bit(6) reserved = '0'b;\n// VvcPTLRecord(numTemporalLayers) track_ptl;\n// unsigned int(16) output_layer_set_idx;\n// unsigned_int(16) picture_width;\n// unsigned_int(16) picture_height;\n// unsigned int(16) avgFrameRate;\n// }\n// unsigned int(8) numOfArrays;\n// for (j=0; j < numOfArrays; j++) {\n// unsigned int(1) array_completeness;\n// bit(2) reserved = 0;\n// unsigned int(5) NAL_unit_type;\n// unsigned int(16) numNalus;\n// for (i=0; i< numNalus; i++) {\n// unsigned int(16) nalUnitLength;\n// bit(8*nalUnitLength) nalUnit;\n// }\n// }\n// }\n\n// aligned(8) class VvcPTLRecord(num_sublayers) {\n// bit(2) reserved = 0;\n// unsigned int(6) num_bytes_constraint_info;\n// unsigned int(7) general_profile_idc;\n// unsigned int(1) general_tier_flag;\n// unsigned int(8) general_level_idc;\n// unsigned int(1) ptl_frame_only_constraint_flag;\n// unsigned int(1) ptl_multilayer_enabled_flag;\n// unsigned int(8*num_bytes_constraint_info - 2) general_constraint_info;\n// for (i=num_sublayers - 2; i >= 0; i--)\n// unsigned int(1) ptl_sublayer_level_present_flag[i];\n// for (j=num_sublayers; j<=8 && num_sublayers > 1; j++)\n// bit(1) ptl_reserved_zero_bit = 0;\n// for (i=num_sublayers-2; i >= 0; i--)\n// if (ptl_sublayer_level_present[i])\n// unsigned int(8) sublayer_level_idc[i];\n// unsigned int(8) num_sub_profiles;\n// for (j=0; j < num_sub_profiles; j++)\n// unsigned int(32) general_sub_profile_idc[j];\n// }\n\n\nclass StreamReader {\n\n constructor (uint8Arr) {\n this._buffer = uint8Arr\n this._offset = 0\n this._heldBits = 0\n this._numHeldBits = 0\n }\n\n readUint8 () {\n return this._buffer[this._offset++]\n }\n\n readUint16 () {\n return (this._buffer[this._offset++] << 8) | this._buffer[this._offset++]\n }\n\n readUint32 () {\n return (this._buffer[this._offset++] << 24) |\n (this._buffer[this._offset++] << 16) |\n (this._buffer[this._offset++] << 8) |\n (this._buffer[this._offset++])\n }\n\n readUint8Array (len) {\n const ret = this._buffer.slice(this._offset, this._offset + len)\n this._offset += len\n return ret\n }\n\n streamRead1Bytes () {\n this._heldBits = this.readUint8()\n this._numHeldBits = 1 * 8\n }\n\n streamRead2Bytes () {\n this._heldBits = this.readUint16()\n this._numHeldBits = 2 * 8\n }\n\n extractBits (numBits) {\n const ret = (this._heldBits >> (this._numHeldBits - numBits)) & ((1 << numBits) - 1)\n this._numHeldBits -= numBits\n return ret\n }\n\n}\n\nexport class VVC {\n static parseVVCDecoderConfigurationRecord (data) {\n\n const reader = new StreamReader(data)\n const configurationVersion = reader.readUint8()\n // VvcDecoderConfigurationRecord\n reader.streamRead1Bytes()\n reader.extractBits(5)\n\n const lengthSizeMinusOne = reader.extractBits(2) + 1\n const ptlPresentFlag = reader.extractBits(1)\n\n let olsIdx\n let numSublayers\n let constantFrameRate\n let chromaFormatIdc\n let bitDepthLumaMinus8\n let ptlRecord = {}\n let maxPictrueWidth\n let maxPictureHeight\n let avgFrameRate\n\n\n if (ptlPresentFlag) {\n reader.streamRead2Bytes()\n\n chromaFormatIdc = reader.extractBits(2)\n bitDepthLumaMinus8 = reader.extractBits(3)\n numSublayers = reader.extractBits(3)\n constantFrameRate = reader.extractBits(2)\n reader.extractBits(6) // reserved\n\n ptlRecord = VVC.parseVVCPTLRecord(reader, numSublayers)\n olsIdx = reader.readUint16()\n maxPictrueWidth = reader.readUint16()\n maxPictureHeight = reader.readUint16()\n avgFrameRate = reader.readUint16()\n\n } // end if\n\n const VVC_NALU_OPI = 12\n const VVC_NALU_DEC_PARAM = 13\n\n // const naluArrays= []\n const numOfArrays = reader.readUint8()\n\n const vpsArr = []\n const spsArr = []\n const ppsArr = []\n let spsParsed = null\n\n for (let i = 0; i < numOfArrays; i++) {\n reader.streamRead1Bytes()\n reader.extractBits(1)\n\n reader.extractBits(2)\n const naluType = reader.extractBits(5)\n\n let numNalus = 1\n if (naluType !== VVC_NALU_DEC_PARAM && naluType !== VVC_NALU_OPI) {\n numNalus = reader.readUint16()\n }\n\n for (let j = 0; j < numNalus; j++) {\n const len = reader.readUint16()\n\n switch (naluType) {\n case 14: {\n vpsArr.push(reader.readUint8Array(len))\n break\n }\n case 15: {\n const sps = reader.readUint8Array(len)\n if (!spsParsed) {\n spsParsed = VVC.parseSPS(VVC.removeEPB(sps))\n }\n spsArr.push(sps)\n break\n }\n case 16: {\n ppsArr.push(reader.readUint8Array(len))\n break\n }\n default:\n }\n }\n }\n\n const ret = {\n data,\n configurationVersion,\n codec: 'bvc2.1.6.L93.B0',\n nalUnitSize: lengthSizeMinusOne,\n ptlPresentFlag,\n olsIdx,\n numSublayers,\n constantFrameRate,\n chromaFormatIdc,\n bitDepthLumaMinus8,\n ptlRecord,\n width:maxPictrueWidth,\n height:maxPictureHeight,\n sampleRate:avgFrameRate,\n numOfArrays,\n vps:vpsArr,\n sps:spsArr,\n pps:ppsArr,\n spsParsed\n }\n\n // console.log('parseVVCDecoderConfigurationRecord:', data)\n // console.log(ret)\n\n return ret\n }\n\n static parseVVCPTLRecord (reader, numSublayers) {\n reader.streamRead2Bytes()\n reader.extractBits(2)\n const numBytesConstraintInfo = reader.extractBits(6)\n const generalProfileIdc = reader.extractBits(7)\n const generalTierFlag = reader.extractBits(1)\n const generalLevelIdc = reader.readUint8()\n\n reader.streamRead1Bytes()\n const ptlFrameOnlyConstraintFlag = reader.extractBits(1)\n const ptlMultilayerEnabledFlag = reader.extractBits(1)\n const generalConstraintInfo = new Uint8Array(numBytesConstraintInfo)\n if (numBytesConstraintInfo) {\n for (let i = 0; i < numBytesConstraintInfo - 1; i++) {\n const cnstr1 = reader.extractBits(6)\n reader.streamRead1Bytes()\n const cnstr2 = reader.extractBits(2)\n generalConstraintInfo[i] = ((cnstr1 << 2) | cnstr2)\n }\n generalConstraintInfo[numBytesConstraintInfo - 1] = reader.extractBits(6)\n } else {\n reader.extractBits(6)\n }\n\n const subLayerLevelIdc = []\n if (numSublayers > 1) {\n reader.streamRead1Bytes()\n let ptlSublayerPresentMask = 0\n\n for (let j = numSublayers - 2; j >= 0; --j) {\n const val = reader.extractBits(1)\n ptlSublayerPresentMask |= val << j\n }\n\n for (let j = numSublayers; j <= 8 && numSublayers > 1; ++j) {\n reader.extractBits(1)\n }\n\n for (let j = numSublayers - 2; j >= 0; --j) {\n if (ptlSublayerPresentMask & (1 << j)) {\n subLayerLevelIdc[j] = reader.readUint8()\n }\n }\n }\n\n const ptlNumSubProfiles = reader.readUint8()\n const generalSubProfileIdc = []\n if (ptlNumSubProfiles) {\n for (let i = 0; i < ptlNumSubProfiles; i++) {\n generalSubProfileIdc.push(reader.readUint32())\n }\n }\n\n return {\n generalProfileIdc,\n generalTierFlag,\n generalLevelIdc,\n ptlFrameOnlyConstraintFlag,\n ptlMultilayerEnabledFlag,\n generalConstraintInfo,\n subLayerLevelIdc,\n generalSubProfileIdc,\n ptlNumSubProfiles,\n numBytesConstraintInfo\n }\n\n }\n\n static getAvccNals (buffer) {\n const nals = []\n while (buffer.position < buffer.length - 4) {\n const length = buffer.dataview.getInt32(buffer.dataview.position)\n if (buffer.length - buffer.position >= length) {\n const header = buffer.buffer.slice(buffer.position, buffer.position + 4)\n buffer.skip(4)\n const body = new Uint8Array(buffer.buffer.slice(buffer.position, buffer.position + length))\n buffer.skip(length)\n nals.push({header, body})\n continue\n }\n break\n }\n return nals\n }\n\n static analyseNal (unit) {\n const type = (unit.body[1] & 0xf8) >> 3\n unit.type = type\n switch (type) {\n case 23:\n case 24:\n // try {\n // unit.sei = SEIParser.parse(unit.body.slice(1))\n // } catch (e) {}\n break\n case 7:\n case 8:\n unit.key = true\n break\n case 14:\n unit.vps = true\n break\n case 15:\n unit.sps = true\n // todo: parse sps\n break\n case 16:\n unit.pps = true\n break\n case 17:\n unit.aps = true\n break\n default:\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 static parseVps () {\n\n }\n\n static parseSPS (sps) {\n // console.log(sps)\n const eg = new ExpGolomb(sps)\n\n eg.readUByte()\n eg.readUByte()\n\n eg.skipBits(4)\n\n const spsVideoParameterSetId = eg.readBits(4)\n const spsMaxSubLayerMinus1 = eg.readBits(3)\n const chromaFormatIdc = eg.readBits(2)\n let chromaFormat = 420\n if (chromaFormatIdc <= 3) chromaFormat = [0, 420, 422, 444][chromaFormatIdc]\n\n eg.readBits(2)\n eg.readBits(1)\n\n\n const ptlInfo = VVC._parseProfileTierLevel(eg, 1, spsMaxSubLayerMinus1)\n\n eg.readBits(1)\n if (eg.readBits(1)) {\n eg.readBits(1)\n }\n\n const width = eg.readUEG()\n const height = eg.readUEG()\n\n return {\n width,\n height,\n spsMaxSubLayerMinus1,\n spsVideoParameterSetId,\n chromaFormatIdc,\n chromaFormat,\n ptlInfo\n }\n }\n\n static _parseProfileTierLevel (eg, ptPresentFlag, spsMaxSubLayerMinus1) {\n const generalProfileIdc = eg.readBits(7)\n const generalTierFlag = eg.readBits(1)\n const generalLevelIdc = eg.readBits(8)\n const ptlFrameOnlyConstraintFlag = eg.readBits(1)\n const ptlMultilayerEnabledFlag = eg.readBits(1)\n let gciInfo\n if (ptPresentFlag) {\n gciInfo = VVC._parseGeneralConstraintsInfo(eg)\n }\n\n const loop = spsMaxSubLayerMinus1 - 1\n const ptlSublayerLevelPresentFlags = []\n const ptlSublayerLevelIdcs = []\n const ptlSubProfileIdcs = []\n\n for (let i = loop; i >= 0; --i) {\n ptlSublayerLevelPresentFlags[i] = eg.readBits(1)\n }\n\n while (!eg.byteAligned()) {\n eg.readBits(1)\n }\n\n for (let i = loop; i >= 0; --i) {\n if (ptlSublayerLevelPresentFlags[i]) {\n ptlSublayerLevelIdcs[i] = eg.readUByte()\n }\n }\n\n if (ptPresentFlag) {\n const ptlNumSubProfiles = eg.readUByte()\n for (let i = 0; i < ptlNumSubProfiles; i++) {\n ptlSubProfileIdcs[i] = eg.readBits(32)\n }\n }\n\n return {\n generalProfileIdc,\n generalTierFlag,\n generalLevelIdc,\n ptlFrameOnlyConstraintFlag,\n ptlMultilayerEnabledFlag,\n ptlSublayerLevelPresentFlags,\n ptlSublayerLevelIdcs,\n ptlSubProfileIdcs,\n gciInfo\n }\n\n }\n\n static _parseGeneralConstraintsInfo (eg) {\n const gciPresentFlag = eg.readBits(1)\n\n if (gciPresentFlag) {\n eg.skipBits(71)\n const gciNumReservedBits = eg.readBits(8)\n if (gciNumReservedBits) {\n eg.skipBits(gciNumReservedBits)\n }\n }\n\n const zeroBits = 8 - eg.bitsPos() % 8\n eg.skipBits(zeroBits)\n\n return {\n gciPresentFlag\n }\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 }\n\n if (discontinuity) {\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 { AAC, VVC } from '../codec'\nimport { AudioCodecType, VideoCodecType } from '../model'\nimport { getAvcCodec, readBig16, readBig24, readBig32, readBig64, readInt32, readInt64 } from '../utils'\n\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 ret.edts = MP4Parser.edts(MP4Parser.findBox(data, ['edts'], 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 edts (box) {\n return parseBox(box, false, (ret, data, start) => {\n ret.elst = MP4Parser.elst(MP4Parser.findBox(data, ['elst'], start)[0])\n })\n }\n\n static elst (box) {\n return parseBox(box, true, (ret, data, start) => {\n ret.entries = []\n ret.entriesData = data\n let offset = 0\n const entry_count = readBig32(data, offset)\n offset += 4\n for (let i = 0; i < entry_count; i++) {\n const entry = {}\n ret.entries.push(entry)\n if (ret.version === 1) {\n entry.segment_duration = readBig64(data, offset)\n offset += 8\n entry.media_time = readInt64(data, offset)\n offset += 8\n } else {\n entry.segment_duration = readBig32(data, offset)\n offset += 4\n entry.media_time = readInt32(data, offset)\n offset += 4\n }\n entry.media_rate_integer = readBig16(data, offset)\n offset += 2\n entry.media_rate_fraction = readBig16(data, start)\n offset += 2\n }\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\n static bvc2 (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.vvcC = MP4Parser.bv2C(MP4Parser.findBox(bodyData, ['bv2C'], start)[0])\n ret.pasp = MP4Parser.pasp(MP4Parser.findBox(bodyData, ['pasp'], start)[0])\n })\n }\n\n static bv2C (box) {\n return parseBox(box, false, (ret, data, start) => {\n const record = VVC.parseVVCDecoderConfigurationRecord(data)\n for (const key in record) {\n if (Object.prototype.hasOwnProperty.call(record, key)) {\n ret[key] = record[key]\n }\n }\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 // 266\n case 'bvc2':\n return MP4Parser.bvc2(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 = new Array(entryCount)\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries[i] = {\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 = new Array(sampleCount)\n if (!sampleSize) {\n let start = 8\n for (let i = 0; i < sampleCount; i++) {\n entrySizes[i] = (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 = new Array(entryCount)\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries[i] = (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 = new Array(entryCount)\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n // entries.push(readBig64(data, start))\n entries[i] = 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 = new Array(entryCount)\n let start = 4\n for (let i = 0; i < entryCount; i++) {\n entries[i] = 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 = new Array(sampleCount)\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[i] = 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 if (vTrack.edts?.elst) {\n v.editList = vTrack.edts.elst\n v.editListApplied = vTrack.editListApplied\n }\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 if (e1.vvcC) {\n v.codecType = VideoCodecType.VVCC\n v.codec = e1.vvcC.codec\n v.sps = e1.vvcC.sps\n v.pps = e1.vvcC.pps\n v.vps = e1.vvcC.vps\n v.vvcC = e1.vvcC.data\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 if (aTrack.edts?.elst) {\n a.editList = aTrack.edts.elst\n a.editListApplied = aTrack.editListApplied\n }\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] = new Array(trun.sampleCount)\n for (let i = 0; i < trun.sampleCount; i++) {\n ret[tfhd.trackId][i] = ({\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 'edts',\n 'elst',\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 'bvc2',\n 'bv2C'\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 FullBox (type, version, flags, ...payload) {\n return MP4.box(type, new Uint8Array([\n version,\n (flags >> 16) & 0xff,\n (flags >> 8) & 0xff,\n flags & 0xff\n ]), ...payload)\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 // track.editList ? MP4.edts(track.editList) : undefined,\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 edts (elstData) {\n return MP4.box(MP4.types.edts, MP4.elst(elstData))\n }\n\n static elst ({entries, entriesData, version}) {\n return MP4.FullBox(MP4.types.elst, version, 0, entriesData)\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.avc1hev1vvc1(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 avc1hev1vvc1 (track) {\n let config\n let typ\n if (track.codecType === VideoCodecType.HEVC) {\n config = MP4.hvcC(track)\n typ = MP4.types.hvc1\n } else if (track.codecType === VideoCodecType.VVCC){\n config = MP4.vvcC(track)\n typ = MP4.types.bvc2\n } else {\n config = MP4.avcC(track)\n typ = MP4.types.avc1\n }\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 (track.codecType === VideoCodecType.HEVC) {\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 vvcC (track) {\n const vvcC = track.vvcC\n return MP4.box(MP4.types.bv2C, new Uint8Array(vvcC))\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","function isEdtsApplicable () {\n let flag = true\n const userAgent = navigator.userAgent || ''\n const isChrome = /Chrome/gi.test(userAgent) && !/Edge\\//gi.test(userAgent)\n\n // M75+ 开始支持负的 dts\n // https://bugs.chromium.org/p/chromium/issues/detail?id=398141\n if (isChrome) {\n const result = userAgent.match(/Chrome\\/(\\d+)/i)\n const chromeVersion = result ? parseInt(result[1], 10) : 0\n flag = !!chromeVersion && chromeVersion >= 75\n }\n return flag\n}\n\nexport function moovToSegments (moov, config) {\n const { segmentDuration } = config\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 videoSegments = getSegments('video', videoTrack, segmentDuration, config)\n segmentDurations = videoSegments.map(x => x.duration)\n }\n if (audioTrack) {\n audioSegments = getSegments(\n 'audio',\n audioTrack,\n segmentDuration,\n config,\n segmentDurations,\n videoSegments\n )\n }\n return {\n videoSegments,\n audioSegments\n }\n}\n\nfunction getSegments (\n type,\n track,\n segDuration,\n config,\n segmentDurations = [],\n videoSegments\n) {\n const { fixEditListOffset, fixEditListOffsetThreshold, audioGroupingStrategy } = config\n const stbl = track.mdia?.minf?.stbl\n if (!stbl) {\n return []\n }\n\n const timescale = track.mdia.mdhd?.timescale\n const { stts, stsc, stsz, stco, stss, ctts } = stbl\n if (!timescale || !stts || !stsc || !stsz || !stco || (type === 'video' && !stss)) {\n return []\n }\n\n // chrome等浏览器内核为了修复B帧引入的CTS偏移时间,对于edts->elst box中的media_time进行了参考\n // 目前chrome仅读取media_time,不支持编辑列表的其他用途,因为它们不常见并且由更高级的协议提供更好的服务。\n // 如果不参考editList信息,一些视频会有音画不同步问题\n let editListOffset = 0\n const editList = track.edts?.elst?.entries\n if (\n fixEditListOffset &&\n isEdtsApplicable() &&\n Array.isArray(editList) &&\n editList.length > 0\n ) {\n const media_time = editList[0].media_time\n const maxAllowedTime = fixEditListOffsetThreshold\n ? fixEditListOffsetThreshold * timescale\n : 5 * timescale\n if (media_time > 0 && media_time < maxAllowedTime) {\n editListOffset = media_time\n }\n }\n\n const frames = []\n const gop = []\n const gopDuration = []\n let gopMinPtsArr = [] // 记录每个gop中最小的pts,用于计算每个gop的startTime\n let gopMaxPtsFrameIdxArr = [] // 记录每个gop中最大的pts,用于计算每个gop的endTime\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 => {\n keyframeMap[x - 1] = true\n })\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.length > 0 ? stscEntries[0].samplesPerChunk : 0\n let lastChunkInRun = stscEntries.length > 1 && stscEntries[1] ? stscEntries[1].firstChunk - 1 : Infinity\n let dts = 0\n let gopId = -1\n let editListApplied = false\n let beforeCttsInfo = null\n\n if (cttsEntries?.length > 0 && editListOffset > 0) {\n // 参考chromium原生播放时,ffmpeg_demuxer处理edts后的逻辑:\n // FFmpeg将所有AVPacket dts值根据editListOffset进行偏移,以确保解码器有足够的解码时间(即保持cts不变,dts从负值开始)\n // FFmpeg对于音频的AVPacket dts/pts虽然也进行了偏移,但在chromium中最后给到decoder时又将其偏移修正回0\n // 因此,这里的逻辑是为了触发baseMediaDecodeTime变化,并且只修正视频,不处理音频\n dts -= editListOffset\n editListApplied = true\n }\n\n track.editListApplied = editListApplied\n\n stts.entries.forEach(({ count, delta }) => {\n duration = delta // in timescale\n for (let i = 0; i < count; i++) {\n frame = {\n dts,\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 (cttsEntries) {\n beforeCttsInfo = getCTTSOffset(cttsEntries, pos, beforeCttsInfo)\n frame.pts = dts + beforeCttsInfo.offset\n }\n if (editListOffset === 0 && pos === 0) {\n frame.pts = 0\n }\n // 补足音频的pts\n if (frame.pts === undefined) {\n frame.pts = frame.dts\n }\n // 更新当前gop中最小的pts\n if (frame.keyframe) {\n gopMinPtsArr[gopMinPtsArr.length] = frame.pts\n // gopMinPtsArr.push(frame.pts)\n } else {\n if (frame.pts < gopMinPtsArr[gop.length - 1]) {\n gopMinPtsArr[gop.length - 1] = frame.pts\n }\n }\n // 更新当前gop中最大的pts\n if (frame.keyframe) {\n gopMaxPtsFrameIdxArr[gopMaxPtsFrameIdxArr.length] = frame.index\n // gopMaxPtsFrameIdxArr.push(frame.index)\n } else if (gop.length > 0 && gopMaxPtsFrameIdxArr[gop.length - 1] !== undefined) {\n const curMaxPts = frames[gopMaxPtsFrameIdxArr[gop.length - 1]]?.pts\n if (curMaxPts !== undefined && frame.pts > curMaxPts) {\n gopMaxPtsFrameIdxArr[gop.length - 1] = frame.index\n }\n }\n frames[frames.length] = frame\n // frames.push(frame)\n\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]\n ? stscEntries[chunkRunIndex + 1].firstChunk - 1\n : Infinity\n }\n lastSampleInChunk += stscEntries[chunkRunIndex].samplesPerChunk\n }\n }\n })\n\n const l = frames.length\n if (!l || (stss && !frames[0].keyframe)) {\n return []\n }\n\n const segments = []\n let segFrames = []\n let time = 0\n let lastFrame\n let adjust = 0\n let segMinPts = 0\n let segMaxPtsFrame = 0\n const pushSegment = (duration, startGopIdx, endGopIdx) => {\n lastFrame = segFrames[segFrames.length - 1]\n segMinPts = gopMinPtsArr[startGopIdx]\n segMaxPtsFrame = frames[gopMaxPtsFrameIdxArr[endGopIdx]]\n // 因为强制把视频第一帧的pts改为0 ,所以第一个gop的时长可能和endTime - startTime对应不上\n // 需要修正下,不然音频根据视频gop时长截取的第一个关键帧起始的误差较大\n if (segments.length === 0) {\n const diff = segMaxPtsFrame.pts + segMaxPtsFrame.duration - segMinPts\n duration = diff / timescale\n }\n segments.push({\n index: segments.length,\n startTime: segMinPts / timescale, // (segments[segments.length - 1]?.endTime || segFrames[0].startTime / timescale),\n endTime: (segMaxPtsFrame.pts + segMaxPtsFrame.duration) / timescale,\n duration: duration,\n range: [segFrames[0].offset, lastFrame.offset + lastFrame.size - 1],\n frames: segFrames\n })\n\n if (audioGroupingStrategy !== 1) {\n time = 0\n }\n\n segFrames = []\n }\n\n let segGopStartIdx = 0\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, segGopStartIdx, i)\n segGopStartIdx = i + 1\n }\n } else {\n pushSegment(time / timescale, segGopStartIdx, i)\n segGopStartIdx = i + 1\n }\n }\n } else {\n gopMinPtsArr = []\n gopMaxPtsFrameIdxArr = []\n let duration = segmentDurations[0] || segDuration\n\n if (audioGroupingStrategy === 1) {\n for (let i = 0, nextEndTime; i < l; i++) {\n const curFrame = frames[i]\n const nextFrame = frames[i + 1]\n const isFinalFrame = i === l - 1\n segFrames.push(curFrame)\n time += curFrame.duration\n const curEndTime = nextEndTime || time / timescale\n // 这里使用下一帧的目的是将每个分组的起始音频帧应该覆盖或包含GOP的开始时间,\n // MSE在remove buffer时会将gop结束时间点的那个音频帧删掉,这个策略就是为了\n // 防止之后再添加新的Coded Frame Group时由于缺少了一帧音频容易产生Buffer gap\n nextEndTime = (nextFrame ? time + nextFrame.duration : 0) / timescale\n if (\n isFinalFrame ||\n (\n videoSegments[segments.length]\n ? nextEndTime > videoSegments[segments.length].endTime /* 有视频帧,使用GOP时间戳进行分割 */\n : nextEndTime - segFrames[0].pts / timescale >= duration /* 无视频帧(包含音频帧大于视频时长的剩余音频帧分组的场景),使用配置的切片时间或最后一个GOP时长进行分割 */\n )\n ) {\n gopMinPtsArr.push(segFrames[0].pts)\n gopMaxPtsFrameIdxArr.push(segFrames[segFrames.length - 1].index)\n pushSegment(curEndTime, segments.length, segments.length)\n duration = segmentDurations[segments.length] || segDuration\n }\n }\n } else {\n for (let i = 0, nextEndTime; i < l; i++) {\n const curFrame = frames[i]\n const nextFrame = frames[i + 1]\n const isFinalFrame = i === l - 1\n segFrames.push(curFrame)\n time += curFrame.duration\n const curEndTime = nextEndTime || time / timescale\n nextEndTime = (nextFrame ? time + nextFrame.duration : 0) / timescale\n if (\n isFinalFrame ||\n // 这里使用下一帧的目的是将每个分组的起始音频帧应该覆盖或包含GOP的开始时间,\n // MSE在remove buffer时会将gop结束时间点的那个音频帧删掉,这个策略就是为了\n // 防止之后再添加新的Coded Frame Group时由于缺少了一帧音频容易产生Buffer gap\n nextEndTime + adjust >= duration\n ) {\n if (audioGroupingStrategy === 2) {\n adjust += time / timescale - duration\n } else {\n adjust += nextEndTime - duration\n }\n gopMinPtsArr.push(segFrames[0].pts)\n gopMaxPtsFrameIdxArr.push(segFrames[segFrames.length - 1].index)\n pushSegment(curEndTime, segments.length, segments.length)\n duration = segmentDurations[segments.length] || segDuration\n }\n }\n }\n }\n\n return segments\n}\n\nfunction getCTTSOffset (cttsEntries, frameIndex, beforeCttsInfo) {\n const ret = {}\n if (!cttsEntries || cttsEntries?.length <= 0 || beforeCttsInfo?.usedCttsIdx >= cttsEntries.length) {\n ret.offset = 0\n ret.usedCttsIdx = beforeCttsInfo?.usedCttsIdx || 0\n // curUsedCttsIdx前的count的累计值\n ret.beforeFrameNum = beforeCttsInfo?.beforeFrameNum || 0\n }\n const curerentCTTS = cttsEntries[beforeCttsInfo?.usedCttsIdx || 0]\n const count = curerentCTTS?.count || 1\n if (frameIndex < (beforeCttsInfo?.beforeFrameNum || 0) + count) {\n ret.offset = curerentCTTS?.offset || 0\n ret.usedCttsIdx = beforeCttsInfo?.usedCttsIdx || 0\n ret.beforeFrameNum = beforeCttsInfo?.beforeFrameNum || 0\n } else {\n const newCTTS = cttsEntries[beforeCttsInfo.usedCttsIdx + 1]\n if (!newCTTS) {\n ret.offset = 0\n } else {\n ret.offset = newCTTS?.offset || 0\n }\n ret.usedCttsIdx = beforeCttsInfo.usedCttsIdx + 1\n ret.beforeFrameNum = (beforeCttsInfo?.beforeFrameNum || 0) + (curerentCTTS?.count || 1)\n }\n return ret\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 || e1.vvcC)?.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\n\nexport function isSegmentsOk (segments) {\n if (!segments) {\n return false\n }\n const {audioSegments , videoSegments} = segments\n const v = !videoSegments || videoSegments.length === 0\n const a = !audioSegments || audioSegments.length === 0\n if (v && a) {\n return false\n }\n return true\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, isSegmentsOk } 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, response) => {\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, null, response)\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, new MediaError('cannot find moov or mdat box'), response)\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, new MediaError('cannot parse moov box'), response)\n return\n // throw new MediaError('cannot parse moov box', moov.data)\n }\n\n const segments = moovToSegments(parsedMoov, this._config)\n if (!isSegmentsOk(segments)) {\n this._error = true\n onProgress(null, state, options, new MediaError('cannot parse segments'), response)\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 }, null, response)\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 const segments = moovToSegments(parsedMoov, this._config)\n if (!isSegmentsOk(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)\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?.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 if (typeof cfg.fixEditListOffset !== 'boolean') {\n delete cfg.fixEditListOffset\n }\n return {\n vid: '',\n moovEnd: 80000,\n segmentDuration: 2,\n maxDownloadInfoSize: 30,\n responseType: 'arraybuffer',\n fixEditListOffset: true,\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","WAITING_TIMEOUT_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","logCacheLevel","logMaxSize","logSize","logTextArray","_createClass","_console","_len","args","Array","_key","logCache","disabled","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","opName","costtime","_opst","_logger","context","_startQueue","event","_config","assign","getDefaultConfig","bindMedia","openLog","enable","_enqueueBlockingOp2","_unbindMedia","_bindMedia","get","_this$mediaSource","mediaSource","readyState","_url","_this$mediaSource2","duration","_mseFullFlag","VIDEO","_this3","isReduceDuration","bufferEnd","keys","_sourceBuffer","forEach","k","Math","max","_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","t","x","_x$promise","_x$promise$resolve","endOfStream","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","allClear","_this$_queue$type","initOpque","isinit","reason","_this12","setLiveSeekableRange","exec","_this13","splice","then","_callee3","types","waiters","_this14","_context3","prom","all","updating","_x2","_x3","_x4","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","options","calculateSpeed","byteLen","millisec","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","_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","readInt32","dv","byteOffset","getInt32","readBig64","readInt64","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","bitsPos","StreamReader","uint8Arr","_buffer","_offset","_heldBits","_numHeldBits","readUint8","readUint16","numBits","VVC","configurationVersion","streamRead1Bytes","extractBits","olsIdx","numSublayers","constantFrameRate","bitDepthLumaMinus8","maxPictrueWidth","maxPictureHeight","avgFrameRate","lengthSizeMinusOne","ptlPresentFlag","ptlRecord","streamRead2Bytes","parseVVCPTLRecord","numOfArrays","vpsArr","naluType","numNalus","readUint8Array","numBytesConstraintInfo","generalProfileIdc","generalTierFlag","generalLevelIdc","ptlFrameOnlyConstraintFlag","ptlMultilayerEnabledFlag","generalConstraintInfo","cnstr1","cnstr2","subLayerLevelIdc","ptlSublayerPresentMask","ptlNumSubProfiles","generalSubProfileIdc","readUint32","nals","dataview","header","aps","spsVideoParameterSetId","spsMaxSubLayerMinus1","ptlInfo","_parseProfileTierLevel","ptPresentFlag","gciInfo","_parseGeneralConstraintsInfo","loop","ptlSublayerLevelPresentFlags","ptlSublayerLevelIdcs","ptlSubProfileIdcs","byteAligned","gciPresentFlag","gciNumReservedBits","zeroBits","HEVC","vpsParsed","nalUnitType","nalSize","parseVPS","vpsMaxSubLayersMinus1","numTemporalLayers","spsMaxSubLayersMinus1","temporalIdNested","separateColourPlaneFlag","confWinLeftOffset","confWinRightOffset","confWinTopOffset","confWinBottomOffset","conformanceWindowFlag","bitDepthChromaMinus8","subWidthC","subHeightC","maxSubLayersMinus1","generalProfileSpace","generalProfileCompatibilityFlags","generalConstraintIndicatorFlags","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","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","edts","mdhd","hdlr","minf","elst","entries","entriesData","entry_count","entry","segment_duration","media_time","media_rate_integer","media_rate_fraction","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","sinf","schi","tenc","stss","senc","iv","sampleCount","InitializationVector","subsamples","subsampleCount","subsample","BytesOfClearData","BytesOfProtectedData","keyIds","systemId","toHex","numKeyIds","keyId","data_size","kid","system_id","bodyStart","parseVisualSampleEntry","vvcC","bv2C","pasp","record","parseVVCDecoderConfigurationRecord","entryCount","avc1","hvc1","bvc2","mp4a","alaw","samplesize","esds","horizresolution","vertresolution","avcC","default_IsEncrypted","default_KID","frma","data_format","AVCProfileIndication","AVCLevelIndication","spsLength","ppsLength","tmp","generalProfileCompatibility","_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$edts","_vTrack$mdia","_vTrack$mdia$minf","_vTrack$mdia$minf$stb","_vTrack$mdia2","_vTrack$mdia2$minf","_vTrack$mdia2$minf$st","_vTrackId","id","tkhdDuration","mvhdDurtion","mvhdTimecale","editList","editListApplied","_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","_aTrack$edts","_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","elstData","FullBox","HDLR_TYPES","VMHD","SMHD","DINF","extBox","STTS","STSC","STSZ","STCO","avc1hev1vvc1","_concat$concat","avcc","btrt","charCodeAt","schm","typ","boxes","fiel","_concat$concat2","ArrayBuffer","pcf","cif","write","_ref4","_ref5","_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","_ref6","_ref7","sampleDescIndex","samplesSizes","offsets","keyframeIndexes","_ref8","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","isEdtsApplicable","match","chromeVersion","moovToSegments","segmentDuration","segmentDurations","videoSegments","audioSegments","getSegments","segDuration","_track$mdia","_track$mdia$minf","_track$mdia$mdhd","_track$edts","_track$edts$elst","fixEditListOffset","fixEditListOffsetThreshold","audioGroupingStrategy","editListOffset","maxAllowedTime","frame","gop","gopDuration","gopMinPtsArr","gopMaxPtsFrameIdxArr","beforeCttsInfo","getCTTSOffset","_frames$gopMaxPtsFram","curMaxPts","lastFrame","segments","segFrames","adjust","segMinPts","segMaxPtsFrame","pushSegment","startGopIdx","endGopIdx","segGopStartIdx","_segFrames","nextEndTime","curFrame","nextFrame","isFinalFrame","curEndTime","usedCttsIdx","beforeFrameNum","curerentCTTS","newCTTS","moovToMeta","videoCodec","audioCodec","audioChannelCount","audioSampleRate","videoTimescale","audioTimescale","defaultKID","_videoTrack$mdia","_videoTrack$mdia$minf","_videoTrack$mdia$minf2","_videoTrack$mdia2","_videoTrack$mdia2$mdh","_audioTrack$mdia","_audioTrack$mdia$minf","_audioTrack$mdia$minf2","_e1$esds","_audioTrack$mdia2","_audioTrack$mdia2$mdh","isNumber","isSegmentsOk","MP4Loader","_loadData","_loadSegment2","_destroy","_reset","_preload","_loadNextSegment","_loadSegmentByTime","_loadMeta","_loadMetaProcess","_getOrLoadMeta","_changeUrl","moovEnd","maxDownloadInfoSize","_transformError","segIndex","_currentSegmentIndex","_this$videoSegments","_this$audioSegments","_currentLoadingSegmentIndex","notCancelLoader","_args","isMetaLoaded","loadMeta","meta","_callee4","moovStart","OnProgressHandle","_args4","_context4","state","_moovStart","parsedMoov","loadData","loadMetaProcess","_x6","_x7","_x8","_x9","_x5","_callee5","responses","_args5","_context5","_x10","_x11","segmentIndex","_callee6","changeCurrent","_this$getSegmentByTim","_args6","_context6","getSegmentByTime","_loadSegment","loadSegmentByTime","_x12","_x13","_callee7","_args7","_context7","_x14","_callee9","_this$getSegmentByTim2","videos","audios","_context9","_callee8","_context8","_x16","_x15","_callee10","_args10","_context10","downloadInfo","_callee11","_context11","clear","_callee12","_context12","finish","_x17","_x18","_x19","_x20","_x21","_callee13","cacheKey","_args13","_context13","_getCacheKey","fromCache","_x22","_x23"],"mappings":"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"}