{"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-streaming-shared/src/services/gap.js","../../xgplayer-streaming-shared/src/services/sei.js","../../xgplayer-streaming-shared/src/services/bandwidth.js","../../xgplayer-transmuxer/src/model/types.js","../../xgplayer-transmuxer/src/model/video-track.js","../../xgplayer-transmuxer/src/model/audio-track.js","../../xgplayer-transmuxer/src/model/video-sample.js","../../xgplayer-transmuxer/src/model/audio-sample.js","../../xgplayer-transmuxer/src/model/metadata-track.js","../../xgplayer-transmuxer/src/utils/exp-golomb.js","../../xgplayer-transmuxer/src/utils/logger.js","../../xgplayer-transmuxer/src/utils/utf8.js","../../xgplayer-transmuxer/src/utils/env.js","../../xgplayer-transmuxer/src/utils/index.js","../../xgplayer-transmuxer/src/codec/nalu.js","../../xgplayer-transmuxer/src/codec/avc.js","../../xgplayer-transmuxer/src/codec/aac.js","../../xgplayer-transmuxer/src/codec/hevc.js","../../xgplayer-transmuxer/src/flv/fixer.js","../../xgplayer-transmuxer/src/flv/amf.js","../../xgplayer-transmuxer/src/flv/index.js","../../xgplayer-transmuxer/src/mpeg-ts/index.js","../../../node_modules/concat-typed-array/lib/index.js","../../../node_modules/concat-typed-array/lib/concat.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","../../xgplayer-transmuxer/src/mp4/fmp4-remuxer.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/flv/constants.js","../src/flv/services/buffer-service.js","../src/flv/utils.js","../src/flv/index.js","../src/flv/options.js","../src/plugin-extension.js","../src/getStats.js","../src/plugin.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][],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 DEMUX: 'demux',\n REMUX: 'remux',\n MEDIA: 'media',\n DRM: 'drm',\n OTHER: 'other',\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 }\n}\n\nexport const ERR_CODE = {\n [ERR.MANIFEST]: {\n HLS: 1100\n },\n [ERR.NETWORK]: 2100,\n [ERR.NETWORK_TIMEOUT]: 2101,\n [ERR.DEMUX]: {\n FLV: 3100,\n HLS: 3200,\n MP4: 3300,\n FMP4: 3400\n },\n [ERR.REMUX]: {\n FMP4: 4100,\n MP4: 4200\n },\n [ERR.MEDIA]: {\n MSE_ADD_SB: 5200,\n MSE_APPEND_BUFFER: 5201,\n MSE_OTHER: 5202,\n MSE_FULL: 5203\n },\n [ERR.OTHER]: 8000\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(error?.isTimeout ? ERR.NETWORK_TIMEOUT : ERR.NETWORK, error, null, {\n url: error?.url,\n response: error?.response,\n httpCode: error?.response?.status\n })\n }\n}\n","export const isBrowser = typeof window !== 'undefined'\n","import { nowTime } from './utils'\nexport class Logger {\n constructor (name) {\n this.name = name || ''\n this._prefix = `[${this.name}]`\n }\n\n debug (...args) {\n if (Logger.disabled) return\n console.debug(this._prefix, nowTime(), ...args)\n }\n\n log (...args) {\n if (Logger.disabled) return\n console.log(this._prefix, nowTime(), ...args)\n }\n\n warn (...args) {\n if (Logger.disabled) return\n console.warn(this._prefix, nowTime(), ...args)\n }\n\n error (...args) {\n if (Logger.disabled) return\n console.error(this._prefix, nowTime(), ...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","/* eslint-disable no-undef */\nimport { createPublicPromise, nowTime } from './utils'\nimport { Buffer } from './buffer'\nimport { StreamingError, ERR } from './error'\nimport { isBrowser } from './env'\nimport { Logger } from './logger'\n\nfunction getMediaSource () {\n try {\n return isBrowser ? window.MediaSource : null\n } catch (e) {}\n}\n\nconst MediaSource = getMediaSource()\n\n/** @enum {string} */\nexport const MSEErrorType = {\n UPDATE_ERROR: 'updateError'\n}\n\nconst OP_NAME = {\n APPEND: 'appendBuffer',\n REMOVE: 'removeBuffer'\n}\n\nexport class MSEError extends Error {\n /**\n * @param {MSEErrorType} type\n * @param {any} [msg]\n */\n constructor (type, msg) {\n super(msg || type)\n this.type = type\n this.msg = msg\n }\n}\n\nexport class MSE {\n /** @type { HTMLMediaElement | null } */\n media = null\n\n /** @type { MediaSource | null } */\n mediaSource = null\n\n _openPromise = createPublicPromise()\n\n _queue = Object.create(null)\n\n _sourceBuffer = Object.create(null)\n\n static VIDEO = 'video'\n\n static AUDIO = 'audio'\n\n _mseFullFlag = {}\n\n _st = 0\n\n _opst = 0\n\n _logger = null\n\n _config = null\n _url = null\n\n\n static getDefaultConfig () {\n return {\n openLog: false\n }\n }\n\n /**\n * @param {HTMLMediaElement} [media]\n */\n constructor (media, config) {\n this._config = Object.assign(MSE.getDefaultConfig(), config)\n if (media) this.bindMedia(media)\n this._logger = new Logger('MSE')\n if (this._config.openLog) {\n Logger.enable()\n }\n }\n\n get isOpened () {\n return this.mediaSource?.readyState === 'open'\n }\n\n get url () {\n return this._url\n }\n\n get duration () {\n return this.mediaSource?.duration || -1\n }\n\n get isEnded () {\n return this.mediaSource ? this.mediaSource.readyState === 'ended' : false\n }\n\n isFull (type) {\n return type ? this._mseFullFlag[type] : this._mseFullFlag[MSE.VIDEO]\n }\n\n /**\n * @param { number } duration\n * @return { Promise }\n */\n updateDuration (duration) {\n // 设置值比当前值小,会导致异常\n if (this.mediaSource && this.mediaSource.duration > duration) {\n return Promise.resolve()\n }\n\n return this._enqueueBlockingOp(() => {\n if (this.isEnded) {\n this._logger.debug('[debug mse] setDuration ended')\n return\n }\n if (this.mediaSource) {\n this.mediaSource.duration = duration\n this._logger.debug('[debug mse] setDuration')\n }\n }, 'updateDuration')\n }\n\n /** @return { Promise } */\n open () {\n if (this._openPromise.used && !this.isOpened && this.mediaSource) {\n const ms = this.mediaSource\n const onOpen = () => {\n const costtime = nowTime() - this._st\n this._logger.debug('MSE OPEN', costtime)\n ms.removeEventListener('sourceopen', onOpen)\n this._openPromise.resolve({costtime})\n }\n ms.addEventListener('sourceopen', onOpen)\n this._openPromise = createPublicPromise()\n }\n\n return this._openPromise\n }\n\n /**\n * @param { HTMLMediaElement } media\n * @return { Promise }\n */\n async bindMedia (media) {\n if (this.mediaSource || this.media) await this.unbindMedia()\n if (!media || !MediaSource) throw new Error('Param media or MediaSource does not exist')\n this.media = media\n const ms = this.mediaSource = new MediaSource()\n this._st = nowTime()\n\n const onOpen = () => {\n const costtime = nowTime() - this._st\n this._logger.debug('MSE OPEN')\n ms.removeEventListener('sourceopen', onOpen)\n URL.revokeObjectURL(media.src)\n this._openPromise.resolve({costtime})\n }\n ms.addEventListener('sourceopen', onOpen)\n this._url = URL.createObjectURL(ms)\n media.src = this._url\n return this._openPromise\n }\n\n /** @return { Promise } */\n async unbindMedia () {\n if (!this._openPromise.used) this._openPromise.resolve()\n const ms = this.mediaSource\n\n if (ms) {\n Object.keys(this._queue).forEach((t) => {\n const queue = this._queue[t]\n if (queue) {\n queue.forEach(x => x.promise.resolve)\n }\n })\n\n const hasMetadata = !!this.media && this.media.readyState >= 1\n const mseOpen = ms.readyState === 'open'\n\n if (hasMetadata && mseOpen) {\n try {\n ms.endOfStream()\n } catch (error) {\n // ignore\n }\n }\n\n Object.keys(this._sourceBuffer).forEach(k => {\n try {\n ms.removeSourceBuffer(this._sourceBuffer[k])\n } catch (error) {\n // ignore\n }\n })\n }\n\n if (this.media) {\n this.media.removeAttribute('src')\n try {\n this.media.load()\n } catch (error) {\n // ignore\n }\n this.media = null\n }\n\n this.mediaSource = null\n this._openPromise = createPublicPromise()\n this._queue = Object.create(null)\n this._sourceBuffer = Object.create(null)\n }\n\n /**\n * @param { string } type\n * @param { string } mimeType\n */\n createSource (type, mimeType) {\n if (this._sourceBuffer[type] || !this.mediaSource) return\n let sb\n try {\n sb = this._sourceBuffer[type] = this.mediaSource.addSourceBuffer(mimeType)\n } catch (error) {\n throw new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_ADD_SB, error)\n }\n sb.mimeType = mimeType\n sb.addEventListener('updateend', this._onSBUpdateEnd.bind(this, type))\n sb.addEventListener('error', this._onSBUpdateError.bind(this, type))\n }\n\n /**\n * @param { string } type\n * @param { string } mimeType\n * @return { Promise }\n */\n changeType (type, mimeType) {\n const sb = this._sourceBuffer[type]\n if (!this.mediaSource || !sb || sb.mimeType === mimeType || typeof sb.changeType !== 'function') return Promise.resolve()\n\n return this._enqueueOp(type, () => {\n sb.changeType(mimeType)\n sb.mimeType = mimeType\n this._onSBUpdateEnd(type)\n })\n }\n\n /**\n * @param { string } type\n * @param { string } mimeType\n * @return { Promise }\n */\n createOrChangeSource (type, mimeType) {\n this.createSource(type, mimeType)\n return this.changeType(type, mimeType)\n }\n\n /**\n * @param { string } type\n * @param { BufferSource } buffer\n * @return { Promise }\n */\n append (type, buffer, context) {\n if (!buffer || !buffer.byteLength) {\n return Promise.resolve()\n }\n\n if (!this._sourceBuffer[type]) return Promise.resolve()\n\n return this._enqueueOp(type, () => {\n if (!this.mediaSource) return\n this._logger.debug('MSE APPEND START', context)\n this._opst = nowTime()\n this._sourceBuffer[type]?.appendBuffer(buffer)\n }, OP_NAME.APPEND, context)\n\n }\n\n /**\n * @param { string } type\n * @param { number } startTime\n * @param { number } endTime\n * @return { Promise }\n */\n remove (type, startTime, endTime, context) {\n // if (Object.keys(this._sourceBuffer).length === 1) return Promise.resolve()\n let isInsertHead = false\n if (this._mseFullFlag[type]) {\n isInsertHead = true\n }\n return this._enqueueOp(type, () => {\n if (!this.mediaSource) return\n const sb = this._sourceBuffer[type]\n if (startTime >= endTime || !sb) {\n this._onSBUpdateEnd(type)\n return\n }\n this._opst = nowTime()\n this._logger.debug('MSE REMOVE START', type, startTime, endTime, context)\n sb.remove(startTime, endTime)\n }, OP_NAME.REMOVE, context, isInsertHead)\n }\n\n clearBuffer (startTime, endTime) {\n let p\n Object.keys(this._sourceBuffer).forEach(k => {\n p = this._enqueueOp(k, () => {\n if (!this.mediaSource) return\n const sb = this._sourceBuffer[k]\n this._logger.debug('MSE clearBuffer START', k, startTime, endTime)\n sb.remove(startTime, endTime)\n })\n })\n return p\n }\n\n clearAllBuffer () {\n let p\n Object.keys(this._sourceBuffer).forEach(k => {\n p = this._enqueueOp(k, () => {\n if (!this.mediaSource) return\n const sb = this._sourceBuffer[k]\n this._logger.debug('MSE clearAllBuffer START', k)\n sb.remove(0, Buffer.end(Buffer.get(sb)))\n })\n })\n return p\n }\n\n clearOpQueues (type) {\n this._logger.debug('MSE clearOpQueue START')\n const queue = this._queue[type]\n if (!queue || !queue[type] || queue.length < 5) return\n const initOpque = []\n queue.forEach(op => {\n if (op.context && op.context.isinit) {\n initOpque.push(op)\n }\n })\n this._queue[type] = queue.slice(0, 2)\n initOpque.length > 0 && this._queue[type].push(...initOpque)\n }\n\n /**\n * @param {EndOfStreamError} [reason]\n * @returns {Promise}\n */\n endOfStream (reason) {\n if (!this.mediaSource || this.mediaSource.readyState !== 'open') return Promise.resolve()\n return this._enqueueBlockingOp(() => {\n const ms = this.mediaSource\n if (!ms || ms.readyState !== 'open') return\n this._logger.debug('MSE endOfStream START')\n if (reason) {\n ms.endOfStream(reason)\n } else {\n ms.endOfStream()\n }\n }, 'endOfStream')\n }\n\n setLiveSeekableRange (start, end) {\n const ms = this.mediaSource\n if (start < 0 || end < start || !ms?.setLiveSeekableRange || ms.readyState !== 'open') return\n ms.setLiveSeekableRange(start, end)\n }\n\n /**\n * @param {string} type\n * @returns {?SourceBuffer}\n */\n getSourceBuffer (type) {\n return this._sourceBuffer[type]\n }\n\n /**\n * @param { string } type\n * @return { TimeRanges | void }\n */\n buffered (type) {\n return Buffer.get(this._sourceBuffer[type])\n }\n\n /**\n * @param { string } type\n * @return { number }\n */\n bufferStart (type) {\n return Buffer.start(this.buffered(type))\n }\n\n /**\n * @param { string } type\n * @return { number }\n */\n bufferEnd (type) {\n return Buffer.end(this.buffered(type))\n }\n\n _enqueueOp (type, exec, opName, context, isInsertHead) {\n if (!this.mediaSource) return Promise.resolve()\n const queue = this._queue[type] = this._queue[type] || []\n const op = {\n exec,\n promise: createPublicPromise(),\n opName,\n context\n }\n\n if (isInsertHead) {\n queue.splice(0, 0, op)\n this._mseFullFlag[type] = false\n this._startQueue(type)\n } else {\n queue.push(op)\n }\n\n if (this.isOpened) {\n if (queue.length === 1) {\n this._startQueue(type)\n }\n } else {\n this._openPromise.then(() => {\n if (queue.length === 1) {\n this._startQueue(type)\n }\n })\n }\n\n\n return op.promise\n }\n\n async _enqueueBlockingOp (exec, opName) {\n if (!this.mediaSource) return Promise.resolve()\n const types = Object.keys(this._sourceBuffer)\n if (!types.length) {\n return exec()\n }\n\n const waiters = []\n types.forEach(t => {\n const queue = this._queue[t]\n const prom = createPublicPromise()\n waiters.push(prom)\n queue.push({exec: () => prom.resolve(), promise: prom, opName})\n if (queue.length === 1) {\n this._startQueue(t)\n }\n })\n\n return Promise.all(waiters).then(() => {\n try {\n return exec()\n } finally {\n types.forEach(t => {\n const queue = this._queue[t]\n const sb = this._sourceBuffer[t]\n queue?.shift()\n if (!sb || !sb.updating) {\n this._startQueue(t)\n }\n })\n }\n })\n }\n\n _startQueue (type) {\n const queue = this._queue[type]\n if (queue) {\n const op = queue[0]\n if (op && !this._mseFullFlag[type]) {\n try {\n op.exec()\n } catch (error) {\n if (error && error.message && error.message.indexOf('SourceBuffer is full') >= 0) {\n this._mseFullFlag[type] = true\n this._logger.error('[MSE error], context,', op.context, ' ,name,', op.opName, ',err,SourceBuffer is full')\n op.promise.reject(new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_FULL, error))\n } else {\n this._logger.error(error)\n op.promise.reject(new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_OTHER, error))\n queue.shift()\n this._startQueue(type)\n }\n }\n }\n }\n }\n\n _onSBUpdateEnd = (type) => {\n const queue = this._queue[type]\n if (queue) {\n const op = queue.shift()\n if (op) {\n const costtime = nowTime() - this._opst\n this._logger.debug('UpdateEnd', op.opName, costtime, op.context)\n op.promise.resolve({name: op.opName, context: op.context, costtime})\n this._startQueue(type)\n }\n }\n }\n\n _onSBUpdateError = (type, event) => {\n const queue = this._queue[type]\n if (queue) {\n const op = queue[0]\n if (op) {\n this._logger.error('UpdateError', type, op.opName, op.context)\n op.promise.reject(new StreamingError(ERR.MEDIA, ERR.SUB_TYPES.MSE_APPEND_BUFFER, event))\n // Do not shift from queue, 'updateend' event will fire next\n }\n }\n }\n\n /**\n * @param {string} [mime='video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"']\n * @returns {boolean}\n */\n static isSupported (mime = 'video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"') {\n if (!MediaSource) return false\n try {\n return MediaSource.isTypeSupported(mime)\n } catch (error) {\n this._logger.error(mime, error)\n return false\n }\n }\n\n setTimeoffset (type, timestampOffset, context) {\n return this._enqueueOp(type, () => {\n if (timestampOffset < 0) {\n timestampOffset += 0.001\n }\n this._sourceBuffer[type].timestampOffset = timestampOffset\n this._onSBUpdateEnd(type)\n }, 'setTimeoffset', context)\n }\n\n /** *重置decode时间戳 */\n abort (type, context) {\n if (!this.isOpened) {\n return Promise.resolve()\n }\n return this._enqueueOp(type, () => {\n this._sourceBuffer[type].abort()\n this._onSBUpdateEnd(type)\n }, 'abort', context)\n }\n}\n","export const LoaderType = {\n FETCH: 'fetch',\n XHR: 'xhr'\n}\n\nexport const ResponseType = {\n ARRAY_BUFFER: 'arraybuffer',\n TEXT: 'text',\n JSON: 'json'\n}\n","import { LoaderType } from './types'\n\nexport class NetError extends Error {\n retryCount = 0\n isTimeout = false\n loaderType = LoaderType.FETCH\n startTime = 0\n endTime = 0\n options = {}\n\n constructor (url, request, response, msg) {\n super(msg)\n this.url = url\n this.request = request\n this.response = response\n }\n}\n","const toString = Object.prototype.toString\n\nexport function isObject (a) {\n return a !== null && typeof a === 'object'\n}\n\nexport function isPlainObject (val) {\n if (toString.call(val) !== '[object Object]') {\n return false\n }\n\n const prototype = Object.getPrototypeOf(val)\n return prototype === null || prototype === Object.prototype\n}\n\nexport function isDate (a) {\n return toString.call(a) === '[object Date]'\n}\n\nexport function isNumber (n) {\n return typeof n === 'number' && !Number.isNaN(n)\n}\n","import { isDate, isObject } from '../is'\n\nexport function getRangeValue (value) {\n if (!value || value[0] === null || value[0] === undefined || (value[0] === 0 && (value[1] === null || value[1] === undefined))) {\n return\n }\n let ret = 'bytes=' + value[0] + '-'\n if (value[1]) ret += value[1]\n return ret\n}\n\nfunction encode (val) {\n return encodeURIComponent(val)\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .replace(/%2C/gi, ',')\n .replace(/%20/g, '+')\n .replace(/%5B/gi, '[')\n .replace(/%5D/gi, ']')\n}\n\nexport function setUrlParams (url, params) {\n if (!url) return\n if (!params) return url\n let v\n const str = Object.keys(params).map(k => {\n v = params[k]\n if (v === null || v === undefined) return\n if (Array.isArray(v)) {\n k = k + '[]'\n } else {\n v = [v]\n }\n\n return v.map(x => {\n if (isDate(x)) {\n x = x.toISOString()\n } else if (isObject(x)) {\n x = JSON.stringify(x)\n }\n return `${encode(k)}=${encode(x)}`\n }).join('&')\n }).filter(Boolean).join('&')\n\n if (str) {\n const hashIndex = url.indexOf('#')\n if (hashIndex !== -1) {\n url = url.slice(0, hashIndex)\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + str\n }\n\n return url\n}\n\nexport function createResponse (\n data,\n done,\n response,\n contentLength,\n age,\n startTime,\n firstByteTime,\n index,\n range,\n vid,\n priOptions\n) {\n age = (age !== null && age !== undefined) ? parseFloat(age) : null\n contentLength = parseInt(contentLength || '0', 10)\n if (Number.isNaN(contentLength)) contentLength = 0\n const option = { range, vid, index, contentLength, age, startTime, firstByteTime, endTime: Date.now(), priOptions }\n return { data, done, option, response }\n}\n\nexport function calculateSpeed (byteLen, millisec) {\n return Math.round(byteLen * 8 * 1000 / millisec / 1024)\n}\n","export const EVENT = {\n ERROR: 'error',\n\n TTFB: 'core.ttfb',\n LOAD_START: 'core.loadstart',\n LOAD_RESPONSE_HEADERS: 'core.loadresponseheaders',\n LOAD_COMPLETE: 'core.loadcomplete',\n LOAD_RETRY: 'core.loadretry',\n SOURCEBUFFER_CREATED: 'core.sourcebuffercreated',\n ANALYZE_DURATION_EXCEEDED: 'core.analyzedurationexceeded',\n REMOVE_BUFFER: 'core.removebuffer',\n BUFFEREOS: 'core.buffereos',\n KEYFRAME: 'core.keyframe',\n METADATA_PARSED: 'core.metadataparsed',\n SEI: 'core.sei',\n SEI_IN_TIME: 'core.seiintime',\n FLV_SCRIPT_DATA: 'core.flvscriptdata',\n LOWDECODE: 'core.lowdecode',\n SWITCH_URL_SUCCESS: 'core.switchurlsuccess',\n SWITCH_URL_FAILED: 'core.switchurlfailed',\n SPEED: 'core.speed',\n HLS_MANIFEST_LOADED: 'core.hlsmanifestloaded',\n HLS_LEVEL_LOADED: 'core.hlslevelloaded',\n\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 startByte = this._range[0] + 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, 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,', this._range[0] + 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 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 if (this._responseType === ResponseType.ARRAY_BUFFER) {\n const chunk = new Uint8Array(e.target.response)\n byteStart = this._range[0] + 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, this._range[0] + 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 ', this._range[0] + 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, this._range[0] + 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._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\n if (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.} 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 this._currentTask.exec().catch(e => {}).finally(() => {\n this._processTask()\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","import { Buffer } from '../buffer'\n\nexport class GapService {\n _prevCurrentTime = 0\n\n do (media, maxJumpDistance = 3, isLive, seekThreshold = 1) {\n if (!media) return\n\n const currentTime = media.currentTime\n let jumpTo = 0\n\n if (this._prevCurrentTime === currentTime) {\n const info = Buffer.info(Buffer.get(media), currentTime)\n if (!info.buffers.length) return\n\n if (\n (isLive && info.nextStart) ||\n (info.nextStart && info.nextStart - currentTime < maxJumpDistance)\n ) {\n jumpTo = info.nextStart + 0.1\n } else if (info.end && info.end - currentTime > seekThreshold && !media.seeking) {\n jumpTo = currentTime + 0.1\n }\n }\n\n this._prevCurrentTime = currentTime\n\n if (jumpTo && currentTime !== jumpTo) {\n media.currentTime = jumpTo\n }\n }\n}\n","import { EVENT } from '../event'\n\nexport class SeiService {\n _seiSet = new Set()\n\n constructor (emitter) {\n this.emitter = emitter\n\n emitter.on(EVENT.SEI, (sei) => {\n if (sei) this._seiSet.add(sei)\n })\n }\n\n throw (currentTime) {\n if (currentTime === null || currentTime === undefined || !this._seiSet.size) return\n const min = currentTime - 0.2\n const max = currentTime + 0.2\n const toThrow = []\n this._seiSet.forEach(sei => {\n if (sei.time >= min && sei.time <= max) {\n toThrow.push(sei)\n }\n })\n\n toThrow.forEach((sei) => {\n this._seiSet.delete(sei)\n this.emitter.emit(EVENT.SEI_IN_TIME, sei)\n })\n }\n\n reset () {\n this._seiSet.clear()\n }\n}\n","export class BandwidthService {\n _chunkSpeeds = [] // bps\n _speeds = [] // bps\n\n addRecord (totalByte, ms) {\n if (!totalByte || !ms) return\n this._speeds.push(8000 * totalByte / ms)\n this._speeds = this._speeds.slice(-3)\n }\n\n addChunkRecord (totalByte, ms) {\n if (!totalByte || !ms) return\n this._chunkSpeeds.push(8000 * totalByte / ms)\n this._chunkSpeeds = this._chunkSpeeds.slice(-100)\n }\n\n getAvgSpeed () {\n if (!this._chunkSpeeds.length && !this._speeds.length) return 0\n if (this._speeds.length) {\n return this._speeds.reduce((a, c) => (a += c)) / this._speeds.length\n }\n return this._chunkSpeeds.reduce((a, c) => (a += c)) / this._chunkSpeeds.length\n }\n\n getLatestSpeed () {\n if (!this._chunkSpeeds.length && !this._speeds.length) return 0\n if (this._speeds.length) {\n return this._speeds[this._speeds.length - 1]\n }\n return this._chunkSpeeds[this._chunkSpeeds.length - 1]\n }\n\n reset () {\n this._chunkSpeeds = []\n this._speeds = []\n }\n}\n","/** @enum {string} */\nexport const TrackType = {\n VIDEO: 'video',\n AUDIO: 'audio',\n METADATA: 'metadata'\n}\n\n/** @enum {string} */\nexport const VideoCodecType = {\n AVC: 'avc',\n HEVC: 'hevc'\n}\n\n/** @enum {string} */\nexport const AudioCodecType = {\n AAC: 'aac',\n G711PCMA: 'g7110a',\n G711PCMU: 'g7110m'\n}\n\n/** @enum {string} */\nexport const WarningType = {\n LARGE_AV_SHIFT: 'LARGE_AV_SHIFT',\n LARGE_VIDEO_GAP: 'LARGE_VIDEO_GAP',\n LARGE_VIDEO_GAP_BETWEEN_CHUNK: 'LARGE_VIDEO_GAP_BETWEEN_CHUNK',\n LARGE_AUDIO_GAP: 'LARGE_AUDIO_GAP',\n AUDIO_FILLED: 'AUDIO_FILLED',\n AUDIO_DROPPED: 'AUDIO_DROPPED'\n}\n","import { TrackType, VideoCodecType } from './types'\n\nexport class VideoTrack {\n id = 1\n\n /** @readonly */\n type = TrackType.VIDEO\n\n codecType = VideoCodecType.AVC\n\n pid = -1 // ts use\n\n /** @type {Uint8Array | Object} */\n hvcC = undefined\n\n codec = ''\n\n timescale = 0\n\n formatTimescale = 0\n\n sequenceNumber = 0\n\n baseMediaDecodeTime = 0\n\n baseDts = 0\n\n duration = 0\n\n warnings = []\n\n /** @type {import('./video-sample').VideoSample[]} */\n samples = []\n\n /** @type {Uint8Array[]} */\n pps = []\n\n /** @type {Uint8Array[]} */\n sps = []\n\n /** @type {Uint8Array[]} */\n vps = []\n\n fpsNum = 0\n\n fpsDen = 0\n\n /** @type {[number, number]} */\n sarRatio = [] // [hSpacing, vSpacing]\n\n width = 0\n\n height = 0\n\n nalUnitSize = 4\n\n present = false\n\n isVideoEncryption = false\n\n isAudioEncryption = false\n\n 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","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","/**\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) {\n const len = unit.length\n let i = 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 type += unit[i++]\n\n while (unit[i] === 255) {\n size += 255\n i++\n }\n size += unit[i++]\n\n if (type === 5 && len > i + 16) {\n for (let j = 0; j < 16; j++) {\n uuid += unit[i].toString(16)\n i++\n }\n }\n\n return {\n payload: unit.subarray(i), type, size, uuid\n }\n }\n\n static removeEPB (uint) {\n const length = uint.byteLength\n const emulationPreventionBytesPositions = []\n let i = 1\n\n while (i < length - 2) {\n if (uint[i] === 0 && uint[i + 1] === 0 && uint[i + 2] === 0x03) {\n emulationPreventionBytesPositions.push(i + 2)\n i += 2\n } else {\n i++\n }\n }\n\n if (!emulationPreventionBytesPositions.length) return uint\n\n const newLength = length - emulationPreventionBytesPositions.length\n const newData = new Uint8Array(newLength)\n\n let sourceIndex = 0\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === emulationPreventionBytesPositions[0]) {\n sourceIndex++\n emulationPreventionBytesPositions.shift()\n }\n newData[i] = uint[sourceIndex]\n }\n\n return newData\n }\n}\n","import { NALu } from './nalu'\nimport { ExpGolomb, getAvcCodec } from '../utils'\n\nexport class AVC {\n static parseAVCDecoderConfigurationRecord (data) {\n if (data.length < 7) return\n const nalUnitSize = (data[4] & 3) + 1\n\n let spsParsed\n const spsArr = []\n const ppsArr = []\n\n let offset = 6\n const spsCount = data[5] & 0x1f\n let spsSize\n for (let i = 0; i < spsCount; i++) {\n spsSize = (data[offset] << 8) | data[offset + 1]\n offset += 2\n if (!spsSize) continue\n\n const sps = data.subarray(offset, offset + spsSize)\n offset += spsSize\n spsArr.push(sps)\n\n if (!spsParsed) {\n spsParsed = AVC.parseSPS(NALu.removeEPB(sps))\n }\n }\n\n const ppsCount = data[offset]\n offset++\n let ppsSize\n for (let i = 0; i < ppsCount; i++) {\n ppsSize = (data[offset] << 8) | data[offset + 1]\n offset += 2\n if (!ppsSize) continue\n ppsArr.push(data.subarray(offset, offset + ppsSize))\n offset += ppsSize\n }\n\n return {\n sps: spsParsed,\n spsArr,\n ppsArr,\n nalUnitSize\n }\n }\n\n static parseSPS (unit) {\n const eg = new ExpGolomb(unit)\n eg.readUByte()\n\n const profileIdc = eg.readUByte()\n const profileCompatibility = eg.readUByte()\n const levelIdc = eg.readUByte()\n eg.skipUEG()\n\n let chromaFormat = 420\n if (\n profileIdc === 100 ||\n profileIdc === 110 ||\n profileIdc === 122 ||\n profileIdc === 244 ||\n profileIdc === 44 ||\n profileIdc === 83 ||\n profileIdc === 86 ||\n profileIdc === 118 ||\n profileIdc === 128 ||\n profileIdc === 138 ||\n profileIdc === 144\n ) {\n const chromaFormatIdc = eg.readUEG()\n if (chromaFormatIdc <= 3) chromaFormat = [0, 420, 422, 444][chromaFormatIdc]\n if (chromaFormatIdc === 3) eg.skipBits(1)\n eg.skipUEG()\n eg.skipUEG()\n eg.skipBits(1)\n if (eg.readBool()) {\n const scalingListCount = chromaFormatIdc !== 3 ? 8 : 12\n for (let i = 0; i < scalingListCount; i++) {\n if (eg.readBool()) {\n if (i < 6) {\n eg.skipScalingList(16)\n } else {\n eg.skipScalingList(64)\n }\n }\n }\n }\n }\n\n eg.skipUEG()\n const picOrderCntType = eg.readUEG()\n if (picOrderCntType === 0) {\n eg.readUEG()\n } else if (picOrderCntType === 1) {\n eg.skipBits(1)\n eg.skipUEG()\n eg.skipUEG()\n const numRefFramesInPicOrderCntCycle = eg.readUEG()\n for (let i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n eg.skipUEG()\n }\n }\n\n eg.skipUEG()\n eg.skipBits(1)\n const picWidthInMbsMinus1 = eg.readUEG()\n const picHeightInMapUnitsMinus1 = eg.readUEG()\n const frameMbsOnlyFlag = eg.readBits(1)\n if (frameMbsOnlyFlag === 0) eg.skipBits(1)\n eg.skipBits(1)\n\n let frameCropLeftOffset = 0\n let frameCropRightOffset = 0\n let frameCropTopOffset = 0\n let frameCropBottomOffset = 0\n\n if (eg.readBool()) {\n frameCropLeftOffset = eg.readUEG()\n frameCropRightOffset = eg.readUEG()\n frameCropTopOffset = eg.readUEG()\n frameCropBottomOffset = eg.readUEG()\n }\n\n let sarRatio\n let fixedFrame\n let fpsNum\n let fpsDen\n let fps\n if (eg.readBool()) {\n if (eg.readBool()) {\n const aspectRatioIdc = eg.readUByte()\n switch (aspectRatioIdc) {\n case 1: sarRatio = [1, 1]; break\n case 2: sarRatio = [12, 11]; break\n case 3: sarRatio = [10, 11]; break\n case 4: sarRatio = [16, 11]; break\n case 5: sarRatio = [40, 33]; break\n case 6: sarRatio = [24, 11]; break\n case 7: sarRatio = [20, 11]; break\n case 8: sarRatio = [32, 11]; break\n case 9: sarRatio = [80, 33]; break\n case 10: sarRatio = [18, 11]; break\n case 11: sarRatio = [15, 11]; break\n case 12: sarRatio = [64, 33]; break\n case 13: sarRatio = [160, 99]; break\n case 14: sarRatio = [4, 3]; break\n case 15: sarRatio = [3, 2]; break\n case 16: sarRatio = [2, 1]; break\n case 255: {\n sarRatio = [\n (eg.readUByte() << 8) | eg.readUByte(),\n (eg.readUByte() << 8) | eg.readUByte()\n ]\n break\n }\n default:\n }\n }\n\n if (eg.readBool()) eg.readBool()\n\n if (eg.readBool()) {\n eg.readBits(4)\n if (eg.readBool()) eg.readBits(24)\n }\n\n if (eg.readBool()) {\n eg.readUEG()\n eg.readUEG()\n }\n\n if (eg.readBool()) {\n const numUnitsInTick = eg.readBits(32)\n const timeScale = eg.readBits(32)\n fixedFrame = eg.readBool()\n\n fpsNum = timeScale\n fpsDen = numUnitsInTick * 2\n fps = fpsNum / fpsDen\n }\n }\n\n return {\n codec: getAvcCodec(unit.subarray(1, 4)),\n profileIdc,\n profileCompatibility,\n levelIdc,\n chromaFormat,\n width: Math.ceil(\n (picWidthInMbsMinus1 + 1) * 16 -\n 2 * (frameCropLeftOffset + frameCropRightOffset)\n ),\n height:\n (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 -\n (frameMbsOnlyFlag ? 2 : 4) *\n (frameCropTopOffset + frameCropBottomOffset),\n sarRatio,\n fpsNum,\n fpsDen,\n fps,\n fixedFrame\n }\n }\n}\n","import { isFirefox, isAndroid } from '../utils'\n\nexport class AAC {\n static FREQ = [\n 96000,\n 88200,\n 64000,\n 48000,\n 44100,\n 32000,\n 24000,\n 22050,\n 16000,\n 12000,\n 11025,\n 8000,\n 7350\n ];\n\n static getRateIndexByRate (rate) {\n return AAC.FREQ.indexOf(rate)\n }\n\n static parseADTS (data, pts) {\n const len = data.length\n let i = 0\n\n while ((i + 2) < len) {\n if (data[i] === 0xff && (data[i + 1] & 0xf6) === 0xf0) {\n break\n }\n i++\n }\n\n if (i >= len) return\n\n const skip = i\n const frames = []\n const samplingFrequencyIndex = (data[i + 2] & 0x3c) >>> 2\n const sampleRate = AAC.FREQ[samplingFrequencyIndex]\n if (!sampleRate) throw new Error(`Invalid sampling index: ${samplingFrequencyIndex}`)\n const objectType = ((data[i + 2] & 0xc0) >>> 6) + 1\n const channelCount = ((data[i + 2] & 1) << 2) | ((data[i + 3] & 0xc0) >>> 6)\n const { config, codec } = AAC._getConfig(samplingFrequencyIndex, channelCount, objectType)\n\n let protectionSkipBytes\n let frameLength\n let frameIndex = 0\n const duration = AAC.getFrameDuration(sampleRate)\n\n while ((i + 7) < len) {\n if ((data[i] !== 0xff) || (data[i + 1] & 0xF6) !== 0xf0) {\n i++\n continue\n }\n\n frameLength = ((data[i + 3] & 0x03) << 11) | (data[i + 4] << 3) | ((data[i + 5] & 0xe0) >> 5)\n if ((len - i) < frameLength) break\n\n protectionSkipBytes = (~data[i + 1] & 0x01) * 2\n frames.push({\n pts: pts + frameIndex * duration,\n data: data.subarray(i + 7 + protectionSkipBytes, i + frameLength)\n })\n\n frameIndex++\n i += frameLength\n }\n\n return {\n skip,\n remaining: i >= len ? undefined : data.subarray(i),\n frames,\n samplingFrequencyIndex,\n sampleRate,\n objectType,\n channelCount,\n codec,\n config,\n originCodec: `mp4a.40.${objectType}`\n }\n }\n\n static parseAudioSpecificConfig (data) {\n if (!data.length) return\n const objectType = data[0] >>> 3\n const samplingFrequencyIndex = ((data[0] & 0x07) << 1) | (data[1] >>> 7)\n const channelCount = (data[1] & 0x78) >>> 3\n const sampleRate = AAC.FREQ[samplingFrequencyIndex]\n // play as no audio track stream\n if (!sampleRate) return\n const { config, codec } = AAC._getConfig(samplingFrequencyIndex, channelCount, objectType)\n\n return {\n samplingFrequencyIndex,\n sampleRate,\n objectType,\n channelCount,\n config,\n codec,\n originCodec: `mp4a.40.${objectType}`\n }\n }\n\n static getFrameDuration (rate, timescale = 90000) {\n return 1024 * timescale / rate\n }\n\n static _getConfig (samplingIndex, channelCount, originObjectType) {\n const config = []\n let objectType\n let extensionSamplingIndex\n if (isFirefox) {\n if (samplingIndex >= 6) { // use SBR (HE-AAC)\n objectType = 5\n extensionSamplingIndex = samplingIndex - 3\n } else { // use LC-AAC\n objectType = 2\n extensionSamplingIndex = samplingIndex\n }\n } else if (isAndroid) { // use LC-AAC\n objectType = 2\n extensionSamplingIndex = samplingIndex\n } else { // use HE-AAC\n objectType = (originObjectType === 2 || originObjectType === 5) ? originObjectType : 5\n extensionSamplingIndex = samplingIndex\n\n if (samplingIndex >= 6) {\n extensionSamplingIndex = samplingIndex - 3\n } else if (channelCount === 1) { // Mono channel, use LC-AAC\n objectType = 2\n extensionSamplingIndex = samplingIndex\n }\n }\n\n config[0] = objectType << 3\n config[0] |= (samplingIndex & 0x0e) >> 1\n config[1] = (samplingIndex & 0x01) << 7\n config[1] |= channelCount << 3\n if (objectType === 5) {\n config[1] |= ((extensionSamplingIndex & 0x0e) >> 1)\n config[2] = (extensionSamplingIndex & 0x01) << 7\n config[2] |= (2 << 2)\n config[3] = 0\n }\n\n return {\n config,\n codec: `mp4a.40.${objectType}`\n }\n }\n\n /* c8 ignore next 65 */\n static getSilentFrame (codec, channelCount) {\n switch (codec) {\n case 'mp4a.40.2':\n if (channelCount === 1) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80])\n } if (channelCount === 2) {\n return new Uint8Array([\n 0x21, 0x00, 0x49, 0x90, 0x02, 0x19, 0x00, 0x23, 0x80\n ])\n } if (channelCount === 3) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x8e\n ])\n } if (channelCount === 4) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x80, 0x2c, 0x80, 0x08, 0x02, 0x38\n ])\n } if (channelCount === 5) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x38\n ])\n } if (channelCount === 6) {\n return new Uint8Array([\n 0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64,\n 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x00, 0xb2,\n 0x00, 0x20, 0x08, 0xe0\n ])\n }\n break\n default:\n if (channelCount === 1) {\n return new Uint8Array([\n 0x1, 0x40, 0x22, 0x80, 0xa3, 0x4e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0,\n 0x0, 0x1c, 0x6, 0xf1, 0xc1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5e\n ])\n } if (channelCount === 2) {\n return new Uint8Array([\n 0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0,\n 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5e\n ])\n } if (channelCount === 3) {\n return new Uint8Array([\n 0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0,\n 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a,\n 0x5a, 0x5e\n ])\n }\n break\n }\n }\n}\n","import { NALu } from './nalu'\nimport { ExpGolomb } from '../utils'\n\nexport class HEVC {\n static parseHEVCDecoderConfigurationRecord (data, hvcC = {}) {\n if (data.length < 23) return\n hvcC = hvcC || {}\n const nalUnitSize = (data[21] & 3) + 1\n\n let vpsParsed\n let spsParsed\n const spsArr = []\n const ppsArr = []\n const vpsArr = []\n\n let offset = 23\n const numOfArrays = data[22]\n\n let nalUnitType\n let numNalus\n let nalSize\n for (let i = 0; i < numOfArrays; i++) {\n nalUnitType = data[offset] & 0x3f\n numNalus = (data[offset + 1] << 8) | data[offset + 2]\n\n offset += 3\n\n for (let j = 0; j < numNalus; j++) {\n nalSize = (data[offset] << 8) | data[offset + 1]\n offset += 2\n if (!nalSize) continue\n switch (nalUnitType) {\n case 32: {\n const vps = data.subarray(offset, offset + nalSize)\n if (!vpsParsed) vpsParsed = HEVC.parseVPS(NALu.removeEPB(vps), hvcC)\n vpsArr.push(vps)\n }\n break\n case 33: {\n const sps = data.subarray(offset, offset + nalSize)\n if (!spsParsed) spsParsed = HEVC.parseSPS(NALu.removeEPB(sps), hvcC)\n spsArr.push(sps)\n }\n break\n case 34:\n ppsArr.push(data.subarray(offset, offset + nalSize))\n break\n default:\n }\n\n offset += nalSize\n }\n }\n\n return {\n hvcC,\n sps: spsParsed,\n spsArr,\n ppsArr,\n vpsArr,\n nalUnitSize\n }\n }\n\n static parseVPS (unit, hvcC) {\n hvcC = hvcC || {}\n const eg = new ExpGolomb(unit)\n eg.readUByte()\n eg.readUByte()\n\n eg.readBits(12)\n const vpsMaxSubLayersMinus1 = eg.readBits(3)\n hvcC.numTemporalLayers = Math.max(hvcC.numTemporalLayers || 0, vpsMaxSubLayersMinus1 + 1)\n eg.readBits(17)\n HEVC._parseProfileTierLevel(eg, vpsMaxSubLayersMinus1, hvcC)\n\n return hvcC\n }\n\n static parseSPS (unit, hvcC = {}) {\n hvcC = hvcC || {}\n const eg = new ExpGolomb(unit)\n eg.readUByte()\n eg.readUByte()\n\n eg.readBits(4)\n const spsMaxSubLayersMinus1 = eg.readBits(3)\n hvcC.numTemporalLayers = Math.max(spsMaxSubLayersMinus1 + 1, hvcC.numTemporalLayers || 0)\n hvcC.temporalIdNested = eg.readBits(1)\n HEVC._parseProfileTierLevel(eg, spsMaxSubLayersMinus1, hvcC)\n\n eg.readUEG() // sps_seq_parameter_set_id\n\n const chromaFormatIdc = hvcC.chromaFormatIdc = eg.readUEG()\n let chromaFormat = 420\n if (chromaFormatIdc <= 3) chromaFormat = [0, 420, 422, 444][chromaFormatIdc]\n\n let separateColourPlaneFlag = 0\n if (chromaFormatIdc === 3) {\n separateColourPlaneFlag = eg.readBits(1)\n }\n\n let width = eg.readUEG() // pic_width_in_luma_samples\n let height = eg.readUEG() // pic_height_in_luma_samples\n\n const conformanceWindowFlag = eg.readBits(1)\n\n let confWinLeftOffset\n let confWinRightOffset\n let confWinTopOffset\n let confWinBottomOffset\n if (conformanceWindowFlag === 1) {\n confWinLeftOffset = eg.readUEG() // conf_win_left_offset\n confWinRightOffset = eg.readUEG() // conf_win_right_offset\n confWinTopOffset = eg.readUEG() // conf_win_top_offset\n confWinBottomOffset = eg.readUEG() // conf_win_bottom_offset\n }\n\n hvcC.bitDepthLumaMinus8 = eg.readUEG() // bit_depth_luma_minus8\n hvcC.bitDepthChromaMinus8 = eg.readUEG() // bit_depth_chroma_minus8\n\n if (conformanceWindowFlag === 1) {\n const subWidthC = (((chromaFormatIdc === 1) || (chromaFormatIdc === 2)) && (separateColourPlaneFlag === 0)) ? 2 : 1\n const subHeightC = ((chromaFormatIdc === 1) && (separateColourPlaneFlag === 0)) ? 2 : 1\n width -= (subWidthC * (confWinRightOffset + confWinLeftOffset))\n height -= (subHeightC * (confWinBottomOffset + confWinTopOffset))\n }\n\n return {\n codec: 'hev1.1.6.L93.B0',\n width,\n height,\n chromaFormat,\n hvcC\n }\n }\n\n static _parseProfileTierLevel (eg, maxSubLayersMinus1, hvcC) {\n const generalTierFlag = hvcC.generalTierFlag || 0\n hvcC.generalProfileSpace = eg.readBits(2)\n hvcC.generalTierFlag = Math.max(eg.readBits(1), generalTierFlag)\n hvcC.generalProfileIdc = Math.max(eg.readBits(5), hvcC.generalProfileIdc || 0)\n hvcC.generalProfileCompatibilityFlags = eg.readBits(32)\n hvcC.generalConstraintIndicatorFlags = [eg.readBits(8), eg.readBits(8), eg.readBits(8), eg.readBits(8), eg.readBits(8), eg.readBits(8)]\n const generalLevelIdc = eg.readBits(8)\n if (generalTierFlag < hvcC.generalTierFlag) {\n hvcC.generalLevelIdc = generalLevelIdc\n } else {\n hvcC.generalLevelIdc = Math.max(generalLevelIdc, hvcC.generalLevelIdc || 0)\n }\n\n const subLayerProfilePresentFlag = []\n const subLayerLevelPresentFlag = []\n for (let j = 0; j < maxSubLayersMinus1; j++) {\n subLayerProfilePresentFlag[j] = eg.readBits(1)\n subLayerLevelPresentFlag[j] = eg.readBits(1)\n }\n\n if (maxSubLayersMinus1 > 0) {\n eg.readBits((8 - maxSubLayersMinus1) * 2)\n }\n\n for (let i = 0; i < maxSubLayersMinus1; i++) {\n if (subLayerProfilePresentFlag[i] !== 0) {\n eg.readBits(2)\n eg.readBits(1)\n eg.readBits(5)\n\n eg.readBits(16)\n eg.readBits(16)\n\n eg.readBits(4)\n\n eg.readBits(16)\n eg.readBits(16)\n eg.readBits(12)\n }\n if (subLayerLevelPresentFlag[i] !== 0) {\n eg.readBits(8)\n }\n }\n }\n}\n","import { AudioCodecType, AudioSample, WarningType } from '../model'\nimport { AAC } from '../codec'\nimport { isSafari } from '../utils'\n\nconst LARGE_AV_FIRST_FRAME_GAP = 500 // ms\nconst AUDIO_GAP_OVERLAP_THRESHOLD_COUNT = 3\nconst MAX_SILENT_FRAME_DURATION = 1000 // ms\nconst AUDIO_EXCETION_LOG_EMIT_DURATION = 5000 // 5s\nconst MAX_VIDEO_FRAME_DURATION = 1000 // ms\nconst MAX_DTS_DELTA_WITH_NEXT_CHUNK = 200 // ms\nconst VIDEO_EXCETION_LOG_EMIT_DURATION = 5000 // 5s\nconst TRACK_BREACKED_CHECK_TIME = 5\n\nexport class FlvFixer {\n constructor (videoTrack, audioTrack, metadataTrack) {\n this.videoTrack = videoTrack\n this.audioTrack = audioTrack\n this.metadataTrack = metadataTrack\n\n this._baseDts = -1\n this._baseDtsInited = false\n\n this._audioNextPts = undefined\n this._videoNextDts = undefined\n\n this._audioTimestampBreak = 0\n this._videoTimestampBreak = 0\n\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 (!this._baseDtsInited) return\n\n if (!contiguous && startTime) {\n this._audioNextPts = this._videoNextDts = startTime\n }\n\n this._resetBaseDtsWhenStreamBreaked()\n\n this._fixAudio(audioTrack)\n\n this._fixVideo(videoTrack)\n\n if (this.metadataTrack.exist()) {\n const timescale = this.metadataTrack.timescale\n this.metadataTrack.seiSamples.forEach(s => {\n s.pts = s.originPts - this._baseDts\n s.time = Math.max(0, s.pts) / timescale\n })\n this.metadataTrack.flvScriptSamples.forEach(s => {\n s.pts = s.originPts - this._baseDts\n s.time = Math.max(0, s.pts) / timescale\n })\n }\n\n if (videoTrack.samples.length) {\n videoTrack.baseMediaDecodeTime = videoTrack.samples[0].dts\n }\n if (audioTrack.samples.length) {\n audioTrack.baseMediaDecodeTime = audioTrack.samples[0].pts * audioTrack.timescale / 1000\n }\n }\n\n _fixVideo (videoTrack) {\n const samples = videoTrack.samples\n\n if (!samples.length) return\n\n samples.forEach(x => {\n x.dts -= this._baseDts\n x.pts -= this._baseDts\n })\n\n let refSampleDurationInt\n if (videoTrack.fpsNum && videoTrack.fpsDen) {\n refSampleDurationInt = videoTrack.timescale * (videoTrack.fpsDen / videoTrack.fpsNum)\n } else {\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 }\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 }\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 }\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 if (this._baseDtsInited && this._videoTimestampBreak && this._audioTimestampBreak) {\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 this._baseDts -= Math.min(this._audioNextPts, this._videoNextDts)\n this._videoLastSample = null\n this._videoTimestampBreak = 0\n this._audioTimestampBreak = 0\n }\n }\n\n _doFixAudioInternal (audioTrack, samples, timescale) {\n if (!audioTrack.sampleDuration) {\n audioTrack.sampleDuration = audioTrack.codecType === AudioCodecType.AAC\n ? AAC.getFrameDuration(audioTrack.timescale, timescale)\n : this._getG711Duration(audioTrack)\n }\n const refSampleDuration = audioTrack.sampleDuration\n\n const sampleDurationInSampleRate = audioTrack.codecType === AudioCodecType.AAC ? 1024 : refSampleDuration * audioTrack.timescale / 1000\n\n if (this._audioNextPts === undefined) {\n const samp0 = samples[0]\n this._audioNextPts = samp0.pts\n }\n\n for (let i = 0; i < samples.length; i++) {\n let nextPts = this._audioNextPts\n const sample = samples[i]\n let delta = sample.pts - nextPts\n\n // only audio breaked\n if (i === 0 && this._audioTimestampBreak >= TRACK_BREACKED_CHECK_TIME) {\n nextPts = this._audioNextPts = sample.dts\n delta = 0\n this._audioTimestampBreak = 0\n }\n\n // fill frames\n // delta >= 3 * refSampleDurationInt\n // delta <= 500s\n if (!this._audioTimestampBreak && delta >= AUDIO_GAP_OVERLAP_THRESHOLD_COUNT * refSampleDuration && delta <= MAX_SILENT_FRAME_DURATION && !isSafari) {\n const silentFrame = this._getSilentFrame(audioTrack) || samples[0].data.subarray()\n const count = Math.floor(delta / refSampleDuration)\n\n if (Math.abs(sample.pts - this._lastAudioExceptionGapDot) > AUDIO_EXCETION_LOG_EMIT_DURATION) {\n this._lastAudioExceptionGapDot = sample.pts\n audioTrack.warnings.push({\n type: WarningType.AUDIO_FILLED,\n pts: sample.pts,\n originPts: sample.originPts,\n count,\n nextPts,\n refSampleDuration\n })\n }\n\n for (let j = 0; j < count; j++) {\n const silentSample = new AudioSample(Math.floor(this._audioNextPts + refSampleDuration) - Math.floor(this._audioNextPts), silentFrame, sampleDurationInSampleRate)\n silentSample.originPts = Math.floor(this._baseDts + nextPts)\n samples.splice(i, 0, silentSample)\n this._audioNextPts += refSampleDuration\n i++\n }\n\n i--\n // delta <= -3 * refSampleDurationInt\n // delta >= -500ms\n } else if (delta <= -AUDIO_GAP_OVERLAP_THRESHOLD_COUNT * refSampleDuration && delta >= -1 * MAX_SILENT_FRAME_DURATION) {\n // need discard frames\n if (Math.abs(sample.pts - this._lastAudioExceptionOverlapDot) > AUDIO_EXCETION_LOG_EMIT_DURATION) {\n this._lastAudioExceptionOverlapDot = sample.pts\n\n audioTrack.warnings.push({\n type: WarningType.AUDIO_DROPPED,\n pts: sample.pts,\n originPts: sample.originPts,\n nextPts,\n refSampleDuration\n })\n }\n samples.splice(i, 1)\n i--\n } else {\n if (Math.abs(delta) > MAX_SILENT_FRAME_DURATION) {\n this._audioTimestampBreak++\n\n if (Math.abs(sample.pts - this._lastAudioExceptionLargeGapDot) > AUDIO_EXCETION_LOG_EMIT_DURATION) {\n this._lastAudioExceptionLargeGapDot = sample.pts\n audioTrack.warnings.push({\n type: WarningType.LARGE_AUDIO_GAP,\n time: sample.pts / 1000,\n pts: sample.pts,\n originPts: sample.originPts,\n nextPts,\n sampleDuration: delta,\n refSampleDuration\n })\n }\n }\n\n sample.dts = sample.pts = nextPts\n sample.duration = sampleDurationInSampleRate\n this._audioNextPts += refSampleDuration\n }\n }\n }\n\n _getG711Duration (track) {\n const { sampleSize, channelCount, sampleRate } = track\n const samp0 = track.samples[0]\n if (!samp0) return\n return samp0.data.byteLength * 2 / channelCount / (sampleSize / 8) / sampleRate * 1000\n }\n\n _getSilentFrame (track) {\n if (track.codecType === AudioCodecType.AAC) return AAC.getSilentFrame(track.codec, track.channelCount)\n return new Uint8Array(8 * track.sampleDuration * track.channelCount)\n }\n}\n","import { UTF8 } from '../utils'\n\nexport class AMF {\n static parse (data) {\n if (data.length < 3) return\n\n const ret = {}\n const name = AMF._parseValue(new DataView(data.buffer, data.byteOffset, data.byteLength))\n const value = AMF._parseValue(new DataView(data.buffer, data.byteOffset + name.size, data.byteLength - name.size))\n ret[name.data] = value.data\n\n return ret\n }\n\n static _parseValue (view) {\n const dataLen = view.byteLength\n const type = view.getUint8(0)\n let offset = 1\n let isEnd = false\n let value\n\n switch (type) {\n case 0: // Number(Double) type\n value = view.getFloat64(1)\n offset += 8\n break\n case 1: { // Boolean type\n value = !!view.getUint8(1)\n offset += 1\n break\n }\n case 2: { // String type\n const { data, size } = AMF._parseString(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset))\n value = data\n offset += size\n }\n break\n case 3: { // Object(s) type\n value = {}\n let terminal = 0\n if ((view.getUint32(dataLen - 4) & 0x00FFFFFF) === 9) {\n terminal = 3\n }\n while (offset < dataLen - 4) { // 4 === type(UI8) + ScriptDataObjectEnd(UI24)\n const { size, data, isEnd } = AMF._parseObject(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset - terminal))\n if (isEnd) break\n value[data.name] = data.value\n offset += size\n }\n if (offset <= dataLen - 3) {\n const marker = view.getUint32(offset - 1) & 0x00FFFFFF\n if (marker === 9) offset += 3\n }\n }\n break\n case 8: { // ECMA array type (Mixed array)\n value = {}\n offset += 4 // ECMAArrayLength(UI32)\n let terminal = 0 // workaround for malformed MixedArrays which has missing ScriptDataObjectEnd\n if ((view.getUint32(dataLen - 4) & 0x00FFFFFF) === 9) {\n terminal = 3\n }\n while (offset < dataLen - 8) { // 8 === type(UI8) + ECMAArrayLength(UI32) + ScriptDataVariableEnd(UI24)\n const { size, data, isEnd } = AMF._parseObject(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset - terminal))\n if (isEnd) break\n value[data.name] = data.value\n offset += size\n }\n if (offset <= dataLen - 3) {\n const marker = view.getUint32(offset - 1) & 0x00FFFFFF\n if (marker === 9) {\n offset += 3\n }\n }\n }\n break\n case 9: // ScriptDataObjectEnd\n value = undefined\n offset = 1\n isEnd = true\n break\n case 10: { // Strict array type\n value = []\n const strictArrayLength = view.getUint32(1)\n offset += 4\n for (let i = 0; i < strictArrayLength; i++) {\n const { data, size } = AMF._parseValue(new DataView(view.buffer, view.byteOffset + offset, view.byteLength - offset))\n value.push(data)\n offset += size\n }\n }\n break\n case 11: { // Date type\n const timestamp = view.getFloat64(offset) + view.getInt16(offset + 8) * 60000\n value = new Date(timestamp)\n offset += 10\n }\n break\n case 12: { // Long string type\n const length = view.getUint32(1)\n offset += 4\n value = ''\n if (length > 0) {\n value = UTF8.decode(new Uint8Array(view.buffer, view.byteOffset + offset, length))\n }\n offset += length\n }\n break\n default:\n offset = dataLen\n break\n }\n\n return {\n data: value,\n size: offset,\n isEnd\n }\n }\n\n static _parseString (view) {\n const length = view.getUint16(0)\n let data = ''\n if (length > 0) {\n data = UTF8.decode(new Uint8Array(view.buffer, view.byteOffset + 2, length))\n }\n\n return {\n data,\n size: 2 + length\n }\n }\n\n static _parseObject (view) {\n if (view.byteLength < 3) return\n\n const name = AMF._parseString(view)\n const value = AMF._parseValue(new DataView(view.buffer, view.byteOffset + name.size, view.byteLength - name.size))\n\n return {\n data: {\n name: name.data,\n value: value.data\n },\n size: name.size + value.size,\n isEnd: value.isEnd\n }\n }\n}\n","import { VideoTrack, AudioTrack, MetadataTrack, AudioSample, VideoSample, VideoCodecType, AudioCodecType, FlvScriptSample, SeiSample } from '../model'\nimport { FlvFixer } from './fixer'\nimport { concatUint8Array, Logger, readBig32 } from '../utils'\nimport { AAC, AVC, HEVC, NALu } from '../codec'\nimport { AMF } from './amf'\n\nconst logger = new Logger('FlvDemuxer')\n\n/**\n * @typedef {Object} DemuxResult\n * @property {VideoTrack} videoTrack\n * @property {AudioTrack} audioTrack\n * @property {MetadataTrack} metadataTrack\n */\n\nexport class FlvDemuxer {\n _headerParsed = false\n _remainingData = null\n _gopId = 0\n _needAddMetaBeforeKeyFrameNal = true // 标识H265流中关键帧Nal之前是否需要插入vps、sps、pps Nal\n\n static AUDIO_RATE = [5500, 11000, 22000, 44000]\n\n /**\n * @param {VideoTrack} [videoTrack]\n * @param {AudioTrack} [audioTrack]\n * @param {MetadataTrack} [metadataTrack]\n */\n constructor (videoTrack, audioTrack, metadataTrack) {\n this.videoTrack = videoTrack || new VideoTrack()\n this.audioTrack = audioTrack || new AudioTrack()\n this.metadataTrack = metadataTrack || new MetadataTrack()\n this._fixer = new FlvFixer(this.videoTrack, this.audioTrack, this.metadataTrack)\n }\n\n /**\n * @param {Uint8Array} data\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @returns {DemuxResult}\n */\n demux (data, discontinuity = false, contiguous = true) {\n const { audioTrack, videoTrack, metadataTrack } = this\n\n if (discontinuity || !contiguous) {\n this._remainingData = null\n this._headerParsed = false\n }\n\n if (discontinuity) {\n videoTrack.reset()\n audioTrack.reset()\n metadataTrack.reset()\n } else {\n videoTrack.samples = []\n audioTrack.samples = []\n metadataTrack.seiSamples = []\n metadataTrack.flvScriptSamples = []\n videoTrack.warnings = []\n audioTrack.warnings = []\n\n if (this._remainingData) {\n data = concatUint8Array(this._remainingData, data)\n this._remainingData = null\n }\n }\n\n if (!data.length) {\n return {\n videoTrack,\n audioTrack,\n metadataTrack\n }\n }\n\n let offset = 0\n if (!this._headerParsed) {\n if (!FlvDemuxer.probe(data)) {\n throw new Error('Invalid flv file')\n }\n audioTrack.present = ((data[4] & 4) >>> 2) !== 0\n videoTrack.present = (data[4] & 1) !== 0\n this._headerParsed = true\n offset = readBig32(data, 5) + 4 // skip prev tag size\n }\n\n const dataLen = data.length\n\n let tagType\n let dataSize\n let timestamp\n let bodyData\n let prevTagSize\n while ((offset + 15) < dataLen) { // header and prev tag size\n tagType = data[offset]\n dataSize = (data[offset + 1] << 16) | (data[offset + 2] << 8) | data[offset + 3]\n if (offset + 15 + dataSize > dataLen) break\n timestamp = (\n (data[offset + 7] << 24 >>> 0) +\n (data[offset + 4] << 16) +\n (data[offset + 5] << 8) +\n data[offset + 6]\n )\n\n offset += 11\n bodyData = data.subarray(offset, offset + dataSize)\n if (tagType === 8) {\n this._parseAudio(bodyData, timestamp)\n } else if (tagType === 9) {\n this._parseVideo(bodyData, timestamp)\n } else if (tagType === 18) {\n this._parseScript(bodyData, timestamp)\n } else {\n logger.warn(`Invalid tag type: ${tagType}`)\n }\n\n offset += dataSize\n prevTagSize = readBig32(data, offset)\n if (prevTagSize !== 11 + dataSize) {\n logger.warn(`Invalid PrevTagSize ${prevTagSize} (${11 + dataSize})`)\n }\n\n offset += 4\n }\n\n if (offset < dataLen) {\n this._remainingData = data.subarray(offset)\n }\n\n audioTrack.formatTimescale = videoTrack.formatTimescale = videoTrack.timescale = metadataTrack.timescale = 1000\n audioTrack.timescale = audioTrack.sampleRate || 0\n\n if (!audioTrack.exist() && audioTrack.hasSample()) {\n audioTrack.reset()\n }\n if (!videoTrack.exist() && videoTrack.hasSample()) {\n videoTrack.reset()\n }\n\n return {\n videoTrack,\n audioTrack,\n metadataTrack\n }\n }\n\n /**\n * @param {number} [startTime=0]\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @returns {DemuxResult}\n */\n fix (startTime, discontinuity, contiguous) {\n this._fixer.fix(startTime, discontinuity, contiguous)\n return {\n videoTrack: this.videoTrack,\n audioTrack: this.audioTrack,\n metadataTrack: this.metadataTrack\n }\n }\n\n /**\n * @param {Uint8Array} data\n * @param {boolean} [discontinuity=false]\n * @param {boolean} [contiguous=true]\n * @param {number} [startTime=0]\n * @returns {DemuxResult}\n */\n demuxAndFix (data, discontinuity, contiguous, startTime) {\n this.demux(data, discontinuity, contiguous)\n return this.fix(startTime, discontinuity, contiguous)\n }\n\n /**\n * @param { Uint8Array } data\n * @returns {boolean}\n */\n static probe (data) {\n if (data[0] !== 0x46 || data[1] !== 0x4C || data[2] !== 0x56 || data[3] !== 0x01) {\n return false\n }\n return readBig32(data, 5) >= 9\n }\n\n _parseAudio (data, pts) {\n if (!data.length) return\n\n const format = (data[0] & 0xf0) >>> 4\n const track = this.audioTrack\n\n if (\n format !== 10 && // AAC\n format !== 7 && // G.711 A-law logarithmic PCM\n format !== 8 // G.711 mu-law logarithmic PCM\n ) {\n logger.warn(`Unsupported sound format: ${format}`)\n track.reset()\n return\n }\n\n if (format !== 10) {\n const soundRate = (data[0] & 0x0c) >> 2\n const soundSize = (data[0] & 0x02) >> 1\n const soundType = (data[0] & 0x01)\n track.sampleRate = FlvDemuxer.AUDIO_RATE[soundRate]\n track.sampleSize = soundSize ? 16 : 8\n track.channelCount = soundType + 1\n }\n\n if (format === 10) {\n this._parseAac(data, pts)\n } else {\n this._parseG711(data, pts, format)\n }\n }\n\n _parseG711 (data, pts, format) {\n const track = this.audioTrack\n track.codecType = format === 7 ? AudioCodecType.G711PCMA : AudioCodecType.G711PCMU\n track.sampleRate = 8000\n track.codec = track.codecType\n track.samples.push(new AudioSample(pts, data.subarray(1)))\n }\n\n _parseAac (data, pts) {\n const track = this.audioTrack\n track.codecType = AudioCodecType.AAC\n\n if (data[1] === 0) { // AACPacketType\n const ret = AAC.parseAudioSpecificConfig(data.subarray(2))\n if (ret) {\n track.codec = ret.codec\n track.channelCount = ret.channelCount\n track.sampleRate = ret.sampleRate\n track.config = ret.config\n track.objectType = ret.objectType\n track.sampleRateIndex = ret.samplingFrequencyIndex\n } else {\n track.reset()\n logger.warn('Cannot parse AudioSpecificConfig', data)\n }\n } else if (data[1] === 1) { // Raw AAC frame data\n if (pts === undefined || pts === null) return\n track.samples.push(new AudioSample(pts, data.subarray(2)))\n } else {\n logger.warn(`Unknown AACPacketType: ${data[1]}`)\n }\n }\n\n _parseVideo (data, dts) {\n if (data.length < 6) return\n\n const frameType = (data[0] & 0xf0) >>> 4\n const codecId = data[0] & 0x0f\n\n const track = this.videoTrack\n\n if (\n codecId !== 7 && // AVC\n codecId !== 12 // HEVC\n ) {\n track.reset()\n logger.warn(`Unsupported codecId: ${codecId}`)\n return\n }\n\n const isHevc = codecId === 12\n track.codecType = isHevc ? VideoCodecType.HEVC : VideoCodecType.AVC\n\n const packetType = data[1]\n const cts = (((data[2] << 16) | (data[3] << 8) | (data[4])) << 8) >> 8\n\n if (packetType === 0) { // DecoderConfigurationRecord\n const configData = data.subarray(5)\n const ret = isHevc\n ? HEVC.parseHEVCDecoderConfigurationRecord(configData)\n : AVC.parseAVCDecoderConfigurationRecord(configData)\n if (ret) {\n const { hvcC, sps, ppsArr, spsArr, vpsArr, nalUnitSize } = ret\n if (hvcC) {\n track.hvcC = track.hvcC || hvcC\n }\n if (sps) {\n track.codec = sps.codec\n track.width = sps.width\n track.height = sps.height\n track.sarRatio = sps.sarRatio\n track.fpsNum = sps.fpsNum\n track.fpsDen = sps.fpsDen\n }\n if (spsArr.length) track.sps = spsArr\n if (ppsArr.length) track.pps = ppsArr\n if (vpsArr && vpsArr.length) track.vps = vpsArr\n if (nalUnitSize) track.nalUnitSize = nalUnitSize\n } else {\n logger.warn(`Cannot parse ${isHevc ? 'HEVC' : 'AVC'}DecoderConfigurationRecord`, data)\n }\n } else if (packetType === 1) { // One or more NALUs\n let units = NALu.parseAvcC(data.subarray(5), track.nalUnitSize)\n\n units = this._checkAddMetaNalToUnits(isHevc, units, track)\n\n if (units && units.length) {\n const sample = new VideoSample(dts + cts, dts, units)\n if (frameType === 1) {\n sample.setToKeyframe()\n }\n track.samples.push(sample)\n\n units.forEach(unit => {\n const type = isHevc ? (unit[0] >>> 1) & 0x3f : unit[0] & 0x1f\n switch (type) {\n case 5: // IDR\n case 16: // HEVC BLA_W_LP\n case 17: // HEVC BLA_W_RADL\n case 18: // HEVC BLA_N_LP\n case 19: // HEVC IDR_W_RADL\n case 20: // HEVC IDR_N_LP\n case 21: // HEVC CRA_NUT\n case 22: // HEVC RSV_IRAP_VCL22\n case 23: // HEVC RSV_IRAP_VCL23\n if ((!isHevc && type !== 5) || (isHevc && type === 5)) break\n sample.setToKeyframe()\n break\n case 6: // SEI\n case 39: // HEVC PREFIX_SEI\n case 40: // HEVC SUFFIX_SEI\n if ((!isHevc && type !== 6) || (isHevc && type === 6)) break\n this.metadataTrack.seiSamples.push(new SeiSample(\n NALu.parseSEI(NALu.removeEPB(unit)),\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)),\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","'use strict';\n\nvar _concat = require('./concat');\n\nvar _concat2 = _interopRequireDefault(_concat);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = _concat2.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (ResultConstructor) {\n var totalLength = 0;\n\n for (var _len = arguments.length, arrays = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n arrays[_key - 1] = arguments[_key];\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = arrays[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var arr = _step.value;\n\n totalLength += arr.length;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var result = new ResultConstructor(totalLength);\n var offset = 0;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = arrays[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _arr = _step2.value;\n\n result.set(_arr, offset);\n offset += _arr.length;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return result;\n};","import Concat from 'concat-typed-array'\n\nclass Buffer {\n constructor () {\n this.buffer = new Uint8Array(0)\n }\n\n write (...buffer) {\n const self = this\n buffer.forEach(item => {\n if (item) {\n self.buffer = Concat(Uint8Array, self.buffer, item)\n } else {\n window.console.warn(item)\n }\n })\n }\n\n static writeUint16 (value) {\n return new Uint8Array([\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n\n static writeUint32 (value) {\n return new Uint8Array([\n value >> 24,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n ])\n }\n}\n\nexport default Buffer\n","import { TrackType, VideoCodecType } from '../model'\nimport { concatUint8Array, parse /* hashVal */ } from '../utils'\nimport Buffer from './buffer'\n// import Crypto from './crypto/crypto'\nconst UINT32_MAX = 2 ** 32 - 1\n\nexport class MP4 {\n static types = [\n 'avc1',\n 'avcC',\n 'hvc1',\n 'hvcC',\n 'dinf',\n 'dref',\n 'esds',\n 'ftyp',\n 'hdlr',\n 'mdat',\n 'mdhd',\n 'mdia',\n 'mfhd',\n 'minf',\n 'moof',\n 'moov',\n 'mp4a',\n 'mvex',\n 'mvhd',\n 'pasp',\n 'stbl',\n 'stco',\n 'stsc',\n 'stsd',\n 'stsz',\n 'stts',\n 'tfdt',\n 'tfhd',\n 'traf',\n 'trak',\n 'trex',\n 'tkhd',\n 'vmhd',\n 'smhd',\n 'ctts',\n 'stss',\n 'styp',\n 'pssh',\n 'sidx',\n 'sbgp',\n 'saiz',\n 'saio',\n 'senc',\n 'trun',\n 'encv',\n 'enca',\n 'sinf',\n 'btrt',\n 'frma',\n 'tenc',\n 'schm',\n 'schi',\n 'mehd',\n 'fiel',\n 'sdtp'\n ].reduce((p, c) => {\n p[c] = [c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2), c.charCodeAt(3)]\n return p\n }, Object.create(null));\n\n static HDLR_TYPES = {\n video: new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65, 0x6f, 0x48, 0x61,\n 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]),\n audio: new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x73, 0x6f, 0x75, 0x6e, // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61,\n 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n ])\n }\n\n static FTYPAVC1 = MP4.box(MP4.types.ftyp, new Uint8Array([\n 105, 115, 111, 109, // isom\n 0, 0, 0, 1,\n 105, 115, 111, 109,\n 97, 118, 99, 49 // avc1\n ]))\n\n static FTYPHEV1 = MP4.box(MP4.types.ftyp, new Uint8Array([\n 105, 115, 111, 109, // isom\n 0, 0, 0, 1,\n 105, 115, 111, 109,\n 104, 101, 118, 49 // hev1\n ]))\n\n static DINF = MP4.box(MP4.types.dinf, MP4.box(MP4.types.dref, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0c, // entry_size\n 0x75, 0x72, 0x6c, 0x20, // 'url' type\n 0x00, // version\n 0x00, 0x00, 0x01 // entry_flags\n ])))\n\n static VMHD = MP4.box(MP4.types.vmhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphics mode\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // op color\n ]))\n\n static SMHD = MP4.box(MP4.types.smhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]))\n\n static StblTable = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ])\n\n static STTS = MP4.box(MP4.types.stts, MP4.StblTable)\n\n static STSC = MP4.box(MP4.types.stsc, MP4.StblTable)\n\n static STSZ = MP4.box(MP4.types.stsz, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ]))\n\n static STCO = MP4.box(MP4.types.stco, MP4.StblTable)\n\n static box (type, ...payload) {\n payload = payload.filter(Boolean)\n const size = 8 + payload.reduce((p, c) => (p + c.byteLength), 0)\n const ret = new Uint8Array(size)\n ret[0] = (size >> 24) & 0xff\n ret[1] = (size >> 16) & 0xff\n ret[2] = (size >> 8) & 0xff\n ret[3] = size & 0xff\n ret.set(type, 4)\n let offset = 8\n payload.forEach((data) => {\n ret.set(data, offset)\n offset += data.byteLength\n })\n return ret\n }\n\n static ftyp (tracks) {\n const isHevc = tracks.find(t => t.type === TrackType.VIDEO && t.codecType === VideoCodecType.HEVC)\n return isHevc ? MP4.FTYPHEV1 : MP4.FTYPAVC1\n }\n\n static initSegment (tracks) {\n const ftyp = MP4.ftyp(tracks)\n // console.log('[remux],ftyp ,len ', ftyp.byteLength, hashVal(ftyp.toString()))\n const init = concatUint8Array(ftyp, MP4.moov(tracks))\n // console.log('[remux],init ,len ', init.byteLength, hashVal(init.toString()))\n return init\n }\n\n static pssh (data) {\n // const buffer = new Buffer()\n const content = new Uint8Array(\n [\n 0x01, 0x00, 0x00, 0x00 // version\n ].concat(\n [\n 0x10, 0x77, 0xef, 0xec,\n 0xc0, 0xb2, 0x4d, 0x02,\n 0xac, 0xe3, 0x3c, 0x1e,\n 0x52, 0xe2, 0xfb, 0x4b\n ],\n [0x00, 0x00, 0x00, 0x01],\n parse(data.kid),\n [0x00, 0x00, 0x00, 0x00]\n )\n )\n return MP4.box(MP4.types.pssh, content)\n }\n\n static moov (tracks) {\n if (tracks[0].useEME && (tracks[0].encv || tracks[0].enca)) {\n if (!tracks[0].pssh) {\n tracks[0].pssh = {\n kid: tracks[0].kid\n }\n }\n const pssh = this.pssh(tracks[0].pssh)\n // console.log('[remux],pssh,', hashVal(pssh.toString()))\n return MP4.box(MP4.types.moov,\n MP4.mvhd(tracks[0].mvhdDurtion || tracks[0].duration, tracks[0].mvhdTimecale || tracks[0].timescale),\n MP4.mvex(tracks),\n ...tracks.map((t) => MP4.trak(t)),\n pssh)\n } else {\n return MP4.box(MP4.types.moov,\n MP4.mvhd(tracks[0].mvhdDurtion || tracks[0].duration, tracks[0].mvhdTimecale || tracks[0].timescale),\n ...tracks.map((t) => MP4.trak(t)),\n MP4.mvex(tracks)\n )\n }\n }\n\n static mvhd (duration, timescale = 90000) {\n const mvhd = MP4.box(MP4.types.mvhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,\n 0x00, 0x01, 0x00, 0x00, // rate\n 0x01, 0x00, // volume\n 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // matrix\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0xff, 0xff, 0xff, 0xff // todo 0xff, 0xff, 0xff, 0xff // next_track_ID\n ]))\n // console.log('[remux],mvhd, len,', mvhd.byteLength, hashVal(mvhd.toString()))\n return mvhd\n }\n\n static trak (track) {\n const trak = MP4.box(\n MP4.types.trak,\n MP4.tkhd(track.id, track.tkhdDuration || 0, track.width, track.height),\n MP4.mdia(track)\n )\n // console.log('[remux],trak, len,', trak.byteLength, track.id, hashVal(trak.toString()))\n return trak\n }\n\n static tkhd (id, duration, width = 0, height = 0) {\n const tkhd = MP4.box(MP4.types.tkhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x07, // flags、todo 0x07\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time todo\n (id >> 24) & 0xff, (id >> 16) & 0xff, (id >> 8) & 0xff, id & 0xff,\n 0x00, 0x00, 0x00, 0x00,\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff, // todo (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, 0x00, // /*0x00*/ alternate_group //todo type === 'video' ? 0x01 : 0x00(第二个位置)\n 0x01, 0x00, // /* 0x01 */, 0x00, // non-audio track volume //todo type === 'audio' ? 0x01 : 0x00(第一个位置)\n 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // matrix\n (width >> 8) & 0xff, width & 0xff, 0x00, 0x00,\n (height >> 8) & 0xff, height & 0xff, 0x00, 0x00\n ]))\n // console.log('[remux],tkhd, len,', tkhd.byteLength, hashVal(tkhd.toString()))\n return tkhd\n }\n\n static mdia (track) {\n const mdia = MP4.box(MP4.types.mdia, MP4.mdhd(track.duration, track.timescale), MP4.hdlr(track.type), MP4.minf(track))\n // console.log('[remux],mdia, len,', mdia.byteLength, hashVal(mdia.toString()))\n return mdia\n }\n\n static mdhd (duration, timescale = 90000) {\n const mdhd = MP4.box(MP4.types.mdhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // todo 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >> 24) & 0xff, (timescale >> 16) & 0xff, (timescale >> 8) & 0xff, timescale & 0xff,\n (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff, // (duration >> 24) & 0xff, (duration >> 16) & 0xff, (duration >> 8) & 0xff, duration & 0xff,//todo\n 0x55, 0xc4, // 'und' language (undetermined) //todo 0x15, 0xC7\n 0x00, 0x00 // pre_defined\n ]))\n // console.log('[remux],mdhd, len,', mdhd.byteLength, hashVal(mdhd.toString()))\n return mdhd\n }\n\n static hdlr (type) {\n const hdlr = MP4.box(MP4.types.hdlr, MP4.HDLR_TYPES[type])\n // console.log('[remux],hdlr, len,', hdlr.byteLength, hashVal(hdlr.toString()))\n return hdlr\n }\n\n static minf (track) {\n const minf = MP4.box(MP4.types.minf, track.type === TrackType.VIDEO ? MP4.VMHD : MP4.SMHD, MP4.DINF, MP4.stbl(track))\n // console.log('[remux],minf, len,', minf.byteLength, hashVal(minf.toString()))\n return minf\n }\n\n static stbl (track) {\n const extBox = []\n if (track && track.ext) {\n track.ext.stss && extBox.push(MP4.stss(track.ext.stss.entries))\n // track.ext.stss && extBox.push(MP4.ctts(track.ext.stss.entries))\n }\n const stbl = MP4.box(MP4.types.stbl, MP4.stsd(track), MP4.STTS, extBox[0], MP4.STSC, MP4.STSZ, MP4.STCO)\n // console.log('[remux],stbl, len,', stbl.byteLength, hashVal(stbl.toString()))\n return stbl\n }\n\n static stsd (track) {\n let content\n if (track.type === 'audio') {\n if (track.useEME && track.enca) {\n content = MP4.enca(track)\n // console.log('[remux],enca, len,', content.byteLength, track.type, hashVal(content.toString()))\n } else {\n content = MP4.mp4a(track)\n // console.log('[remux],mp4a, len,', content.byteLength, track.type, hashVal(content.toString()))\n }\n } else if (track.useEME && track.encv) {\n content = MP4.encv(track)\n // console.log('[remux],encv, len,', content.byteLength, track.type, hashVal(content.toString()))\n } else {\n content = MP4.avc1hev1(track)\n // console.log('[remux],avc1hev1, len,', content.byteLength, track.type, hashVal(content.toString()))\n }\n const stsd = MP4.box(MP4.types.stsd, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01 // entry_count\n ]), content)\n // console.log('[remux],stsd, len,', stsd.byteLength, hashVal(stsd.toString()))\n return stsd\n }\n\n static enca (data) {\n const channelCount = data.enca.channelCount\n const sampleRate = data.enca.sampleRate\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n (sampleRate >> 8) & 0xff,\n sampleRate & 0xff, //\n 0x00, 0x00\n ])\n const esds = MP4.esds(data.config)\n // console.log('[remux],esds, len,', esds.byteLength, hashVal(esds.toString()))\n const sinf = MP4.sinf(data.enca)\n // console.log('[remux],sinf, len,', sinf.byteLength, hashVal(sinf.toString()))\n return MP4.box(MP4.types.enca, content, esds, sinf)\n }\n\n static encv (track) {\n const sps = track.sps.length > 0 ? track.sps[0] : []\n const pps = track.pps.length > 0 ? track.pps[0] : []\n const width = track.width\n const height = track.height\n const hSpacing = track.sarRatio[0]\n const vSpacing = track.sarRatio[1]\n\n const content = new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (width >> 8) & 0xff,\n width & 0xff, // width\n (height >> 8) & 0xff,\n height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n\n 0x12,\n 0x64, 0x61, 0x69, 0x6C, // dailymotion/hls.js\n 0x79, 0x6D, 0x6F, 0x74,\n 0x69, 0x6F, 0x6E, 0x2F,\n 0x68, 0x6C, 0x73, 0x2E,\n 0x6A, 0x73, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0x11, 0x11]) // pre_defined = -1;\n const avcc = new Uint8Array([\n 0x01, // version\n sps[1], // profile\n sps[2], // profile compatible\n sps[3], // level\n 0xfc | 3,\n 0xE0 | 1, // 目前只处理一个sps\n sps.length >>> 8 & 0xff,\n sps.length & 0xff\n ].concat(...sps).concat([\n 0x01,\n pps.length >>> 8 & 0xff,\n pps.length & 0xff\n ]).concat(...pps))\n const btrt = new Uint8Array([\n 0x00, 0x00, 0x58, 0x39,\n 0x00, 0x0F, 0xC8, 0xC0,\n 0x00, 0x04, 0x56, 0x48\n ])\n const sinf = MP4.sinf(track.encv)\n const pasp = new Uint8Array([\n (hSpacing >> 24), // hSpacing\n (hSpacing >> 16) & 0xff,\n (hSpacing >> 8) & 0xff,\n hSpacing & 0xff,\n (vSpacing >> 24), // vSpacing\n (vSpacing >> 16) & 0xff,\n (vSpacing >> 8) & 0xff,\n vSpacing & 0xff\n ])\n return MP4.box(MP4.types.encv, content, MP4.box(MP4.types.avcC, avcc), MP4.box(MP4.types.btrt, btrt), sinf, MP4.box(MP4.types.pasp, pasp))\n }\n\n static schi (data) {\n const content = new Uint8Array([])\n const tenc = MP4.tenc(data)\n return MP4.box(MP4.types.schi, content, tenc)\n }\n\n static tenc (data) {\n // 用于每个track的加密参数(包括KID、初始化向量、加密标志位),包含在TrackEncryptionBox(‘tenc’)中。\n const content = new Uint8Array(\n [\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // skip\n data.default_IsEncrypted & 0xff, // default_isProtected\n data.default_IV_size & 0xff // default_Per_Sample_IV_Size\n ].concat(parse(data.default_KID)))\n return MP4.box(MP4.types.tenc, content)\n }\n\n static sinf (data) {\n const content = new Uint8Array([])\n const frma = new Uint8Array([\n data.data_format.charCodeAt(0),\n data.data_format.charCodeAt(1),\n data.data_format.charCodeAt(2),\n data.data_format.charCodeAt(3)\n ])\n const schm = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00,\n 0x63, 0x65, 0x6E, 0x63, // cenc\n 0x00, 0x01, 0x00, 0x00 // version\n ])\n const schi = MP4.schi(data)\n return MP4.box(MP4.types.sinf, content, MP4.box(MP4.types.frma, frma), MP4.box(MP4.types.schm, schm), schi)\n }\n\n static avc1hev1 (track) {\n const isHevc = track.codecType === VideoCodecType.HEVC\n const typ = isHevc ? MP4.types.hvc1 : MP4.types.avc1\n const config = isHevc ? MP4.hvcC(track) : MP4.avcC(track)\n const boxes = [\n new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pre_defined\n (track.width >> 8) & 0xff, track.width & 0xff, // width\n (track.height >> 8) & 0xff, track.height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // compressor name\n 0x00, 0x18, // depth\n 0x11, 0x11 // pre_defined = -1 //todo\n ]), config\n ]\n // console.log('[remux],avc1hev1_0, len,', boxes[0].byteLength, hashVal(boxes[0].toString()))\n // console.log('[remux],avc1hev1_1, len,', boxes[1].byteLength, hashVal(boxes[1].toString()))\n if (isHevc) {\n boxes.push(MP4.box(MP4.types.fiel, new Uint8Array([0x01, 0x00])))\n // console.log('[remux],fiel, len,', boxes[2].byteLength, hashVal(boxes[2].toString()))\n } else if (track.sarRatio && track.sarRatio.length > 1) {\n boxes.push(MP4.pasp(track.sarRatio))\n // console.log('[remux],pasp, len,', boxes[2].byteLength, hashVal(boxes[2].toString()))\n }\n return MP4.box(typ, ...boxes)\n }\n\n static avcC (track) {\n const sps = []\n const pps = []\n\n let len\n track.sps.forEach((s) => {\n len = s.byteLength\n sps.push((len >>> 8) & 0xff)\n sps.push(len & 0xff)\n sps.push(...s)\n })\n\n track.pps.forEach((p) => {\n len = p.byteLength\n pps.push((len >>> 8) & 0xff)\n pps.push(len & 0xff)\n pps.push(...p)\n })\n\n return MP4.box(MP4.types.avcC, new Uint8Array([\n 0x01, // configurationVersion\n sps[3], // AVCProfileIndication\n sps[4], // profile_compatibility\n sps[5], // AVCLevelIndication\n 0xfc | 3, // lengthSizeMinusOne\n 0xe0 | track.sps.length // 3bit reserved (111) + numOfSequenceParameterSets\n ].concat(...sps)\n .concat([track.pps.length]) // numOfPictureParameterSets\n .concat(...pps)))\n }\n\n static hvcC (track) {\n const hvcC = track.hvcC\n if (hvcC instanceof ArrayBuffer || hvcC instanceof Uint8Array) return hvcC\n const { vps, sps, pps } = track\n let data\n if (hvcC) {\n const pcf = hvcC.generalProfileCompatibilityFlags\n const cif = hvcC.generalConstraintIndicatorFlags\n const numOfArrays = (vps.length && 1) + (sps.length && 1) + (pps.length && 1)\n data = [\n 0x01, // configurationVersion\n hvcC.generalProfileSpace << 6 | hvcC.generalTierFlag << 5 | hvcC.generalProfileIdc,\n pcf >>> 24, pcf >>> 16, pcf >>> 8, pcf,\n cif[0], cif[1], cif[2], cif[3], cif[4], cif[5],\n hvcC.generalLevelIdc,\n 0xF0, 0x00, // min_spatial_segmentation_idc\n 0xFC, // parallelismType\n hvcC.chromaFormatIdc | 0xFC,\n hvcC.bitDepthLumaMinus8 | 0xF8,\n hvcC.bitDepthChromaMinus8 | 0xF8,\n 0x00, 0x00, // avgFrameRate\n hvcC.numTemporalLayers << 3 | hvcC.temporalIdNested << 2 | 3,\n numOfArrays\n ]\n const write = (x) => {\n data.push(x.length >> 8, x.length)\n data.push(...x)\n }\n if (vps.length) {\n data.push(0xA0, 0x00, vps.length)\n vps.forEach(write)\n }\n if (sps.length) {\n data.push(0xA1, 0x00, sps.length)\n sps.forEach(write)\n }\n if (pps.length) {\n data.push(0xA2, 0x00, pps.length)\n pps.forEach(write)\n }\n } else {\n data = [\n 0x01, // configurationVersion\n 0x01, // profile_space + tier_flag + profile_idc\n 0x60, 0x00, 0x00, 0x00, // general_profile_compatibility\n 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, // constraint_indicator_flags\n 0x5D, // level_idc=90\n 0xF0, 0x00, 0xFC, 0xFD, // profile_compatibility_indications\n 0xF8, // ‘11111’b + bitDepthLumaMinus8\n 0xF8, // ‘11111’b + bitDepthChromaMinus8\n 0x00, 0x00, // avgFrameRate\n 0x0F, // constantFrameRate + numTemporalLayers + ‘1’b + lengthSizeMinusOne\n 0x03, // numOfArrays\n\n // vps\n 0xA0, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x18, // nalUnitLength\n 0x40, 0x01, 0x0C, 0x01, 0xFF, 0xFF, 0x01, 0x60, 0x00, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x5D, 0x99, 0x98, 0x09,\n\n // sps\n 0xA1, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x2D, // nalUnitLength\n 0x42, 0x01, 0x01, 0x01, 0x60, 0x00, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x5D, 0xA0, 0x02,\n 0x80, 0x80, 0x2D, 0x16, 0x59, 0x99, 0xA4, 0x93, 0x2B, 0x9A, 0x80, 0x80, 0x80, 0x82, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00,\n 0x00, 0x03, 0x00, 0x32, 0x10,\n\n // pps\n 0xA2, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x07, // nalUnitLength\n 0x44, 0x01, 0xC1, 0x72, 0xB4, 0x62, 0x40\n ]\n }\n return MP4.box(MP4.types.hvcC, new Uint8Array(data))\n }\n\n static pasp ([hSpacing, vSpacing]) {\n return MP4.box(MP4.types.pasp, new Uint8Array([\n hSpacing >> 24, (hSpacing >> 16) & 0xff, (hSpacing >> 8) & 0xff, hSpacing & 0xff,\n vSpacing >> 24, (vSpacing >> 16) & 0xff, (vSpacing >> 8) & 0xff, vSpacing & 0xff\n ]))\n }\n\n static mp4a (track) {\n return MP4.box(MP4.types.mp4a, new Uint8Array([\n 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, track.channelCount,\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n (track.sampleRate >> 8) & 0xff, track.sampleRate & 0xff,\n 0x00, 0x00\n ]), track.config.length ? MP4.esds(track.config) : undefined)\n }\n\n static esds (config) {\n const len = config.length\n const esds = MP4.box(MP4.types.esds, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x03, // tag\n 0x17 + len, // length\n 0x00, 0x00, // ES_ID\n 0x00, // streamDependenceFlag, URL_flag, reserved, streamPriority\n 0x04, // tag\n 0x0f + len, // length\n 0x40, // object type\n 0x15, // streamType\n 0x00, 0x06, 0x00, // bufferSizeDB\n 0x00, 0x00, 0xda, 0xc0, // maxBitrate\n 0x00, 0x00, 0xda, 0xc0, // avgBitrate\n 0x05 // tag, DecoderSpecificInfoTag\n ].concat([len])\n .concat(config)\n .concat(\n [0x06, 0x01, 0x02]// GASpecificConfig\n )\n ))\n // console.log('[remux],esds ,len ', esds.byteLength, hashVal(esds.toString()))\n return esds\n }\n\n static mvex (tracks) {\n // const mehd = MP4.box(MP4.types.mehd, this.extension(0, 0), Buffer.writeUint32(tracks[0].tkhdDuration))\n // const mvex = MP4.box(MP4.types.mvex, mehd, MP4.trex1(1), MP4.trex2(2))\n // // console.log('[remux],mvex, len,', mvex.byteLength, hashVal(mvex.toString()))\n // const mvex = MP4.box(MP4.types.mvex, MP4.trex1(1), MP4.trex2(2))\n const mvex = MP4.box(MP4.types.mvex, ...tracks.map((t) => MP4.trex(t.id)))\n // console.log('[remux],mvex, len,', mvex.byteLength, hashVal(mvex.toString()))\n return mvex\n }\n\n static trex (id) {\n const trex = MP4.box(MP4.types.trex, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n id >> 24, (id >> 16) & 0xff, (id >> 8) & 0xff, id & 0xff, // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ]))\n // console.log('[remux],trex, len,', trex.byteLength, hashVal(trex.toString()))\n return trex\n }\n\n static trex1 (id) {\n const trex = MP4.box(MP4.types.trex, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x02, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x00 // default_sample_flags\n ]))\n // console.log('[remux],trex, len,', trex.byteLength, hashVal(trex.toString()))\n return trex\n }\n\n static trex2 (id) {\n const trex = MP4.box(MP4.types.trex, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0xff,\n (id >> 8) & 0xff,\n (id & 0xff), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x04, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x02, 0x00, 0x00, 0x00 // default_sample_flags\n ]))\n // console.log('[remux],trex, len,', trex.byteLength, hashVal(trex.toString()))\n return trex\n }\n\n static moof (tracks) {\n const moof = MP4.box(MP4.types.moof, MP4.mfhd(tracks[0].samples ? tracks[0].samples[0].gopId : 0), ...tracks.map((t) => MP4.traf(t)))\n // console.log('[remux],moof, len', moof.byteLength)\n return moof\n // return MP4.box(MP4.types.moof, MP4.mfhd(tracks[0].gopId), ...tracks.map((t) => MP4.traf(t)))\n }\n\n static mfhd (sequenceNumber) {\n // sequenceNumber += 1\n const mfhd = MP4.box(MP4.types.mfhd, new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n sequenceNumber >> 24, (sequenceNumber >> 16) & 0xff, (sequenceNumber >> 8) & 0xff, sequenceNumber & 0xff\n ]))\n // console.log('[remux],mfhd, len,', mfhd.byteLength, hashVal(mfhd.toString()))\n return mfhd\n }\n\n static traf (track) {\n const tfhd = MP4.tfhd(track.id)\n // console.log('[remux],tfhd, len,', tfhd.byteLength, hashVal(tfhd.toString()), ', trackid = ', track.id)\n // console.log('[remux],tfdt,baseMediaDecodeTime,', track.baseMediaDecodeTime)\n const tfdt = MP4.tfdt(track, track.baseMediaDecodeTime)\n // 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.id === 1) {\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.id === 1) {\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.id === 1 ? [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.id === 1) {\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.id === 1) {\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.id === 1 ? 16 : 8\n const flag = data.id === 1 ? 2 : 0\n let samples = []\n let samplesLength = 0\n if (data.id === 1) {\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.id === 2 && 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.id === 1) {\n let sencLength = 0\n let samples\n if (data.videoSenc) {\n samples = data.videoSenc\n }\n if (data.id === 1) {\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","import { MP4 } from './mp4'\nimport { concatUint8Array } from '../utils'\nimport { Logger } from './logger'\n\n/**\n * @typedef {Object} RemuxResult\n * @property {Uint8Array} [videoInitSegment]\n * @property {Uint8Array} [audioInitSegment]\n * @property {Uint8Array} [videoSegment]\n * @property {Uint8Array} [audioSegment]\n */\n\nexport class FMP4Remuxer {\n /**\n * @param {import('../model').VideoTrack} videoTrack\n * @param {import('../model').AudioTrack} audioTrack\n */\n constructor (videoTrack, audioTrack, options) {\n this.videoTrack = videoTrack\n this.audioTrack = audioTrack\n const browserVersions = /Chrome\\/([^.]+)/.exec(navigator.userAgent)\n this.forceFirstIDR = browserVersions && Number(browserVersions[1]) < 50\n this.log = new Logger('FMP4Remuxer', options && options.openLog ? !options.openLog : true)\n }\n\n /**\n * @param {boolean} [createInit=false]\n * @returns {RemuxResult}\n */\n remux (createInit = false, options = {}) {\n const videoTrack = this.videoTrack\n const audioTrack = this.audioTrack\n const hasVideo = videoTrack.exist()\n const hasAudio = audioTrack.exist()\n\n let videoInitSegment\n let audioInitSegment\n\n let initSegment\n const tracks = []\n\n if (createInit) {\n if (options && options.initMerge) {\n if (hasVideo) {\n tracks.push(this.videoTrack)\n }\n if (hasAudio) {\n tracks.push(this.audioTrack)\n }\n initSegment = MP4.initSegment(tracks)\n } else {\n if (hasVideo) videoInitSegment = MP4.initSegment([this.videoTrack])\n if (hasAudio) audioInitSegment = MP4.initSegment([this.audioTrack])\n }\n }\n\n let videoSegment\n let audioSegment\n if (hasVideo && videoTrack.hasSample()) {\n videoSegment = this._remuxVideo()\n }\n\n if (hasAudio && audioTrack.hasSample()) {\n audioSegment = this._remuxAudio()\n }\n\n videoTrack.samples = []\n audioTrack.samples = []\n\n return {\n initSegment,\n videoInitSegment,\n audioInitSegment,\n videoSegment,\n audioSegment\n }\n }\n\n _remuxVideo () {\n const track = this.videoTrack\n if (this.forceFirstIDR) {\n track.samples[0].flag = { dependsOn: 2, isNonSyncSample: 0 }\n }\n const samples = track.samples\n\n let mdatSize = 0\n\n samples.forEach((s) => {\n mdatSize += s.units.reduce((t, c) => (t + c.byteLength), 0)\n mdatSize += (s.units.length * 4)\n })\n\n const mdata = new Uint8Array(mdatSize)\n const mdatView = new DataView(mdata.buffer)\n\n for (let i = 0, l = samples.length, offset = 0, sample; i < l; i++) {\n sample = samples[i]\n\n let sampleSize = 0\n sample.units.forEach((u) => {\n mdatView.setUint32(offset, u.byteLength)\n offset += 4\n mdata.set(u, offset)\n offset += u.byteLength\n sampleSize += (4 + u.byteLength)\n })\n sample.size = sampleSize\n }\n const mdat = MP4.mdat(mdata)\n\n if (!track.isVideoEncryption && !track.isAudioEncryption) {\n const moof = MP4.moof([track])\n return concatUint8Array(moof, mdat)\n } else {\n const styp = MP4.styp()\n const sidx = MP4.sidx(track)\n const moof = MP4.moof([track])\n const videoData = concatUint8Array(styp, sidx, moof, mdat)\n return videoData\n }\n }\n\n _remuxAudio () {\n const track = this.audioTrack\n const mdata = new Uint8Array(track.samples.reduce((t, c) => (t + c.size), 0))\n track.samples.reduce((offset, s) => {\n mdata.set(s.data, offset)\n return offset + s.size\n }, 0)\n const mdat = MP4.mdat(mdata)\n if (!track.isVideoEncryption && !track.isAudioEncryption) {\n const moof = MP4.moof([track])\n return concatUint8Array(moof, mdat)\n } else {\n const styp = MP4.styp()\n const sidx = MP4.sidx(track)\n const moof = MP4.moof([track])\n const audioData = concatUint8Array(styp, sidx, moof, mdat)\n return audioData\n }\n }\n\n reset () {\n this.videoTrack.reset()\n this.audioTrack.reset()\n }\n}\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","\nexport const InnerEvent = {\n DEMUXED_TRACK: 'demuxedtrack'\n}\n","import { FlvDemuxer, FMP4Remuxer, WarningType } from 'xgplayer-transmuxer'\nimport { MSE, Buffer, EVENT, ERR, StreamingError, Logger, concatUint8Array } from 'xgplayer-streaming-shared'\nimport { InnerEvent } from '../constants'\nconst logger = new Logger('BufferService')\n\nexport class BufferService {\n /** @type {import('../index').Flv | null} */\n flv = null\n\n _demuxer = new FlvDemuxer()\n _remuxer = null\n _mse = null\n _softVideo = null\n\n _sourceCreated = false\n\n _needInitSegment = true\n _discontinuity = true\n _contiguous = false\n\n _initSegmentId = ''\n\n _cachedBuffer = null\n\n _demuxStartTime = 0\n\n _analyzeDuration = 0\n\n get baseDts () {\n return this._demuxer?._fixer?._baseDts\n }\n\n /**\n * @param {import('../index').Flv} flv\n * @param {Object} [softVideo]\n */\n constructor (flv, softVideo, analyzeDuration = 20000) {\n this.flv = flv\n this._analyzeDuration = analyzeDuration\n\n if (softVideo) { // soft decode\n this._softVideo = softVideo\n } else {\n this._remuxer = new FMP4Remuxer(this._demuxer.videoTrack, this._demuxer.audioTrack)\n this._mse = new MSE()\n this._mse.bindMedia(flv.media)\n }\n }\n\n seamlessSwitch () {\n this._needInitSegment = true\n this._discontinuity = true\n this._contiguous = true\n this._initSegmentId = ''\n }\n\n unContiguous (startTime) {\n this._contiguous = false\n this._demuxStartTime = startTime\n }\n\n async reset (reuseMse = false) {\n if (this._mse && !reuseMse) {\n await this._mse.unbindMedia()\n await this._mse.bindMedia(this.flv.media)\n }\n this._needInitSegment = true\n this._discontinuity = true\n this._contiguous = false\n this._sourceCreated = false\n this._initSegmentId = ''\n }\n\n async endOfStream () {\n if (this._mse) {\n if (this._sourceCreated) {\n await this._mse.endOfStream()\n this.flv.emit(EVENT.BUFFEREOS)\n }\n } else if (this._softVideo) {\n this._softVideo.endOfStream()\n }\n }\n\n async updateDuration (duration) {\n if (this._mse) {\n if (!this._mse.isOpened) {\n await this._mse.open()\n }\n logger.debug('update duration', duration)\n await this._mse.updateDuration(duration)\n }\n }\n\n async destroy () {\n if (this._mse) {\n await this._mse.unbindMedia()\n }\n\n this._mse = null\n this._softVideo = null\n this._demuxer = null\n this._remuxer = null\n }\n\n async appendBuffer (chunk) {\n if (this._cachedBuffer) {\n chunk = concatUint8Array(this._cachedBuffer, chunk)\n this._cachedBuffer = null\n }\n\n const demuxer = this._demuxer\n if (!chunk || !chunk.length || !demuxer) return\n\n try {\n demuxer.demuxAndFix(chunk, this._discontinuity, this._contiguous, this._demuxStartTime)\n } catch (error) {\n throw new StreamingError(ERR.DEMUX, ERR.SUB_TYPES.FLV, error)\n }\n const { videoTrack, audioTrack, metadataTrack } = demuxer\n\n const videoExist = videoTrack.exist()\n const audioExist = audioTrack.exist()\n if (\n (!videoExist && videoTrack.present) ||\n (!audioExist && audioTrack.present)\n ) {\n let duration = 0\n const track = videoExist ? videoTrack : audioExist ? audioTrack : undefined\n if (track && track.samples.length) {\n duration = ((track.samples[track.samples.length - 1].originPts - track.samples[0].originPts) / track.timescale) * 1000\n }\n if (duration > this._analyzeDuration) {\n logger.warn(`analyze duration exceeded, ${duration}ms`, track)\n videoTrack.present = videoExist\n audioTrack.present = audioExist\n this.flv.emit(EVENT.ANALYZE_DURATION_EXCEEDED, { duration })\n } else {\n this._cachedBuffer = chunk\n return\n }\n }\n\n const videoType = videoTrack.type\n const audioType = audioTrack.type\n this._fireEvents(videoTrack, audioTrack, metadataTrack)\n this._discontinuity = false\n this._contiguous = true\n this._demuxStartTime = 0\n\n const mse = this._mse\n\n // emit demuxed track\n this.flv.emit(InnerEvent.DEMUXED_TRACK, videoTrack)\n\n const newId = `${videoTrack.codec}/${videoTrack.width}/${videoTrack.height}/${audioTrack.codec}/${audioTrack.config}`\n if (newId !== this._initSegmentId) {\n this._needInitSegment = true\n this._initSegmentId = newId\n this._emitMetaParsedEvent(videoTrack, audioTrack)\n }\n\n if (mse) {\n if (!this._sourceCreated) {\n await mse.open()\n if (videoExist) {\n logger.log(`codec: video/mp4;codecs=${videoTrack.codec}`)\n mse.createSource(videoType, `video/mp4;codecs=${videoTrack.codec}`)\n }\n if (audioExist) {\n logger.log(`codec: audio/mp4;codecs=${audioTrack.codec}`)\n mse.createSource(audioType, `audio/mp4;codecs=${audioTrack.codec}`)\n }\n this._sourceCreated = true\n this.flv.emit(EVENT.SOURCEBUFFER_CREATED)\n }\n\n let remuxResult\n try {\n remuxResult = this._remuxer.remux(this._needInitSegment)\n } catch (error) {\n throw new StreamingError(ERR.REMUX, ERR.SUB_TYPES.FMP4, error)\n }\n\n if (this._needInitSegment && !remuxResult.videoInitSegment && !remuxResult.audioInitSegment) {\n return\n }\n\n this._needInitSegment = false\n\n const p = []\n if (remuxResult.videoInitSegment) p.push(mse.append(videoType, remuxResult.videoInitSegment))\n if (remuxResult.audioInitSegment) p.push(mse.append(audioType, remuxResult.audioInitSegment))\n if (remuxResult.videoSegment) p.push(mse.append(videoType, remuxResult.videoSegment))\n if (remuxResult.audioSegment) p.push(mse.append(audioType, remuxResult.audioSegment))\n\n return Promise.all(p)\n } else if (this._softVideo) {\n this._softVideo.appendBuffer(videoTrack, audioTrack)\n }\n }\n\n async evictBuffer (bufferBehind) {\n const media = this.flv.media\n if (!this._mse || !this._demuxer || !media || !bufferBehind || bufferBehind < 0) return\n const currentTime = media.currentTime\n const removeEnd = currentTime - bufferBehind\n if (removeEnd <= 0) return\n const start = Buffer.start(Buffer.get(media))\n if (start + 1 >= removeEnd) return\n return this._mse.clearBuffer(0, removeEnd).then(() => this.flv.emit(EVENT.REMOVE_BUFFER, { removeEnd }))\n }\n\n _emitMetaParsedEvent (videoTrack, audioTrack) {\n if (videoTrack.exist()) {\n this.flv.emit(EVENT.METADATA_PARSED, {\n type: 'video',\n track: videoTrack,\n meta: {\n codec: videoTrack.codec,\n timescale: videoTrack.timescale,\n width: videoTrack.width,\n height: videoTrack.height,\n sarRatio: videoTrack.sarRatio,\n baseDts: videoTrack.baseDts\n }\n })\n }\n if (audioTrack.exist()) {\n this.flv.emit(EVENT.METADATA_PARSED, {\n type: 'audio',\n track: audioTrack,\n meta: {\n codec: audioTrack.codec,\n channelCount: audioTrack.channelCount,\n sampleRate: audioTrack.sampleRate,\n timescale: audioTrack.timescale,\n baseDts: audioTrack.baseDts\n }\n })\n }\n\n logger.debug('track parsed', videoTrack, audioTrack)\n }\n\n _fireEvents (videoTrack, audioTrack, metadataTrack) {\n logger.debug(videoTrack.samples, audioTrack.samples)\n\n metadataTrack.flvScriptSamples.forEach(sample => {\n this.flv.emit(EVENT.FLV_SCRIPT_DATA, sample)\n logger.debug('flvScriptData', sample)\n })\n\n videoTrack.samples.forEach((sample) => {\n if (sample.keyframe) {\n this.flv.emit(EVENT.KEYFRAME, { pts: sample.pts })\n }\n })\n\n videoTrack.warnings.forEach(warn => {\n let type\n switch (warn.type) {\n case WarningType.LARGE_AV_SHIFT:\n type = EVENT.LARGE_AV_FIRST_FRAME_GAP_DETECT\n break\n case WarningType.LARGE_VIDEO_GAP:\n type = EVENT.LARGE_VIDEO_DTS_GAP_DETECT\n break\n case WarningType.LARGE_VIDEO_GAP_BETWEEN_CHUNK:\n type = EVENT.MAX_DTS_DELTA_WITH_NEXT_SEGMENT_DETECT\n break\n default:\n }\n\n if (type) this.flv.emit(EVENT.STREAM_EXCEPTION, { ...warn, type })\n logger.warn('video exception', warn)\n })\n audioTrack.warnings.forEach(warn => {\n let type\n switch (warn.type) {\n case WarningType.LARGE_AUDIO_GAP:\n type = EVENT.LARGE_AUDIO_DTS_GAP_DETECT\n break\n case WarningType.AUDIO_FILLED:\n type = EVENT.AUDIO_GAP_DETECT\n break\n case WarningType.AUDIO_DROPPED:\n type = EVENT.AUDIO_OVERLAP_DETECT\n break\n default:\n }\n\n if (type) this.flv.emit(EVENT.STREAM_EXCEPTION, { ...warn, type })\n logger.warn('audio exception', warn)\n })\n\n metadataTrack.seiSamples.forEach(sei => {\n this.flv.emit(EVENT.SEI, {\n ...sei,\n sei: {\n code: sei.data.type,\n content: sei.data.payload,\n dts: sei.pts\n }\n })\n })\n }\n}\n","export function searchKeyframeIndex (list, value) {\n let idx = 0\n\n const last = list.length - 1\n let mid = 0\n let lbound = 0\n let ubound = last\n\n if (value < list[0]) {\n idx = 0\n lbound = ubound + 1 // skip search\n }\n\n while (lbound <= ubound) {\n mid = lbound + Math.floor((ubound - lbound) / 2)\n if (mid === last || (value >= list[mid] && value < list[mid + 1])) {\n idx = mid\n break\n } else if (list[mid] < value) {\n lbound = mid + 1\n } else {\n ubound = mid - 1\n }\n }\n\n return idx\n}\n","import EventEmitter from 'eventemitter3'\nimport { NetLoader, Buffer, MSE, EVENT, StreamingError, BandwidthService, SeiService, GapService, isMediaPlaying, Logger, getVideoPlaybackQuality } from 'xgplayer-streaming-shared'\nimport { Logger as TransmuxerLogger } from 'xgplayer-transmuxer'\nimport { BufferService } from './services'\nimport { getOption } from './options'\nimport { searchKeyframeIndex } from './utils'\n\nexport const logger = new Logger('flv')\n\nexport class Flv extends EventEmitter {\n /** @type {HTMLMediaElement | null} */\n media = null\n\n _loading = false\n\n /** @type {import('./options').FlvOption} */\n _opts = null\n\n /** @type {BufferService | null} */\n _bufferService = null\n /** @type {GapService | null} */\n _gapService = null\n\n _mediaLoader = null\n _maxChunkWaitTimer = null\n\n _tickTimer = null\n _tickInterval = 500\n\n _noEndOfStreamOnDone = false\n _urlSwitching = false\n _seamlessSwitching = false\n\n _keyframes = null\n\n _acceptRanges = true\n\n /**\n * @param {import('./options').FlvOption} opts\n */\n constructor (opts) {\n super()\n this._opts = getOption(opts)\n this.media = this._opts.media || document.createElement('video')\n this._opts.media = null\n\n this._mediaLoader = new NetLoader({\n ...this._opts.fetchOptions,\n retry: this._opts.retryCount,\n retryDelay: this._opts.retryDelay,\n timeout: this._opts.loadTimeout,\n onRetryError: this._onRetryError,\n onProgress: this._onProgress,\n responseType: 'arraybuffer'\n })\n\n this._bufferService = new BufferService(this, this._opts.softDecode ? this.media : undefined, this._opts.analyzeDuration)\n this._seiService = new SeiService(this)\n this._bandwidthService = new BandwidthService()\n\n if (!this._opts.softDecode) {\n this._gapService = new GapService()\n }\n\n this.media.addEventListener('play', this._onPlay)\n this.media.addEventListener('seeking', this._onSeeking)\n this.media.addEventListener('timeupdate', this._onTimeupdate)\n\n this.on(EVENT.FLV_SCRIPT_DATA, this._onFlvScriptData)\n }\n\n get version () {\n return __VERSION__\n }\n\n get isLive () {\n return this._opts.isLive\n }\n\n get baseDts () {\n return this._bufferService?.baseDts\n }\n\n get seekable () {\n return !!this._keyframes && this._acceptRanges\n }\n\n speedInfo () {\n return {\n speed: this._bandwidthService.getLatestSpeed(),\n avgSpeed: this._bandwidthService.getAvgSpeed()\n }\n }\n\n bufferInfo (maxHole = 0.1) {\n return Buffer.info(Buffer.get(this.media), this.media?.currentTime, maxHole)\n }\n\n playbackQuality () {\n return getVideoPlaybackQuality(this.media)\n }\n\n /**\n * load or reload source\n * @param {string} [url]\n * @return {Promise}\n */\n async load (url, reuseMse = false) {\n if (!this._bufferService) return\n await this._reset(reuseMse)\n\n this._loadData(url)\n\n clearTimeout(this._tickTimer)\n this._tickTimer = setTimeout(this._tick, this._tickInterval)\n }\n\n /** @return {Promise} */\n async replay (seamlesslyReload = this._opts.seamlesslyReload, isPlayEmit) {\n if (!this.media) return\n if (seamlesslyReload) {\n this._noEndOfStreamOnDone = true\n await this._clear()\n\n setTimeout(() => {\n this._loadData(this._opts.url)\n this._bufferService.seamlessSwitch()\n this._seamlessSwitching = true\n })\n } else {\n await this.load()\n }\n return this.media.play(!isPlayEmit)\n }\n\n disconnect () {\n logger.debug('disconnect!')\n return this._clear()\n }\n\n /**\n * @param {string} url\n * @param {boolean} [seamless=false]\n */\n async switchURL (url, seamless) {\n if (!this._bufferService) return\n if (!seamless || !this._opts.isLive) {\n await this.load(url)\n this._urlSwitching = true\n return this.media.play(true)\n }\n\n this._noEndOfStreamOnDone = true\n await this._clear()\n\n setTimeout(() => {\n this._loadData(url)\n this._bufferService.seamlessSwitch()\n this._urlSwitching = true\n this._seamlessSwitching = true\n })\n }\n\n /** @return {Promise} */\n async destroy () {\n if (!this.media) return\n this.removeAllListeners()\n this._seiService.reset()\n this.media.removeEventListener('play', this._onPlay)\n this.media.removeEventListener('seeking', this._onSeeking)\n this.media.removeEventListener('timeupdate', this._onTimeupdate)\n await Promise.all([this._clear(), this._bufferService.destroy()])\n this.media = null\n this._bufferService = null\n }\n\n static isSupported () {\n // hack\n return MSE.isSupported() || !!WebAssembly\n }\n\n static enableLogger () {\n Logger.enable()\n TransmuxerLogger.enable()\n }\n\n static disableLogger () {\n Logger.disable()\n TransmuxerLogger.disable()\n }\n\n _emitError (error, endOfStream = true) {\n logger.table(error)\n logger.error(error)\n logger.error(this.media?.error)\n if (this._urlSwitching) {\n this._urlSwitching = false\n this._seamlessSwitching = false\n this.emit(EVENT.SWITCH_URL_FAILED, error)\n }\n this.emit(EVENT.ERROR, error)\n if (endOfStream) {\n this._seiService.reset()\n this._end()\n }\n }\n\n async _reset (reuseMse = false) {\n this._seiService.reset()\n this._bandwidthService.reset()\n await this._clear()\n await this._bufferService.reset(reuseMse)\n }\n\n async _loadData (url, range) {\n if (url) this._opts.url = url\n url = this._opts.url\n if (!url) throw new Error('Source url is missing')\n\n this.emit(EVENT.LOAD_START, { url })\n\n logger.debug('load data, loding:', this._loading, url)\n\n if (this._loading) {\n await this._mediaLoader.cancel()\n }\n\n this._loading = true\n try {\n const ret = await this._mediaLoader.load({ url, range })\n if (!ret) return\n const { response, firstByteTime, startTime } = ret\n const headers = response.headers\n this.emit(EVENT.TTFB, { url, responseUrl: response.url, elapsed: firstByteTime - startTime })\n this.emit(EVENT.LOAD_RESPONSE_HEADERS, { headers })\n this._acceptRanges = !!headers?.get('Accept-Ranges') || !!headers?.get('Content-Range')\n } catch (error) {\n return this._emitError(StreamingError.network(error))\n }\n }\n\n _onProgress = async (chunk, done, { startTime, endTime }) => {\n this._loading = !done\n\n if (!this._bufferService) return\n clearTimeout(this._maxChunkWaitTimer)\n\n this._bandwidthService.addChunkRecord(chunk?.byteLength, endTime - startTime)\n\n try {\n await this._bufferService.appendBuffer(chunk)\n if (this.isLive) {\n this._bufferService?.evictBuffer(this._opts.bufferBehind)\n }\n } catch (error) {\n return this._emitError(StreamingError.create(error))\n }\n\n if (this._urlSwitching) {\n this._urlSwitching = false\n this.emit(EVENT.SWITCH_URL_SUCCESS, { url: this._opts.url })\n }\n\n // !!\n if (this._seamlessSwitching) {\n this._seamlessSwitching = false\n this.media.play()\n this._tick()\n }\n\n if (done && !this.media.seeking) {\n this.emit(EVENT.LOAD_COMPLETE)\n logger.debug('load done', this._noEndOfStreamOnDone)\n\n if (this._noEndOfStreamOnDone) {\n this._noEndOfStreamOnDone = false\n } else {\n return this._end()\n }\n } else {\n const { maxReaderInterval } = this._opts\n if (maxReaderInterval) {\n clearTimeout(this._maxChunkWaitTimer)\n this._maxChunkWaitTimer = setTimeout(() => {\n logger.debug('onMaxChunkWait', maxReaderInterval)\n this._end()\n }, maxReaderInterval)\n }\n }\n }\n\n _onRetryError = (error, retryTime) => {\n logger.debug('load retry', error, retryTime)\n\n this.emit(EVENT.LOAD_RETRY, {\n error: StreamingError.network(error),\n retryTime\n })\n }\n\n async _clear () {\n clearTimeout(this._maxChunkWaitTimer)\n clearTimeout(this._tickTimer)\n if (this._mediaLoader) await this._mediaLoader.cancel()\n this._loading = false\n }\n\n _end = () => {\n this._clear()\n if (this._bufferService) {\n this._bufferService.endOfStream()\n }\n\n logger.debug('end stream')\n }\n\n _tick = () => {\n clearTimeout(this._tickTimer)\n const { media } = this\n if (!media) return\n this._tickTimer = setTimeout(this._tick, this._tickInterval)\n\n const bufferEnd = Buffer.end(Buffer.get(media))\n\n if (bufferEnd < 0.1 || !media.readyState) return\n\n const opts = this._opts\n if (isMediaPlaying(media)) {\n if (this._gapService) {\n this._gapService.do(media, opts.maxJumpDistance, this.isLive, 3)\n }\n } else {\n if (!media.currentTime && this._gapService) {\n this._gapService.do(media, opts.maxJumpDistance, this.isLive, 3)\n return\n }\n if (opts.isLive && bufferEnd > opts.disconnectTime) {\n this.disconnect()\n }\n }\n }\n\n _onPlay = () => {\n const canReplay = this._opts.softDecode || this.media?.buffered?.length\n if (this.isLive && !this._loading && canReplay) {\n this.replay(undefined, true)\n }\n }\n\n _onSeeking = async () => {\n if (!this.isLive && this.seekable) {\n const times = this._keyframes.times\n const filepositions = this._keyframes.filepositions\n if (!times?.length || !filepositions?.length) return\n const currentTime = this.media.currentTime\n const i = searchKeyframeIndex(this._keyframes.times, currentTime)\n const startByte = filepositions[i]\n if (startByte === null || startByte === undefined) return\n await this._mediaLoader.cancel()\n this._loadData(null, [startByte])\n this._bufferService.unContiguous(times[i])\n }\n }\n\n _onTimeupdate = () => {\n if (!this.media) return\n\n const opts = this._opts\n const currentTime = this.media.currentTime\n\n if (opts.isLive && opts.maxLatency && opts.targetLatency) {\n const bufferEnd = Buffer.end(Buffer.get(this.media))\n const latency = bufferEnd - currentTime\n if (latency >= opts.maxLatency) {\n this.media.currentTime = bufferEnd - opts.targetLatency\n }\n }\n this._seiService.throw(currentTime)\n }\n\n _onFlvScriptData = (sample) => {\n const keyframes = sample.data?.onMetaData?.keyframes\n const duration = sample.data?.onMetaData?.duration\n if (keyframes) {\n this._keyframes = keyframes\n }\n\n if (!this._opts.isLive && duration) {\n this._bufferService.updateDuration(duration)\n }\n }\n}\n\ntry {\n if (localStorage.getItem('xgd')) {\n Flv.enableLogger()\n } else {\n Flv.disableLogger()\n }\n} catch (error) {\n // ignore\n}\n","/**\n * @typedef {{\n * media: HTMLMediaElement,\n * url?: string,\n * isLive?: boolean,\n * softDecode?: boolean,\n * analyzeDuration?: number,\n * maxJumpDistance?: number,\n * maxLatency?: number,\n * targetLatency?: number,\n * bufferBehind?: number,\n * retryCount?: number,\n * retryDelay?: number,\n * loadTimeout?: number,\n * maxReaderInterval?: number,\n * preloadTime?: number,\n * disconnectTime?: number,\n * fetchOptions?: RequestInit,\n * seamlesslyReload: boolean\n * }} FlvOption\n */\n\n/**\n * @param {FlvOption} opts\n * @returns {FlvOption}\n */\nexport function getOption (opts) {\n const ret = {\n retryCount: 3,\n retryDelay: 1000,\n loadTimeout: 10000,\n maxReaderInterval: 5000,\n preloadTime: 5,\n isLive: false,\n softDecode: false,\n bufferBehind: 10,\n maxJumpDistance: 3,\n analyzeDuration: 20000,\n seamlesslyReload: false,\n ...opts\n }\n\n if (ret.isLive) {\n if (ret.preloadTime) {\n // compat old\n\n if (!ret.maxLatency) {\n ret.maxLatency = ret.preloadTime * 2\n }\n if (!ret.targetLatency) {\n ret.targetLatency = ret.preloadTime\n }\n\n if (ret.disconnectTime === null || ret.disconnectTime === undefined) {\n ret.disconnectTime = ret.maxLatency\n }\n }\n }\n\n return ret\n}\n","import { EVENT } from 'xgplayer-streaming-shared'\n\nexport default class PluginExtension {\n constructor (opts, plugin) {\n this._opts = opts\n this._plugin = plugin\n this._init()\n }\n\n _init () {\n const { media, preloadTime, innerDegrade, decodeMode } = this._opts\n\n if (!media) return\n\n if (innerDegrade) {\n media.setAttribute('innerdegrade', innerDegrade)\n }\n if (preloadTime) {\n media.setAttribute('preloadtime', preloadTime)\n }\n\n if (media.setDecodeMode) {\n media.setDecodeMode(decodeMode)\n }\n\n this._bindEvents()\n }\n\n _bindEvents () {\n const { media } = this._opts\n\n media.addEventListener('lowdecode', this._onLowDecode)\n }\n\n _onLowDecode = () => {\n const { media, innerDegrade, backupURL } = this._opts\n\n this._plugin?.player?.emit('lowdecode', media.degradeInfo)\n this._plugin?.player?.emit('core_event', {\n ...media.degradeInfo,\n eventName: EVENT.LOWDECODE\n })\n\n if ((innerDegrade === 1 || innerDegrade === 3) && backupURL) {\n this._degrade(backupURL)\n }\n }\n\n /**\n * @param {string | undefined} url\n */\n _degrade = (url) => {\n const { player } = this._plugin\n const originVideo = player.video\n\n if (originVideo?.TAG !== 'MVideo') return\n\n const newVideo = player.video.degradeVideo\n\n player.video = newVideo\n\n originVideo.degrade(url)\n\n if (url) {\n player.config.url = url\n }\n\n // replace live-video to video element\n const firstChild = player.root.firstChild\n\n if (firstChild.TAG === 'MVideo') {\n player.root.replaceChild(newVideo, firstChild)\n }\n const flvPlugin = this._plugin.constructor.pluginName.toLowerCase()\n player.unRegisterPlugin(flvPlugin)\n\n // play\n player.once('canplay', () => {\n player.play()\n })\n }\n\n forceDegradeToVideo = (url) => {\n const { innerDegrade } = this._opts\n\n // 降级to video+m3u8\n if (innerDegrade === 1 || innerDegrade === 3) {\n this._degrade(url)\n }\n }\n\n destroy () {\n this._opts?.media?.removeEventListener('lowdecode', this._onLowDecode)\n this._plugin = null\n }\n}\n","import { EVENT } from 'xgplayer-streaming-shared'\nimport { InnerEvent } from './flv/constants'\n\nclass Stats {\n encodeType = '' // hevc | avc\n audioCodec = ''\n videoCodec = ''\n domain = '' // stream url domain\n fps = 0\n bitrate = 0 // 最新1s下载数据的码率\n width = 0\n height = 0\n samplerate = 0\n channelCount = 0\n gop = 0 // 第一个gop帧数\n\n _bitsAccumulateSize = 0\n _bitsAccumulateDuration = 0\n\n getStats () {\n return {\n encodeType: this.encodeType,\n audioCodec: this.audioCodec,\n videoCodec: this.videoCodec,\n domain: this.domain,\n fps: this.fps,\n bitrate: this.bitrate,\n width: this.width,\n height: this.height,\n samplerate: this.samplerate,\n channelCount: this.channelCount,\n gop: this.gop\n }\n }\n\n setEncodeType (encode) {\n this.encodeType = encode\n }\n\n setVideoMeta (track) {\n this.width = track.width\n this.height = track.height\n this.videoCodec = track.codec\n this.encodeType = track.codecType\n if (track.fpsNum && track.fpsDen) {\n this.fps = track.fpsNum / track.fpsDen\n }\n }\n\n setAudioMeta (track) {\n this.audioCodec = track.codec\n this.samplerate = track.sampleRate\n this.channelCount = track.channelCount\n }\n\n setDomain (responseUrl) {\n this.domain = responseUrl.split('/').slice(2, 3)[0]\n }\n\n updateBitrate (samples) {\n if (!this.fps || this.fps >= 100) {\n const samp0 = samples[0]\n if (samp0?.duration) {\n this.fps = Math.round(1000 / samp0.duration)\n }\n }\n samples.forEach(sample => {\n if (sample.gopId === 1) {\n this.gop++\n }\n this._bitsAccumulateDuration += sample.duration\n this._bitsAccumulateSize += sample.units.reduce((a, c) => (a += c.length), 0)\n if (this._bitsAccumulateDuration >= 1000) {\n this.bitrate = this._bitsAccumulateSize * 8\n this._bitsAccumulateDuration = 0\n this._bitsAccumulateSize = 0\n }\n })\n }\n}\n\nclass MediaStats {\n _plugin\n\n _samples = []\n\n _bitrateCalcDuration = 0\n\n _stats = new Stats()\n\n constructor (plugin) {\n this._plugin = plugin\n this._bindEvents()\n }\n\n getStats () {\n const { currentTime = 0, decodeFps = 0 } = this._plugin.player?.video || {}\n return {\n ...this._stats.getStats(),\n /** @type {number} */\n downloadSpeed: this._plugin.core?.speedInfo?.().speed,\n\n avgSpeed: this._plugin.core?.speedInfo?.().avgSpeed,\n\n /** @type {number} */\n currentTime,\n\n /** @type {number} */\n bufferEnd: this._plugin.player?.getBufferedRange()[1] - currentTime,\n\n /** @type {number} */\n decodeFps\n }\n }\n\n _bindEvents () {\n this._onceLoadStart()\n this._plugin.player?.on('core_event', e => {\n if (e.eventName === EVENT.METADATA_PARSED) {\n if (e.type === 'video') {\n this._stats.setVideoMeta(e.track)\n } else {\n this._stats.setAudioMeta(e.track)\n }\n }\n if (e.eventName === EVENT.TTFB) {\n this._stats.setDomain(e.responseUrl)\n }\n })\n }\n\n _onceLoadStart () {\n const _onLoadStart = e => {\n if (e.eventName === EVENT.LOAD_START) {\n this._plugin.player.off('core_event', _onLoadStart)\n this._plugin.core.on(InnerEvent.DEMUXED_TRACK, (track) => this._stats.updateBitrate(track.samples))\n }\n }\n this._plugin.player?.on('core_event', _onLoadStart)\n }\n}\n\nexport default MediaStats\n","import { BasePlugin, Events, Errors } from 'xgplayer'\nimport { EVENT } from 'xgplayer-streaming-shared'\nimport { Flv } from './flv'\nimport PluginExtension from './plugin-extension'\nimport Stats from './getStats'\n\nexport class FlvPlugin extends BasePlugin {\n static Flv = Flv\n\n static get pluginName () {\n return 'flv'\n }\n\n /** @type {Flv} */\n flv = null;\n\n /** @type {PluginExtension} */\n pluginExtension = null\n\n _stats = new Stats(this)\n\n /** @type {Flv} */\n get core () {\n return this.flv\n }\n\n /** @type {string} */\n get version () {\n return this.flv?.version\n }\n\n /** @type {boolean} */\n get softDecode () {\n const mediaType = this.player?.config?.mediaType\n return !!mediaType && mediaType !== 'video'\n }\n\n beforePlayerInit () {\n const config = this.player.config\n\n if (!config.url) return\n\n if (this.flv) this.flv.destroy()\n\n this.player.switchURL = this._onSwitchURL\n\n const flvOpts = config.flv || {}\n if (flvOpts.disconnectTime === null || flvOpts.disconnectTime === undefined) {\n flvOpts.disconnectTime = 0\n }\n\n this.flv = new Flv({\n softDecode: this.softDecode,\n isLive: config.isLive,\n media: this.player.video,\n ...flvOpts\n })\n\n if (!this.softDecode) {\n BasePlugin.defineGetterOrSetter(this.player, {\n url: {\n get: () => this.flv?.media?.src,\n configurable: true\n }\n })\n }\n\n if (this.softDecode) {\n this.pluginExtension = new PluginExtension({\n media: this.player.video,\n ...config.flv\n }, this)\n this.player.forceDegradeToVideo = (...args) => this.pluginExtension?.forceDegradeToVideo(...args)\n }\n\n if (config.isLive) {\n this.player?.useHooks('replay', () => this.flv?.replay())\n }\n\n this.on(Events.URL_CHANGE, this._onSwitchURL)\n // this.on(Events.DEFINITION_CHANGE, this._onDefinitionChange)\n this.on(Events.DESTROY, this.destroy)\n\n this._transError()\n this._transCoreEvent(EVENT.TTFB)\n this._transCoreEvent(EVENT.LOAD_START)\n this._transCoreEvent(EVENT.LOAD_RESPONSE_HEADERS)\n this._transCoreEvent(EVENT.LOAD_COMPLETE)\n this._transCoreEvent(EVENT.LOAD_RETRY)\n this._transCoreEvent(EVENT.SOURCEBUFFER_CREATED)\n this._transCoreEvent(EVENT.ANALYZE_DURATION_EXCEEDED)\n this._transCoreEvent(EVENT.REMOVE_BUFFER)\n this._transCoreEvent(EVENT.BUFFEREOS)\n this._transCoreEvent(EVENT.KEYFRAME)\n this._transCoreEvent(EVENT.METADATA_PARSED)\n this._transCoreEvent(EVENT.SEI)\n this._transCoreEvent(EVENT.SEI_IN_TIME)\n this._transCoreEvent(EVENT.FLV_SCRIPT_DATA)\n this._transCoreEvent(EVENT.STREAM_EXCEPTION)\n this._transCoreEvent(EVENT.SWITCH_URL_SUCCESS)\n this._transCoreEvent(EVENT.SWITCH_URL_FAILED)\n\n this.flv.load(config.url, true)\n }\n\n getStats = () => {\n return this._stats.getStats()\n }\n\n destroy = () => {\n if (this.flv) {\n this.flv.destroy()\n this.flv = null\n }\n this.pluginExtension?.destroy()\n this.pluginExtension = null\n }\n\n /** @type {boolean} */\n static isSupported (softDecode) {\n return Flv.isSupported(softDecode)\n }\n\n _onSwitchURL = (url, seamless) => {\n if (this.flv) {\n this.player.config.url = url\n this.flv.switchURL(url, seamless)\n }\n }\n\n _onDefinitionChange = ({ to }) => {\n if (this.flv) this.flv.switchURL(to)\n }\n\n _transError () {\n this.flv.on(EVENT.ERROR, (err) => {\n if (this.player) {\n this.player.emit(Events.ERROR, new Errors(this.player, err))\n }\n })\n }\n\n _transCoreEvent (eventName) {\n this.flv.on(eventName, (e) => {\n if (this.player) {\n this.player.emit('core_event', {\n ...e,\n eventName\n })\n }\n })\n }\n}\n"],"names":["createPublicPromise","res","rej","promise","Promise","resolve","reject","used","apply","arguments","nowTime","parseInt","performance","now","e","Date","getTime","Buffer","_classCallCheck","this","key","value","buf","length","end","start","b","buffered","error","maxHole","buffers","i","l","bufLen","last","lastEnd","push","reduce","a","c","pos","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","ERR_CODE","_defineProperty","_ERR_CODE","StreamingError","_Error","_inherits","_super","_createSuper","type","subType","origin","payload","msg","_this","message","errorType","originError","ext","errorCode","errorMessage","Error","_error$response","isTimeout","url","response","httpCode","status","isBrowser","window","Logger","name","_prefix","concat","_createClass","_console","disabled","_len","args","Array","_key","console","debug","_console2","_len2","_key2","log","_console3","_len3","_key3","warn","_console4","_len4","_key4","_console5","group","table","groupEnd","MediaSource","getMediaSource","OP_NAME","MSE","media","config","_this2","create","queue","_queue","op","shift","costtime","_opst","_logger","opName","context","_startQueue","event","_config","Object","assign","getDefaultConfig","bindMedia","openLog","enable","_enqueueBlockingOp2","_unbindMedia","_bindMedia","get","_this$mediaSource","mediaSource","readyState","_url","_this$mediaSource2","duration","_mseFullFlag","VIDEO","_this3","_enqueueBlockingOp","isEnded","_this4","_openPromise","isOpened","ms","addEventListener","onOpen","_st","removeEventListener","_asyncToGenerator","_regeneratorRuntime","mark","_this5","wrap","_context","prev","next","unbindMedia","revokeObjectURL","src","URL","createObjectURL","abrupt","stop","_callee","_x","_callee2","hasMetadata","mseOpen","_this6","_context2","keys","forEach","t","x","endOfStream","_sourceBuffer","k","removeSourceBuffer","removeAttribute","load","mimeType","sb","addSourceBuffer","_onSBUpdateEnd","bind","_onSBUpdateError","_this7","changeType","_enqueueOp","createSource","buffer","_this8","byteLength","_this8$_sourceBuffer$","appendBuffer","startTime","endTime","_this9","isInsertHead","remove","p","_this10","_this11","_this$_queue$type","initOpque","isinit","slice","reason","_this12","setLiveSeekableRange","exec","_this13","splice","then","_callee3","types","waiters","_this14","_context3","prom","all","updating","_x2","_x3","indexOf","timestampOffset","_this15","_this16","abort","mime","isTypeSupported","LoaderType","ResponseType","NetError","request","_assertThisInitialized","call","toString","prototype","isPlainObject","val","getPrototypeOf","getRangeValue","undefined","ret","encode","encodeURIComponent","replace","setUrlParams","params","v","str","map","isArray","toISOString","_typeof","isObject","JSON","stringify","join","filter","Boolean","hashIndex","createResponse","data","done","contentLength","age","firstByteTime","range","vid","priOptions","parseFloat","Number","isNaN","option","calculateSpeed","byteLen","millisec","Math","round","EVENT","has","hasOwnProperty","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","text","sent","json","_loadChunk","arrayBuffer","Uint8Array","time","catch","_error","options","_reader","t0","st","getReader","err","_cache","_writeIdx","reader","pump","_ref3","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","byteStart","chunk","responseURL","_getHeaders","_transformResponse","_get","_getPrototypeOf","_step","_iterator","_createForOfIteratorHelper","getAllResponseHeaders","trim","split","s","n","parts","toLowerCase","f","Task","alive","_loaderType","_loader","_retryCount","_retryTimer","_canceled","_this$_config","retry","retryDelay","onRetryError","transformError","rest","_objectWithoutProperties","_excluded","running","loaderType","retryCount","concatUint8Array","arr","prevLen","d","sleep","NetLoader","cfg","_objectSpread","transformRequest","integrity","getConfig","isSupported","task","loader","_currentTask","_processTask","cancels","_alive","finally","GapService","maxJumpDistance","isLive","seekThreshold","jumpTo","_prevCurrentTime","info","seeking","SeiService","Set","sei","_seiSet","add","size","min","max","toThrow","delete","clear","BandwidthService","totalByte","_speeds","_chunkSpeeds","TrackType","VideoCodecType","AudioCodecType","WarningType","VideoTrack","sequenceNumber","width","height","fpsDen","fpsNum","baseMediaDecodeTime","timescale","codec","present","pid","pps","sps","vps","sarRatio","samples","warnings","hvcC","AudioTrack","sampleDuration","sampleRate","channelCount","codecType","VideoSample","pts","dts","units","originPts","originDts","keyframe","flag","dependsOn","isNonSyncSample","AudioSample","sampleOffset","Sample","FlvScriptSample","_Sample","SeiSample","_Sample2","_super2","MetadataTrack","flvScriptSamples","seiSamples","ExpGolomb","_data","_bytesAvailable","_loadWord","position","availableBytes","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","includes","isAndroid","readBig32","getAvcCodec","codecs","h","parse","NALu","offset","dataLen","unit","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","_getConfig","frameIndex","getFrameDuration","originCodec","samplingIndex","originObjectType","extensionSamplingIndex","HEVC","vpsParsed","nalUnitType","numNalus","nalSize","vpsArr","numOfArrays","parseVPS","vpsMaxSubLayersMinus1","numTemporalLayers","_parseProfileTierLevel","spsMaxSubLayersMinus1","temporalIdNested","separateColourPlaneFlag","confWinLeftOffset","confWinRightOffset","confWinTopOffset","confWinBottomOffset","conformanceWindowFlag","bitDepthLumaMinus8","bitDepthChromaMinus8","subWidthC","subHeightC","maxSubLayersMinus1","generalTierFlag","generalProfileSpace","generalProfileIdc","generalProfileCompatibilityFlags","generalConstraintIndicatorFlags","generalLevelIdc","subLayerProfilePresentFlag","subLayerLevelPresentFlag","MAX_SILENT_FRAME_DURATION","AUDIO_EXCETION_LOG_EMIT_DURATION","FlvFixer","videoTrack","audioTrack","metadataTrack","_baseDts","_baseDtsInited","_audioNextPts","_videoNextDts","_audioTimestampBreak","_videoTimestampBreak","_lastAudioExceptionGapDot","Infinity","_lastAudioExceptionOverlapDot","_lastAudioExceptionLargeGapDot","_lastVideoExceptionLargeGapDot","_lastVideoExceptionChunkFirstDtsDot","discontinuity","contiguous","_videoLastSample","_calculateBaseDts","_resetBaseDtsWhenStreamBreaked","_fixAudio","_fixVideo","exist","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","_parseString","terminal","_parseObject","_terminal","strictArrayLength","timestamp","getInt16","decode","getUint16","FlvDemuxer","_fixer","_remainingData","_headerParsed","reset","probe","tagType","dataSize","bodyData","prevTagSize","_parseAudio","_parseVideo","_parseScript","formatTimescale","hasSample","fix","demux","format","soundRate","soundSize","soundType","AUDIO_RATE","_parseAac","_parseG711","parseAudioSpecificConfig","sampleRateIndex","frameType","codecId","isHevc","packetType","cts","configData","parseHEVCDecoderConfigurationRecord","parseAVCDecoderConfigurationRecord","parseAvcC","_checkAddMetaNalToUnits","setToKeyframe","parseSEI","_gopId","gopId","hevc","_needAddMetaBeforeKeyFrameNal","obj","defineProperty","default","ResultConstructor","arrays","_iteratorNormalCompletion","_didIteratorError","_iteratorError","Symbol","iterator","return","result","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_arr","lib","require$$0","__esModule","self","Concat","UINT32_MAX","pow","tracks","find","FTYPHEV1","FTYPAVC1","ftyp","moov","content","kid","box","pssh","useEME","encv","enca","mvhd","mvhdDurtion","mvhdTimecale","mvex","trak","_toConsumableArray","tkhd","id","tkhdDuration","mdia","mdhd","hdlr","minf","HDLR_TYPES","VMHD","SMHD","DINF","stbl","extBox","stss","entries","stsd","STTS","STSC","STSZ","STCO","mp4a","avc1hev1","esds","sinf","_concat$concat","hSpacing","vSpacing","avcc","btrt","pasp","avcC","tenc","schi","default_IsEncrypted","default_IV_size","default_KID","frma","data_format","charCodeAt","schm","typ","hvc1","avc1","boxes","fiel","_concat$concat2","ArrayBuffer","pcf","cif","write","_ref4","_slicedToArray","trex","moof","mfhd","traf","tfhd","tfdt","isVideoEncryption","isAudioEncryption","saiz","saio","trun","trun1","senc","sbgp","sdtp","extension","sampleCount","writeUint32","sencLength","videoSencLength","audioSenc","flags","samplesLength","videoSenc","InitializationVector","subsamples","writeUint16","BytesOfClearData","BytesOfProtectedData","version","upperWordBaseMediaDecodeTime","lowerWordBaseMediaDecodeTime","sampleLen","_samples$i$flag","_samples$i","_samples$i$cts","isLeading","isDependedOn","hasRedundancy","paddingValue","degradationPriority","trackMP4","mdiaMP4","minfMP4","stblMP4","stts","stsc","stsz","stco","ctts","_ref5","_ref6","firstChunk","samplesPerChunk","sampleDescIndex","samplesSizes","offsets","keyframeIndexes","_ref7","styp","durationCount","earliestTime","mdatSize","sidx","mdat","video","audio","dinf","dref","vmhd","smhd","StblTable","FMP4Remuxer","browserVersions","forceFirstIDR","createInit","videoInitSegment","audioInitSegment","initSegment","videoSegment","audioSegment","hasVideo","hasAudio","initMerge","_remuxVideo","_remuxAudio","mdata","mdatView","_offset","_sample","u","setUint32","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","nBytes","rcache","r","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","iv","_cipher","_iv","Encryptor","Decryptor","xorBlock","_prevBlock","CBC","_BlockCipherMode","_CBC","_class","_super5","encryptBlock","_CBC2","_class2","_super6","thisBlock","decryptBlock","Pkcs7","pad","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","InnerEvent","BufferService","flv","softVideo","analyzeDuration","_analyzeDuration","_softVideo","_remuxer","_demuxer","_mse","_evictBuffer","_appendBuffer","_destroy","_updateDuration","_endOfStream","_reset","_this$_demuxer","_this$_demuxer$_fixer","_needInitSegment","_discontinuity","_contiguous","_initSegmentId","_demuxStartTime","reuseMse","_args","_sourceCreated","updateDuration","_callee4","_context4","demuxer","videoExist","audioExist","videoType","audioType","mse","newId","remuxResult","_context5","_cachedBuffer","demuxAndFix","_fireEvents","_emitMetaParsedEvent","remux","_callee5","bufferBehind","removeEnd","_context6","clearBuffer","_callee6","meta","code","searchKeyframeIndex","list","idx","mid","lbound","ubound","Flv","_clear2","_loadData2","_reset2","_switchURL","_replay","_load","opts","_this$_bufferService","maxReaderInterval","_loading","_bufferService","_maxChunkWaitTimer","_bandwidthService","addChunkRecord","evictBuffer","_opts","_emitError","_urlSwitching","_seamlessSwitching","play","_tick","_noEndOfStreamOnDone","_end","retryTime","network","_clear","_tickTimer","_tickInterval","bufferEnd","isMediaPlaying","paused","ended","playbackRate","_gapService","do","disconnectTime","disconnect","_this$media","_this$media$buffered","canReplay","softDecode","replay","times","filepositions","seekable","_keyframes","_mediaLoader","_loadData","unContiguous","maxLatency","targetLatency","_seiService","throw","_sample$data","_sample$data$onMetaDa","_sample$data2","_sample$data2$onMetaD","keyframes","onMetaData","loadTimeout","preloadTime","seamlesslyReload","document","createElement","fetchOptions","_onRetryError","_onPlay","_onSeeking","_onTimeupdate","_onFlvScriptData","_this$_bufferService2","_acceptRanges","getLatestSpeed","avgSpeed","getAvgSpeed","_this$media2","getVideoPlaybackQuality","droppedVideoFrames","corruptedVideoFrames","totalVideoFrames","creationTime","webkitDroppedFrameCount","webkitDecodedFrameCount","_args3","_x4","isPlayEmit","_args4","seamlessSwitch","seamless","_x5","_x6","destroy","_this$media3","_callee7","_args7","_context7","_callee8","_context8","responseUrl","elapsed","_x7","_x8","_callee9","_context9","WebAssembly","TransmuxerLogger","disable","localStorage","getItem","enableLogger","disableLogger","PluginExtension","plugin","_this$_plugin","_this$_plugin$player","_this$_plugin2","_this$_plugin2$player","_this$_opts","innerDegrade","backupURL","_plugin","player","degradeInfo","eventName","_degrade","originVideo","TAG","newVideo","degradeVideo","degrade","firstChild","root","replaceChild","flvPlugin","pluginName","unRegisterPlugin","_init","_this$_opts2","decodeMode","setAttribute","setDecodeMode","_bindEvents","_onLowDecode","_this$_opts3","_this$_opts3$media","Stats","encodeType","audioCodec","videoCodec","domain","bitrate","samplerate","gop","_bitsAccumulateDuration","_bitsAccumulateSize","MediaStats","_this$_plugin$core","_this$_plugin$core$sp","_this$_plugin$core2","_this$_plugin$core2$s","_this$_plugin$player2","_ref$currentTime","_ref$decodeFps","decodeFps","_stats","getStats","downloadSpeed","core","speedInfo","getBufferedRange","_this$_plugin$player3","_onceLoadStart","setVideoMeta","setAudioMeta","setDomain","_this$_plugin$player4","_onLoadStart","updateBitrate","FlvPlugin","_BasePlugin","_this$pluginExtension","pluginExtension","switchURL","_this$flv","_this$player","_this$player$config","mediaType","_onSwitchURL","flvOpts","_this$player2","defineGetterOrSetter","_this2$flv","_this2$flv$media","configurable","forceDegradeToVideo","_this2$pluginExtensio","useHooks","_this2$flv2","URL_CHANGE","DESTROY","_transError","_transCoreEvent","ERROR","Errors","BasePlugin"],"mappings":"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"}