diff --git a/docs/uncompiled/artplayer-proxy-webav/index.js b/docs/uncompiled/artplayer-proxy-webav/index.js index 9443e64c6..598386aac 100644 --- a/docs/uncompiled/artplayer-proxy-webav/index.js +++ b/docs/uncompiled/artplayer-proxy-webav/index.js @@ -276,6 +276,26 @@ function artplayerProxyWebAV() { video.close(); } } + function resize() { + const player = art.template?.$player; + if (!player || option.autoSize) return; + const aspectRatio = canvas.videoWidth / canvas.videoHeight; + const containerWidth = player.clientWidth; + const containerHeight = player.clientHeight; + const containerRatio = containerWidth / containerHeight; + let paddingLeft = 0; + let paddingTop = 0; + if (containerRatio > aspectRatio) { + const canvasWidth = containerHeight * aspectRatio; + paddingLeft = (containerWidth - canvasWidth) / 2; + } else { + const canvasHeight = containerWidth / aspectRatio; + paddingTop = (containerHeight - canvasHeight) / 2; + } + Object.assign(canvas.style, { + padding: `${paddingTop}px ${paddingLeft}px` + }); + } async function init() { stop(); reset(); @@ -310,6 +330,7 @@ function artplayerProxyWebAV() { canvas.width = state.videoWidth; canvas.height = state.videoHeight; await preview(0.1); + resize(); art.emit("video:loadedmetadata", { type: "loadedmetadata" }); @@ -444,6 +465,7 @@ function artplayerProxyWebAV() { stop(); if (clip) clip.destroy(); }); + art.on("resize", resize); return canvas; }; } diff --git a/docs/uncompiled/artplayer-proxy-webav/index.js.map b/docs/uncompiled/artplayer-proxy-webav/index.js.map index ff491f611..449e10bba 100644 --- a/docs/uncompiled/artplayer-proxy-webav/index.js.map +++ b/docs/uncompiled/artplayer-proxy-webav/index.js.map @@ -1 +1 @@ -{"mappings":"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SAAU,GAAG;QACvC,IACE,QAAQ,aACR,QAAQ,gBACR,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,MAE3C;QAGF,OAAO,cAAc,CAAC,MAAM,KAAK;YAC/B,YAAY;YACZ,KAAK;gBACH,OAAO,MAAM,CAAC,IAAI;YACpB;QACF;IACF;IAEA,OAAO;AACT;AAEA,QAAQ,MAAM,GAAG,SAAU,IAAI,EAAE,QAAQ,EAAE,GAAG;IAC5C,OAAO,cAAc,CAAC,MAAM,UAAU;QACpC,YAAY;QACZ,KAAK;IACP;AACF;;;;;A,+C;A,gD;A,wD;A,wD;A,+C;A,6C;A,yC;A,6C;A,qD;A,qD;A,0C;A,mD;A,2D;A,mD;A,oD;A,qD;A,wD;A,wD;A,qD;A,8C;A,qD;A,+C;A,4D;A,0D;A,mD;A,iD;A,qD;A,sD;A,8C;A,+C;A,mD;A,yD;A,2D;A,iD;;;A,I,K,O,c;A,I,K,C;I,M,U;A;A,I,K,C,G,G,I,K,I,G,G,G;Q,Y,C;Q,c,C;Q,U,C;Q,O;I,K,C,C,E,G;A,I,I,C,G,G,I,G,G,O,K,W,I,K,G,I,K,C,G,G,I,E,G,C,M,G,Y;A,I,I,C,G,G,I,C,G,G,G,4B,I,E,I,C,K,E,G,C,E,G,I,C,G,G,I,E,G,C,K,G,uD,a,U,E,G,C,K,E,G,C,G,I,I,C,G,G,G,I,C,G,G,G,2B,I,E,I,C,G,K,E,G,C,G,I,C,G,I,C,G,G,I,C,G,G,G,0B,C;AE3BO,SAASA,GAASC,CAAAA;IAChB,OAAA,SAAS,aAAA,CAAcA;AAChC;AAQgB,SAAAC,GAAcC,CAAAA,EAAaC,CAAAA;IACnC,MAAAC,IAAML,GAAS;IACjBK,EAAA,KAAA,CAAM,OAAA,GAAU,CAAA,WAAA,EAAcD,EAAO,sCAAA,CAAA,EACzCC,EAAI,WAAA,GAAcF,GACT,SAAA,IAAA,CAAK,WAAA,CAAYE;IAE1B,MAAM,EAAE,OAAAC,CAAAA,EAAO,QAAAC,CAAAA,EAAO,GAAIF,EAAI,qBAAA;IAE9BA,EAAI,MAAA,IACJA,EAAI,KAAA,CAAM,UAAA,GAAa;IAEjB,MAAAG,IAAM,IAAI;IAChBA,EAAI,KAAA,GAAQF,GACZE,EAAI,MAAA,GAASD;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","sources":["packages/artplayer-proxy-webav/src/index.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/dist/av-cliper.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/dom-utils.ts","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/opfs-tools@0.6.1/node_modules/opfs-tools/dist/opfs-tools.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/log.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/worker-timer.ts","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/wave-resampler@1.0.0/node_modules/wave-resampler/lib/interpolator.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/wave-resampler@1.0.0/node_modules/wave-resampler/lib/fir-lpf.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/wave-resampler@1.0.0/node_modules/wave-resampler/lib/butterworth-lpf.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/wave-resampler@1.0.0/node_modules/wave-resampler/index.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/av-utils.ts","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/@webav+mp4box.js@0.5.3-fenghen/node_modules/@webav/mp4box.js/dist/mp4box.all.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/iclip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/mp4-utils/mp4box-utils.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/mp4-utils/sample-transform.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/mp4-clip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/img-clip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/audio-clip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/media-stream-clip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/embed-subtitles-clip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/event-tool.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/mp4-utils/meta-box.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/mp4-utils/index.ts","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/@videojs+vhs-utils@3.0.5/node_modules/@videojs/vhs-utils/es/stream.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/@babel+runtime@7.24.7/node_modules/@babel/runtime/helpers/esm/extends.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/global@4.4.0/node_modules/global/window.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/@videojs+vhs-utils@3.0.5/node_modules/@videojs/vhs-utils/es/decode-b64-to-uint8-array.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/m3u8-parser@7.1.0/node_modules/m3u8-parser/dist/m3u8-parser.es.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/data-loader/hls-loader.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/chromakey.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/sprite/rect.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/sprite/base-sprite.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/sprite/offscreen-sprite.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/sprite/visible-sprite.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/combinator.ts","node_modules/buffer/index.js","node_modules/base64-js/index.js","node_modules/ieee754/index.js"],"sourcesContent":["import { MP4Clip } from '@webav/av-cliper';\n\nexport default function artplayerProxyWebAV() {\n return (art) => {\n const { option, constructor } = art;\n const { createElement, def } = constructor.utils;\n\n const canvas = createElement('canvas');\n const ctx = canvas.getContext('2d');\n let audioCtx;\n let gainNode;\n\n let clip = null;\n let audioSource = null;\n let intervalId = null;\n let seekTarget = null;\n let lastSeekTime = 0;\n\n const state = {\n playing: false,\n duration: 0,\n videoWidth: 0,\n videoHeight: 0,\n currentTime: 0,\n playbackRate: 1,\n paused: true,\n ended: false,\n readyState: 0,\n buffered: 0,\n muted: option.muted,\n volume: option.volume,\n autoplay: option.autoplay,\n };\n\n function reset() {\n Object.assign(state, {\n playing: false,\n duration: 0,\n videoWidth: 0,\n videoHeight: 0,\n currentTime: 0,\n playbackRate: 1,\n paused: true,\n ended: false,\n readyState: 0,\n buffered: 0,\n muted: option.muted,\n volume: option.volume,\n autoplay: option.autoplay,\n });\n }\n\n function stop() {\n if (intervalId) {\n clearInterval(intervalId);\n intervalId = null;\n }\n if (audioSource) {\n audioSource.stop();\n audioSource = null;\n }\n }\n\n function updateVolume() {\n if (gainNode) {\n const effectiveVolume = state.muted ? 0 : state.volume;\n gainNode.gain.setValueAtTime(effectiveVolume, audioCtx.currentTime);\n }\n }\n\n async function play() {\n if (!audioCtx) {\n audioCtx = new AudioContext();\n gainNode = audioCtx.createGain();\n gainNode.connect(audioCtx.destination);\n }\n\n let curTime = state.currentTime * 1e6;\n let startAt = 0;\n let first = true;\n let lastFrameTime = performance.now();\n\n stop();\n updateVolume();\n\n async function frameHandler() {\n if (!state.playing) return;\n\n const currentFrameTime = performance.now();\n const deltaTime = currentFrameTime - lastFrameTime;\n lastFrameTime = currentFrameTime;\n\n if (seekTarget !== null) {\n curTime = seekTarget * 1e6;\n seekTarget = null;\n first = true;\n } else {\n curTime += deltaTime * 1000 * state.playbackRate;\n }\n\n state.currentTime = curTime / 1e6;\n\n const { state: clipState, video, audio } = await clip.tick(Math.round(curTime));\n\n art.emit('video:timeupdate', { type: 'timeupdate' });\n\n if (clipState === 'done') {\n stop();\n state.ended = true;\n state.playing = false;\n state.paused = true;\n art.emit('video:ended', { type: 'ended' });\n return;\n }\n\n if (video && clipState === 'success') {\n ctx.clearRect(0, 0, state.videoWidth, state.videoHeight);\n ctx.drawImage(video, 0, 0, state.videoWidth, state.videoHeight);\n video.close();\n }\n\n if (first) {\n first = false;\n } else if (audio?.[0]?.length) {\n const buf = audioCtx.createBuffer(2, audio[0].length, 48000);\n buf.copyToChannel(audio[0], 0);\n buf.copyToChannel(audio[1], 1);\n audioSource = audioCtx.createBufferSource();\n audioSource.buffer = buf;\n audioSource.connect(gainNode);\n audioSource.playbackRate.setValueAtTime(state.playbackRate, audioCtx.currentTime);\n startAt = Math.max(audioCtx.currentTime, startAt);\n audioSource.start(startAt);\n startAt += buf.duration / state.playbackRate;\n }\n }\n\n state.playing = true;\n state.paused = false;\n intervalId = setInterval(frameHandler, 1000 / 60); // 约60fps\n }\n\n async function preview(time) {\n const { video } = await clip.tick(time * 1e6);\n if (video) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n video.close();\n }\n }\n\n async function init() {\n stop();\n reset();\n\n if (clip) {\n clip.destroy();\n art.emit('video:abort', { type: 'abort' });\n art.emit('video:emptied', { type: 'emptied' });\n }\n\n try {\n await Promise.resolve();\n art.emit('video:loadstart', { type: 'loadstart' });\n const response = await fetch(option.url);\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n clip = new MP4Clip(response.body);\n } catch (error) {\n art.emit('video:error', error);\n throw error;\n }\n\n const info = await clip.ready;\n\n Object.assign(state, {\n readyState: 4,\n duration: Math.round(info.duration / 1e6),\n videoWidth: info.width,\n videoHeight: info.height,\n });\n\n canvas.width = state.videoWidth;\n canvas.height = state.videoHeight;\n await preview(0.1);\n\n art.emit('video:loadedmetadata', { type: 'loadedmetadata' });\n art.emit('video:durationchange', { type: 'durationchange' });\n art.emit('video:loadeddata', { type: 'loadeddata' });\n art.emit('video:canplay', { type: 'canplay' });\n art.emit('video:canplaythrough', { type: 'canplaythrough' });\n }\n\n def(canvas, 'textTracks', {\n get: () => [],\n });\n\n def(canvas, 'duration', {\n get: () => state.duration,\n });\n\n def(canvas, 'videoWidth', {\n get: () => state.videoWidth,\n });\n\n def(canvas, 'videoHeight', {\n get: () => state.videoHeight,\n });\n\n def(canvas, 'volume', {\n get: () => state.volume,\n set: (val) => {\n state.volume = Math.max(0, Math.min(1, val));\n updateVolume();\n art.emit('video:volumechange', { type: 'volumechange' });\n },\n });\n\n def(canvas, 'currentTime', {\n get: () => state.currentTime,\n set: (val) => {\n const newTime = Math.max(0, Math.min(val, state.duration));\n const now = performance.now();\n if (now - lastSeekTime > 16) {\n lastSeekTime = now;\n seekTarget = newTime;\n state.currentTime = newTime;\n if (!state.playing) {\n preview(newTime);\n }\n art.emit('video:timeupdate', { type: 'timeupdate' });\n }\n },\n });\n\n def(canvas, 'autoplay', {\n get: () => state.autoplay,\n set: (val) => {\n state.autoplay = val;\n if (val && state.readyState >= 4) {\n canvas.play();\n }\n },\n });\n\n def(canvas, 'src', {\n get: () => option.url,\n set: (val) => {\n option.url = val;\n init().then(() => {\n if (option.autoplay) {\n canvas.play();\n }\n });\n },\n });\n\n def(canvas, 'playbackRate', {\n get: () => state.playbackRate,\n set: (val) => {\n state.playbackRate = Math.max(0.25, Math.min(2, val));\n if (audioSource) {\n audioSource.playbackRate.setValueAtTime(state.playbackRate, audioCtx.currentTime);\n }\n art.emit('video:ratechange', { type: 'ratechange' });\n },\n });\n\n def(canvas, 'playing', {\n get: () => state.playing,\n });\n\n def(canvas, 'paused', {\n get: () => state.paused,\n });\n\n def(canvas, 'ended', {\n get: () => state.ended,\n });\n\n def(canvas, 'readyState', {\n get: () => state.readyState,\n });\n\n def(canvas, 'muted', {\n get: () => state.muted,\n set: (val) => {\n state.muted = val;\n updateVolume();\n art.emit('video:volumechange', { type: 'volumechange' });\n },\n });\n\n def(canvas, 'buffered', {\n get: () => ({\n start: () => 0,\n end: () => state.buffered,\n length: 1,\n }),\n });\n\n def(canvas, 'play', {\n value: async () => {\n await play();\n art.emit('video:play', { type: 'play' });\n art.emit('video:playing', { type: 'playing' });\n },\n });\n\n def(canvas, 'pause', {\n value: () => {\n stop();\n state.playing = false;\n state.paused = true;\n art.emit('video:pause', { type: 'pause' });\n },\n });\n\n art.on('destroy', () => {\n stop();\n if (clip) {\n clip.destroy();\n }\n });\n\n return canvas;\n };\n}\n\nif (typeof window !== 'undefined') {\n window['artplayerProxyWebAV'] = artplayerProxyWebAV;\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n",null,"// 在主线程中执行的 工具函数\n\n/**\n * 创建一个新的 HTML 元素\n * @param tagName - 要创建的元素的标签名\n * @returns 新创建的 HTML 元素\n */\nexport function createEl(tagName: string): HTMLElement {\n return document.createElement(tagName);\n}\n\n/**\n * 将文本渲染为图片\n * @param txt - 要渲染的文本\n * @param cssText - 应用于文本的 CSS 样式\n * @returns 渲染后的图片元素\n */\nexport function renderTxt2Img(txt: string, cssText: string): HTMLImageElement {\n const div = createEl('pre');\n div.style.cssText = `margin: 0; ${cssText}; visibility: hidden; position: fixed;`;\n div.textContent = txt;\n document.body.appendChild(div);\n\n const { width, height } = div.getBoundingClientRect();\n // 计算出 rect,立即从dom移除\n div.remove();\n div.style.visibility = 'visible';\n\n const img = new Image();\n img.width = width;\n img.height = height;\n const svgStr = `\n \n \n
${div.outerHTML}
\n
\n
\n `\n .replace(/\\t/g, '')\n .replace(/#/g, '%23');\n\n img.src = `data:image/svg+xml;charset=utf-8,${svgStr}`;\n return img;\n}\n\n/**\n * 将文本渲染为 {@link ImageBitmap},用来创建 {@link ImgClip}\n * @param txt - 要渲染的文本\n * @param cssText - 应用于文本的 CSS 样式\n *\n * @example\n * new ImgClip(\n * await renderTxt2ImgBitmap(\n * '水印',\n * `font-size:40px; color: white; text-shadow: 2px 2px 6px red;`,\n * )\n * )\n */\nexport async function renderTxt2ImgBitmap(\n txt: string,\n cssText: string,\n): Promise {\n const imgEl = renderTxt2Img(txt, cssText);\n await new Promise((resolve) => {\n imgEl.onload = resolve;\n });\n const cvs = new OffscreenCanvas(imgEl.width, imgEl.height);\n const ctx = cvs.getContext('2d');\n ctx?.drawImage(imgEl, 0, 0, imgEl.width, imgEl.height);\n return await createImageBitmap(cvs);\n}\n","var O = (t) => {\n throw TypeError(t);\n};\nvar E = (t, e, r) => e.has(t) || O(\"Cannot \" + r);\nvar s = (t, e, r) => (E(t, e, \"read from private field\"), r ? r.call(t) : e.get(t)), o = (t, e, r) => e.has(t) ? O(\"Cannot add the same private member more than once\") : e instanceof WeakSet ? e.add(t) : e.set(t, r), l = (t, e, r, a) => (E(t, e, \"write to private field\"), a ? a.call(t, r) : e.set(t, r), r);\nconst z = \"KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHUobil7aWYobj09PSIvIilyZXR1cm57cGFyZW50Om51bGwsbmFtZToiIn07Y29uc3QgZT1uLnNwbGl0KCIvIikuZmlsdGVyKGk9PmkubGVuZ3RoPjApO2lmKGUubGVuZ3RoPT09MCl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoIik7Y29uc3QgYT1lW2UubGVuZ3RoLTFdLHI9Ii8iK2Uuc2xpY2UoMCwtMSkuam9pbigiLyIpO3JldHVybntuYW1lOmEscGFyZW50OnJ9fWFzeW5jIGZ1bmN0aW9uIHcobixlKXtjb25zdHtwYXJlbnQ6YSxuYW1lOnJ9PXUobik7aWYoYT09bnVsbClyZXR1cm4gYXdhaXQgbmF2aWdhdG9yLnN0b3JhZ2UuZ2V0RGlyZWN0b3J5KCk7Y29uc3QgaT1hLnNwbGl0KCIvIikuZmlsdGVyKHQ9PnQubGVuZ3RoPjApO3RyeXtsZXQgdD1hd2FpdCBuYXZpZ2F0b3Iuc3RvcmFnZS5nZXREaXJlY3RvcnkoKTtmb3IoY29uc3QgcyBvZiBpKXQ9YXdhaXQgdC5nZXREaXJlY3RvcnlIYW5kbGUocyx7Y3JlYXRlOmUuY3JlYXRlfSk7aWYoZS5pc0ZpbGUpcmV0dXJuIGF3YWl0IHQuZ2V0RmlsZUhhbmRsZShyLHtjcmVhdGU6ZS5jcmVhdGV9KX1jYXRjaCh0KXtpZih0Lm5hbWU9PT0iTm90Rm91bmRFcnJvciIpcmV0dXJuIG51bGw7dGhyb3cgdH19Y29uc3QgZj17fTtzZWxmLm9ubWVzc2FnZT1hc3luYyBuPT57dmFyIGk7Y29uc3R7ZXZ0VHlwZTplLGFyZ3M6YX09bi5kYXRhO2xldCByPWZbYS5maWxlSWRdO3RyeXtsZXQgdDtjb25zdCBzPVtdO2lmKGU9PT0icmVnaXN0ZXIiKXtjb25zdCBsPWF3YWl0IHcoYS5maWxlUGF0aCx7Y3JlYXRlOiEwLGlzRmlsZTohMH0pO2lmKGw9PW51bGwpdGhyb3cgRXJyb3IoYG5vdCBmb3VuZCBmaWxlOiAke2EuZmlsZUlkfWApO3I9YXdhaXQgbC5jcmVhdGVTeW5jQWNjZXNzSGFuZGxlKHttb2RlOmEubW9kZX0pLGZbYS5maWxlSWRdPXJ9ZWxzZSBpZihlPT09ImNsb3NlIilhd2FpdCByLmNsb3NlKCksZGVsZXRlIGZbYS5maWxlSWRdO2Vsc2UgaWYoZT09PSJ0cnVuY2F0ZSIpYXdhaXQgci50cnVuY2F0ZShhLm5ld1NpemUpO2Vsc2UgaWYoZT09PSJ3cml0ZSIpe2NvbnN0e2RhdGE6bCxvcHRzOm99PW4uZGF0YS5hcmdzO3Q9YXdhaXQgci53cml0ZShsLG8pfWVsc2UgaWYoZT09PSJyZWFkIil7Y29uc3R7b2Zmc2V0Omwsc2l6ZTpvfT1uLmRhdGEuYXJncyxnPW5ldyBVaW50OEFycmF5KG8pLGQ9YXdhaXQgci5yZWFkKGcse2F0Omx9KSxjPWcuYnVmZmVyO3Q9ZD09PW8/YzooKGk9Yy50cmFuc2Zlcik9PW51bGw/dm9pZCAwOmkuY2FsbChjLGQpKT8/Yy5zbGljZSgwLGQpLHMucHVzaCh0KX1lbHNlIGU9PT0iZ2V0U2l6ZSI/dD1hd2FpdCByLmdldFNpemUoKTplPT09ImZsdXNoIiYmYXdhaXQgci5mbHVzaCgpO3NlbGYucG9zdE1lc3NhZ2Uoe2V2dFR5cGU6ImNhbGxiYWNrIixjYklkOm4uZGF0YS5jYklkLHJldHVyblZhbDp0fSxzKX1jYXRjaCh0KXtjb25zdCBzPXQ7c2VsZi5wb3N0TWVzc2FnZSh7ZXZ0VHlwZToidGhyb3dFcnJvciIsY2JJZDpuLmRhdGEuY2JJZCxlcnJNc2c6cy5uYW1lKyI6ICIrcy5tZXNzYWdlK2AKYCtKU09OLnN0cmluZ2lmeShuLmRhdGEpfSl9fX0pKCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wZnMtd29ya2VyLUY0UldscWNfLmpzLm1hcAo=\", B = (t) => Uint8Array.from(atob(t), (e) => e.charCodeAt(0)), U = typeof self < \"u\" && self.Blob && new Blob([B(z)], { type: \"text/javascript;charset=utf-8\" });\nfunction Q(t) {\n let e;\n try {\n if (e = U && (self.URL || self.webkitURL).createObjectURL(U), !e) throw \"\";\n const r = new Worker(e, {\n name: t == null ? void 0 : t.name\n });\n return r.addEventListener(\"error\", () => {\n (self.URL || self.webkitURL).revokeObjectURL(e);\n }), r;\n } catch {\n return new Worker(\n \"data:text/javascript;base64,\" + z,\n {\n name: t == null ? void 0 : t.name\n }\n );\n } finally {\n e && (self.URL || self.webkitURL).revokeObjectURL(e);\n }\n}\nasync function D(t, e, r) {\n const a = M();\n return await a(\"register\", { fileId: t, filePath: e, mode: r }), {\n read: async (i, n) => await a(\"read\", {\n fileId: t,\n offset: i,\n size: n\n }),\n write: async (i, n) => await a(\n \"write\",\n {\n fileId: t,\n data: i,\n opts: n\n },\n [ArrayBuffer.isView(i) ? i.buffer : i]\n ),\n close: async () => await a(\"close\", {\n fileId: t\n }),\n truncate: async (i) => await a(\"truncate\", {\n fileId: t,\n newSize: i\n }),\n getSize: async () => await a(\"getSize\", {\n fileId: t\n }),\n flush: async () => await a(\"flush\", {\n fileId: t\n })\n };\n}\nconst I = [];\nlet V = 0;\nfunction M() {\n if (I.length < 3) {\n const e = t();\n return I.push(e), e;\n } else {\n const e = I[V];\n return V = (V + 1) % I.length, e;\n }\n function t() {\n const e = new Q();\n let r = 0, a = {};\n return e.onmessage = ({\n data: i\n }) => {\n var n, c;\n i.evtType === \"callback\" ? (n = a[i.cbId]) == null || n.resolve(i.returnVal) : i.evtType === \"throwError\" && ((c = a[i.cbId]) == null || c.reject(Error(i.errMsg))), delete a[i.cbId];\n }, async function(n, c, u = []) {\n r += 1;\n const h = new Promise((b, T) => {\n a[r] = { resolve: b, reject: T };\n });\n return e.postMessage(\n {\n cbId: r,\n evtType: n,\n args: c\n },\n u\n ), h;\n };\n }\n}\nfunction v(t) {\n if (t === \"/\") return { parent: null, name: \"\" };\n const e = t.split(\"/\").filter((i) => i.length > 0);\n if (e.length === 0) throw Error(\"Invalid path\");\n const r = e[e.length - 1], a = \"/\" + e.slice(0, -1).join(\"/\");\n return { name: r, parent: a };\n}\nasync function d(t, e) {\n const { parent: r, name: a } = v(t);\n if (r == null) return await navigator.storage.getDirectory();\n const i = r.split(\"/\").filter((n) => n.length > 0);\n try {\n let n = await navigator.storage.getDirectory();\n for (const c of i)\n n = await n.getDirectoryHandle(c, {\n create: e.create\n });\n return e.isFile ? await n.getFileHandle(a, {\n create: e.create\n }) : await n.getDirectoryHandle(a, {\n create: e.create\n });\n } catch (n) {\n if (n.name === \"NotFoundError\")\n return null;\n throw n;\n }\n}\nasync function j(t) {\n const { parent: e, name: r } = v(t);\n if (e == null) {\n const i = await navigator.storage.getDirectory();\n for await (const n of i.keys())\n await i.removeEntry(n, { recursive: !0 });\n return;\n }\n const a = await d(e, {\n create: !1,\n isFile: !1\n });\n a != null && await a.removeEntry(r, { recursive: !0 });\n}\nfunction k(t, e) {\n return `${t}/${e}`.replace(\"//\", \"/\");\n}\nfunction g(t) {\n return new K(t);\n}\nvar w, S, p;\nclass K {\n constructor(e) {\n o(this, w);\n o(this, S);\n o(this, p);\n l(this, w, e);\n const { parent: r, name: a } = v(e);\n l(this, S, a), l(this, p, r);\n }\n get kind() {\n return \"dir\";\n }\n get name() {\n return s(this, S);\n }\n get path() {\n return s(this, w);\n }\n get parent() {\n return s(this, p) == null ? null : g(s(this, p));\n }\n /**\n * Creates the directory.\n * return A promise that resolves when the directory is created.\n */\n async create() {\n return await d(s(this, w), {\n create: !0,\n isFile: !1\n }), g(s(this, w));\n }\n /**\n * Checks if the directory exists.\n * return A promise that resolves to true if the directory exists, otherwise false.\n */\n async exists() {\n return await d(s(this, w), {\n create: !1,\n isFile: !1\n }) instanceof FileSystemDirectoryHandle;\n }\n /**\n * Removes the directory.\n * return A promise that resolves when the directory is removed.\n */\n async remove() {\n for (const e of await this.children())\n try {\n await e.remove();\n } catch (r) {\n console.warn(r);\n }\n try {\n await j(s(this, w));\n } catch (e) {\n console.warn(e);\n }\n }\n /**\n * Retrieves the children of the directory.\n * return A promise that resolves to an array of objects representing the children.\n */\n async children() {\n const e = await d(s(this, w), {\n create: !1,\n isFile: !1\n });\n if (e == null) return [];\n const r = [];\n for await (const a of e.values())\n r.push((a.kind === \"file\" ? m : g)(k(s(this, w), a.name)));\n return r;\n }\n /**\n * If the dest folder exists, copy the current directory into the dest folder;\n * if the dest folder does not exist, rename the current directory to dest name.\n */\n async copyTo(e) {\n if (!await this.exists())\n throw Error(`dir ${this.path} not exists`);\n const r = await e.exists() ? g(k(e.path, this.name)) : e;\n return await r.create(), await Promise.all((await this.children()).map((a) => a.copyTo(r))), r;\n }\n /**\n * move directory, copy then remove current\n */\n async moveTo(e) {\n const r = await this.copyTo(e);\n return await this.remove(), r;\n }\n}\nw = new WeakMap(), S = new WeakMap(), p = new WeakMap();\nconst C = /* @__PURE__ */ new Map();\nfunction m(t, e = \"rw\") {\n if (e === \"rw\") {\n const r = C.get(t) ?? new F(t, e);\n return C.set(t, r), r;\n }\n return new F(t, e);\n}\nasync function J(t, e, r = { overwrite: !0 }) {\n if (e instanceof F) {\n await J(t, await e.stream(), r);\n return;\n }\n const a = await (t instanceof F ? t : m(t, \"rw\")).createWriter();\n try {\n if (r.overwrite && await a.truncate(0), e instanceof ReadableStream) {\n const i = e.getReader();\n for (; ; ) {\n const { done: n, value: c } = await i.read();\n if (n) break;\n await a.write(c);\n }\n } else\n await a.write(e);\n } catch (i) {\n throw i;\n } finally {\n await a.close();\n }\n}\nlet _ = 0;\nconst A = () => ++_;\nvar f, Z, G, Y, X, y, R, W;\nconst P = class P {\n constructor(e, r) {\n o(this, f);\n o(this, Z);\n o(this, G);\n o(this, Y);\n o(this, X);\n o(this, y, 0);\n o(this, R, /* @__PURE__ */ (() => {\n let e = null;\n return () => (l(this, y, s(this, y) + 1), e ?? (e = new Promise(async (r, a) => {\n try {\n const i = await D(\n s(this, X),\n s(this, f),\n s(this, Y)\n );\n r([\n i,\n async () => {\n l(this, y, s(this, y) - 1), !(s(this, y) > 0) && (e = null, await i.close());\n }\n ]);\n } catch (i) {\n a(i);\n }\n })));\n })());\n o(this, W, !1);\n l(this, X, A()), l(this, f, e), l(this, Y, {\n r: \"read-only\",\n rw: \"readwrite\",\n \"rw-unsafe\": \"readwrite-unsafe\"\n }[r]);\n const { parent: a, name: i } = v(e);\n l(this, G, i), l(this, Z, a);\n }\n get kind() {\n return \"file\";\n }\n get path() {\n return s(this, f);\n }\n get name() {\n return s(this, G);\n }\n get parent() {\n return s(this, Z) == null ? null : g(s(this, Z));\n }\n /**\n * Random write to file\n */\n async createWriter() {\n if (s(this, Y) === \"read-only\") throw Error(\"file is read-only\");\n if (s(this, W)) throw Error(\"Other writer have not been closed\");\n l(this, W, !0);\n const e = new TextEncoder(), [r, a] = await s(this, R).call(this);\n let i = await r.getSize(), n = !1;\n return {\n write: async (c, u = {}) => {\n if (n) throw Error(\"Writer is closed\");\n const h = typeof c == \"string\" ? e.encode(c) : c, b = u.at ?? i, T = h.byteLength;\n return i = b + T, await r.write(h, { at: b });\n },\n truncate: async (c) => {\n if (n) throw Error(\"Writer is closed\");\n await r.truncate(c), i > c && (i = c);\n },\n flush: async () => {\n if (n) throw Error(\"Writer is closed\");\n await r.flush();\n },\n close: async () => {\n if (n) throw Error(\"Writer is closed\");\n n = !0, l(this, W, !1), await a();\n }\n };\n }\n /**\n * Random access to file\n */\n async createReader() {\n const [e, r] = await s(this, R).call(this);\n let a = !1, i = 0;\n return {\n read: async (n, c = {}) => {\n if (a) throw Error(\"Reader is closed\");\n const u = c.at ?? i, h = await e.read(u, n);\n return i = u + h.byteLength, h;\n },\n getSize: async () => {\n if (a) throw Error(\"Reader is closed\");\n return await e.getSize();\n },\n close: async () => {\n a || (a = !0, await r());\n }\n };\n }\n async text() {\n return new TextDecoder().decode(await this.arrayBuffer());\n }\n async arrayBuffer() {\n const e = await d(s(this, f), { create: !1, isFile: !0 });\n return e == null ? new ArrayBuffer(0) : (await e.getFile()).arrayBuffer();\n }\n async stream() {\n const e = await this.getOriginFile();\n return e == null ? new ReadableStream({\n pull: (r) => {\n r.close();\n }\n }) : e.stream();\n }\n async getOriginFile() {\n var e;\n return (e = await d(s(this, f), { create: !1, isFile: !0 })) == null ? void 0 : e.getFile();\n }\n async getSize() {\n const e = await d(s(this, f), { create: !1, isFile: !0 });\n return e == null ? 0 : (await e.getFile()).size;\n }\n async exists() {\n return await d(s(this, f), {\n create: !1,\n isFile: !0\n }) instanceof FileSystemFileHandle;\n }\n async remove() {\n if (s(this, y)) throw Error(\"exists unclosed reader/writer\");\n await j(s(this, f));\n }\n /**\n * If the target is a file, use current overwrite the target;\n * if the target is a folder, copy the current file into that folder.\n */\n async copyTo(e) {\n if (!await this.exists())\n throw Error(`file ${this.path} not exists`);\n if (e instanceof P)\n return m(e.path) === this ? this : (await J(e.path, this), m(e.path));\n if (e instanceof K)\n return await this.copyTo(m(k(e.path, this.name)));\n throw Error(\"Illegal target type\");\n }\n /**\n * move file, copy then remove current\n */\n async moveTo(e) {\n const r = await this.copyTo(e);\n return await this.remove(), r;\n }\n};\nf = new WeakMap(), Z = new WeakMap(), G = new WeakMap(), Y = new WeakMap(), X = new WeakMap(), y = new WeakMap(), R = new WeakMap(), W = new WeakMap();\nlet F = P;\nconst L = \"/.opfs-tools-temp-dir\";\nasync function N(t) {\n try {\n if (t.kind === \"file\") {\n if (!await t.exists()) return !0;\n const e = await t.createWriter();\n await e.truncate(0), await e.close(), await t.remove();\n } else\n await t.remove();\n return !0;\n } catch (e) {\n return console.warn(e), !1;\n }\n}\nfunction $() {\n setInterval(async () => {\n for (const e of await g(L).children()) {\n const r = /^\\d+-(\\d+)$/.exec(e.name);\n (r == null || Date.now() - Number(r[1]) > 2592e5) && await N(e);\n }\n }, 60 * 1e3);\n}\nconst x = [];\nlet H = !1;\nasync function q() {\n if (globalThis.localStorage == null) return;\n const t = \"OPFS_TOOLS_EXPIRES_TMP_FILES\";\n H || (H = !0, globalThis.addEventListener(\"unload\", () => {\n x.length !== 0 && localStorage.setItem(\n t,\n `${localStorage.getItem(t) ?? \"\"},${x.join(\",\")}`\n );\n }));\n let e = localStorage.getItem(t) ?? \"\";\n for (const r of e.split(\",\"))\n r.length !== 0 && await N(m(`${L}/${r}`)) && (e = e.replace(r, \"\"));\n localStorage.setItem(t, e.replace(/,{2,}/g, \",\"));\n}\n(async function() {\n var e;\n globalThis.__opfs_tools_tmpfile_init__ !== !0 && (globalThis.__opfs_tools_tmpfile_init__ = !0, !(globalThis.FileSystemDirectoryHandle == null || globalThis.FileSystemFileHandle == null || ((e = globalThis.navigator) == null ? void 0 : e.storage.getDirectory) == null) && ($(), await q()));\n})();\nfunction te() {\n const t = `${Math.random().toString().slice(2)}-${Date.now()}`;\n return x.push(t), m(`${L}/${t}`);\n}\nfunction re(t, e) {\n let r = m(t), a = 0, i = r.createWriter(), n = r.createReader();\n const c = async (u) => {\n const b = await (await n).read(a, { at: Math.round(a * 0.3) });\n a = await u.write(b, { at: 0 }), await u.truncate(a);\n };\n return {\n append: async (u) => {\n const h = await i;\n a += await h.write(u), a >= e && await c(h);\n },\n text: r.text.bind(r),\n remove: async () => {\n await (await n).close(), await (await i).close(), await r.remove();\n },\n getSize: async () => a\n };\n}\nexport {\n g as dir,\n m as file,\n re as rollfile,\n te as tmpfile,\n J as write\n};\n//# sourceMappingURL=opfs-tools.js.map\n","import { tmpfile } from 'opfs-tools';\n\n/**\n * 将任意对象转换成String,如果包含Error,则将Error转换为err.toString()\n * @param val any\n */\nfunction any2Str(val: any): string {\n if (val instanceof Error) return String(val);\n return typeof val === 'object'\n ? JSON.stringify(val, (_, v) => (v instanceof Error ? String(v) : v))\n : String(val);\n}\n\nfunction getTimeStr() {\n const d = new Date();\n return `${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}.${d.getMilliseconds()}`;\n}\n\nlet THRESHOLD = 1;\n\nconst localFile = tmpfile();\n\nlet writer: Awaited> | null = null;\n\ntype LvName = 'debug' | 'info' | 'warn' | 'error';\nconst lvHandler = ['debug', 'info', 'warn', 'error'].reduce(\n (acc, lvName, lvThres) =>\n Object.assign(acc, {\n [lvName]: (...args: any[]) => {\n if (THRESHOLD <= lvThres) {\n console[lvName as LvName](...args);\n writer?.write(\n `[${lvName}][${getTimeStr()}] ${args\n .map((a) => any2Str(a))\n .join(' ')}\\n`,\n );\n }\n },\n }),\n {} as Record,\n);\n\nconst map = new Map();\n\n/**\n * 全局日志对象,将日志内容写入 OPFS 临时文件\n */\nexport const Log = {\n /**\n * 设置记录日志的级别\n *\n * @example\n * Log.setLogLevel(Log.warn) // 记录 warn,error 日志\n */\n setLogLevel: (logfn: T) => {\n THRESHOLD = map.get(logfn) ?? 1;\n },\n ...lvHandler,\n /**\n * 生成一个 log 实例,所有输出前都会附加 tag\n *\n * @example\n * const log = Log.create('')\n * log.info('xxx') // ' xxx'\n */\n create: (tag: string) => {\n return Object.fromEntries(\n Object.entries(lvHandler).map(([k, h]) => [\n k,\n (...args: any[]) => h(tag, ...args),\n ]),\n );\n },\n\n /**\n * 将所有日志导出为一个字符串\n *\n * @example\n * Log.dump() // => [level][time] 内容...\n *\n */\n async dump() {\n await initPromise;\n await writer?.flush();\n return await localFile.text();\n },\n};\n\nmap.set(Log.debug, 0);\nmap.set(Log.info, 1);\nmap.set(Log.warn, 2);\nmap.set(Log.error, 3);\n\nasync function init() {\n try {\n writer = await localFile.createWriter();\n Log.info(navigator.userAgent);\n Log.info('date: ' + new Date().toLocaleDateString());\n } catch (err) {\n if (!(err instanceof Error)) throw err;\n if (err.message.includes('createSyncAccessHandle is not a function')) {\n console.warn(err);\n } else {\n throw err;\n }\n }\n}\n\n// 如果是浏览器环境,再进行初始化,避免 node(SSR) 环境 import 时报错\nconst initPromise = globalThis.navigator == null ? null : init();\n\nif (import.meta.env?.DEV) {\n Log.setLogLevel(Log.debug);\n}\n\nif (import.meta.env?.MODE === 'test') {\n Log.setLogLevel(Log.warn);\n}\n","const setup = (): void => {\n let timerId: number;\n\n let interval: number = 16.6;\n\n self.onmessage = (e) => {\n if (e.data.event === 'start') {\n self.clearInterval(timerId);\n timerId = self.setInterval(() => {\n self.postMessage({});\n }, interval);\n }\n\n if (e.data.event === 'stop') {\n self.clearInterval(timerId);\n }\n };\n};\n\nconst createWorker = (): Worker => {\n const blob = new Blob([`(${setup.toString()})()`]);\n const url = URL.createObjectURL(blob);\n return new Worker(url);\n};\n\nconst handlerMap = new Map void>>();\nlet runCount = 1;\n\nlet worker: Worker | null = null;\nif (globalThis.Worker != null) {\n worker = createWorker();\n worker.onmessage = () => {\n runCount += 1;\n for (const [k, v] of handlerMap) {\n if (runCount % k === 0) for (const fn of v) fn();\n }\n };\n}\n\n/**\n * 专门解决页面长时间处于后台时,定时器不(或延迟)执行的问题\n *\n * 跟 `setInterval` 很相似,⚠️ 但 time 会有一定偏差,请优先使用 `setInterval`\n *\n * @see [JS 定时器时长控制细节](https://hughfenghen.github.io/posts/2023/06/15/timer-delay/)\n */\nexport const workerTimer = (\n handler: () => void,\n time: number,\n): (() => void) => {\n const groupId = Math.round(time / 16.6);\n const fns = handlerMap.get(groupId) ?? new Set();\n fns.add(handler);\n handlerMap.set(groupId, fns);\n\n if (handlerMap.size === 1 && fns.size === 1) {\n worker?.postMessage({ event: 'start' });\n }\n\n return () => {\n fns.delete(handler);\n if (fns.size === 0) handlerMap.delete(groupId);\n if (handlerMap.size === 0) {\n runCount = 0;\n worker?.postMessage({ event: 'stop' });\n }\n };\n};\n","/*\r\n * Copyright (c) 2019 Rafael da Silva Rocha.\r\n * Copyright 2012 Spencer Cohen\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview The Interpolator class. Based on Smooth.js by Spencer Cohen.\r\n * @see https://github.com/rochars/wave-resampler\r\n * @see https://github.com/osuushi/Smooth.js\r\n */\r\n\r\n/**\r\n * A class to get scaled values out of arrays.\r\n */\r\nexport class Interpolator {\r\n \r\n /**\r\n * @param {number} scaleFrom the length of the original array.\r\n * @param {number} scaleTo The length of the new array.\r\n * @param {?Object} details The extra configuration, if needed.\r\n */\r\n constructor(scaleFrom, scaleTo, details) {\r\n /**\r\n * The length of the original array.\r\n * @type {number}\r\n */\r\n this.length_ = scaleFrom;\r\n /**\r\n * The scaling factor.\r\n * @type {number}\r\n */\r\n this.scaleFactor_ = (scaleFrom - 1) / scaleTo;\r\n /**\r\n * The interpolation function.\r\n * @type {Function}\r\n */\r\n this.interpolate = this.cubic;\r\n if (details.method === 'point') {\r\n \tthis.interpolate = this.point;\r\n } else if(details.method === 'linear') {\r\n \tthis.interpolate = this.linear;\r\n } else if(details.method === 'sinc') {\r\n \tthis.interpolate = this.sinc;\r\n }\r\n /**\r\n * The tanget factor for cubic interpolation.\r\n * @type {number}\r\n */\r\n this.tangentFactor_ = 1 - Math.max(0, Math.min(1, details.tension || 0));\r\n // Configure the kernel for sinc\r\n /**\r\n * The sinc filter size.\r\n * @type {number}\r\n */\r\n this.sincFilterSize_ = details.sincFilterSize || 1;\r\n /**\r\n * The sinc kernel.\r\n * @type {Function}\r\n */\r\n this.kernel_ = sincKernel_(details.sincWindow || window_);\r\n }\r\n\r\n /**\r\n * @param {number} t The index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The interpolated value.\r\n */\r\n point(t, samples) {\r\n return this.getClippedInput_(Math.round(this.scaleFactor_ * t), samples);\r\n }\r\n\r\n /**\r\n * @param {number} t The index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The interpolated value.\r\n */\r\n linear(t, samples) {\r\n t = this.scaleFactor_ * t;\r\n let k = Math.floor(t);\r\n t -= k;\r\n return (1 - t) *\r\n \tthis.getClippedInput_(k, samples) + t *\r\n \tthis.getClippedInput_(k + 1, samples);\r\n }\r\n\r\n /**\r\n * @param {number} t The index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The interpolated value.\r\n */\r\n cubic(t, samples) {\r\n t = this.scaleFactor_ * t;\r\n let k = Math.floor(t);\r\n let m = [this.getTangent_(k, samples), this.getTangent_(k + 1, samples)];\r\n let p = [this.getClippedInput_(k, samples),\r\n this.getClippedInput_(k + 1, samples)];\r\n t -= k;\r\n let t2 = t * t;\r\n let t3 = t * t2;\r\n return (2 * t3 - 3 * t2 + 1) *\r\n p[0] + (t3 - 2 * t2 + t) *\r\n m[0] + (-2 * t3 + 3 * t2) *\r\n p[1] + (t3 - t2) * m[1];\r\n }\r\n\r\n /**\r\n * @param {number} t The index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The interpolated value.\r\n */\r\n sinc(t, samples) {\r\n t = this.scaleFactor_ * t;\r\n let k = Math.floor(t);\r\n let ref = k - this.sincFilterSize_ + 1;\r\n let ref1 = k + this.sincFilterSize_;\r\n let sum = 0;\r\n for (let n = ref; n <= ref1; n++) {\r\n sum += this.kernel_(t - n) * this.getClippedInput_(n, samples);\r\n }\r\n return sum;\r\n }\r\n\r\n /**\r\n * @param {number} k The scaled index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The tangent.\r\n * @private\r\n */\r\n getTangent_(k, samples) {\r\n return this.tangentFactor_ *\r\n (this.getClippedInput_(k + 1, samples) -\r\n this.getClippedInput_(k - 1, samples)) / 2;\r\n }\r\n\r\n /**\r\n * @param {number} t The scaled index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The interpolated value.\r\n * @private\r\n */\r\n getClippedInput_(t, samples) {\r\n if ((0 <= t && t < this.length_)) {\r\n return samples[t];\r\n }\r\n return 0;\r\n }\r\n}\r\n\r\n// Sinc functions\r\n\r\n/**\r\n * The default window function.\r\n * @param {number} x The sinc signal.\r\n * @return {number}\r\n * @private\r\n */\r\nfunction window_(x) {\r\n return Math.exp(-x / 2 * x / 2);\r\n}\r\n\r\n/**\r\n * @param {Function} window The window function.\r\n * @return {Function}\r\n * @private\r\n */\r\nfunction sincKernel_(window) {\r\n return function(x) { return sinc_(x) * window(x); };\r\n}\r\n\r\n/**\r\n * @param {number} x The sinc signal.\r\n * @return {number}\r\n * @private\r\n */\r\nfunction sinc_(x) {\r\n if (x === 0) {\r\n return 1;\r\n }\r\n return Math.sin(Math.PI * x) / (Math.PI * x);\r\n}\r\n\r\n","/*\r\n * Copyright (c) 2019 Rafael da Silva Rocha.\r\n * Copyright (c) 2014 Florian Markert\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview FIR LPF. Based on the FIR LPF from Fili by Florian Markert.\r\n * @see https://github.com/rochars/wave-resampler\r\n * @see https://github.com/markert/fili.js\r\n */\r\n\r\n/**\r\n * A FIR low pass filter.\r\n */\r\nexport class FIRLPF {\r\n \r\n /**\r\n * @param {number} order The order of the filter.\r\n * @param {number} sampleRate The sample rate.\r\n * @param {number} cutOff The cut off frequency.\r\n */\r\n constructor(order, sampleRate, cutOff) {\r\n let omega = 2 * Math.PI * cutOff / sampleRate;\r\n let dc = 0;\r\n this.filters = [];\r\n for (let i = 0; i <= order; i++) {\r\n if (i - order / 2 === 0) {\r\n this.filters[i] = omega;\r\n } else {\r\n this.filters[i] = Math.sin(omega * (i - order / 2)) / (i - order / 2);\r\n // Hamming window\r\n this.filters[i] *= (0.54 - 0.46 * Math.cos(2 * Math.PI * i / order));\r\n }\r\n dc = dc + this.filters[i];\r\n }\r\n // normalize\r\n for (let i = 0; i <= order; i++) {\r\n this.filters[i] /= dc;\r\n }\r\n this.z = this.initZ_();\r\n }\r\n\r\n /**\r\n * @param {number} sample A sample of a sequence.\r\n * @return {number}\r\n */\r\n filter(sample) {\r\n this.z.buf[this.z.pointer] = sample;\r\n let out = 0;\r\n for (let i = 0, len = this.z.buf.length; i < len; i++) {\r\n out += (\r\n this.filters[i] * this.z.buf[(this.z.pointer + i) % this.z.buf.length]);\r\n }\r\n this.z.pointer = (this.z.pointer + 1) % (this.z.buf.length);\r\n return out;\r\n }\r\n\r\n /**\r\n * Reset the filter.\r\n */\r\n reset() {\r\n this.z = this.initZ_();\r\n }\r\n\r\n /**\r\n * Return the default value for z.\r\n * @private\r\n */\r\n initZ_() {\r\n let r = [];\r\n for (let i = 0; i < this.filters.length - 1; i++) {\r\n r.push(0);\r\n }\r\n return {\r\n buf: r,\r\n pointer: 0\r\n };\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2019 Rafael da Silva Rocha.\r\n * Copyright (c) 2014 Florian Markert\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview Butterworth LPF. Based on the Butterworth LPF from Fili.js.\r\n * @see https://github.com/rochars/wave-resampler\r\n * @see https://github.com/markert/fili.js\r\n */\r\n\r\n/**\r\n * Butterworth LPF.\r\n */\r\nexport class ButterworthLPF {\r\n \r\n /**\r\n * @param {number} order The order of the filter.\r\n * @param {number} sampleRate The sample rate.\r\n * @param {number} cutOff The cut off frequency.\r\n */\r\n constructor(order, sampleRate, cutOff) {\r\n let filters = [];\r\n for (let i = 0; i < order; i++) {\r\n filters.push(this.getCoeffs_({\r\n Fs: sampleRate,\r\n Fc: cutOff,\r\n Q: 0.5 / (Math.sin((Math.PI / (order * 2)) * (i + 0.5)))\r\n }));\r\n }\r\n this.stages = [];\r\n for (let i = 0; i < filters.length; i++) {\r\n this.stages[i] = {\r\n b0 : filters[i].b[0],\r\n b1 : filters[i].b[1],\r\n b2 : filters[i].b[2],\r\n a1 : filters[i].a[0],\r\n a2 : filters[i].a[1],\r\n k : filters[i].k,\r\n z : [0, 0]\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * @param {number} sample A sample of a sequence.\r\n * @return {number}\r\n */\r\n filter(sample) {\r\n let out = sample;\r\n for (let i = 0, len = this.stages.length; i < len; i++) {\r\n out = this.runStage_(i, out);\r\n }\r\n return out;\r\n }\r\n\r\n getCoeffs_(params) {\r\n let coeffs = {};\r\n coeffs.z = [0, 0];\r\n coeffs.a = [];\r\n coeffs.b = [];\r\n let p = this.preCalc_(params, coeffs);\r\n coeffs.k = 1;\r\n coeffs.b.push((1 - p.cw) / (2 * p.a0));\r\n coeffs.b.push(2 * coeffs.b[0]);\r\n coeffs.b.push(coeffs.b[0]);\r\n return coeffs;\r\n }\r\n\r\n preCalc_(params, coeffs) {\r\n let pre = {};\r\n let w = 2 * Math.PI * params.Fc / params.Fs;\r\n pre.alpha = Math.sin(w) / (2 * params.Q);\r\n pre.cw = Math.cos(w);\r\n pre.a0 = 1 + pre.alpha;\r\n coeffs.a0 = pre.a0;\r\n coeffs.a.push((-2 * pre.cw) / pre.a0);\r\n coeffs.k = 1;\r\n coeffs.a.push((1 - pre.alpha) / pre.a0);\r\n return pre;\r\n }\r\n \r\n runStage_(i, input) {\r\n let temp =\r\n input * this.stages[i].k - this.stages[i].a1 * this.stages[i].z[0] -\r\n this.stages[i].a2 * this.stages[i].z[1];\r\n let out =\r\n this.stages[i].b0 * temp + this.stages[i].b1 * this.stages[i].z[0] +\r\n this.stages[i].b2 * this.stages[i].z[1];\r\n this.stages[i].z[1] = this.stages[i].z[0];\r\n this.stages[i].z[0] = temp;\r\n return out;\r\n }\r\n\r\n /**\r\n * Reset the filter.\r\n */\r\n reset() {\r\n for (let i = 0; i < this.stages.length; i++) {\r\n this.stages[i].z = [0, 0];\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2019 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview The resample function.\r\n * @see https://github.com/rochars/wave-resampler\r\n */\r\n\r\nimport { Interpolator } from './lib/interpolator';\r\nimport { FIRLPF } from './lib/fir-lpf';\r\nimport { ButterworthLPF } from './lib/butterworth-lpf';\r\n\r\n/**\r\n * Configures wich resampling method uses LPF by default.\r\n * @private\r\n */\r\nconst DEFAULT_LPF_USE = {\r\n 'point': false,\r\n 'linear': false,\r\n 'cubic': true,\r\n 'sinc': true\r\n};\r\n\r\n/**\r\n * The default orders for the LPF types.\r\n * @private\r\n */\r\nconst DEFAULT_LPF_ORDER = {\r\n 'IIR': 16,\r\n 'FIR': 71\r\n};\r\n\r\n/**\r\n * The classes to use with each LPF type.\r\n * @private\r\n */\r\nconst DEFAULT_LPF = {\r\n 'IIR': ButterworthLPF,\r\n 'FIR': FIRLPF\r\n};\r\n\r\n/**\r\n * Change the sample rate of the samples to a new sample rate.\r\n * @param {!Array|!TypedArray} samples The original samples.\r\n * @param {number} oldSampleRate The original sample rate.\r\n * @param {number} sampleRate The target sample rate.\r\n * @param {?Object} details The extra configuration, if needed.\r\n * @return {!Float64Array} the new samples.\r\n */\r\nexport function resample(samples, oldSampleRate, sampleRate, details={}) { \r\n // Make the new sample container\r\n let rate = ((sampleRate - oldSampleRate) / oldSampleRate) + 1;\r\n let newSamples = new Float64Array(samples.length * (rate));\r\n // Create the interpolator\r\n details.method = details.method || 'cubic';\r\n let interpolator = new Interpolator(\r\n samples.length,\r\n newSamples.length,\r\n {\r\n method: details.method,\r\n tension: details.tension || 0,\r\n sincFilterSize: details.sincFilterSize || 6,\r\n sincWindow: details.sincWindow || undefined\r\n });\r\n // Resample + LPF\r\n if (details.LPF === undefined) {\r\n details.LPF = DEFAULT_LPF_USE[details.method];\r\n } \r\n if (details.LPF) {\r\n details.LPFType = details.LPFType || 'IIR';\r\n const LPF = DEFAULT_LPF[details.LPFType];\r\n // Upsampling\r\n if (sampleRate > oldSampleRate) {\r\n let filter = new LPF(\r\n details.LPFOrder || DEFAULT_LPF_ORDER[details.LPFType],\r\n sampleRate,\r\n (oldSampleRate / 2));\r\n upsample_(\r\n samples, newSamples, interpolator, filter);\r\n // Downsampling\r\n } else {\r\n let filter = new LPF(\r\n details.LPFOrder || DEFAULT_LPF_ORDER[details.LPFType],\r\n oldSampleRate,\r\n sampleRate / 2);\r\n downsample_(\r\n samples, newSamples, interpolator, filter);\r\n }\r\n // Resample, no LPF\r\n } else {\r\n resample_(samples, newSamples, interpolator);\r\n }\r\n return newSamples;\r\n}\r\n\r\n/**\r\n * Resample.\r\n * @param {!Array|!TypedArray} samples The original samples.\r\n * @param {!Float64Array} newSamples The container for the new samples.\r\n * @param {Object} interpolator The interpolator.\r\n * @private\r\n */\r\nfunction resample_(samples, newSamples, interpolator) {\r\n // Resample\r\n for (let i = 0, len = newSamples.length; i < len; i++) {\r\n newSamples[i] = interpolator.interpolate(i, samples);\r\n }\r\n}\r\n\r\n/**\r\n * Upsample with LPF.\r\n * @param {!Array|!TypedArray} samples The original samples.\r\n * @param {!Float64Array} newSamples The container for the new samples.\r\n * @param {Object} interpolator The interpolator.\r\n * @param {Object} filter The LPF object.\r\n * @private\r\n */\r\nfunction upsample_(samples, newSamples, interpolator, filter) {\r\n // Resample and filter\r\n for (let i = 0, len = newSamples.length; i < len; i++) {\r\n newSamples[i] = filter.filter(interpolator.interpolate(i, samples));\r\n }\r\n // Reverse filter\r\n filter.reset();\r\n for (let i = newSamples.length - 1; i >= 0; i--) {\r\n newSamples[i] = filter.filter(newSamples[i]);\r\n }\r\n}\r\n\r\n/**\r\n * Downsample with LPF.\r\n * @param {!Array|!TypedArray} samples The original samples.\r\n * @param {!Float64Array} newSamples The container for the new samples.\r\n * @param {Object} interpolator The interpolator.\r\n * @param {Object} filter The LPF object.\r\n * @private\r\n */\r\nfunction downsample_(samples, newSamples, interpolator, filter) {\r\n // Filter\r\n for (let i = 0, len = samples.length; i < len; i++) {\r\n samples[i] = filter.filter(samples[i]);\r\n }\r\n // Reverse filter\r\n filter.reset();\r\n for (let i = samples.length - 1; i >= 0; i--) {\r\n samples[i] = filter.filter(samples[i]);\r\n }\r\n // Resample\r\n resample_(samples, newSamples, interpolator);\r\n}\r\n","// 能同时在 worker 和主线程中运行的工具函数\n\nimport { Log } from './log';\nimport { workerTimer } from './worker-timer';\nimport { resample } from 'wave-resampler';\n\n/**\n * 合并(串联)多个 Float32Array,通常用于合并 PCM 数据\n */\nexport function concatFloat32Array(bufs: Float32Array[]): Float32Array {\n const rs = new Float32Array(\n bufs.map((buf) => buf.length).reduce((a, b) => a + b),\n );\n\n let offset = 0;\n for (const buf of bufs) {\n rs.set(buf, offset);\n offset += buf.length;\n }\n\n return rs;\n}\n\n/**\n * 将小片段的 PCM 合并成一个大片段\n * @param fragments 小片段 PCM,子元素是不同声道的原始 PCM 数据\n */\nexport function concatPCMFragments(\n fragments: Float32Array[][],\n): Float32Array[] {\n // fragments: [[chan0, chan1], [chan0, chan1]...]\n // chanListPCM: [[chan0, chan0...], [chan1, chan1...]]\n const chanListPCM: Float32Array[][] = [];\n for (let i = 0; i < fragments.length; i += 1) {\n for (let j = 0; j < fragments[i].length; j += 1) {\n if (chanListPCM[j] == null) chanListPCM[j] = [];\n chanListPCM[j].push(fragments[i][j]);\n }\n }\n // [bigChan0, bigChan1]\n return chanListPCM.map(concatFloat32Array);\n}\n\n/**\n * 从 AudioData 中提取 PCM 数据的工具函数\n */\nexport function extractPCM4AudioData(ad: AudioData): Float32Array[] {\n if (ad.format === 'f32-planar') {\n const rs = [];\n for (let idx = 0; idx < ad.numberOfChannels; idx += 1) {\n const chanBufSize = ad.allocationSize({ planeIndex: idx });\n const chanBuf = new ArrayBuffer(chanBufSize);\n ad.copyTo(chanBuf, { planeIndex: idx });\n rs.push(new Float32Array(chanBuf));\n }\n return rs;\n } else if (ad.format === 's16') {\n const buf = new ArrayBuffer(ad.allocationSize({ planeIndex: 0 }));\n ad.copyTo(buf, { planeIndex: 0 });\n return convertS16ToF32Planar(new Int16Array(buf), ad.numberOfChannels);\n }\n throw Error('Unsupported audio data format');\n}\n\n/**\n * Convert s16 PCM to f32-planar\n * @param pcmS16Data - The s16 PCM data.\n * @param numChannels - Number of audio channels.\n * @returns An array of Float32Array, each containing the audio data for one channel.\n */\nfunction convertS16ToF32Planar(pcmS16Data: Int16Array, numChannels: number) {\n const numSamples = pcmS16Data.length / numChannels;\n const planarData = Array.from(\n { length: numChannels },\n () => new Float32Array(numSamples),\n );\n\n for (let i = 0; i < numSamples; i++) {\n for (let channel = 0; channel < numChannels; channel++) {\n const sample = pcmS16Data[i * numChannels + channel];\n planarData[channel][i] = sample / 32768; // Normalize to range [-1.0, 1.0]\n }\n }\n\n return planarData;\n}\n\n/**\n * 从 AudioBuffer 中提取 PCM\n */\nexport function extractPCM4AudioBuffer(ab: AudioBuffer): Float32Array[] {\n return Array(ab.numberOfChannels)\n .fill(0)\n .map((_, idx) => {\n return ab.getChannelData(idx);\n });\n}\n\n/**\n * 调整音频数据的音量\n * @param ad - 要调整的音频对象\n * @param volume - 音量调整系数(0.0 - 1.0)\n * @returns 调整音量后的新音频数据\n */\nexport function adjustAudioDataVolume(ad: AudioData, volume: number) {\n const data = new Float32Array(\n concatFloat32Array(extractPCM4AudioData(ad)),\n ).map((v) => v * volume);\n const newAd = new AudioData({\n sampleRate: ad.sampleRate,\n numberOfChannels: ad.numberOfChannels,\n timestamp: ad.timestamp,\n format: ad.format,\n numberOfFrames: ad.numberOfFrames,\n data,\n });\n ad.close();\n return newAd;\n}\n\n/**\n * 解码图像流,返回一个视频帧数组。\n *\n * @param stream - 包含图像数据的可读流。\n * @param type - 图像的 MIME 类型,例如 'image/jpeg'。\n *\n * @returns 返回一个 Promise,该 Promise 在解码完成后解析为 {@link VideoFrame} 数组。\n *\n * @see [解码动图](https://bilibili.github.io/WebAV/demo/1_3-decode-image)\n *\n * @example\n *\n * const frames = await decodeImg(\n * (await fetch('')).body!,\n * `image/gif`,\n * );\n */\nexport async function decodeImg(\n stream: ReadableStream,\n type: string,\n): Promise {\n const init = {\n type,\n data: stream,\n };\n const imageDecoder = new ImageDecoder(init);\n\n await Promise.all([imageDecoder.completed, imageDecoder.tracks.ready]);\n\n let frameCnt = imageDecoder.tracks.selectedTrack?.frameCount ?? 1;\n\n const rs: VideoFrame[] = [];\n for (let i = 0; i < frameCnt; i += 1) {\n rs.push((await imageDecoder.decode({ frameIndex: i })).image);\n }\n return rs;\n}\n\n/**\n * 混合双通道音轨的 PCM 数据,并将多声道并排成一个 Float32Array 输出\n * @param audios - 一个二维数组,每个元素是一个 Float32Array 数组,代表一个音频流的 PCM 数据。\n * 每个 Float32Array 数组的第一个元素是左声道数据,第二个元素(如果有)是右声道数据。\n * 如果只有左声道数据,则右声道将复用左声道数据。\n *\n * @returns 返回一个 Float32Array,返回结果是将这个一个音轨的左右声道并排成 Float32Array。\n *\n * @example\n *\n * const audios = [\n * [new Float32Array([0.1, 0.2, 0.3]), new Float32Array([0.4, 0.5, 0.6])],\n * [new Float32Array([0.7, 0.8, 0.9])],\n * ];\n * const mixed = mixinPCM(audios);\n */\nexport function mixinPCM(audios: Float32Array[][]): Float32Array {\n const maxLen = Math.max(...audios.map((a) => a[0]?.length ?? 0));\n const data = new Float32Array(maxLen * 2);\n\n for (let bufIdx = 0; bufIdx < maxLen; bufIdx++) {\n let chan0 = 0;\n let chan1 = 0;\n for (let trackIdx = 0; trackIdx < audios.length; trackIdx++) {\n const _c0 = audios[trackIdx][0]?.[bufIdx] ?? 0;\n // 如果是单声道 PCM,第二声道复用第一声道数据\n const _c1 = audios[trackIdx][1]?.[bufIdx] ?? _c0;\n chan0 += _c0;\n chan1 += _c1;\n }\n data[bufIdx] = chan0;\n data[bufIdx + maxLen] = chan1;\n }\n\n return data;\n}\n\n/**\n * 对 PCM 音频数据进行重采样。\n *\n * @param pcmData - 一个 Float32Array 数组,每个元素代表一个声道的 PCM 数据。\n * @param curRate - 当前的采样率。\n * @param target - 目标参数对象。\n * @param target.rate - 目标采样率。\n * @param target.chanCount - 目标声道数。\n *\n * @returns 返回一个 Promise,该 Promise 在重采样完成后解析为一个 Float32Array 数组,每个元素代表一个声道的 PCM 数据。\n *\n * @example\n *\n * const pcmData = [new Float32Array([0.1, 0.2, 0.3]), new Float32Array([0.4, 0.5, 0.6])];\n * const curRate = 44100;\n * const target = { rate: 48000, chanCount: 2 };\n * const resampled = await audioResample(pcmData, curRate, target);\n */\nexport async function audioResample(\n pcmData: Float32Array[],\n curRate: number,\n target: {\n rate: number;\n chanCount: number;\n },\n): Promise {\n const chanCnt = pcmData.length;\n const emptyPCM = Array(target.chanCount)\n .fill(0)\n .map(() => new Float32Array(0));\n if (chanCnt === 0) return emptyPCM;\n\n const len = Math.max(...pcmData.map((c) => c.length));\n if (len === 0) return emptyPCM;\n\n // The Worker scope does not have access to OfflineAudioContext\n if (globalThis.OfflineAudioContext == null) {\n return pcmData.map(\n (p) =>\n new Float32Array(\n resample(p, curRate, target.rate, { method: 'sinc', LPF: false }),\n ),\n );\n }\n\n const ctx = new globalThis.OfflineAudioContext(\n target.chanCount,\n (len * target.rate) / curRate,\n target.rate,\n );\n const abSource = ctx.createBufferSource();\n const ab = ctx.createBuffer(chanCnt, len, curRate);\n pcmData.forEach((d, idx) => ab.copyToChannel(d, idx));\n\n abSource.buffer = ab;\n abSource.connect(ctx.destination);\n abSource.start();\n\n return extractPCM4AudioBuffer(await ctx.startRendering());\n}\n\n/**\n * 使当前执行环境暂停一段时间。\n * @param time - 暂停的时间,单位为毫秒。\n * @example\n * await sleep(1000); // 暂停 1 秒\n */\nexport function sleep(time: number): Promise {\n return new Promise((resolve) => {\n const stop = workerTimer(() => {\n stop();\n resolve();\n }, time);\n });\n}\n\n/**\n * 从给定的 Float32Array 中提取一个环形切片,超出边界从 0 开始循环\n *\n * 主要用于截取 PCM 实现循环播放\n *\n * @param data - 输入的 Float32Array。\n * @param start - 切片的开始索引。\n * @param end - 切片的结束索引。\n * @returns - 返回一个新的 Float32Array,包含从 start 到 end 的数据。\n *\n * @example\n * const data = new Float32Array([0, 1, 2, 3, 4, 5]);\n * ringSliceFloat32Array(data, 4, 6); // => Float32Array [4, 5, 0]\n */\nexport function ringSliceFloat32Array(\n data: Float32Array,\n start: number,\n end: number,\n): Float32Array {\n const cnt = end - start;\n const rs = new Float32Array(cnt);\n let i = 0;\n while (i < cnt) {\n rs[i] = data[(start + i) % data.length];\n i += 1;\n }\n return rs;\n}\n\n/**\n * 自动读取流并处理每个数据块。\n *\n * @template ST - 可读流的类型。\n * @param stream - 要读取的流。\n * @param cbs - 回调函数对象。\n * @param cbs.onChunk - 当读取到新的数据块时调用的函数。该函数接收一个参数,即数据块,并返回一个 Promise。\n * @param cbs.onDone - 当读取完所有数据块时调用的函数。\n * @returns - 返回一个函数,调用该函数可以停止读取流。\n *\n * @example\n * const stream = getSomeReadableStream();\n * const onChunk = async (chunk) => {\n * console.log('New chunk:', chunk);\n * };\n * const onDone = () => {\n * console.log('Done reading stream');\n * };\n * const stopReading = autoReadStream(stream, { onChunk, onDone });\n * // Later...\n * stopReading();\n */\nexport function autoReadStream(\n stream: ST,\n cbs: {\n onChunk: ST extends ReadableStream\n ? (chunk: DT) => Promise\n : never;\n onDone: () => void;\n },\n) {\n let stoped = false;\n async function run() {\n const reader = stream.getReader();\n\n while (!stoped) {\n const { value, done } = await reader.read();\n if (done) {\n cbs.onDone();\n return;\n }\n await cbs.onChunk(value);\n }\n\n reader.releaseLock();\n await stream.cancel();\n }\n\n run().catch(Log.error);\n\n return () => {\n stoped = true;\n };\n}\n\n/**\n * 函数节流\n */\nexport function throttle any>(\n func: F,\n wait: number,\n): (...rest: Parameters) => undefined | ReturnType {\n let lastTime: number;\n return function (this: any, ...rest) {\n if (lastTime == null || performance.now() - lastTime > wait) {\n lastTime = performance.now();\n return func.apply(this, rest);\n }\n };\n}\n\n// 封装 decoder,一次解析一个 GOP\nexport function createGoPVideoDecoder(conf: VideoDecoderConfig) {\n type OutputHandle = (vf: VideoFrame | null, done: boolean) => void;\n\n let curCb: ((vf: VideoFrame) => void) | null = null;\n const vdec = new VideoDecoder({\n output: (vf) => {\n curCb?.(vf);\n },\n error: Log.error,\n });\n vdec.configure(conf);\n\n let tasks: Array<{ chunks: EncodedVideoChunk[]; cb: OutputHandle }> = [];\n\n async function run() {\n if (curCb != null) return;\n\n const t = tasks.shift();\n if (t == null) return;\n if (t.chunks.length <= 0) {\n t.cb(null, true);\n run().catch(Log.error);\n return;\n }\n\n let i = 0;\n curCb = (vf) => {\n i += 1;\n t.cb(vf, false);\n if (i >= t.chunks.length) {\n t.cb(null, true);\n curCb = null;\n run().catch(Log.error);\n }\n };\n for (const chunk of t.chunks) vdec.decode(chunk);\n await vdec.flush();\n }\n\n return {\n decode(chunks: EncodedVideoChunk[], cb: OutputHandle) {\n tasks.push({ chunks, cb });\n run().catch(Log.error);\n },\n };\n}\n","// file:src/log.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar Log = (function (){\n\t\tvar start = new Date();\n\t\tvar LOG_LEVEL_ERROR \t= 4;\n\t\tvar LOG_LEVEL_WARNING \t= 3;\n\t\tvar LOG_LEVEL_INFO \t\t= 2;\n\t\tvar LOG_LEVEL_DEBUG\t\t= 1;\n\t\tvar log_level = LOG_LEVEL_ERROR;\n\t\tvar logObject = {\n\t\t\tsetLogLevel : function(level) {\n\t\t\t\tif (level == this.debug) log_level = LOG_LEVEL_DEBUG;\n\t\t\t\telse if (level == this.info) log_level = LOG_LEVEL_INFO;\n\t\t\t\telse if (level == this.warn) log_level = LOG_LEVEL_WARNING;\n\t\t\t\telse if (level == this.error) log_level = LOG_LEVEL_ERROR;\n\t\t\t\telse log_level = LOG_LEVEL_ERROR;\n\t\t\t},\n\t\t\tdebug : function(module, msg) {\n\t\t\t\tif (console.debug === undefined) {\n\t\t\t\t\tconsole.debug = console.log;\n\t\t\t\t}\n\t\t\t\tif (LOG_LEVEL_DEBUG >= log_level) {\n\t\t\t\t\tconsole.debug(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tlog : function(module, msg) {\n\t\t\t\tthis.debug(module.msg)\n\t\t\t},\n\t\t\tinfo : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_INFO >= log_level) {\n\t\t\t\t\tconsole.info(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\twarn : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_WARNING >= log_level) {\n\t\t\t\t\tconsole.warn(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_ERROR >= log_level) {\n\t\t\t\t\tconsole.error(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn logObject;\n\t})();\n\t\n/* Helper function to print a duration value in the form H:MM:SS.MS */\nLog.getDurationString = function(duration, _timescale) {\n\tvar neg;\n\t/* Helper function to print a number on a fixed number of digits */\n\tfunction pad(number, length) {\n\t\tvar str = '' + number;\n\t\tvar a = str.split('.');\t\t\n\t\twhile (a[0].length < length) {\n\t\t\ta[0] = '0' + a[0];\n\t\t}\n\t\treturn a.join('.');\n\t}\n\tif (duration < 0) {\n\t\tneg = true;\n\t\tduration = -duration;\n\t} else {\n\t\tneg = false;\t\n\t}\n\tvar timescale = _timescale || 1;\n\tvar duration_sec = duration/timescale;\n\tvar hours = Math.floor(duration_sec/3600);\n\tduration_sec -= hours * 3600;\n\tvar minutes = Math.floor(duration_sec/60);\n\tduration_sec -= minutes * 60;\t\t\n\tvar msec = duration_sec*1000;\n\tduration_sec = Math.floor(duration_sec);\n\tmsec -= duration_sec*1000;\n\tmsec = Math.floor(msec);\n\treturn (neg ? \"-\": \"\")+hours+\":\"+pad(minutes,2)+\":\"+pad(duration_sec,2)+\".\"+pad(msec,3);\n}\n\t\n/* Helper function to stringify HTML5 TimeRanges objects */\t\nLog.printRanges = function(ranges) {\n\tvar length = ranges.length;\n\tif (length > 0) {\n\t\tvar str = \"\";\n\t\tfor (var i = 0; i < length; i++) {\n\t\t if (i > 0) str += \",\";\n\t\t str += \"[\"+Log.getDurationString(ranges.start(i))+ \",\"+Log.getDurationString(ranges.end(i))+\"]\";\n\t\t}\n\t\treturn str;\n\t} else {\n\t\treturn \"(empty)\";\n\t}\n}\n\nif (typeof exports !== 'undefined') {\n\texports.Log = Log;\n}\n// file:src/stream.js\nvar MP4BoxStream = function(arrayBuffer) {\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n this.dataview = new DataView(arrayBuffer);\n } else {\n throw (\"Needs an array buffer\");\n }\n this.position = 0;\n};\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\nMP4BoxStream.prototype.getPosition = function() {\n return this.position;\n}\n\nMP4BoxStream.prototype.getEndPosition = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.getLength = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.seek = function (pos) {\n var npos = Math.max(0, Math.min(this.buffer.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n return true;\n}\n\nMP4BoxStream.prototype.isEos = function () {\n return this.getPosition() >= this.getEndPosition();\n}\n\n/*************************************************************************\n Read methods, simimar to DataStream but simpler\n *************************************************************************/\nMP4BoxStream.prototype.readAnyInt = function(size, signed) {\n var res = 0;\n if (this.position + size <= this.buffer.byteLength) {\n switch (size) {\n case 1:\n if (signed) {\n res = this.dataview.getInt8(this.position);\n } else {\n res = this.dataview.getUint8(this.position);\n }\n break;\n case 2:\n if (signed) {\n res = this.dataview.getInt16(this.position);\n } else {\n res = this.dataview.getUint16(this.position);\n }\n break;\n case 3:\n if (signed) {\n throw (\"No method for reading signed 24 bits values\");\n } else {\n res = this.dataview.getUint8(this.position) << 16;\n res |= this.dataview.getUint8(this.position+1) << 8;\n res |= this.dataview.getUint8(this.position+2);\n }\n break;\n case 4:\n if (signed) {\n res = this.dataview.getInt32(this.position);\n } else {\n res = this.dataview.getUint32(this.position);\n }\n break;\n case 8:\n if (signed) {\n throw (\"No method for reading signed 64 bits values\");\n } else {\n res = this.dataview.getUint32(this.position) << 32;\n res |= this.dataview.getUint32(this.position+4);\n }\n break;\n default:\n throw (\"readInt method not implemented for size: \"+size);\n }\n this.position+= size;\n return res;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readUint8 = function() {\n return this.readAnyInt(1, false);\n}\n\nMP4BoxStream.prototype.readUint16 = function() {\n return this.readAnyInt(2, false);\n}\n\nMP4BoxStream.prototype.readUint24 = function() {\n return this.readAnyInt(3, false);\n}\n\nMP4BoxStream.prototype.readUint32 = function() {\n return this.readAnyInt(4, false);\n}\n\nMP4BoxStream.prototype.readUint64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readString = function(length) {\n if (this.position + length <= this.buffer.byteLength) {\n var s = \"\";\n for (var i = 0; i < length; i++) {\n s += String.fromCharCode(this.readUint8());\n }\n return s;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readCString = function() {\n var arr = [];\n while(true) {\n var b = this.readUint8();\n if (b !== 0) {\n arr.push(b);\n } else {\n break;\n }\n }\n return String.fromCharCode.apply(null, arr); \n}\n\nMP4BoxStream.prototype.readInt8 = function() {\n return this.readAnyInt(1, true);\n}\n\nMP4BoxStream.prototype.readInt16 = function() {\n return this.readAnyInt(2, true);\n}\n\nMP4BoxStream.prototype.readInt32 = function() {\n return this.readAnyInt(4, true);\n}\n\nMP4BoxStream.prototype.readInt64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readUint8Array = function(length) {\n var arr = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint8();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint32Array = function(length) {\n var arr = new Uint32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint32();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt32Array = function(length) {\n var arr = new Int32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt32();\n }\n return arr;\n}\n\nif (typeof exports !== 'undefined') {\n exports.MP4BoxStream = MP4BoxStream;\n}// file:src/DataStream.js\n/**\n DataStream reads scalars, arrays and structs of data from an ArrayBuffer.\n It's like a file-like DataView on steroids.\n\n @param {ArrayBuffer} arrayBuffer ArrayBuffer to read from.\n @param {?Number} byteOffset Offset from arrayBuffer beginning for the DataStream.\n @param {?Boolean} endianness DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN (the default).\n */\nvar DataStream = function(arrayBuffer, byteOffset, endianness) {\n this._byteOffset = byteOffset || 0;\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n } else if (typeof arrayBuffer == \"object\") {\n this.dataView = arrayBuffer;\n if (byteOffset) {\n this._byteOffset += byteOffset;\n }\n } else {\n this.buffer = new ArrayBuffer(arrayBuffer || 0);\n }\n this.position = 0;\n this.endianness = endianness == null ? DataStream.LITTLE_ENDIAN : endianness;\n};\nDataStream.prototype = {};\n\nDataStream.prototype.getPosition = function() {\n return this.position;\n}\n\n/**\n Internal function to resize the DataStream buffer when required.\n @param {number} extra Number of bytes to add to the buffer allocation.\n @return {null}\n */\nDataStream.prototype._realloc = function(extra) {\n if (!this._dynamicSize) {\n return;\n }\n var req = this._byteOffset + this.position + extra;\n var blen = this._buffer.byteLength;\n if (req <= blen) {\n if (req > this._byteLength) {\n this._byteLength = req;\n }\n return;\n }\n if (blen < 1) {\n blen = 1;\n }\n while (req > blen) {\n blen *= 2;\n }\n var buf = new ArrayBuffer(blen);\n var src = new Uint8Array(this._buffer);\n var dst = new Uint8Array(buf, 0, src.length);\n dst.set(src);\n this.buffer = buf;\n this._byteLength = req;\n};\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the extra bytes from the backing buffer when\n the virtual byteLength is smaller than the buffer byteLength (happens after\n growing the buffer with writes and not filling the extra space completely).\n\n @return {null}\n */\nDataStream.prototype._trimAlloc = function() {\n if (this._byteLength == this._buffer.byteLength) {\n return;\n }\n var buf = new ArrayBuffer(this._byteLength);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, 0, dst.length);\n dst.set(src);\n this.buffer = buf;\n};\n\n\n/**\n Big-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.BIG_ENDIAN = false;\n\n/**\n Little-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.LITTLE_ENDIAN = true;\n\n/**\n Virtual byte length of the DataStream backing buffer.\n Updated to be max of original buffer size and last written size.\n If dynamicSize is false is set to buffer size.\n @type {number}\n */\nDataStream.prototype._byteLength = 0;\n\n/**\n Returns the byte length of the DataStream object.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteLength',\n { get: function() {\n return this._byteLength - this._byteOffset;\n }});\n\n/**\n Set/get the backing ArrayBuffer of the DataStream object.\n The setter updates the DataView to point to the new buffer.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'buffer',\n { get: function() {\n this._trimAlloc();\n return this._buffer;\n },\n set: function(v) {\n this._buffer = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the byteOffset of the DataStream object.\n The setter updates the DataView to point to the new byteOffset.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteOffset',\n { get: function() {\n return this._byteOffset;\n },\n set: function(v) {\n this._byteOffset = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the backing DataView of the DataStream object.\n The setter updates the buffer and byteOffset to point to the DataView values.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'dataView',\n { get: function() {\n return this._dataView;\n },\n set: function(v) {\n this._byteOffset = v.byteOffset;\n this._buffer = v.buffer;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._byteOffset + v.byteLength;\n } });\n\n/**\n Sets the DataStream read/write position to given position.\n Clamps between 0 and DataStream length.\n\n @param {number} pos Position to seek to.\n @return {null}\n */\nDataStream.prototype.seek = function(pos) {\n var npos = Math.max(0, Math.min(this.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n};\n\n/**\n Returns true if the DataStream seek pointer is at the end of buffer and\n there's no more data to read.\n\n @return {boolean} True if the seek pointer is at the end of the buffer.\n */\nDataStream.prototype.isEof = function() {\n return (this.position >= this._byteLength);\n};\n\n\n/**\n Maps a Uint8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Uint8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n\n/**\n Reads an Int32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int32Array.\n */\nDataStream.prototype.readInt32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Int32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int16Array.\n */\nDataStream.prototype.readInt16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Int16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int8Array.\n */\nDataStream.prototype.readInt8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Int8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint32Array.\n */\nDataStream.prototype.readUint32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Uint32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint16Array.\n */\nDataStream.prototype.readUint16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Uint16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint8Array.\n */\nDataStream.prototype.readUint8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Uint8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float64Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float64Array.\n */\nDataStream.prototype.readFloat64Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 8) : length;\n var arr = new Float64Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float32Array.\n */\nDataStream.prototype.readFloat32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Float32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n\n/**\n Reads a 32-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt32 = function(e) {\n var v = this._dataView.getInt32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt16 = function(e) {\n var v = this._dataView.getInt16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readInt8 = function() {\n var v = this._dataView.getInt8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint32 = function(e) {\n var v = this._dataView.getUint32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint16 = function(e) {\n var v = this._dataView.getUint16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit unsigned int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readUint8 = function() {\n var v = this._dataView.getUint8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat32 = function(e) {\n var v = this._dataView.getFloat32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 64-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat64 = function(e) {\n var v = this._dataView.getFloat64(this.position, e == null ? this.endianness : e);\n this.position += 8;\n return v;\n};\n\n/**\n Native endianness. Either DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN\n depending on the platform endianness.\n\n @type {boolean}\n */\nDataStream.endianness = new Int8Array(new Int16Array([1]).buffer)[0] > 0;\n\n/**\n Copies byteLength bytes from the src buffer at srcOffset to the\n dst buffer at dstOffset.\n\n @param {Object} dst Destination ArrayBuffer to write to.\n @param {number} dstOffset Offset to the destination ArrayBuffer.\n @param {Object} src Source ArrayBuffer to read from.\n @param {number} srcOffset Offset to the source ArrayBuffer.\n @param {number} byteLength Number of bytes to copy.\n */\nDataStream.memcpy = function(dst, dstOffset, src, srcOffset, byteLength) {\n var dstU8 = new Uint8Array(dst, dstOffset, byteLength);\n var srcU8 = new Uint8Array(src, srcOffset, byteLength);\n dstU8.set(srcU8);\n};\n\n/**\n Converts array to native endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} arrayIsLittleEndian True if the data in the array is\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.arrayToNative = function(array, arrayIsLittleEndian) {\n if (arrayIsLittleEndian == this.endianness) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Converts native endianness array to desired endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} littleEndian True if the converted array should be\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.nativeToEndian = function(array, littleEndian) {\n if (this.endianness == littleEndian) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Flips typed array endianness in-place.\n\n @param {Object} array Typed array to flip.\n @return {Object} The converted typed array.\n */\nDataStream.flipArrayEndianness = function(array) {\n var u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n for (var i=0; ik; j--, k++) {\n var tmp = u8[k];\n u8[k] = u8[j];\n u8[j] = tmp;\n }\n }\n return array;\n};\n\n/**\n Seek position where DataStream#readStruct ran into a problem.\n Useful for debugging struct parsing.\n\n @type {number}\n */\nDataStream.prototype.failurePosition = 0;\n\nString.fromCharCodeUint8 = function(uint8arr) {\n var arr = [];\n for (var i = 0; i < uint8arr.length; i++) {\n arr[i] = uint8arr[i];\n }\n return String.fromCharCode.apply(null, arr);\n}\n/**\n Read a string of desired length and encoding from the DataStream.\n\n @param {number} length The length of the string to read in bytes.\n @param {?string} encoding The encoding of the string data in the DataStream.\n Defaults to ASCII.\n @return {string} The read string.\n */\nDataStream.prototype.readString = function(length, encoding) {\n if (encoding == null || encoding == \"ASCII\") {\n return String.fromCharCodeUint8.apply(null, [this.mapUint8Array(length == null ? this.byteLength-this.position : length)]);\n } else {\n return (new TextDecoder(encoding)).decode(this.mapUint8Array(length));\n }\n};\n\n/**\n Read null-terminated string of desired length from the DataStream. Truncates\n the returned string so that the null byte is not a part of it.\n\n @param {?number} length The length of the string to read.\n @return {string} The read string.\n */\nDataStream.prototype.readCString = function(length) {\n var blen = this.byteLength-this.position;\n var u8 = new Uint8Array(this._buffer, this._byteOffset + this.position);\n var len = blen;\n if (length != null) {\n len = Math.min(length, blen);\n }\n for (var i = 0; i < len && u8[i] !== 0; i++); // find first zero byte\n var s = String.fromCharCodeUint8.apply(null, [this.mapUint8Array(i)]);\n if (length != null) {\n this.position += len-i;\n } else if (i != blen) {\n this.position += 1; // trailing zero if not at end of buffer\n }\n return s;\n};\n\n/* \n TODO: fix endianness for 24/64-bit fields\n TODO: check range/support for 64-bits numbers in JavaScript\n*/\nvar MAX_SIZE = Math.pow(2, 32);\n\nDataStream.prototype.readInt64 = function () {\n return (this.readInt32()*MAX_SIZE)+this.readUint32();\n}\nDataStream.prototype.readUint64 = function () {\n\treturn (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readInt64 = function () {\n return (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readUint24 = function () {\n\treturn (this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8();\n}\n\nif (typeof exports !== 'undefined') {\n exports.DataStream = DataStream; \n}\n// file:src/DataStream-write.js\n/**\n Saves the DataStream contents to the given filename.\n Uses Chrome's anchor download property to initiate download.\n \n @param {string} filename Filename to save as.\n @return {null}\n */\nDataStream.prototype.save = function(filename) {\n var blob = new Blob([this.buffer]);\n if (window.URL && URL.createObjectURL) {\n var url = window.URL.createObjectURL(blob);\n var a = document.createElement('a');\n // Required in Firefox:\n document.body.appendChild(a);\n a.setAttribute('href', url);\n a.setAttribute('download', filename);\n // Required in Firefox:\n a.setAttribute('target', '_self');\n a.click();\n window.URL.revokeObjectURL(url);\n } else {\n throw(\"DataStream.save: Can't create object URL.\");\n }\n};\n\n/**\n Whether to extend DataStream buffer when trying to write beyond its size.\n If set, the buffer is reallocated to twice its current size until the\n requested write fits the buffer.\n @type {boolean}\n */\nDataStream.prototype._dynamicSize = true;\nObject.defineProperty(DataStream.prototype, 'dynamicSize',\n { get: function() {\n return this._dynamicSize;\n },\n set: function(v) {\n if (!v) {\n this._trimAlloc();\n }\n this._dynamicSize = v;\n } });\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the first bytes when not needed anymore.\n\n @return {null}\n */\nDataStream.prototype.shift = function(offset) {\n var buf = new ArrayBuffer(this._byteLength-offset);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, offset, dst.length);\n dst.set(src);\n this.buffer = buf;\n this.position -= offset;\n};\n\n/**\n Writes an Int32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Int32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt32Array(arr.length, e);\n } else {\n for (var i=0; i>16);\n\tthis.writeUint8((v & 0x0000FF00)>>8);\n\tthis.writeUint8((v & 0x000000FF));\n}\n\nDataStream.prototype.adjustUint32 = function(position, value) {\n\tvar pos = this.position;\n\tthis.seek(position);\n\tthis.writeUint32(value);\n\tthis.seek(pos);\n}\n// file:src/DataStream-map.js\n/**\n Maps an Int32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Int32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps an Int16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Int16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps an Int8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Int8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n/**\n Maps a Uint32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Uint32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps a Uint16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Uint16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps a Float64Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float64Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat64Array = function(length, e) {\n this._realloc(length * 8);\n var arr = new Float64Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 8;\n return arr;\n};\n\n/**\n Maps a Float32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Float32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n// file:src/buffer.js\n/**\n * MultiBufferStream is a class that acts as a SimpleStream for parsing \n * It holds several, possibly non-contiguous ArrayBuffer objects, each with a fileStart property \n * containing the offset for the buffer data in an original/virtual file \n *\n * It inherits also from DataStream for all read/write/alloc operations\n */\n\n/**\n * Constructor\n */\nvar MultiBufferStream = function(buffer) {\n\t/* List of ArrayBuffers, with a fileStart property, sorted in fileStart order and non overlapping */\n\tthis.buffers = [];\t\n\tthis.bufferIndex = -1;\n\tif (buffer) {\n\t\tthis.insertBuffer(buffer);\n\t\tthis.bufferIndex = 0;\n\t}\n}\nMultiBufferStream.prototype = new DataStream(new ArrayBuffer(), 0, DataStream.BIG_ENDIAN);\n\n/************************************************************************************\n Methods for the managnement of the buffers (insertion, removal, concatenation, ...)\n ***********************************************************************************/\n\nMultiBufferStream.prototype.initialized = function() {\n\tvar firstBuffer;\n\tif (this.bufferIndex > -1) {\n\t\treturn true;\n\t} else if (this.buffers.length > 0) {\n\t\tfirstBuffer = this.buffers[0];\n\t\tif (firstBuffer.fileStart === 0) {\n\t\t\tthis.buffer = firstBuffer;\n\t\t\tthis.bufferIndex = 0;\n\t\t\tLog.debug(\"MultiBufferStream\", \"Stream ready for parsing\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\tLog.warn(\"MultiBufferStream\", \"The first buffer should have a fileStart of 0\");\n\t\t\tthis.logBufferLevel();\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tLog.warn(\"MultiBufferStream\", \"No buffer to start parsing from\");\n\t\tthis.logBufferLevel();\n\t\treturn false;\n\t}\t\t\t\n}\n\n/**\n * helper functions to concatenate two ArrayBuffer objects\n * @param {ArrayBuffer} buffer1 \n * @param {ArrayBuffer} buffer2 \n * @return {ArrayBuffer} the concatenation of buffer1 and buffer2 in that order\n */\nArrayBuffer.concat = function(buffer1, buffer2) {\n Log.debug(\"ArrayBuffer\", \"Trying to create a new buffer of size: \"+(buffer1.byteLength + buffer2.byteLength));\n var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp.buffer;\n};\n\n/**\n * Reduces the size of a given buffer, but taking the part between offset and offset+newlength\n * @param {ArrayBuffer} buffer \n * @param {Number} offset the start of new buffer\n * @param {Number} newLength the length of the new buffer\n * @return {ArrayBuffer} the new buffer\n */\nMultiBufferStream.prototype.reduceBuffer = function(buffer, offset, newLength) {\n\tvar smallB;\n\tsmallB = new Uint8Array(newLength);\n\tsmallB.set(new Uint8Array(buffer, offset, newLength));\n\tsmallB.buffer.fileStart = buffer.fileStart+offset;\n\tsmallB.buffer.usedBytes = 0;\n\treturn smallB.buffer;\t\n}\n\n/**\n * Inserts the new buffer in the sorted list of buffers,\n * making sure, it is not overlapping with existing ones (possibly reducing its size).\n * if the new buffer overrides/replaces the 0-th buffer (for instance because it is bigger), \n * updates the DataStream buffer for parsing \n*/\nMultiBufferStream.prototype.insertBuffer = function(ab) {\t\n\tvar to_add = true;\n\t/* TODO: improve insertion if many buffers */\n\tfor (var i = 0; i < this.buffers.length; i++) {\n\t\tvar b = this.buffers[i];\n\t\tif (ab.fileStart <= b.fileStart) {\n\t\t\t/* the insertion position is found */\n\t\t\tif (ab.fileStart === b.fileStart) {\n\t\t\t\t/* The new buffer overlaps with an existing buffer */\n\t\t\t\tif (ab.byteLength > b.byteLength) {\n\t\t\t\t\t/* the new buffer is bigger than the existing one\n\t\t\t\t\t remove the existing buffer and try again to insert \n\t\t\t\t\t the new buffer to check overlap with the next ones */\n\t\t\t\t\tthis.buffers.splice(i, 1);\n\t\t\t\t\ti--; \n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\t/* the new buffer is smaller than the existing one, just drop it */\n\t\t\t\t\tLog.warn(\"MultiBufferStream\", \"Buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\") already appended, ignoring\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/* The beginning of the new buffer is not overlapping with an existing buffer\n\t\t\t\t let's check the end of it */\n\t\t\t\tif (ab.fileStart + ab.byteLength <= b.fileStart) {\n\t\t\t\t\t/* no overlap, we can add it as is */\n\t\t\t\t} else {\n\t\t\t\t\t/* There is some overlap, cut the new buffer short, and add it*/\n\t\t\t\t\tab = this.reduceBuffer(ab, 0, b.fileStart - ab.fileStart);\n\t\t\t\t}\n\t\t\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\t\t\tthis.buffers.splice(i, 0, ab);\n\t\t\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tthis.buffer = ab;\n\t\t\t\t}\n\t\t\t}\n\t\t\tto_add = false;\n\t\t\tbreak;\n\t\t} else if (ab.fileStart < b.fileStart + b.byteLength) {\n\t\t\t/* the new buffer overlaps its beginning with the end of the current buffer */\n\t\t\tvar offset = b.fileStart + b.byteLength - ab.fileStart;\n\t\t\tvar newLength = ab.byteLength - offset;\n\t\t\tif (newLength > 0) {\n\t\t\t\t/* the new buffer is bigger than the current overlap, drop the overlapping part and try again inserting the remaining buffer */\n\t\t\t\tab = this.reduceBuffer(ab, offset, newLength);\n\t\t\t} else {\n\t\t\t\t/* the content of the new buffer is entirely contained in the existing buffer, drop it entirely */\n\t\t\t\tto_add = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* if the buffer has not been added, we can add it at the end */\n\tif (to_add) {\n\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\tthis.buffers.push(ab);\n\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\tif (i === 0) {\n\t\t\tthis.buffer = ab;\n\t\t}\n\t}\n}\n\n/**\n * Displays the status of the buffers (number and used bytes)\n * @param {Object} info callback method for display\n */\nMultiBufferStream.prototype.logBufferLevel = function(info) {\n\tvar i;\n\tvar buffer;\n\tvar used, total;\n\tvar ranges = [];\n\tvar range;\n\tvar bufferedString = \"\";\n\tused = 0;\n\ttotal = 0;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (i === 0) {\n\t\t\trange = {};\n\t\t\tranges.push(range);\n\t\t\trange.start = buffer.fileStart;\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tbufferedString += \"[\"+range.start+\"-\";\n\t\t} else if (range.end === buffer.fileStart) {\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t} else {\n\t\t\trange = {};\n\t\t\trange.start = buffer.fileStart;\n\t\t\tbufferedString += (ranges[ranges.length-1].end-1)+\"], [\"+range.start+\"-\";\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tranges.push(range);\n\t\t}\n\t\tused += buffer.usedBytes;\n\t\ttotal += buffer.byteLength;\n\t}\n\tif (ranges.length > 0) {\n\t\tbufferedString += (range.end-1)+\"]\";\n\t}\n\tvar log = (info ? Log.info : Log.debug)\n\tif (this.buffers.length === 0) {\n\t\tlog(\"MultiBufferStream\", \"No more buffer in memory\");\n\t} else {\n\t\tlog(\"MultiBufferStream\", \"\"+this.buffers.length+\" stored buffer(s) (\"+used+\"/\"+total+\" bytes), continuous ranges: \"+bufferedString);\n\t}\n}\n\nMultiBufferStream.prototype.cleanBuffers = function () {\n\tvar i;\n\tvar buffer;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (buffer.usedBytes === buffer.byteLength) {\n\t\t\tLog.debug(\"MultiBufferStream\", \"Removing buffer #\"+i);\n\t\t\tthis.buffers.splice(i, 1);\n\t\t\ti--;\n\t\t}\n\t}\n}\n\nMultiBufferStream.prototype.mergeNextBuffer = function() {\n\tvar next_buffer;\n\tif (this.bufferIndex+1 < this.buffers.length) {\n\t\tnext_buffer = this.buffers[this.bufferIndex+1];\n\t\tif (next_buffer.fileStart === this.buffer.fileStart + this.buffer.byteLength) {\n\t\t\tvar oldLength = this.buffer.byteLength;\n\t\t\tvar oldUsedBytes = this.buffer.usedBytes;\n\t\t\tvar oldFileStart = this.buffer.fileStart;\n\t\t\tthis.buffers[this.bufferIndex] = ArrayBuffer.concat(this.buffer, next_buffer);\n\t\t\tthis.buffer = this.buffers[this.bufferIndex];\n\t\t\tthis.buffers.splice(this.bufferIndex+1, 1);\n\t\t\tthis.buffer.usedBytes = oldUsedBytes; /* TODO: should it be += ? */\n\t\t\tthis.buffer.fileStart = oldFileStart;\n\t\t\tLog.debug(\"ISOFile\", \"Concatenating buffer for box parsing (length: \"+oldLength+\"->\"+this.buffer.byteLength+\")\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n}\n\n\n/*************************************************************************\n Seek-related functions\n *************************************************************************/\n\n/**\n * Finds the buffer that holds the given file position\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Number} the index of the buffer holding the seeked file position, -1 if not found.\n */\nMultiBufferStream.prototype.findPosition = function(fromStart, filePosition, markAsUsed) {\n\tvar i;\n\tvar abuffer = null;\n\tvar index = -1;\n\n\t/* find the buffer with the largest position smaller than the given position */\n\tif (fromStart === true) {\n\t /* the reposition can be in the past, we need to check from the beginning of the list of buffers */\n\t\ti = 0;\n\t} else {\n\t\ti = this.bufferIndex;\n\t}\n\n\twhile (i < this.buffers.length) {\n\t\tabuffer = this.buffers[i];\n\t\tif (abuffer.fileStart <= filePosition) {\n\t\t\tindex = i;\n\t\t\tif (markAsUsed) {\n\t\t\t\tif (abuffer.fileStart + abuffer.byteLength <= filePosition) {\n\t\t\t\t\tabuffer.usedBytes = abuffer.byteLength;\t\n\t\t\t\t} else {\n\t\t\t\t\tabuffer.usedBytes = filePosition - abuffer.fileStart;\n\t\t\t\t}\t\t\n\t\t\t\tthis.logBufferLevel();\t\n\t\t\t}\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\n\tif (index !== -1) {\n\t\tabuffer = this.buffers[index];\n\t\tif (abuffer.fileStart + abuffer.byteLength >= filePosition) {\t\t\t\n\t\t\tLog.debug(\"MultiBufferStream\", \"Found position in existing buffer #\"+index);\n\t\t\treturn index;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\t} else {\n\t\treturn -1;\n\t}\n}\n\n/**\n * Finds the largest file position contained in a buffer or in the next buffers if they are contiguous (no gap)\n * starting from the given buffer index or from the current buffer if the index is not given\n *\n * @param {Number} inputindex Index of the buffer to start from\n * @return {Number} The largest file position found in the buffers\n */\nMultiBufferStream.prototype.findEndContiguousBuf = function(inputindex) {\n\tvar i;\n\tvar currentBuf;\n\tvar nextBuf;\n\tvar index = (inputindex !== undefined ? inputindex : this.bufferIndex);\n\tcurrentBuf = this.buffers[index];\n\t/* find the end of the contiguous range of data */\n\tif (this.buffers.length > index+1) {\n\t\tfor (i = index+1; i < this.buffers.length; i++) {\n\t\t\tnextBuf = this.buffers[i];\n\t\t\tif (nextBuf.fileStart === currentBuf.fileStart + currentBuf.byteLength) {\n\t\t\t\tcurrentBuf = nextBuf;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* return the position of last byte in the file that we have */\n\treturn currentBuf.fileStart + currentBuf.byteLength;\n}\n\n/**\n * Returns the largest file position contained in the buffers, larger than the given position\n * @param {Number} pos the file position to start from\n * @return {Number} the largest position in the current buffer or in the buffer and the next contiguous \n * buffer that holds the given position\n */\nMultiBufferStream.prototype.getEndFilePositionAfter = function(pos) {\n\tvar index = this.findPosition(true, pos, false);\n\tif (index !== -1) {\n\t\treturn this.findEndContiguousBuf(index);\n\t} else {\n\t\treturn pos;\n\t}\n}\n\n/*************************************************************************\n Garbage collection related functions\n *************************************************************************/\n\n/**\n * Marks a given number of bytes as used in the current buffer for garbage collection\n * @param {Number} nbBytes \n */\nMultiBufferStream.prototype.addUsedBytes = function(nbBytes) {\n\tthis.buffer.usedBytes += nbBytes;\n\tthis.logBufferLevel();\n}\n\n/**\n * Marks the entire current buffer as used, ready for garbage collection\n */\nMultiBufferStream.prototype.setAllUsedBytes = function() {\n\tthis.buffer.usedBytes = this.buffer.byteLength;\n\tthis.logBufferLevel();\n}\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\n\n/**\n * Tries to seek to a given file position\n * if possible, repositions the parsing from there and returns true \n * if not possible, does not change anything and returns false \n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Boolean} true if the seek succeeded, false otherwise\n */\nMultiBufferStream.prototype.seek = function(filePosition, fromStart, markAsUsed) {\n\tvar index;\n\tindex = this.findPosition(fromStart, filePosition, markAsUsed);\n\tif (index !== -1) {\n\t\tthis.buffer = this.buffers[index];\n\t\tthis.bufferIndex = index;\n\t\tthis.position = filePosition - this.buffer.fileStart;\n\t\tLog.debug(\"MultiBufferStream\", \"Repositioning parser at buffer position: \"+this.position);\n\t\treturn true;\n\t} else {\n\t\tLog.debug(\"MultiBufferStream\", \"Position \"+filePosition+\" not found in buffered data\");\n\t\treturn false;\n\t}\n}\n\n/**\n * Returns the current position in the file\n * @return {Number} the position in the file\n */\nMultiBufferStream.prototype.getPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.position;\n}\n\n/**\n * Returns the length of the current buffer\n * @return {Number} the length of the current buffer\n */\nMultiBufferStream.prototype.getLength = function() {\n\treturn this.byteLength;\n}\n\nMultiBufferStream.prototype.getEndPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.byteLength;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MultiBufferStream = MultiBufferStream;\n}// file:src/descriptor.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MPEG4DescriptorParser = function () {\n\tvar ES_DescrTag \t\t\t= 0x03;\n\tvar DecoderConfigDescrTag \t= 0x04;\n\tvar DecSpecificInfoTag \t\t= 0x05;\n\tvar SLConfigDescrTag \t\t= 0x06;\n\n\tvar descTagToName = [];\n\tdescTagToName[ES_DescrTag] \t\t\t\t= \"ES_Descriptor\";\n\tdescTagToName[DecoderConfigDescrTag] \t= \"DecoderConfigDescriptor\";\n\tdescTagToName[DecSpecificInfoTag] \t\t= \"DecoderSpecificInfo\";\n\tdescTagToName[SLConfigDescrTag] \t\t= \"SLConfigDescriptor\";\n\n\tthis.getDescriptorName = function(tag) {\n\t\treturn descTagToName[tag];\n\t}\n\n\tvar that = this;\n\tvar classes = {};\n\n\tthis.parseOneDescriptor = function (stream) {\n\t\tvar hdrSize = 0;\n\t\tvar size = 0;\n\t\tvar tag;\n\t\tvar desc;\n\t\tvar byteRead;\n\t\ttag = stream.readUint8();\n\t\thdrSize++;\n\t\tbyteRead = stream.readUint8();\n\t\thdrSize++;\n\t\twhile (byteRead & 0x80) {\n\t\t\tsize = (byteRead & 0x7F)<<7;\n\t\t\tbyteRead = stream.readUint8();\n\t\t\thdrSize++;\n\t\t}\n\t\tsize += byteRead & 0x7F;\n\t\tLog.debug(\"MPEG4DescriptorParser\", \"Found \"+(descTagToName[tag] || \"Descriptor \"+tag)+\", size \"+size+\" at position \"+stream.getPosition());\n\t\tif (descTagToName[tag]) {\n\t\t\tdesc = new classes[descTagToName[tag]](size);\n\t\t} else {\n\t\t\tdesc = new classes.Descriptor(size);\n\t\t}\n\t\tdesc.parse(stream);\n\t\treturn desc;\n\t}\n\n\tclasses.Descriptor = function(_tag, _size) {\n\t\tthis.tag = _tag;\n\t\tthis.size = _size;\n\t\tthis.descs = [];\n\t}\n\n\tclasses.Descriptor.prototype.parse = function (stream) {\n\t\tthis.data = stream.readUint8Array(this.size);\n\t}\n\n\tclasses.Descriptor.prototype.findDescriptor = function (tag) {\n\t\tfor (var i = 0; i < this.descs.length; i++) {\n\t\t\tif (this.descs[i].tag == tag) {\n\t\t\t\treturn this.descs[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tclasses.Descriptor.prototype.parseRemainingDescriptors = function (stream) {\n\t\tvar start = stream.position;\n\t\twhile (stream.position < start+this.size) {\n\t\t\tvar desc = that.parseOneDescriptor(stream);\n\t\t\tthis.descs.push(desc);\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor = function (size) {\n\t\tclasses.Descriptor.call(this, ES_DescrTag, size);\n\t}\n\n\tclasses.ES_Descriptor.prototype = new classes.Descriptor();\n\n\tclasses.ES_Descriptor.prototype.parse = function(stream) {\n\t\tthis.ES_ID = stream.readUint16();\n\t\tthis.flags = stream.readUint8();\n\t\tthis.size -= 3;\n\t\tif (this.flags & 0x80) {\n\t\t\tthis.dependsOn_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.dependsOn_ES_ID = 0;\n\t\t}\n\t\tif (this.flags & 0x40) {\n\t\t\tvar l = stream.readUint8();\n\t\t\tthis.URL = stream.readString(l);\n\t\t\tthis.size -= l+1;\n\t\t} else {\n\t\t\tthis.URL = \"\";\n\t\t}\n\t\tif (this.flags & 0x20) {\n\t\t\tthis.OCR_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.OCR_ES_ID = 0;\n\t\t}\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.ES_Descriptor.prototype.getOTI = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (dcd) {\n\t\t\treturn dcd.oti;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor.prototype.getAudioConfig = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (!dcd) return null;\n\t\tvar dsi = dcd.findDescriptor(DecSpecificInfoTag);\n\t\tif (dsi && dsi.data) {\n\t\t\tvar audioObjectType = (dsi.data[0]& 0xF8) >> 3;\n\t\t\tif (audioObjectType === 31 && dsi.data.length >= 2) {\n\t\t\t\taudioObjectType = 32 + ((dsi.data[0] & 0x7) << 3) + ((dsi.data[1] & 0xE0) >> 5);\n\t\t\t}\n\t\t\treturn audioObjectType;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tclasses.DecoderConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, DecoderConfigDescrTag, size);\n\t}\n\tclasses.DecoderConfigDescriptor.prototype = new classes.Descriptor();\n\n\tclasses.DecoderConfigDescriptor.prototype.parse = function(stream) {\n\t\tthis.oti = stream.readUint8();\n\t\tthis.streamType = stream.readUint8();\n\t\tthis.bufferSize = stream.readUint24();\n\t\tthis.maxBitrate = stream.readUint32();\n\t\tthis.avgBitrate = stream.readUint32();\n\t\tthis.size -= 13;\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.DecoderSpecificInfo = function (size) {\n\t\tclasses.Descriptor.call(this, DecSpecificInfoTag, size);\n\t}\n\tclasses.DecoderSpecificInfo.prototype = new classes.Descriptor();\n\n\tclasses.SLConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, SLConfigDescrTag, size);\n\t}\n\tclasses.SLConfigDescriptor.prototype = new classes.Descriptor();\n\n\treturn this;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MPEG4DescriptorParser = MPEG4DescriptorParser;\n}// file:src/box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar BoxParser = {\n\tERR_INVALID_DATA : -1,\n\tERR_NOT_ENOUGH_DATA : 0,\n\tOK : 1,\n\n\t// Boxes to be created with default parsing\n\tBASIC_BOXES: [ \"mdat\", \"idat\", \"free\", \"skip\", \"meco\", \"strk\" ],\n\tFULL_BOXES: [ \"hmhd\", \"nmhd\", \"iods\", \"xml \", \"bxml\", \"ipro\", \"mere\" ],\n\tCONTAINER_BOXES: [\n\t\t[ \"moov\", [ \"trak\", \"pssh\" ] ],\n\t\t[ \"trak\" ],\n\t\t[ \"edts\" ],\n\t\t[ \"mdia\" ],\n\t\t[ \"minf\" ],\n\t\t[ \"dinf\" ],\n\t\t[ \"stbl\", [ \"sgpd\", \"sbgp\" ] ],\n\t\t[ \"mvex\", [ \"trex\" ] ],\n\t\t[ \"moof\", [ \"traf\" ] ],\n\t\t[ \"traf\", [ \"trun\", \"sgpd\", \"sbgp\" ] ],\n\t\t[ \"vttc\" ],\n\t\t[ \"tref\" ],\n\t\t[ \"iref\" ],\n\t\t[ \"mfra\", [ \"tfra\" ] ],\n\t\t[ \"meco\" ],\n\t\t[ \"hnti\" ],\n\t\t[ \"hinf\" ],\n\t\t[ \"strk\" ],\n\t\t[ \"strd\" ],\n\t\t[ \"sinf\" ],\n\t\t[ \"rinf\" ],\n\t\t[ \"schi\" ],\n\t\t[ \"trgr\" ],\n\t\t[ \"udta\", [\"kind\"] ],\n\t\t[ \"iprp\", [\"ipma\"] ],\n\t\t[ \"ipco\" ],\n\t\t[ \"grpl\" ],\n\t\t[ \"j2kH\" ],\n\t\t[ \"etyp\", [ \"tyco\"] ]\n\t],\n\t// Boxes effectively created\n\tboxCodes : [],\n\tfullBoxCodes : [],\n\tcontainerBoxCodes : [],\n\tsampleEntryCodes : {},\n\tsampleGroupEntryCodes: [],\n\ttrackGroupTypes: [],\n\tUUIDBoxes: {},\n\tUUIDs: [],\n\tinitialize: function() {\n\t\tBoxParser.FullBox.prototype = new BoxParser.Box();\n\t\tBoxParser.ContainerBox.prototype = new BoxParser.Box();\n\t\tBoxParser.SampleEntry.prototype = new BoxParser.Box();\n\t\tBoxParser.TrackGroupTypeBox.prototype = new BoxParser.FullBox();\n\n\t\t/* creating constructors for simple boxes */\n\t\tBoxParser.BASIC_BOXES.forEach(function(type) {\n\t\t\tBoxParser.createBoxCtor(type)\n\t\t});\n\t\tBoxParser.FULL_BOXES.forEach(function(type) {\n\t\t\tBoxParser.createFullBoxCtor(type);\n\t\t});\n\t\tBoxParser.CONTAINER_BOXES.forEach(function(types) {\n\t\t\tBoxParser.createContainerBoxCtor(types[0], null, types[1]);\n\t\t});\n\t},\n\tBox: function(_type, _size, _uuid) {\n\t\tthis.type = _type;\n\t\tthis.size = _size;\n\t\tthis.uuid = _uuid;\n\t},\n\tFullBox: function(type, size, uuid) {\n\t\tBoxParser.Box.call(this, type, size, uuid);\n\t\tthis.flags = 0;\n\t\tthis.version = 0;\n\t},\n\tContainerBox: function(type, size, uuid) {\n\t\tBoxParser.Box.call(this, type, size, uuid);\n\t\tthis.boxes = [];\n\t},\n\tSampleEntry: function(type, size, hdr_size, start) {\n\t\tBoxParser.ContainerBox.call(this, type, size);\n\t\tthis.hdr_size = hdr_size;\n\t\tthis.start = start;\n\t},\n\tSampleGroupEntry: function(type) {\n\t\tthis.grouping_type = type;\n\t},\n\tTrackGroupTypeBox: function(type, size) {\n\t\tBoxParser.FullBox.call(this, type, size);\n\t},\n\tcreateBoxCtor: function(type, parseMethod){\n\t\tBoxParser.boxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.Box.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.Box();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateFullBoxCtor: function(type, parseMethod) {\n\t\t//BoxParser.fullBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.FullBox.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n\t\tBoxParser[type+\"Box\"].prototype.parse = function(stream) {\n\t\t\tthis.parseFullHeader(stream);\n\t\t\tif (parseMethod) {\n\t\t\t\tparseMethod.call(this, stream);\n\t\t\t}\n\t\t};\n\t},\n\taddSubBoxArrays: function(subBoxNames) {\n\t\tif (subBoxNames) {\n\t\t\tthis.subBoxNames = subBoxNames;\n\t\t\tvar nbSubBoxes = subBoxNames.length;\n\t\t\tfor (var k = 0; k parentSize) {\n\t\tLog.error(\"BoxParser\", \"Box of type '\"+type+\"' has a size \"+size+\" greater than its container size \"+parentSize);\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && start + size > stream.getEndPosition()) {\n\t\tstream.seek(start);\n\t\tLog.info(\"BoxParser\", \"Not enough data in stream to parse the entire '\"+type+\"' box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (headerOnly) {\n\t\treturn { code: BoxParser.OK, type: type, size: size, hdr_size: hdr_size, start: start };\n\t} else {\n\t\tif (BoxParser[type+\"Box\"]) {\n\t\t\tbox = new BoxParser[type+\"Box\"](size);\n\t\t} else {\n\t\t\tif (type !== \"uuid\") {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown box type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t} else {\n\t\t\t\tif (BoxParser.UUIDBoxes[uuid]) {\n\t\t\t\t\tbox = new BoxParser.UUIDBoxes[uuid](size);\n\t\t\t\t} else {\n\t\t\t\t\tLog.warn(\"BoxParser\", \"Unknown uuid type: '\"+uuid+\"'\");\n\t\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\t\tbox.uuid = uuid;\n\t\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tbox.hdr_size = hdr_size;\n\t/* recording the position of the box in the input stream */\n\tbox.start = start;\n\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\tLog.info(\"BoxParser\", \"'\"+box_type+\"' box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\tbox.parseDataAndRewind(stream);\n\t}\n\tbox.parse(stream);\n\tdiff = stream.getPosition() - (box.start+box.size);\n\tif (diff < 0) {\n\t\tLog.warn(\"BoxParser\", \"Parsing of box '\"+box_type+\"' did not read the entire indicated box data size (missing \"+(-diff)+\" bytes), seeking forward\");\n\t\tstream.seek(box.start+box.size);\n\t} else if (diff > 0) {\n\t\tLog.error(\"BoxParser\", \"Parsing of box '\"+box_type+\"' read \"+diff+\" more bytes than the indicated box data size, seeking backwards\");\n\t\tif (box.size !== 0) stream.seek(box.start+box.size);\n\t}\n\treturn { code: BoxParser.OK, box: box, size: box.size };\n}\n\nBoxParser.Box.prototype.parse = function(stream) {\n\tif (this.type != \"mdat\") {\n\t\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t} else {\n\t\tif (this.size === 0) {\n\t\t\tstream.seek(stream.getEndPosition());\n\t\t} else {\n\t\t\tstream.seek(this.start+this.size);\n\t\t}\n\t}\n}\n\n/* Used to parse a box without consuming its data, to allow detailled parsing\n Useful for boxes for which a write method is not yet implemented */\nBoxParser.Box.prototype.parseDataAndRewind = function(stream) {\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// restore the header size as if the full header had not been parsed\n\tthis.hdr_size -= 4;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseFullHeader = function (stream) {\n\tthis.version = stream.readUint8();\n\tthis.flags = stream.readUint24();\n\tthis.hdr_size += 4;\n}\n\nBoxParser.FullBox.prototype.parse = function (stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n}\n\nBoxParser.ContainerBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\t/* store the box in the 'boxes' array to preserve box order (for offset) but also store box in a property for more direct access */\n\t\t\tthis.boxes.push(box);\n\t\t\tif (this.subBoxNames && this.subBoxNames.indexOf(box.type) != -1) {\n\t\t\t\tthis[this.subBoxNames[this.subBoxNames.indexOf(box.type)]+\"s\"].push(box);\n\t\t\t} else {\n\t\t\t\tvar box_type = box.type !== \"uuid\" ? box.type : box.uuid;\n\t\t\t\tif (this[box_type]) {\n\t\t\t\t\tLog.warn(\"Box of type \"+box_type+\" already stored in field of this type\");\n\t\t\t\t} else {\n\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nBoxParser.Box.prototype.parseLanguage = function(stream) {\n\tthis.language = stream.readUint16();\n\tvar chars = [];\n\tchars[0] = (this.language>>10)&0x1F;\n\tchars[1] = (this.language>>5)&0x1F;\n\tchars[2] = (this.language)&0x1F;\n\tthis.languageString = String.fromCharCode(chars[0]+0x60, chars[1]+0x60, chars[2]+0x60);\n}\n\n// file:src/parsing/sampleentries/sampleentry.js\nBoxParser.SAMPLE_ENTRY_TYPE_VISUAL \t\t= \"Visual\";\nBoxParser.SAMPLE_ENTRY_TYPE_AUDIO \t\t= \"Audio\";\nBoxParser.SAMPLE_ENTRY_TYPE_HINT \t\t= \"Hint\";\nBoxParser.SAMPLE_ENTRY_TYPE_METADATA \t= \"Metadata\";\nBoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE \t= \"Subtitle\";\nBoxParser.SAMPLE_ENTRY_TYPE_SYSTEM \t\t= \"System\";\nBoxParser.SAMPLE_ENTRY_TYPE_TEXT \t\t= \"Text\";\n\nBoxParser.SampleEntry.prototype.parseHeader = function(stream) {\n\tstream.readUint8Array(6);\n\tthis.data_reference_index = stream.readUint16();\n\tthis.hdr_size += 8;\n}\n\nBoxParser.SampleEntry.prototype.parse = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n}\n\nBoxParser.SampleEntry.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n\t// restore the header size as if the sample entry header had not been parsed\n\tthis.hdr_size -= 8;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.SampleEntry.prototype.parseFooter = function(stream) {\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n}\n\n// Base SampleEntry types with default parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_HINT);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT);\n\n//Base SampleEntry types for Audio and Video with specific parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, function(stream) {\n\tvar compressorname_length;\n\tthis.parseHeader(stream);\n\tstream.readUint16();\n\tstream.readUint16();\n\tstream.readUint32Array(3);\n\tthis.width = stream.readUint16();\n\tthis.height = stream.readUint16();\n\tthis.horizresolution = stream.readUint32();\n\tthis.vertresolution = stream.readUint32();\n\tstream.readUint32();\n\tthis.frame_count = stream.readUint16();\n\tcompressorname_length = Math.min(31, stream.readUint8());\n\tthis.compressorname = stream.readString(compressorname_length);\n\tif (compressorname_length < 31) {\n\t\tstream.readString(31 - compressorname_length);\n\t}\n\tthis.depth = stream.readUint16();\n\tstream.readUint16();\n\tthis.parseFooter(stream);\n});\n\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, function(stream) {\n\tthis.parseHeader(stream);\n\tstream.readUint32Array(2);\n\tthis.channel_count = stream.readUint16();\n\tthis.samplesize = stream.readUint16();\n\tstream.readUint16();\n\tstream.readUint16();\n\tthis.samplerate = (stream.readUint32()/(1<<16));\n\tthis.parseFooter(stream);\n});\n\n// Sample entries inheriting from Audio and Video\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"av01\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dav1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hev1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvt1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"lhe1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvh1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvhe\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvi1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvs1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvcN\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp08\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp09\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avs3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"j2ki\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjp2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjpg\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,\t\"uncv\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mp4a\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ec-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"Opus\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm2\");\n\n// Encrypted sample entries\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \t\"encv\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"enca\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \t\"encu\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM, \t\"encs\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT, \t\t\"enct\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \t\"encm\");\n// file:src/parsing/a1lx.js\nBoxParser.createBoxCtor(\"a1lx\", function(stream) {\n\tvar large_size = stream.readUint8() & 1;\n\tvar FieldLength = ((large_size & 1) + 1) * 16;\n\tthis.layer_size = [];\n\tfor (var i = 0; i < 3; i++) {\n\t\tif (FieldLength == 16) {\n\t\t\tthis.layer_size[i] = stream.readUint16();\n\t\t} else {\n\t\t\tthis.layer_size[i] = stream.readUint32();\n\t\t}\n\t}\n});// file:src/parsing/a1op.js\nBoxParser.createBoxCtor(\"a1op\", function(stream) {\n\tthis.op_index = stream.readUint8();\n});// file:src/parsing/auxC.js\nBoxParser.createFullBoxCtor(\"auxC\", function(stream) {\n\tthis.aux_type = stream.readCString();\n\tvar aux_subtype_length = this.size - this.hdr_size - (this.aux_type.length + 1);\n\tthis.aux_subtype = stream.readUint8Array(aux_subtype_length);\n});// file:src/parsing/av1C.js\nBoxParser.createBoxCtor(\"av1C\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tvar tmp = stream.readUint8();\n\tif ((tmp >> 7) & 0x1 !== 1) {\n\t\tLog.error(\"av1C marker problem\");\n\t\treturn;\n\t}\n\tthis.version = tmp & 0x7F;\n\tif (this.version !== 1) {\n\t\tLog.error(\"av1C version \"+this.version+\" not supported\");\n\t\treturn;\n\t}\n\ttmp = stream.readUint8();\n\tthis.seq_profile = (tmp >> 5) & 0x7;\n\tthis.seq_level_idx_0 = tmp & 0x1F;\n\ttmp = stream.readUint8();\n\tthis.seq_tier_0 = (tmp >> 7) & 0x1;\n\tthis.high_bitdepth = (tmp >> 6) & 0x1;\n\tthis.twelve_bit = (tmp >> 5) & 0x1;\n\tthis.monochrome = (tmp >> 4) & 0x1;\n\tthis.chroma_subsampling_x = (tmp >> 3) & 0x1;\n\tthis.chroma_subsampling_y = (tmp >> 2) & 0x1;\n\tthis.chroma_sample_position = (tmp & 0x3);\n\ttmp = stream.readUint8();\n\tthis.reserved_1 = (tmp >> 5) & 0x7;\n\tif (this.reserved_1 !== 0) {\n\t\tLog.error(\"av1C reserved_1 parsing problem\");\n\t\treturn;\n\t}\n\tthis.initial_presentation_delay_present = (tmp >> 4) & 0x1;\n\tif (this.initial_presentation_delay_present === 1) {\n\t\tthis.initial_presentation_delay_minus_one = (tmp & 0xF);\n\t} else {\n\t\tthis.reserved_2 = (tmp & 0xF);\n\t\tif (this.reserved_2 !== 0) {\n\t\t\tLog.error(\"av1C reserved_2 parsing problem\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\tvar configOBUs_length = this.size - this.hdr_size - 4;\n\tthis.configOBUs = stream.readUint8Array(configOBUs_length);\n});\n\n// file:src/parsing/avcC.js\nBoxParser.createBoxCtor(\"avcC\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.AVCProfileIndication = stream.readUint8();\n\tthis.profile_compatibility = stream.readUint8();\n\tthis.AVCLevelIndication = stream.readUint8();\n\tthis.lengthSizeMinusOne = (stream.readUint8() & 0x3);\n\tthis.nb_SPS_nalus = (stream.readUint8() & 0x1F);\n\ttoparse = this.size - this.hdr_size - 6;\n\tthis.SPS = [];\n\tfor (i = 0; i < this.nb_SPS_nalus; i++) {\n\t\tthis.SPS[i] = {};\n\t\tthis.SPS[i].length = stream.readUint16();\n\t\tthis.SPS[i].nalu = stream.readUint8Array(this.SPS[i].length);\n\t\ttoparse -= 2+this.SPS[i].length;\n\t}\n\tthis.nb_PPS_nalus = stream.readUint8();\n\ttoparse--;\n\tthis.PPS = [];\n\tfor (i = 0; i < this.nb_PPS_nalus; i++) {\n\t\tthis.PPS[i] = {};\n\t\tthis.PPS[i].length = stream.readUint16();\n\t\tthis.PPS[i].nalu = stream.readUint8Array(this.PPS[i].length);\n\t\ttoparse -= 2+this.PPS[i].length;\n\t}\n\tif (toparse>0) {\n\t\tthis.ext = stream.readUint8Array(toparse);\n\t}\n});\n\n// file:src/parsing/btrt.js\nBoxParser.createBoxCtor(\"btrt\", function(stream) {\n\tthis.bufferSizeDB = stream.readUint32();\n\tthis.maxBitrate = stream.readUint32();\n\tthis.avgBitrate = stream.readUint32();\n});\n\n// file:src/parsing/ccst.js\nBoxParser.createFullBoxCtor(\"ccst\", function(stream) {\n\tvar flags = stream.readUint8();\n\tthis.all_ref_pics_intra = ((flags & 0x80) == 0x80);\n\tthis.intra_pred_used = ((flags & 0x40) == 0x40);\n\tthis.max_ref_per_pic = ((flags & 0x3f) >> 2);\n\tstream.readUint24();\n});\n\n// file:src/parsing/cdef.js\nBoxParser.createBoxCtor(\"cdef\", function(stream) {\n var i;\n this.channel_count = stream.readUint16();\n this.channel_indexes = [];\n this.channel_types = [];\n this.channel_associations = [];\n for (i = 0; i < this.channel_count; i++) {\n this.channel_indexes.push(stream.readUint16());\n this.channel_types.push(stream.readUint16());\n this.channel_associations.push(stream.readUint16());\n }\n});\n\n// file:src/parsing/clap.js\nBoxParser.createBoxCtor(\"clap\", function(stream) {\n\tthis.cleanApertureWidthN = stream.readUint32();\n\tthis.cleanApertureWidthD = stream.readUint32();\n\tthis.cleanApertureHeightN = stream.readUint32();\n\tthis.cleanApertureHeightD = stream.readUint32();\n\tthis.horizOffN = stream.readUint32();\n\tthis.horizOffD = stream.readUint32();\n\tthis.vertOffN = stream.readUint32();\n\tthis.vertOffD = stream.readUint32();\n});// file:src/parsing/clli.js\nBoxParser.createBoxCtor(\"clli\", function(stream) {\n\tthis.max_content_light_level = stream.readUint16();\n this.max_pic_average_light_level = stream.readUint16();\n});\n\n// file:src/parsing/cmex.js\nBoxParser.createFullBoxCtor(\"cmex\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.pos_x = stream.readInt32();\n\t}\n\tif (this.flags & 0x2) {\n\t\tthis.pos_y = stream.readInt32();\n\t}\n\tif (this.flags & 0x4) {\n\t\tthis.pos_z = stream.readInt32();\n\t}\n\tif (this.flags & 0x8) {\n\t\tif (this.version == 0) {\n\t\t\tif (this.flags & 0x10) {\n\t\t\t\tthis.quat_x = stream.readInt32();\n\t\t\t\tthis.quat_y = stream.readInt32();\n\t\t\t\tthis.quat_z = stream.readInt32();\n\t\t\t} else {\n\t\t\t\tthis.quat_x = stream.readInt16();\n\t\t\t\tthis.quat_y = stream.readInt16();\n\t\t\t\tthis.quat_z = stream.readInt16();\n\t\t\t}\n\t\t} else if (this.version == 1) {\n\t\t\t//ViewpointGlobalCoordinateSysRotationStruct rot;\n\t\t}\n\t}\n\tif (this.flags & 0x20) {\n\t\tthis.id = stream.readUint32();\n\t}\n});\n// file:src/parsing/cmin.js\nBoxParser.createFullBoxCtor(\"cmin\", function(stream) {\n\tthis.focal_length_x = stream.readInt32();\n\tthis.principal_point_x = stream.readInt32();\n\tthis.principal_point_y = stream.readInt32();\n\tif (this.flags & 0x1) {\n\t\tthis.focal_length_y = stream.readInt32();\n\t\tthis.skew_factor = stream.readInt32();\n\t}\n});// file:src/parsing/cmpd.js\nBoxParser.createBoxCtor(\"cmpd\", function(stream) {\n\tthis.component_count = stream.readUint16();\n\tthis.component_types = [];\n\tthis.component_type_urls = [];\n\tfor (i = 0; i < this.component_count; i++) {\n\t\tvar component_type = stream.readUint16();\n\t\tthis.component_types.push(component_type);\n\t\tif (component_type >= 0x8000) {\n\t\t\tthis.component_type_urls.push(stream.readCString());\n\t\t}\n\t}\n});// file:src/parsing/co64.js\nBoxParser.createFullBoxCtor(\"co64\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i> 7;\n\t} else if (this.colour_type === 'rICC') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t} else if (this.colour_type === 'prof') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t}\n});// file:src/parsing/cprt.js\nBoxParser.createFullBoxCtor(\"cprt\", function (stream) {\n\tthis.parseLanguage(stream);\n\tthis.notice = stream.readCString();\n});\n\n// file:src/parsing/cslg.js\nBoxParser.createFullBoxCtor(\"cslg\", function(stream) {\n\tvar entry_count;\n\tif (this.version === 0) {\n\t\tthis.compositionToDTSShift = stream.readInt32(); /* signed */\n\t\tthis.leastDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.greatestDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.compositionStartTime = stream.readInt32(); /* signed */\n\t\tthis.compositionEndTime = stream.readInt32(); /* signed */\n\t}\n});\n\n// file:src/parsing/ctts.js\nBoxParser.createFullBoxCtor(\"ctts\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i> 6;\n\tthis.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\tthis.bsmod = ((tmp_byte1 & 0x1) << 2) | ((tmp_byte2 >> 6) & 0x3);\n\tthis.acmod = ((tmp_byte2 >> 3) & 0x7);\n\tthis.lfeon = ((tmp_byte2 >> 2) & 0x1);\n\tthis.bit_rate_code = (tmp_byte2 & 0x3) | ((tmp_byte3 >> 5) & 0x7);\n});\n\n// file:src/parsing/dec3.js\nBoxParser.createBoxCtor(\"dec3\", function(stream) {\n\tvar tmp_16 = stream.readUint16();\n\tthis.data_rate = tmp_16 >> 3;\n\tthis.num_ind_sub = tmp_16 & 0x7;\n\tthis.ind_subs = [];\n\tfor (var i = 0; i < this.num_ind_sub+1; i++) {\n\t\tvar ind_sub = {};\n\t\tthis.ind_subs.push(ind_sub);\n\t\tvar tmp_byte1 = stream.readUint8();\n\t\tvar tmp_byte2 = stream.readUint8();\n\t\tvar tmp_byte3 = stream.readUint8();\n\t\tind_sub.fscod = tmp_byte1 >> 6;\n\t\tind_sub.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\t\tind_sub.bsmod = ((tmp_byte1 & 0x1) << 4) | ((tmp_byte2 >> 4) & 0xF);\n\t\tind_sub.acmod = ((tmp_byte2 >> 1) & 0x7);\n\t\tind_sub.lfeon = (tmp_byte2 & 0x1);\n\t\tind_sub.num_dep_sub = ((tmp_byte3 >> 1) & 0xF);\n\t\tif (ind_sub.num_dep_sub > 0) {\n\t\t\tind_sub.chan_loc = ((tmp_byte3 & 0x1) << 8) | stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dfLa.js\nBoxParser.createFullBoxCtor(\"dfLa\", function(stream) {\n var BLOCKTYPE_MASK = 0x7F;\n var LASTMETADATABLOCKFLAG_MASK = 0x80;\n\n var boxesFound = [];\n var knownBlockTypes = [\n \"STREAMINFO\",\n \"PADDING\",\n \"APPLICATION\",\n \"SEEKTABLE\",\n \"VORBIS_COMMENT\",\n \"CUESHEET\",\n \"PICTURE\",\n \"RESERVED\"\n ];\n\n // dfLa is a FullBox\n this.parseFullHeader(stream);\n\n // for (i=0; ; i++) { // to end of box\n do {\n var flagAndType = stream.readUint8();\n\n var type = Math.min(\n (flagAndType & BLOCKTYPE_MASK),\n (knownBlockTypes.length - 1)\n );\n\n // if this is a STREAMINFO block, read the true samplerate since this\n // can be different to the AudioSampleEntry samplerate.\n if (!(type)) {\n // read past all the other stuff\n stream.readUint8Array(13);\n\n // extract samplerate\n this.samplerate = (stream.readUint32() >> 12);\n\n // read to end of STREAMINFO\n stream.readUint8Array(20);\n } else {\n // not interested in other block types so just discard length bytes\n stream.readUint8Array(stream.readUint24());\n }\n\n boxesFound.push(knownBlockTypes[type]);\n\n if (!!(flagAndType & LASTMETADATABLOCKFLAG_MASK)) {\n break;\n }\n } while (true);\n\n this.numMetadataBlocks =\n boxesFound.length + \" (\" + boxesFound.join(\", \") + \")\";\n});\n// file:src/parsing/dimm.js\nBoxParser.createBoxCtor(\"dimm\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dmax.js\nBoxParser.createBoxCtor(\"dmax\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/dmed.js\nBoxParser.createBoxCtor(\"dmed\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dOps.js\nBoxParser.createBoxCtor(\"dOps\", function(stream) {\n\tthis.Version = stream.readUint8();\n\tthis.OutputChannelCount = stream.readUint8();\n\tthis.PreSkip = stream.readUint16();\n\tthis.InputSampleRate = stream.readUint32();\n\tthis.OutputGain = stream.readInt16();\n\tthis.ChannelMappingFamily = stream.readUint8();\n\tif (this.ChannelMappingFamily !== 0) {\n\t\tthis.StreamCount = stream.readUint8();\n\t\tthis.CoupledCount = stream.readUint8();\n\t\tthis.ChannelMapping = [];\n\t\tfor (var i = 0; i < this.OutputChannelCount; i++) {\n\t\t\tthis.ChannelMapping[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dref.js\nBoxParser.createFullBoxCtor(\"dref\", function(stream) {\n\tvar ret;\n\tvar box;\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/drep.js\nBoxParser.createBoxCtor(\"drep\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/elng.js\nBoxParser.createFullBoxCtor(\"elng\", function(stream) {\n\tthis.extended_language = stream.readString(this.size-this.hdr_size);\n});\n\n// file:src/parsing/elst.js\nBoxParser.createFullBoxCtor(\"elst\", function(stream) {\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tentry.segment_duration = stream.readUint64();\n\t\t\tentry.media_time = stream.readInt64();\n\t\t} else {\n\t\t\tentry.segment_duration = stream.readUint32();\n\t\t\tentry.media_time = stream.readInt32();\n\t\t}\n\t\tentry.media_rate_integer = stream.readInt16();\n\t\tentry.media_rate_fraction = stream.readInt16();\n\t}\n});\n\n// file:src/parsing/emsg.js\nBoxParser.createFullBoxCtor(\"emsg\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time \t\t\t= stream.readUint64();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t} else {\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time_delta \t= stream.readUint32();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t}\n\tvar message_size = this.size - this.hdr_size - (4*4 + (this.scheme_id_uri.length+1) + (this.value.length+1));\n\tif (this.version == 1) {\n\t\tmessage_size -= 4;\n\t}\n\tthis.message_data = stream.readUint8Array(message_size);\n});\n\n// file:src/parsing/EntityToGroup.js\n// ISO/IEC 14496-12:2022 Section 8.18.3 Entity to group box\nBoxParser.createEntityToGroupCtor = function(type, parseMethod) {\n BoxParser[type+\"Box\"] = function(size) {\n BoxParser.FullBox.call(this, type, size);\n }\n BoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n BoxParser[type+\"Box\"].prototype.parse = function(stream) {\n this.parseFullHeader(stream);\n if (parseMethod) {\n parseMethod.call(this, stream);\n } else {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n }\n };\n};\n\n// Auto exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.2.1)\nBoxParser.createEntityToGroupCtor(\"aebr\");\n\n// Flash exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.5.1)\nBoxParser.createEntityToGroupCtor(\"afbr\");\n\n// Album collection (ISO/IEC 23008-12:2022 Section 6.8.7.1)\nBoxParser.createEntityToGroupCtor(\"albc\");\n\n// Alternative entity (ISO/IEC 14496-12:2022 Section 8.18.3.1)\nBoxParser.createEntityToGroupCtor(\"altr\");\n\n// Burst image entity group (ISO/IEC 23008-12:2022 Section 6.8.2.2)\nBoxParser.createEntityToGroupCtor(\"brst\");\n\n// Depth of field bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.6.1)\nBoxParser.createEntityToGroupCtor(\"dobr\");\n\n// Equivalent entity (ISO/IEC 23008-12:2022 Section 6.8.1.1)\nBoxParser.createEntityToGroupCtor(\"eqiv\");\n\n// Favourites collection (ISO/IEC 23008-12:2022 Section 6.8.7.2)\nBoxParser.createEntityToGroupCtor(\"favc\");\n\n// Focus bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.4.1)\nBoxParser.createEntityToGroupCtor(\"fobr\");\n\n// Audio to image entity group (ISO/IEC 23008-12:2022 Section 6.8.4)\nBoxParser.createEntityToGroupCtor(\"iaug\");\n\n// Panorama (ISO/IEC 23008-12:2022 Section 6.8.8.1)\nBoxParser.createEntityToGroupCtor(\"pano\");\n\n// Slideshow (ISO/IEC 23008-12:2022 Section 6.8.9.1)\nBoxParser.createEntityToGroupCtor(\"slid\");\n\n// Stereo pair (ISO/IEC 23008-12:2022 Section 6.8.5)\nBoxParser.createEntityToGroupCtor(\"ster\");\n\n// Time-synchronised capture entity group (ISO/IEC 23008-12:2022 Section 6.8.3)\nBoxParser.createEntityToGroupCtor(\"tsyn\");\n\n// White balance bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.3.1)\nBoxParser.createEntityToGroupCtor(\"wbbr\");\n\n// Alternative entity (ISO/IEC 23008-12:2022 AMD1 Section 6.8.10)\nBoxParser.createEntityToGroupCtor(\"prgr\");\n// file:src/parsing/esds.js\nBoxParser.createFullBoxCtor(\"esds\", function(stream) {\n\tvar esd_data = stream.readUint8Array(this.size-this.hdr_size);\n\tthis.data = esd_data\n\tif (typeof MPEG4DescriptorParser !== \"undefined\") {\n\t\tvar esd_parser = new MPEG4DescriptorParser();\n\t\tthis.esd = esd_parser.parseOneDescriptor(new DataStream(esd_data.buffer, 0, DataStream.BIG_ENDIAN));\n\t}\n});\n\n// file:src/parsing/fiel.js\nBoxParser.createBoxCtor(\"fiel\", function(stream) {\n\tthis.fieldCount = stream.readUint8();\n\tthis.fieldOrdering = stream.readUint8();\n});\n\n// file:src/parsing/frma.js\nBoxParser.createBoxCtor(\"frma\", function(stream) {\n\tthis.data_format = stream.readString(4);\n});\n\n// file:src/parsing/ftyp.js\nBoxParser.createBoxCtor(\"ftyp\", function(stream) {\n\tvar toparse = this.size - this.hdr_size;\n\tthis.major_brand = stream.readString(4);\n\tthis.minor_version = stream.readUint32();\n\ttoparse -= 8;\n\tthis.compatible_brands = [];\n\tvar i = 0;\n\twhile (toparse>=4) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t\ttoparse -= 4;\n\t\ti++;\n\t}\n});\n\n// file:src/parsing/hdlr.js\nBoxParser.createFullBoxCtor(\"hdlr\", function(stream) {\n\tif (this.version === 0) {\n\t\tstream.readUint32();\n\t\tthis.handler = stream.readString(4);\n\t\tstream.readUint32Array(3);\n\t\tthis.name = stream.readString(this.size-this.hdr_size-20);\n\t\tif (this.name[this.name.length-1]==='\\0') {\n\t\t\tthis.name = this.name.slice(0,-1);\n\t\t}\n\t}\n});\n\n// file:src/parsing/hvcC.js\nBoxParser.createBoxCtor(\"hvcC\", function(stream) {\n\tvar i, j;\n\tvar nb_nalus;\n\tvar length;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\ttmp_byte = stream.readUint8();\n\tthis.general_profile_space = tmp_byte >> 6;\n\tthis.general_tier_flag = (tmp_byte & 0x20) >> 5;\n\tthis.general_profile_idc = (tmp_byte & 0x1F);\n\tthis.general_profile_compatibility = stream.readUint32();\n\tthis.general_constraint_indicator = stream.readUint8Array(6);\n\tthis.general_level_idc = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\tthis.chroma_format_idc = (stream.readUint8() & 0x3);\n\tthis.bit_depth_luma_minus8 = (stream.readUint8() & 0x7);\n\tthis.bit_depth_chroma_minus8 = (stream.readUint8() & 0x7);\n\tthis.avgFrameRate = stream.readUint16();\n\ttmp_byte = stream.readUint8();\n\tthis.constantFrameRate = (tmp_byte >> 6);\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tlength = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/iinf.js\nBoxParser.createFullBoxCtor(\"iinf\", function(stream) {\n\tvar ret;\n\tif (this.version === 0) {\n\t\tthis.entry_count = stream.readUint16();\n\t} else {\n\t\tthis.entry_count = stream.readUint32();\n\t}\n\tthis.item_infos = [];\n\tfor (var i = 0; i < this.entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (ret.box.type !== \"infe\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Expected 'infe' box, got \"+ret.box.type);\n\t\t\t}\n\t\t\tthis.item_infos[i] = ret.box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/iloc.js\nBoxParser.createFullBoxCtor(\"iloc\", function(stream) {\n\tvar byte;\n\tbyte = stream.readUint8();\n\tthis.offset_size = (byte >> 4) & 0xF;\n\tthis.length_size = byte & 0xF;\n\tbyte = stream.readUint8();\n\tthis.base_offset_size = (byte >> 4) & 0xF;\n\tif (this.version === 1 || this.version === 2) {\n\t\tthis.index_size = byte & 0xF;\n\t} else {\n\t\tthis.index_size = 0;\n\t\t// reserved = byte & 0xF;\n\t}\n\tthis.items = [];\n\tvar item_count = 0;\n\tif (this.version < 2) {\n\t\titem_count = stream.readUint16();\n\t} else if (this.version === 2) {\n\t\titem_count = stream.readUint32();\n\t} else {\n\t\tthrow \"version of iloc box not supported\";\n\t}\n\tfor (var i = 0; i < item_count; i++) {\n\t\tvar item = {};\n\t\tthis.items.push(item);\n\t\tif (this.version < 2) {\n\t\t\titem.item_ID = stream.readUint16();\n\t\t} else if (this.version === 2) {\n\t\t\titem.item_ID = stream.readUint16();\n\t\t} else {\n\t\t\tthrow \"version of iloc box not supported\";\n\t\t}\n\t\tif (this.version === 1 || this.version === 2) {\n\t\t\titem.construction_method = (stream.readUint16() & 0xF);\n\t\t} else {\n\t\t\titem.construction_method = 0;\n\t\t}\n\t\titem.data_reference_index = stream.readUint16();\n\t\tswitch(this.base_offset_size) {\n\t\t\tcase 0:\n\t\t\t\titem.base_offset = 0;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\titem.base_offset = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 8:\n\t\t\t\titem.base_offset = stream.readUint64();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow \"Error reading base offset size\";\n\t\t}\n\t\tvar extent_count = stream.readUint16();\n\t\titem.extents = [];\n\t\tfor (var j=0; j < extent_count; j++) {\n\t\t\tvar extent = {};\n\t\t\titem.extents.push(extent);\n\t\t\tif (this.version === 1 || this.version === 2) {\n\t\t\t\tswitch(this.index_size) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\textent.extent_index = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\textent.extent_index = stream.readUint32();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\textent.extent_index = stream.readUint64();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch(this.offset_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_offset = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_offset = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_offset = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t\tswitch(this.length_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_length = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_length = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_length = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/imir.js\nBoxParser.createBoxCtor(\"imir\", function(stream) {\n\tvar tmp = stream.readUint8();\n\tthis.reserved = tmp >> 7;\n\tthis.axis = tmp & 1;\n});// file:src/parsing/infe.js\nBoxParser.createFullBoxCtor(\"infe\", function(stream) {\n\tif (this.version === 0 || this.version === 1) {\n\t\tthis.item_ID = stream.readUint16();\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_name = stream.readCString();\n\t\tthis.content_type = stream.readCString();\n\t\tthis.content_encoding = stream.readCString();\n\t}\n\tif (this.version === 1) {\n\t\tthis.extension_type = stream.readString(4);\n\t\tLog.warn(\"BoxParser\", \"Cannot parse extension type\");\n\t\tstream.seek(this.start+this.size);\n\t\treturn;\n\t}\n\tif (this.version >= 2) {\n\t\tif (this.version === 2) {\n\t\t\tthis.item_ID = stream.readUint16();\n\t\t} else if (this.version === 3) {\n\t\t\tthis.item_ID = stream.readUint32();\n\t\t}\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_type = stream.readString(4);\n\t\tthis.item_name = stream.readCString();\n\t\tif (this.item_type === \"mime\") {\n\t\t\tthis.content_type = stream.readCString();\n\t\t\tthis.content_encoding = stream.readCString();\n\t\t} else if (this.item_type === \"uri \") {\n\t\t\tthis.item_uri_type = stream.readCString();\n\t\t}\n\t}\n});\n// file:src/parsing/ipma.js\nBoxParser.createFullBoxCtor(\"ipma\", function(stream) {\n\tvar i, j;\n\tentry_count = stream.readUint32();\n\tthis.associations = [];\n\tfor(i=0; i> 7) === 1;\n\t\t\tif (this.flags & 0x1) {\n\t\t\t\tp.property_index = (tmp & 0x7F) << 8 | stream.readUint8();\n\t\t\t} else {\n\t\t\t\tp.property_index = (tmp & 0x7F);\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/iref.js\nBoxParser.createFullBoxCtor(\"iref\", function(stream) {\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.references = [];\n\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t} else {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBoxLarge(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.warn(\"BoxParser\", box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.references.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n// file:src/parsing/irot.js\nBoxParser.createBoxCtor(\"irot\", function(stream) {\n\tthis.angle = stream.readUint8() & 0x3;\n});\n\n// file:src/parsing/ispe.js\nBoxParser.createFullBoxCtor(\"ispe\", function(stream) {\n\tthis.image_width = stream.readUint32();\n\tthis.image_height = stream.readUint32();\n});// file:src/parsing/kind.js\nBoxParser.createFullBoxCtor(\"kind\", function(stream) {\n\tthis.schemeURI = stream.readCString();\n\tthis.value = stream.readCString();\n});\n// file:src/parsing/leva.js\nBoxParser.createFullBoxCtor(\"leva\", function(stream) {\n\tvar count = stream.readUint8();\n\tthis.levels = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tvar level = {};\n\t\tthis.levels[i] = level;\n\t\tlevel.track_ID = stream.readUint32();\n\t\tvar tmp_byte = stream.readUint8();\n\t\tlevel.padding_flag = tmp_byte >> 7;\n\t\tlevel.assignment_type = tmp_byte & 0x7F;\n\t\tswitch (level.assignment_type) {\n\t\t\tcase 0:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tlevel.grouping_type_parameter = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tlevel.sub_track_id = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown leva assignement type\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/lsel.js\nBoxParser.createBoxCtor(\"lsel\", function(stream) {\n\tthis.layer_id = stream.readUint16();\n});// file:src/parsing/maxr.js\nBoxParser.createBoxCtor(\"maxr\", function(stream) {\n\tthis.period = stream.readUint32();\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/mdcv.js\nBoxParser.createBoxCtor(\"mdcv\", function(stream) {\n this.display_primaries = [];\n this.display_primaries[0] = {};\n this.display_primaries[0].x = stream.readUint16();\n this.display_primaries[0].y = stream.readUint16();\n this.display_primaries[1] = {};\n this.display_primaries[1].x = stream.readUint16();\n this.display_primaries[1].y = stream.readUint16();\n this.display_primaries[2] = {};\n this.display_primaries[2].x = stream.readUint16();\n this.display_primaries[2].y = stream.readUint16();\n this.white_point = {};\n this.white_point.x = stream.readUint16();\n this.white_point.y = stream.readUint16();\n this.max_display_mastering_luminance = stream.readUint32();\n this.min_display_mastering_luminance = stream.readUint32();\n});\n\n// file:src/parsing/mdhd.js\nBoxParser.createFullBoxCtor(\"mdhd\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.parseLanguage(stream);\n\tstream.readUint16();\n});\n\n// file:src/parsing/mehd.js\nBoxParser.createFullBoxCtor(\"mehd\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tLog.warn(\"BoxParser\", \"mehd box incorrectly uses flags set to 1, converting version to 1\");\n\t\tthis.version = 1;\n\t}\n\tif (this.version == 1) {\n\t\tthis.fragment_duration = stream.readUint64();\n\t} else {\n\t\tthis.fragment_duration = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/meta.js\nBoxParser.createFullBoxCtor(\"meta\", function(stream) {\n\tthis.boxes = [];\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n});\n// file:src/parsing/mfhd.js\nBoxParser.createFullBoxCtor(\"mfhd\", function(stream) {\n\tthis.sequence_number = stream.readUint32();\n});\n\n// file:src/parsing/mfro.js\nBoxParser.createFullBoxCtor(\"mfro\", function(stream) {\n\tthis._size = stream.readUint32();\n});\n\n// file:src/parsing/mvhd.js\nBoxParser.createFullBoxCtor(\"mvhd\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.rate = stream.readUint32();\n\tthis.volume = stream.readUint16()>>8;\n\tstream.readUint16();\n\tstream.readUint32Array(2);\n\tthis.matrix = stream.readUint32Array(9);\n\tstream.readUint32Array(6);\n\tthis.next_track_id = stream.readUint32();\n});\n// file:src/parsing/npck.js\nBoxParser.createBoxCtor(\"npck\", function(stream) {\n\tthis.packetssent = stream.readUint32();\n});\n\n// file:src/parsing/nump.js\nBoxParser.createBoxCtor(\"nump\", function(stream) {\n\tthis.packetssent = stream.readUint64();\n});\n\n// file:src/parsing/padb.js\nBoxParser.createFullBoxCtor(\"padb\", function(stream) {\n\tvar sample_count = stream.readUint32();\n\tthis.padbits = [];\n\tfor (var i = 0; i < Math.floor((sample_count+1)/2); i++) {\n\t\tthis.padbits = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pasp.js\nBoxParser.createBoxCtor(\"pasp\", function(stream) {\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n});// file:src/parsing/payl.js\nBoxParser.createBoxCtor(\"payl\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/payt.js\nBoxParser.createBoxCtor(\"payt\", function(stream) {\n\tthis.payloadID = stream.readUint32();\n\tvar count = stream.readUint8();\n\tthis.rtpmap_string = stream.readString(count);\n});\n\n// file:src/parsing/pdin.js\nBoxParser.createFullBoxCtor(\"pdin\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/8;\n\tthis.rate = [];\n\tthis.initial_delay = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.rate[i] = stream.readUint32();\n\t\tthis.initial_delay[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pitm.js\nBoxParser.createFullBoxCtor(\"pitm\", function(stream) {\n\tif (this.version === 0) {\n\t\tthis.item_id = stream.readUint16();\n\t} else {\n\t\tthis.item_id = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pixi.js\nBoxParser.createFullBoxCtor(\"pixi\", function(stream) {\n\tvar i;\n\tthis.num_channels = stream.readUint8();\n\tthis.bits_per_channels = [];\n\tfor (i = 0; i < this.num_channels; i++) {\n\t\tthis.bits_per_channels[i] = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pmax.js\nBoxParser.createBoxCtor(\"pmax\", function(stream) {\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/prdi.js\nBoxParser.createFullBoxCtor(\"prdi\", function(stream) {\n\tthis.step_count = stream.readUint16();\n\tthis.item_count = [];\n\tif (this.flags & 0x2) {\n\t\tfor (var i = 0; i < this.step_count; i++) {\n\t\t\tthis.item_count[i] = stream.readUint16();\n\t\t}\n\t}\n});// file:src/parsing/prft.js\nBoxParser.createFullBoxCtor(\"prft\", function(stream) {\n\tthis.ref_track_id = stream.readUint32();\n\tthis.ntp_timestamp = stream.readUint64();\n\tif (this.version === 0) {\n\t\tthis.media_time = stream.readUint32();\n\t} else {\n\t\tthis.media_time = stream.readUint64();\n\t}\n});\n\n// file:src/parsing/pssh.js\nBoxParser.createFullBoxCtor(\"pssh\", function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tif (this.version > 0) {\n\t\tvar count = stream.readUint32();\n\t\tthis.kid = [];\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tthis.kid[i] = BoxParser.parseHex16(stream);\n\t\t}\n\t}\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/qt/clef.js\nBoxParser.createFullBoxCtor(\"clef\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/enof.js\nBoxParser.createFullBoxCtor(\"enof\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/prof.js\nBoxParser.createFullBoxCtor(\"prof\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/tapt.js\nBoxParser.createContainerBoxCtor(\"tapt\", null, [ \"clef\", \"prof\", \"enof\"]);// file:src/parsing/rtp.js\nBoxParser.createBoxCtor(\"rtp \", function(stream) {\n\tthis.descriptionformat = stream.readString(4);\n\tthis.sdptext = stream.readString(this.size - this.hdr_size - 4);\n});\n\n// file:src/parsing/saio.js\nBoxParser.createFullBoxCtor(\"saio\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readUint32();\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tvar count = stream.readUint32();\n\tthis.offset = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tif (this.version === 0) {\n\t\t\tthis.offset[i] = stream.readUint32();\n\t\t} else {\n\t\t\tthis.offset[i] = stream.readUint64();\n\t\t}\n\t}\n});\n// file:src/parsing/saiz.js\nBoxParser.createFullBoxCtor(\"saiz\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readUint32();\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tthis.default_sample_info_size = stream.readUint8();\n\tvar count = stream.readUint32();\n\tthis.sample_info_size = [];\n\tif (this.default_sample_info_size === 0) {\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tthis.sample_info_size[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/sampleentries/mett.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"mett\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/metx.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"metx\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/sbtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"sbtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stpp.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stpp\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.auxiliary_mime_types = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stxt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stxt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/tx3g.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"tx3g\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.displayFlags = stream.readUint32();\n\tthis.horizontal_justification = stream.readInt8();\n\tthis.vertical_justification = stream.readInt8();\n\tthis.bg_color_rgba = stream.readUint8Array(4);\n\tthis.box_record = stream.readInt16Array(4);\n\tthis.style_record = stream.readUint8Array(12);\n\tthis.parseFooter(stream);\n});\n// file:src/parsing/sampleentries/wvtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"wvtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/samplegroups/alst.js\nBoxParser.createSampleGroupCtor(\"alst\", function(stream) {\n\tvar i;\n\tvar roll_count = stream.readUint16();\n\tthis.first_output_sample = stream.readUint16();\n\tthis.sample_offset = [];\n\tfor (i = 0; i < roll_count; i++) {\n\t\tthis.sample_offset[i] = stream.readUint32();\n\t}\n\tvar remaining = this.description_length - 4 - 4*roll_count;\n\tthis.num_output_samples = [];\n\tthis.num_total_samples = [];\n\tfor (i = 0; i < remaining/4; i++) {\n\t\tthis.num_output_samples[i] = stream.readUint16();\n\t\tthis.num_total_samples[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/avll.js\nBoxParser.createSampleGroupCtor(\"avll\", function(stream) {\n\tthis.layerNumber = stream.readUint8();\n\tthis.accurateStatisticsFlag = stream.readUint8();\n\tthis.avgBitRate = stream.readUint16();\n\tthis.avgFrameRate = stream.readUint16();\n});\n\n// file:src/parsing/samplegroups/avss.js\nBoxParser.createSampleGroupCtor(\"avss\", function(stream) {\n\tthis.subSequenceIdentifier = stream.readUint16();\n\tthis.layerNumber = stream.readUint8();\n\tvar tmp_byte = stream.readUint8();\n\tthis.durationFlag = tmp_byte >> 7;\n\tthis.avgRateFlag = (tmp_byte >> 6) & 0x1;\n\tif (this.durationFlag) {\n\t\tthis.duration = stream.readUint32();\n\t}\n\tif (this.avgRateFlag) {\n\t\tthis.accurateStatisticsFlag = stream.readUint8();\n\t\tthis.avgBitRate = stream.readUint16();\n\t\tthis.avgFrameRate = stream.readUint16();\n\t}\n\tthis.dependency = [];\n\tvar numReferences = stream.readUint8();\n\tfor (var i = 0; i < numReferences; i++) {\n\t\tvar dependencyInfo = {};\n\t\tthis.dependency.push(dependencyInfo);\n\t\tdependencyInfo.subSeqDirectionFlag = stream.readUint8();\n\t\tdependencyInfo.layerNumber = stream.readUint8();\n\t\tdependencyInfo.subSequenceIdentifier = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/dtrt.js\nBoxParser.createSampleGroupCtor(\"dtrt\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/mvif.js\nBoxParser.createSampleGroupCtor(\"mvif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/prol.js\nBoxParser.createSampleGroupCtor(\"prol\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/rap.js\nBoxParser.createSampleGroupCtor(\"rap \", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.num_leading_samples_known = tmp_byte >> 7;\n\tthis.num_leading_samples = tmp_byte & 0x7F;\n});\n\n// file:src/parsing/samplegroups/rash.js\nBoxParser.createSampleGroupCtor(\"rash\", function(stream) {\n\tthis.operation_point_count = stream.readUint16();\n\tif (this.description_length !== 2+(this.operation_point_count === 1?2:this.operation_point_count*6)+9) {\n\t\tLog.warn(\"BoxParser\", \"Mismatch in \"+this.grouping_type+\" sample group length\");\n\t\tthis.data = stream.readUint8Array(this.description_length-2);\n\t} else {\n\t\tif (this.operation_point_count === 1) {\n\t\t\tthis.target_rate_share = stream.readUint16();\n\t\t} else {\n\t\t\tthis.target_rate_share = [];\n\t\t\tthis.available_bitrate = [];\n\t\t\tfor (var i = 0; i < this.operation_point_count; i++) {\n\t\t\t\tthis.available_bitrate[i] = stream.readUint32();\n\t\t\t\tthis.target_rate_share[i] = stream.readUint16();\n\t\t\t}\n\t\t}\n\t\tthis.maximum_bitrate = stream.readUint32();\n\t\tthis.minimum_bitrate = stream.readUint32();\n\t\tthis.discard_priority = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/samplegroups/roll.js\nBoxParser.createSampleGroupCtor(\"roll\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.parse = function(stream) {\n\tLog.warn(\"BoxParser\", \"Unknown Sample Group type: \"+this.grouping_type);\n\tthis.data = stream.readUint8Array(this.description_length);\n}\n\n// file:src/parsing/samplegroups/scif.js\nBoxParser.createSampleGroupCtor(\"scif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/scnm.js\nBoxParser.createSampleGroupCtor(\"scnm\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/seig.js\nBoxParser.createSampleGroupCtor(\"seig\", function(stream) {\n\tthis.reserved = stream.readUint8();\n\tvar tmp = stream.readUint8();\n\tthis.crypt_byte_block = tmp >> 4;\n\tthis.skip_byte_block = tmp & 0xF;\n\tthis.isProtected = stream.readUint8();\n\tthis.Per_Sample_IV_Size = stream.readUint8();\n\tthis.KID = BoxParser.parseHex16(stream);\n\tthis.constant_IV_size = 0;\n\tthis.constant_IV = 0;\n\tif (this.isProtected === 1 && this.Per_Sample_IV_Size === 0) {\n\t\tthis.constant_IV_size = stream.readUint8();\n\t\tthis.constant_IV = stream.readUint8Array(this.constant_IV_size);\n\t}\n});\n\n// file:src/parsing/samplegroups/stsa.js\nBoxParser.createSampleGroupCtor(\"stsa\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/sync.js\nBoxParser.createSampleGroupCtor(\"sync\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.NAL_unit_type = tmp_byte & 0x3F;\n});\n\n// file:src/parsing/samplegroups/tele.js\nBoxParser.createSampleGroupCtor(\"tele\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.level_independently_decodable = tmp_byte >> 7;\n});\n\n// file:src/parsing/samplegroups/tsas.js\nBoxParser.createSampleGroupCtor(\"tsas\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/tscl.js\nBoxParser.createSampleGroupCtor(\"tscl\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/vipr.js\nBoxParser.createSampleGroupCtor(\"vipr\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/sbgp.js\nBoxParser.createFullBoxCtor(\"sbgp\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tif (this.version === 1) {\n\t\tthis.grouping_type_parameter = stream.readUint32();\n\t} else {\n\t\tthis.grouping_type_parameter = 0;\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tentry.sample_count = stream.readInt32();\n\t\tentry.group_description_index = stream.readInt32();\n\t}\n});\n\n// file:src/parsing/schm.js\nBoxParser.createFullBoxCtor(\"schm\", function(stream) {\n\tthis.scheme_type = stream.readString(4);\n\tthis.scheme_version = stream.readUint32();\n\tif (this.flags & 0x000001) {\n\t\tthis.scheme_uri = stream.readString(this.size - this.hdr_size - 8);\n\t}\n});\n\n// file:src/parsing/sdp.js\nBoxParser.createBoxCtor(\"sdp \", function(stream) {\n\tthis.sdptext = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/sdtp.js\nBoxParser.createFullBoxCtor(\"sdtp\", function(stream) {\n\tvar tmp_byte;\n\tvar count = (this.size - this.hdr_size);\n\tthis.is_leading = [];\n\tthis.sample_depends_on = [];\n\tthis.sample_is_depended_on = [];\n\tthis.sample_has_redundancy = [];\n\tfor (var i = 0; i < count; i++) {\n\t\ttmp_byte = stream.readUint8();\n\t\tthis.is_leading[i] = tmp_byte >> 6;\n\t\tthis.sample_depends_on[i] = (tmp_byte >> 4) & 0x3;\n\t\tthis.sample_is_depended_on[i] = (tmp_byte >> 2) & 0x3;\n\t\tthis.sample_has_redundancy[i] = tmp_byte & 0x3;\n\t}\n});\n\n// file:src/parsing/senc.js\n// Cannot be fully parsed because Per_Sample_IV_Size needs to be known\r\nBoxParser.createFullBoxCtor(\"senc\" /*, function(stream) {\r\n\tthis.parseFullHeader(stream);\r\n\tvar sample_count = stream.readUint32();\r\n\tthis.samples = [];\r\n\tfor (var i = 0; i < sample_count; i++) {\r\n\t\tvar sample = {};\r\n\t\t// tenc.default_Per_Sample_IV_Size or seig.Per_Sample_IV_Size\r\n\t\tsample.InitializationVector = this.readUint8Array(Per_Sample_IV_Size*8);\r\n\t\tif (this.flags & 0x2) {\r\n\t\t\tsample.subsamples = [];\r\n\t\t\tsubsample_count = stream.readUint16();\r\n\t\t\tfor (var j = 0; j < subsample_count; j++) {\r\n\t\t\t\tvar subsample = {};\r\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\r\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\r\n\t\t\t\tsample.subsamples.push(subsample);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// TODO\r\n\t\tthis.samples.push(sample);\r\n\t}\r\n}*/);\r\n// file:src/parsing/sgpd.js\nBoxParser.createFullBoxCtor(\"sgpd\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tLog.debug(\"BoxParser\", \"Found Sample Groups of type \"+this.grouping_type);\n\tif (this.version === 1) {\n\t\tthis.default_length = stream.readUint32();\n\t} else {\n\t\tthis.default_length = 0;\n\t}\n\tif (this.version >= 2) {\n\t\tthis.default_group_description_index = stream.readUint32();\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry;\n\t\tif (BoxParser[this.grouping_type+\"SampleGroupEntry\"]) {\n\t\t\tentry = new BoxParser[this.grouping_type+\"SampleGroupEntry\"](this.grouping_type);\n\t\t} else {\n\t\t\tentry = new BoxParser.SampleGroupEntry(this.grouping_type);\n\t\t}\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tentry.description_length = stream.readUint32();\n\t\t\t} else {\n\t\t\t\tentry.description_length = this.default_length;\n\t\t\t}\n\t\t} else {\n\t\t\tentry.description_length = this.default_length;\n\t\t}\n\t\tif (entry.write === BoxParser.SampleGroupEntry.prototype.write) {\n\t\t\tLog.info(\"BoxParser\", \"SampleGroup for type \"+this.grouping_type+\" writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t// storing data\n\t\t\tentry.data = stream.readUint8Array(entry.description_length);\n\t\t\t// rewinding\n\t\t\tstream.position -= entry.description_length;\n\t\t}\n\t\tentry.parse(stream);\n\t}\n});\n\n// file:src/parsing/sidx.js\nBoxParser.createFullBoxCtor(\"sidx\", function(stream) {\n\tthis.reference_ID = stream.readUint32();\n\tthis.timescale = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.earliest_presentation_time = stream.readUint32();\n\t\tthis.first_offset = stream.readUint32();\n\t} else {\n\t\tthis.earliest_presentation_time = stream.readUint64();\n\t\tthis.first_offset = stream.readUint64();\n\t}\n\tstream.readUint16();\n\tthis.references = [];\n\tvar count = stream.readUint16();\n\tfor (var i = 0; i < count; i++) {\n\t\tvar ref = {};\n\t\tthis.references.push(ref);\n\t\tvar tmp_32 = stream.readUint32();\n\t\tref.reference_type = (tmp_32 >> 31) & 0x1;\n\t\tref.referenced_size = tmp_32 & 0x7FFFFFFF;\n\t\tref.subsegment_duration = stream.readUint32();\n\t\ttmp_32 = stream.readUint32();\n\t\tref.starts_with_SAP = (tmp_32 >> 31) & 0x1;\n\t\tref.SAP_type = (tmp_32 >> 28) & 0x7;\n\t\tref.SAP_delta_time = tmp_32 & 0xFFFFFFF;\n\t}\n});\n\n// file:src/parsing/singleitemtypereference.js\nBoxParser.SingleItemTypeReferenceBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBox.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBox.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint16();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint16();\n\t}\n}\n\n// file:src/parsing/singleitemtypereferencelarge.js\nBoxParser.SingleItemTypeReferenceBoxLarge = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint32();\n\t}\n}\n\n// file:src/parsing/SmDm.js\nBoxParser.createFullBoxCtor(\"SmDm\", function(stream) {\n\tthis.primaryRChromaticity_x = stream.readUint16();\n this.primaryRChromaticity_y = stream.readUint16();\n this.primaryGChromaticity_x = stream.readUint16();\n this.primaryGChromaticity_y = stream.readUint16();\n this.primaryBChromaticity_x = stream.readUint16();\n this.primaryBChromaticity_y = stream.readUint16();\n this.whitePointChromaticity_x = stream.readUint16();\n this.whitePointChromaticity_y = stream.readUint16();\n this.luminanceMax = stream.readUint32();\n this.luminanceMin = stream.readUint32();\n});\n\n// file:src/parsing/smhd.js\nBoxParser.createFullBoxCtor(\"smhd\", function(stream) {\n\tthis.balance = stream.readUint16();\n\tstream.readUint16();\n});\n\n// file:src/parsing/ssix.js\nBoxParser.createFullBoxCtor(\"ssix\", function(stream) {\n\tthis.subsegments = [];\n\tvar subsegment_count = stream.readUint32();\n\tfor (var i = 0; i < subsegment_count; i++) {\n\t\tvar subsegment = {};\n\t\tthis.subsegments.push(subsegment);\n\t\tsubsegment.ranges = [];\n\t\tvar range_count = stream.readUint32();\n\t\tfor (var j = 0; j < range_count; j++) {\n\t\t\tvar range = {};\n\t\t\tsubsegment.ranges.push(range);\n\t\t\trange.level = stream.readUint8();\n\t\t\trange.range_size = stream.readUint24();\n\t\t}\n\t}\n});\n\n// file:src/parsing/stco.js\nBoxParser.createFullBoxCtor(\"stco\", function(stream) {\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor (var i = 0; i < entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stdp.js\nBoxParser.createFullBoxCtor(\"stdp\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/2;\n\tthis.priority = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.priority[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/sthd.js\nBoxParser.createFullBoxCtor(\"sthd\");\n\n// file:src/parsing/stri.js\nBoxParser.createFullBoxCtor(\"stri\", function(stream) {\n\tthis.switch_group = stream.readUint16();\n\tthis.alternate_group = stream.readUint16();\n\tthis.sub_track_id = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 8)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsc.js\nBoxParser.createFullBoxCtor(\"stsc\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.first_chunk = [];\n\tthis.samples_per_chunk = [];\n\tthis.sample_description_index = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i> 4) & 0xF;\n\t\t\t\tthis.sample_sizes[i+1] = tmp & 0xF;\n\t\t\t}\n\t\t} else if (this.field_size === 8) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint8();\n\t\t\t}\n\t\t} else if (this.field_size === 16) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint16();\n\t\t\t}\n\t\t} else {\n\t\t\tLog.error(\"BoxParser\", \"Error in length field in stz2 box\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/subs.js\nBoxParser.createFullBoxCtor(\"subs\", function(stream) {\n\tvar i,j;\n\tvar entry_count;\n\tvar subsample_count;\n\tentry_count = stream.readUint32();\n\tthis.entries = [];\n\tfor (i = 0; i < entry_count; i++) {\n\t\tvar sampleInfo = {};\n\t\tthis.entries[i] = sampleInfo;\n\t\tsampleInfo.sample_delta = stream.readUint32();\n\t\tsampleInfo.subsamples = [];\n\t\tsubsample_count = stream.readUint16();\n\t\tif (subsample_count>0) {\n\t\t\tfor (j = 0; j < subsample_count; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsampleInfo.subsamples.push(subsample);\n\t\t\t\tif (this.version == 1) {\n\t\t\t\t\tsubsample.size = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tsubsample.size = stream.readUint16();\n\t\t\t\t}\n\t\t\t\tsubsample.priority = stream.readUint8();\n\t\t\t\tsubsample.discardable = stream.readUint8();\n\t\t\t\tsubsample.codec_specific_parameters = stream.readUint32();\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tenc.js\nBoxParser.createFullBoxCtor(\"tenc\", function(stream) {\n\tstream.readUint8(); // reserved\n\tif (this.version === 0) {\n\t\tstream.readUint8();\n\t} else {\n\t\tvar tmp = stream.readUint8();\n\t\tthis.default_crypt_byte_block = (tmp >> 4) & 0xF;\n\t\tthis.default_skip_byte_block = tmp & 0xF;\n\t}\n\tthis.default_isProtected = stream.readUint8();\n\tthis.default_Per_Sample_IV_Size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n\tif (this.default_isProtected === 1 && this.default_Per_Sample_IV_Size === 0) {\n\t\tthis.default_constant_IV_size = stream.readUint8();\n\t\tthis.default_constant_IV = stream.readUint8Array(this.default_constant_IV_size);\n\t}\n});// file:src/parsing/tfdt.js\nBoxParser.createFullBoxCtor(\"tfdt\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.baseMediaDecodeTime = stream.readUint64();\n\t} else {\n\t\tthis.baseMediaDecodeTime = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/tfhd.js\nBoxParser.createFullBoxCtor(\"tfhd\", function(stream) {\n\tvar readBytes = 0;\n\tthis.track_id = stream.readUint32();\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET)) {\n\t\tthis.base_data_offset = stream.readUint64();\n\t\treadBytes += 8;\n\t} else {\n\t\tthis.base_data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC)) {\n\t\tthis.default_sample_description_index = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_description_index = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR)) {\n\t\tthis.default_sample_duration = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_duration = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE)) {\n\t\tthis.default_sample_size = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_size = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS)) {\n\t\tthis.default_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_flags = 0;\n\t}\n});\n\n// file:src/parsing/tfra.js\nBoxParser.createFullBoxCtor(\"tfra\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tstream.readUint24();\n\tvar tmp_byte = stream.readUint8();\n\tthis.length_size_of_traf_num = (tmp_byte >> 4) & 0x3;\n\tthis.length_size_of_trun_num = (tmp_byte >> 2) & 0x3;\n\tthis.length_size_of_sample_num = (tmp_byte) & 0x3;\n\tthis.entries = [];\n\tvar number_of_entries = stream.readUint32();\n\tfor (var i = 0; i < number_of_entries; i++) {\n\t\tif (this.version === 1) {\n\t\t\tthis.time = stream.readUint64();\n\t\t\tthis.moof_offset = stream.readUint64();\n\t\t} else {\n\t\t\tthis.time = stream.readUint32();\n\t\t\tthis.moof_offset = stream.readUint32();\n\t\t}\n\t\tthis.traf_number = stream[\"readUint\"+(8*(this.length_size_of_traf_num+1))]();\n\t\tthis.trun_number = stream[\"readUint\"+(8*(this.length_size_of_trun_num+1))]();\n\t\tthis.sample_number = stream[\"readUint\"+(8*(this.length_size_of_sample_num+1))]();\n\t}\n});\n\n// file:src/parsing/tkhd.js\nBoxParser.createFullBoxCtor(\"tkhd\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tstream.readUint32Array(2);\n\tthis.layer = stream.readInt16();\n\tthis.alternate_group = stream.readInt16();\n\tthis.volume = stream.readInt16()>>8;\n\tstream.readUint16();\n\tthis.matrix = stream.readInt32Array(9);\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});\n\n// file:src/parsing/tmax.js\nBoxParser.createBoxCtor(\"tmax\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/tmin.js\nBoxParser.createBoxCtor(\"tmin\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/totl.js\nBoxParser.createBoxCtor(\"totl\",function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpay.js\nBoxParser.createBoxCtor(\"tpay\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpyl.js\nBoxParser.createBoxCtor(\"tpyl\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/TrackGroup.js\nBoxParser.TrackGroupTypeBox.prototype.parse = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.track_group_id = stream.readUint32();\n}\n\n// file:src/parsing/trackgroups/msrc.js\nBoxParser.createTrackGroupCtor(\"msrc\");// file:src/parsing/TrakReference.js\nBoxParser.TrackReferenceTypeBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.TrackReferenceTypeBox.prototype = new BoxParser.Box();\nBoxParser.TrackReferenceTypeBox.prototype.parse = function(stream) {\n\tthis.track_ids = stream.readUint32Array((this.size-this.hdr_size)/4);\n}\n\n// file:src/parsing/tref.js\nBoxParser.trefBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = new BoxParser.TrackReferenceTypeBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.info(\"BoxParser\", \"TrackReference \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\n// file:src/parsing/trep.js\nBoxParser.createFullBoxCtor(\"trep\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/trex.js\nBoxParser.createFullBoxCtor(\"trex\", function(stream) {\n\tthis.track_id = stream.readUint32();\n\tthis.default_sample_description_index = stream.readUint32();\n\tthis.default_sample_duration = stream.readUint32();\n\tthis.default_sample_size = stream.readUint32();\n\tthis.default_sample_flags = stream.readUint32();\n});\n\n// file:src/parsing/trpy.js\nBoxParser.createBoxCtor(\"trpy\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/trun.js\nBoxParser.createFullBoxCtor(\"trun\", function(stream) {\n\tvar readBytes = 0;\n\tthis.sample_count = stream.readUint32();\n\treadBytes+= 4;\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ) {\n\t\tthis.data_offset = stream.readInt32(); //signed\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) ) {\n\t\tthis.first_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.first_sample_flags = 0;\n\t}\n\tthis.sample_duration = [];\n\tthis.sample_size = [];\n\tthis.sample_flags = [];\n\tthis.sample_composition_time_offset = [];\n\tif (this.size - this.hdr_size > readBytes) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\tthis.sample_duration[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\tthis.sample_size[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\tthis.sample_flags[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\tif (this.version === 0) {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readInt32(); //signed\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tsel.js\nBoxParser.createFullBoxCtor(\"tsel\", function(stream) {\n\tthis.switch_group = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 4)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/txtC.js\nBoxParser.createFullBoxCtor(\"txtC\", function(stream) {\n\tthis.config = stream.readCString();\n});\n\n// file:src/parsing/tyco.js\nBoxParser.createBoxCtor(\"tyco\", function(stream) {\n\tvar count = (this.size - this.hdr_size) / 4;\n\tthis.compatible_brands = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t}\n});\n\n// file:src/parsing/udes.js\nBoxParser.createFullBoxCtor(\"udes\", function(stream) {\n\tthis.lang = stream.readCString();\n\tthis.name = stream.readCString();\n\tthis.description = stream.readCString();\n\tthis.tags = stream.readCString();\n});\n\n// file:src/parsing/uncC.js\nBoxParser.createFullBoxCtor(\"uncC\", function(stream) {\n var i;\n this.profile = stream.readUint32();\n this.component_count = stream.readUint16();\n this.component_index = [];\n this.component_bit_depth_minus_one = [];\n this.component_format = [];\n this.component_align_size = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n this.component_bit_depth_minus_one.push(stream.readUint8());\n this.component_format.push(stream.readUint8());\n this.component_align_size.push(stream.readUint8());\n }\n this.sampling_type = stream.readUint8();\n this.interleave_type = stream.readUint8();\n this.block_size = stream.readUint8();\n var flags = stream.readUint8();\n this.component_little_endian = (flags >> 7) & 0x1;\n this.block_pad_lsb = (flags >> 6) & 0x1;\n this.block_little_endian = (flags >> 5) & 0x1;\n this.block_reversed = (flags >> 4) & 0x1;\n this.pad_unknown = (flags >> 3) & 0x1;\n this.pixel_size = stream.readUint8();\n this.row_align_size = stream.readUint32();\n this.tile_align_size = stream.readUint32();\n this.num_tile_cols_minus_one = stream.readUint32();\n this.num_tile_rows_minus_one = stream.readUint32();\n});\n\n// file:src/parsing/url.js\nBoxParser.createFullBoxCtor(\"url \", function(stream) {\n\tif (this.flags !== 0x000001) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/urn.js\nBoxParser.createFullBoxCtor(\"urn \", function(stream) {\n\tthis.name = stream.readCString();\n\tif (this.size - this.hdr_size - this.name.length - 1 > 0) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffLsm.js\nBoxParser.createUUIDBox(\"a5d40b30e81411ddba2f0800200c9a66\", true, false, function(stream) {\n this.LiveServerManifest = stream.readString(this.size - this.hdr_size)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n});// file:src/parsing/uuid/piff/piffPssh.js\nBoxParser.createUUIDBox(\"d08a4f1810f34a82b6c832d8aba183d3\", true, false, function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffSenc.js\nBoxParser.createUUIDBox(\"a2394f525a9b4f14a2446c427c648df4\", true, false /*, function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.AlgorithmID = stream.readUint24();\n\t\tthis.IV_size = stream.readUint8();\n\t\tthis.KID = BoxParser.parseHex16(stream);\n\t}\n\tvar sample_count = stream.readUint32();\n\tthis.samples = [];\n\tfor (var i = 0; i < sample_count; i++) {\n\t\tvar sample = {};\n\t\tsample.InitializationVector = this.readUint8Array(this.IV_size*8);\n\t\tif (this.flags & 0x2) {\n\t\t\tsample.subsamples = [];\n\t\t\tsample.NumberOfEntries = stream.readUint16();\n\t\t\tfor (var j = 0; j < sample.NumberOfEntries; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\n\t\t\t\tsample.subsamples.push(subsample);\n\t\t\t}\n\t\t}\n\t\tthis.samples.push(sample);\n\t}\n}*/);\n// file:src/parsing/uuid/piff/piffTenc.js\nBoxParser.createUUIDBox(\"8974dbce7be74c5184f97148f9882554\", true, false, function(stream) {\n\tthis.default_AlgorithmID = stream.readUint24();\n\tthis.default_IV_size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n});// file:src/parsing/uuid/piff/piffTfrf.js\nBoxParser.createUUIDBox(\"d4807ef2ca3946958e5426cb9e46a79f\", true, false, function(stream) {\n this.fragment_count = stream.readUint8();\n this.entries = [];\n\n for (var i = 0; i < this.fragment_count; i++) {\n var entry = {};\n var absolute_time = 0;\n var absolute_duration = 0;\n\n if (this.version === 1) {\n absolute_time = stream.readUint64();\n absolute_duration = stream.readUint64();\n } else {\n absolute_time = stream.readUint32();\n absolute_duration = stream.readUint32();\n }\n\n entry.absolute_time = absolute_time;\n entry.absolute_duration = absolute_duration;\n\n this.entries.push(entry);\n }\n});// file:src/parsing/uuid/piff/piffTfxd.js\nBoxParser.createUUIDBox(\"6d1d9b0542d544e680e2141daff757b2\", true, false, function(stream) {\n if (this.version === 1) {\n this.absolute_time = stream.readUint64();\n this.duration = stream.readUint64();\n } else {\n this.absolute_time = stream.readUint32();\n this.duration = stream.readUint32();\n }\n});// file:src/parsing/vmhd.js\nBoxParser.createFullBoxCtor(\"vmhd\", function(stream) {\n\tthis.graphicsmode = stream.readUint16();\n\tthis.opcolor = stream.readUint16Array(3);\n});\n\n// file:src/parsing/vpcC.js\nBoxParser.createFullBoxCtor(\"vpcC\", function (stream) {\n\tvar tmp;\n\tif (this.version === 1) {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = tmp >> 4;\n\t\tthis.chromaSubsampling = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.colourPrimaries = stream.readUint8();\n\t\tthis.transferCharacteristics = stream.readUint8();\n\t\tthis.matrixCoefficients = stream.readUint8();\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t} else {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = (tmp >> 4) & 0xF;\n\t\tthis.colorSpace = tmp & 0xF;\n\t\ttmp = stream.readUint8();\n\t\tthis.chromaSubsampling = (tmp >> 4) & 0xF;\n\t\tthis.transferFunction = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t}\n});// file:src/parsing/vttC.js\nBoxParser.createBoxCtor(\"vttC\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/vvcC.js\nBoxParser.createFullBoxCtor(\"vvcC\", function (stream) {\n var i, j;\n\n // helper object to simplify extracting individual bits\n var bitReader = {\n held_bits: undefined,\n num_held_bits: 0,\n\n stream_read_1_bytes: function (strm) {\n this.held_bits = strm.readUint8();\n this.num_held_bits = 1 * 8;\n },\n stream_read_2_bytes: function (strm) {\n this.held_bits = strm.readUint16();\n this.num_held_bits = 2 * 8;\n },\n\n extract_bits: function (num_bits) {\n var ret = (this.held_bits >> (this.num_held_bits - num_bits)) & ((1 << num_bits) - 1);\n this.num_held_bits -= num_bits;\n return ret;\n }\n };\n\n // VvcDecoderConfigurationRecord\n bitReader.stream_read_1_bytes(stream);\n bitReader.extract_bits(5); // reserved\n this.lengthSizeMinusOne = bitReader.extract_bits(2);\n this.ptl_present_flag = bitReader.extract_bits(1);\n\n if (this.ptl_present_flag) {\n bitReader.stream_read_2_bytes(stream);\n this.ols_idx = bitReader.extract_bits(9);\n this.num_sublayers = bitReader.extract_bits(3);\n this.constant_frame_rate = bitReader.extract_bits(2);\n this.chroma_format_idc = bitReader.extract_bits(2);\n\n bitReader.stream_read_1_bytes(stream);\n this.bit_depth_minus8 = bitReader.extract_bits(3);\n bitReader.extract_bits(5); // reserved\n\n // VvcPTLRecord\n {\n bitReader.stream_read_2_bytes(stream);\n bitReader.extract_bits(2); // reserved\n this.num_bytes_constraint_info = bitReader.extract_bits(6);\n this.general_profile_idc = bitReader.extract_bits(7);\n this.general_tier_flag = bitReader.extract_bits(1);\n\n this.general_level_idc = stream.readUint8();\n\n bitReader.stream_read_1_bytes(stream);\n this.ptl_frame_only_constraint_flag = bitReader.extract_bits(1);\n this.ptl_multilayer_enabled_flag = bitReader.extract_bits(1);\n\n this.general_constraint_info = new Uint8Array(this.num_bytes_constraint_info);\n if (this.num_bytes_constraint_info) {\n for (i = 0; i < this.num_bytes_constraint_info - 1; i++) {\n var cnstr1 = bitReader.extract_bits(6);\n bitReader.stream_read_1_bytes(stream);\n var cnstr2 = bitReader.extract_bits(2);\n\n this.general_constraint_info[i] = ((cnstr1 << 2) | cnstr2);\n }\n this.general_constraint_info[this.num_bytes_constraint_info - 1] = bitReader.extract_bits(6);\n } else {\n //forbidden in spec!\n bitReader.extract_bits(6);\n }\n\n if (this.num_sublayers > 1) {\n bitReader.stream_read_1_bytes(stream);\n this.ptl_sublayer_present_mask = 0;\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n var val = bitReader.extract_bits(1);\n this.ptl_sublayer_present_mask |= val << j;\n }\n for (j = this.num_sublayers; j <= 8 && this.num_sublayers > 1; ++j) {\n bitReader.extract_bits(1); // ptl_reserved_zero_bit\n }\n\n this.sublayer_level_idc = [];\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n if (this.ptl_sublayer_present_mask & (1 << j)) {\n this.sublayer_level_idc[j] = stream.readUint8();\n }\n }\n }\n\n this.ptl_num_sub_profiles = stream.readUint8();\n this.general_sub_profile_idc = [];\n if (this.ptl_num_sub_profiles) {\n for (i = 0; i < this.ptl_num_sub_profiles; i++) {\n this.general_sub_profile_idc.push(stream.readUint32());\n }\n }\n } // end VvcPTLRecord\n\n this.max_picture_width = stream.readUint16();\n this.max_picture_height = stream.readUint16();\n this.avg_frame_rate = stream.readUint16();\n }\n\n var VVC_NALU_OPI = 12;\n var VVC_NALU_DEC_PARAM = 13;\n\n this.nalu_arrays = [];\n var num_of_arrays = stream.readUint8();\n for (i = 0; i < num_of_arrays; i++) {\n var nalu_array = [];\n this.nalu_arrays.push(nalu_array);\n\n bitReader.stream_read_1_bytes(stream);\n nalu_array.completeness = bitReader.extract_bits(1);\n bitReader.extract_bits(2); // reserved\n nalu_array.nalu_type = bitReader.extract_bits(5);\n\n var numNalus = 1;\n if (nalu_array.nalu_type != VVC_NALU_DEC_PARAM && nalu_array.nalu_type != VVC_NALU_OPI) {\n numNalus = stream.readUint16();\n }\n\n for (j = 0; j < numNalus; j++) {\n var len = stream.readUint16();\n nalu_array.push({\n data: stream.readUint8Array(len),\n length: len\n });\n }\n }\n});\n// file:src/parsing/vvnC.js\nBoxParser.createFullBoxCtor(\"vvnC\", function (stream) {\n // VvcNALUConfigBox\n var tmp = strm.readUint8();\n this.lengthSizeMinusOne = (tmp & 0x3);\n});\n// file:src/box-codecs.js\nBoxParser.SampleEntry.prototype.isVideo = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isAudio = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isSubtitle = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isMetadata = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isHint = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.getCodec = function() {\n\treturn this.type.replace('.','');\n}\n\nBoxParser.SampleEntry.prototype.getWidth = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getHeight = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getChannelCount = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleRate = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleSize = function() {\n\treturn \"\";\n}\n\nBoxParser.VisualSampleEntry.prototype.isVideo = function() {\n\treturn true;\n}\n\nBoxParser.VisualSampleEntry.prototype.getWidth = function() {\n\treturn this.width;\n}\n\nBoxParser.VisualSampleEntry.prototype.getHeight = function() {\n\treturn this.height;\n}\n\nBoxParser.AudioSampleEntry.prototype.isAudio = function() {\n\treturn true;\n}\n\nBoxParser.AudioSampleEntry.prototype.getChannelCount = function() {\n\treturn this.channel_count;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleRate = function() {\n\treturn this.samplerate;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleSize = function() {\n\treturn this.samplesize;\n}\n\nBoxParser.SubtitleSampleEntry.prototype.isSubtitle = function() {\n\treturn true;\n}\n\nBoxParser.MetadataSampleEntry.prototype.isMetadata = function() {\n\treturn true;\n}\n\n\nBoxParser.decimalToHex = function(d, padding) {\n\tvar hex = Number(d).toString(16);\n\tpadding = typeof (padding) === \"undefined\" || padding === null ? padding = 2 : padding;\n\twhile (hex.length < padding) {\n\t\thex = \"0\" + hex;\n\t}\n\treturn hex;\n}\n\nBoxParser.avc1SampleEntry.prototype.getCodec =\nBoxParser.avc2SampleEntry.prototype.getCodec =\nBoxParser.avc3SampleEntry.prototype.getCodec =\nBoxParser.avc4SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.avcC) {\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(this.avcC.AVCProfileIndication)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.profile_compatibility)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.AVCLevelIndication);\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.hev1SampleEntry.prototype.getCodec =\nBoxParser.hvc1SampleEntry.prototype.getCodec = function() {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.hvcC) {\n\t\tbaseCodec += '.';\n\t\tswitch (this.hvcC.general_profile_space) {\n\t\t\tcase 0:\n\t\t\t\tbaseCodec += '';\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tbaseCodec += 'A';\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbaseCodec += 'B';\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbaseCodec += 'C';\n\t\t\t\tbreak;\n\t\t}\n\t\tbaseCodec += this.hvcC.general_profile_idc;\n\t\tbaseCodec += '.';\n\t\tvar val = this.hvcC.general_profile_compatibility;\n\t\tvar reversed = 0;\n\t\tfor (i=0; i<32; i++) {\n\t\t\treversed |= val & 1;\n\t\t\tif (i==31) break;\n\t\t\treversed <<= 1;\n\t\t\tval >>=1;\n\t\t}\n\t\tbaseCodec += BoxParser.decimalToHex(reversed, 0);\n\t\tbaseCodec += '.';\n\t\tif (this.hvcC.general_tier_flag === 0) {\n\t\t\tbaseCodec += 'L';\n\t\t} else {\n\t\t\tbaseCodec += 'H';\n\t\t}\n\t\tbaseCodec += this.hvcC.general_level_idc;\n\t\tvar hasByte = false;\n\t\tvar constraint_string = \"\";\n\t\tfor (i = 5; i >= 0; i--) {\n\t\t\tif (this.hvcC.general_constraint_indicator[i] || hasByte) {\n\t\t\t\tconstraint_string = \".\"+BoxParser.decimalToHex(this.hvcC.general_constraint_indicator[i], 0)+constraint_string;\n\t\t\t\thasByte = true;\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.vvc1SampleEntry.prototype.getCodec =\nBoxParser.vvi1SampleEntry.prototype.getCodec = function () {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.vvcC) {\n\t\tbaseCodec += '.' + this.vvcC.general_profile_idc;\n\t\tif (this.vvcC.general_tier_flag) {\n\t\t\tbaseCodec += '.H';\n\t\t} else {\n\t\t\tbaseCodec += '.L';\n\t\t}\n\t\tbaseCodec += this.vvcC.general_level_idc;\n\n\t\tvar constraint_string = \"\";\n\t\tif (this.vvcC.general_constraint_info) {\n\t\t\tvar bytes = [];\n\t\t\tvar byte = 0;\n\t\t\tbyte |= this.vvcC.ptl_frame_only_constraint << 7;\n\t\t\tbyte |= this.vvcC.ptl_multilayer_enabled << 6;\n\t\t\tvar last_nonzero;\n\t\t\tfor (i = 0; i < this.vvcC.general_constraint_info.length; ++i) {\n\t\t\t\tbyte |= (this.vvcC.general_constraint_info[i] >> 2) & 0x3f;\n\t\t\t\tbytes.push(byte);\n\t\t\t\tif (byte) {\n\t\t\t\t\tlast_nonzero = i;\n\t\t\t\t}\n\n\t\t\t\tbyte = (this.vvcC.general_constraint_info[i] >> 2) & 0x03;\n\t\t\t}\n\n\t\t\tif (last_nonzero === undefined) {\n\t\t\t\tconstraint_string = \".CA\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconstraint_string = \".C\"\n\t\t\t\tvar base32_chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n\t\t\t\tvar held_bits = 0;\n\t\t\t\tvar num_held_bits = 0;\n\t\t\t\tfor (i = 0; i <= last_nonzero; ++i) {\n\t\t\t\t\theld_bits = (held_bits << 8) | bytes[i];\n\t\t\t\t\tnum_held_bits += 8;\n\n\t\t\t\t\twhile (num_held_bits >= 5) {\n\t\t\t\t\t\tvar val = (held_bits >> (num_held_bits - 5)) & 0x1f;\n\t\t\t\t\t\tconstraint_string += base32_chars[val];\n\n\t\t\t\t\t\tnum_held_bits -= 5;\n\t\t\t\t\t\theld_bits &= (1 << num_held_bits) - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (num_held_bits) {\n\t\t\t\t\theld_bits <<= (5 - num_held_bits); // right-pad with zeros to 5 bits (is this correct?)\n\t\t\t\t\tconstraint_string += base32_chars[held_bits & 0x1f];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.mp4aSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.esds && this.esds.esd) {\n\t\tvar oti = this.esds.esd.getOTI();\n\t\tvar dsi = this.esds.esd.getAudioConfig();\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(oti)+(dsi ? \".\"+dsi: \"\");\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.stxtSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif(this.mime_format) {\n\t\treturn baseCodec + \".\" + this.mime_format;\n\t} else {\n\t\treturn baseCodec\n\t}\n}\n\nBoxParser.vp08SampleEntry.prototype.getCodec =\nBoxParser.vp09SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.vpcC.level;\n\tif (level == 0) {\n\t\tlevel = \"00\";\n\t}\n\tvar bitDepth = this.vpcC.bitDepth;\n\tif (bitDepth == 8) {\n\t\tbitDepth = \"08\";\n\t}\n\treturn baseCodec + \".0\" + this.vpcC.profile + \".\" + level + \".\" + bitDepth;\n}\n\nBoxParser.av01SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.av1C.seq_level_idx_0;\n\tif (level < 10) {\n\t\tlevel = \"0\" + level;\n\t}\n\tvar bitdepth;\n\tif (this.av1C.seq_profile === 2 && this.av1C.high_bitdepth === 1) {\n\t\tbitdepth = (this.av1C.twelve_bit === 1) ? \"12\" : \"10\";\n\t} else if ( this.av1C.seq_profile <= 2 ) {\n\t\tbitdepth = (this.av1C.high_bitdepth === 1) ? \"10\" : \"08\";\n\t}\n\t// TODO need to parse the SH to find color config\n\treturn baseCodec+\".\"+this.av1C.seq_profile+\".\"+level+(this.av1C.seq_tier_0?\"H\":\"M\")+\".\"+bitdepth;//+\".\"+this.av1C.monochrome+\".\"+this.av1C.chroma_subsampling_x+\"\"+this.av1C.chroma_subsampling_y+\"\"+this.av1C.chroma_sample_position;\n}\n// file:src/box-write.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.writeHeader = function(stream, msg) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\tLog.debug(\"BoxWriter\", \"Writing box \"+this.type+\" of size: \"+this.size+\" at position \"+stream.getPosition()+(msg || \"\"));\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint32(1);\n\t} else {\n\t\tthis.sizePosition = stream.getPosition();\n\t\tstream.writeUint32(this.size);\n\t}\n\tstream.writeString(this.type, null, 4);\n\tif (this.type === \"uuid\") {\n\t\tstream.writeUint8Array(this.uuid);\n\t}\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint64(this.size);\n\t} \n}\n\nBoxParser.FullBox.prototype.writeHeader = function(stream) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream, \" v=\"+this.version+\" f=\"+this.flags);\n\tstream.writeUint8(this.version);\n\tstream.writeUint24(this.flags);\n}\n\nBoxParser.Box.prototype.write = function(stream) {\n\tif (this.type === \"mdat\") {\n\t\t/* TODO: fix this */\n\t\tif (this.data) {\n\t\t\tthis.size = this.data.length;\n\t\t\tthis.writeHeader(stream);\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t} else {\n\t\tthis.size = (this.data ? this.data.length : 0);\n\t\tthis.writeHeader(stream);\n\t\tif (this.data) {\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t}\n}\n\nBoxParser.ContainerBox.prototype.write = function(stream) {\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tfor (var i=0; i= 2) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tstream.writeUint32(this.entries.length);\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tstream.writeUint32(entry.description_length);\n\t\t\t}\n\t\t}\n\t\tentry.write(stream);\n\t}\n}\n\n\n// file:src/writing/sidx.js\nBoxParser.sidxBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+2+2+12*this.references.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.reference_ID);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.earliest_presentation_time);\n\tstream.writeUint32(this.first_offset);\n\tstream.writeUint16(0);\n\tstream.writeUint16(this.references.length);\n\tfor (var i = 0; i < this.references.length; i++) {\n\t\tvar ref = this.references[i];\n\t\tstream.writeUint32(ref.reference_type << 31 | ref.referenced_size);\n\t\tstream.writeUint32(ref.subsegment_duration);\n\t\tstream.writeUint32(ref.starts_with_SAP << 31 | ref.SAP_type << 28 | ref.SAP_delta_time);\n\t}\n}\n\n// file:src/writing/smhd.js\nBoxParser.smhdBox.prototype.write = function(stream) {\n var i;\n this.version = 0;\n this.flags = 1;\n this.size = 4;\n this.writeHeader(stream);\n stream.writeUint16(this.balance);\n stream.writeUint16(0);\n}\n// file:src/writing/stco.js\nBoxParser.stcoBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tstream.writeUint32Array(this.chunk_offsets);\n}\n\n// file:src/writing/stsc.js\nBoxParser.stscBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+12*this.first_chunk.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.first_chunk.length);\n\tfor(i=0; i 0) {\n\t\ti = 0;\n\t\twhile (i+1 < this.sample_sizes.length) {\n\t\t\tif (this.sample_sizes[i+1] !== this.sample_sizes[0]) {\n\t\t\t\tconstant = false;\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconstant = false;\n\t}\n\tthis.size = 8;\n\tif (!constant) {\n\t\tthis.size += 4*this.sample_sizes.length;\n\t}\n\tthis.writeHeader(stream);\n\tif (!constant) {\n\t\tstream.writeUint32(0);\n\t} else {\n\t\tstream.writeUint32(this.sample_sizes[0]);\n\t}\n\tstream.writeUint32(this.sample_sizes.length);\n\tif (!constant) {\n\t\tstream.writeUint32Array(this.sample_sizes);\n\t}\t\n}\n\n// file:src/writing/stts.js\nBoxParser.sttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i UINT32_MAX ? 1 : 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tif (this.version === 1) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.version === 1) {\n\t\tstream.writeUint64(this.baseMediaDecodeTime);\n\t} else {\n\t\tstream.writeUint32(this.baseMediaDecodeTime);\n\t}\n}\n\n// file:src/writing/tfhd.js\nBoxParser.tfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tthis.size += 8;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tstream.writeUint64(this.base_data_offset);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tstream.writeUint32(this.default_sample_duration);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tstream.writeUint32(this.default_sample_size);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tstream.writeUint32(this.default_sample_flags);\n\t}\n}\n\n// file:src/writing/tkhd.js\nBoxParser.tkhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\t//this.flags = 0;\n\tthis.size = 4*18+2*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeInt16(this.layer);\n\tstream.writeInt16(this.alternate_group);\n\tstream.writeInt16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeInt32Array(this.matrix);\n\tstream.writeUint32(this.width);\n\tstream.writeUint32(this.height);\n}\n\n// file:src/writing/trex.js\nBoxParser.trexBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(this.default_sample_description_index);\n\tstream.writeUint32(this.default_sample_duration);\n\tstream.writeUint32(this.default_sample_size);\n\tstream.writeUint32(this.default_sample_flags);\n}\n\n// file:src/writing/trun.js\nBoxParser.trunBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\tthis.size += 4*this.sample_duration.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\tthis.size += 4*this.sample_size.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\tthis.size += 4*this.sample_flags.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\tthis.size += 4*this.sample_composition_time_offset.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_count);\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.data_offset_position = stream.getPosition();\n\t\tstream.writeInt32(this.data_offset); //signed\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tstream.writeUint32(this.first_sample_flags);\n\t}\n\tfor (var i = 0; i < this.sample_count; i++) {\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\tstream.writeUint32(this.sample_duration[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\tstream.writeUint32(this.sample_size[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\tstream.writeUint32(this.sample_flags[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tstream.writeUint32(this.sample_composition_time_offset[i]);\n\t\t\t} else {\n\t\t\t\tstream.writeInt32(this.sample_composition_time_offset[i]); //signed\n\t\t\t}\n\t\t}\n\t}\t\t\n}\n\n// file:src/writing/url.js\nBoxParser[\"url Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tif (this.location) {\n\t\tthis.flags = 0;\n\t\tthis.size = this.location.length+1;\n\t} else {\n\t\tthis.flags = 0x000001;\n\t\tthis.size = 0;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/urn.js\nBoxParser[\"urn Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.name.length+1+(this.location ? this.location.length+1 : 0);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.name);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/vmhd.js\nBoxParser.vmhdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 1;\n\tthis.size = 8;\n\tthis.writeHeader(stream);\n\tstream.writeUint16(this.graphicsmode);\n\tstream.writeUint16Array(this.opcolor);\n}\n\n// file:src/box-unpack.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.cttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tsamples[k].pts = samples[k].dts + this.sample_offsets[i];\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.sttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tif (k === 0) {\n\t\t\t\tsamples[k].dts = 0;\n\t\t\t} else {\n\t\t\t\tsamples[k].dts = samples[k-1].dts + this.sample_deltas[i];\n\t\t\t}\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.stcoBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.chunk_offsets.length; i++) {\n\t\tsamples[i].offset = this.chunk_offsets[i];\n\t}\n}\n\nBoxParser.stscBox.prototype.unpack = function(samples) {\n\tvar i, j, k, l, m;\n\tl = 0;\n\tm = 0;\n\tfor (i = 0; i < this.first_chunk.length; i++) {\n\t\tfor (j = 0; j < (i+1 < this.first_chunk.length ? this.first_chunk[i+1] : Infinity); j++) {\n\t\t\tm++;\n\t\t\tfor (k = 0; k < this.samples_per_chunk[i]; k++) {\n\t\t\t\tif (samples[l]) {\n\t\t\t\t\tsamples[l].description_index = this.sample_description_index[i];\n\t\t\t\t\tsamples[l].chunk_index = m;\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tl++;\n\t\t\t}\t\t\t\n\t\t}\n\t}\n}\n\nBoxParser.stszBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.sample_sizes.length; i++) {\n\t\tsamples[i].size = this.sample_sizes[i];\n\t}\n}\n// file:src/box-diff.js\n\nBoxParser.DIFF_BOXES_PROP_NAMES = [ \"boxes\", \"entries\", \"references\", \"subsamples\",\n\t\t\t\t\t \t \"items\", \"item_infos\", \"extents\", \"associations\",\n\t\t\t\t\t \t \"subsegments\", \"ranges\", \"seekLists\", \"seekPoints\",\n\t\t\t\t\t \t \"esd\", \"levels\"];\n\nBoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES = [ \"compatible_brands\", \"matrix\", \"opcolor\", \"sample_counts\", \"sample_counts\", \"sample_deltas\",\n\"first_chunk\", \"samples_per_chunk\", \"sample_sizes\", \"chunk_offsets\", \"sample_offsets\", \"sample_description_index\", \"sample_duration\" ];\n\nBoxParser.boxEqualFields = function(box_a, box_b) {\n\tif (box_a && !box_b) return false;\n\tvar prop;\n\tfor (prop in box_a) {\n\t\tif (BoxParser.DIFF_BOXES_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\tcontinue;\n\t\t// } else if (excluded_fields && excluded_fields.indexOf(prop) > -1) {\n\t\t// \tcontinue;\n\t\t} else if (box_a[prop] instanceof BoxParser.Box || box_b[prop] instanceof BoxParser.Box) {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"undefined\" || typeof box_b[prop] === \"undefined\") {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"function\" || typeof box_b[prop] === \"function\") {\n\t\t\tcontinue;\n\t\t} else if (\n\t\t\t(box_a.subBoxNames && box_a.subBoxNames.indexOf(prop.slice(0,4)) > -1) ||\n\t\t\t(box_b.subBoxNames && box_b.subBoxNames.indexOf(prop.slice(0,4)) > -1)) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tif (prop === \"data\" || prop === \"start\" || prop === \"size\" || prop === \"creation_time\" || prop === \"modification_time\") {\n\t\t\t\tcontinue;\n\t\t\t} else if (BoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tif (box_a[prop] !== box_b[prop]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\nBoxParser.boxEqual = function(box_a, box_b) {\n\tif (!BoxParser.boxEqualFields(box_a, box_b)) {\n\t\treturn false;\n\t}\n\tfor (var j = 0; j < BoxParser.DIFF_BOXES_PROP_NAMES.length; j++) {\n\t\tvar name = BoxParser.DIFF_BOXES_PROP_NAMES[j];\n\t\tif (box_a[name] && box_b[name]) {\n\t\t\tif (!BoxParser.boxEqual(box_a[name], box_b[name])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}// file:src/text-mp4.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar VTTin4Parser = function() {\t\n}\n\nVTTin4Parser.prototype.parseSample = function(data) {\n\tvar cues, cue;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tcues = [];\n\twhile (!stream.isEos()) {\n\t\tcue = BoxParser.parseOneBox(stream, false);\n\t\tif (cue.code === BoxParser.OK && cue.box.type === \"vttc\") {\n\t\t\tcues.push(cue.box);\n\t\t}\t\t\n\t}\n\treturn cues;\n}\n\nVTTin4Parser.prototype.getText = function (startTime, endTime, data) {\n\tfunction pad(n, width, z) {\n\t z = z || '0';\n\t n = n + '';\n\t return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n\t}\n\tfunction secToTimestamp(insec) {\n\t\tvar h = Math.floor(insec/3600);\n\t\tvar m = Math.floor((insec - h*3600)/60);\n\t\tvar s = Math.floor(insec - h*3600 - m*60);\n\t\tvar ms = Math.floor((insec - h*3600 - m*60 - s)*1000);\n\t\treturn \"\"+pad(h, 2)+\":\"+pad(m,2)+\":\"+pad(s, 2)+\".\"+pad(ms, 3);\n\t}\n\tvar cues = this.parseSample(data);\n\tvar string = \"\";\n\tfor (var i = 0; i < cues.length; i++) {\n\t\tvar cueIn4 = cues[i];\n\t\tstring += secToTimestamp(startTime)+\" --> \"+secToTimestamp(endTime)+\"\\r\\n\";\n\t\tstring += cueIn4.payl.text;\n\t}\n\treturn string;\n}\n\nvar XMLSubtitlein4Parser = function() {\t\n}\n\nXMLSubtitlein4Parser.prototype.parseSample = function(sample) {\n\tvar res = {};\t\n\tvar i;\n\tres.resources = [];\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\tif (!sample.subsamples || sample.subsamples.length === 0) {\n\t\tres.documentString = stream.readString(sample.data.length);\n\t} else {\n\t\tres.documentString = stream.readString(sample.subsamples[0].size);\n\t\tif (sample.subsamples.length > 1) {\n\t\t\tfor (i = 1; i < sample.subsamples.length; i++) {\n\t\t\t\tres.resources[i] = stream.readUint8Array(sample.subsamples[i].size);\n\t\t\t}\n\t\t}\n\t}\n\tif (typeof (DOMParser) !== \"undefined\") {\n\t\tres.document = (new DOMParser()).parseFromString(res.documentString, \"application/xml\");\n\t}\n\treturn res;\n}\n\nvar Textin4Parser = function() {\t\n}\n\nTextin4Parser.prototype.parseSample = function(sample) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\ttextString = stream.readString(sample.data.length);\n\treturn textString;\n}\n\nTextin4Parser.prototype.parseConfig = function(data) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tstream.readUint32(); // version & flags\n\ttextString = stream.readCString();\n\treturn textString;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.XMLSubtitlein4Parser = XMLSubtitlein4Parser;\n\texports.Textin4Parser = Textin4Parser;\n}\n// file:src/isofile.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar ISOFile = function (stream) {\n\t/* MutiBufferStream object used to parse boxes */\n\tthis.stream = stream || new MultiBufferStream();\n\t/* Array of all boxes (in order) found in the file */\n\tthis.boxes = [];\n\t/* Array of all mdats */\n\tthis.mdats = [];\n\t/* Array of all moofs */\n\tthis.moofs = [];\n\t/* Boolean indicating if the file is compatible with progressive parsing (moov first) */\n\tthis.isProgressive = false;\n\t/* Boolean used to fire moov start event only once */\n\tthis.moovStartFound = false;\n\t/* Callback called when the moov parsing starts */\n\tthis.onMoovStart = null;\n\t/* Boolean keeping track of the call to onMoovStart, to avoid double calls */\n\tthis.moovStartSent = false;\n\t/* Callback called when the moov is entirely parsed */\n\tthis.onReady = null;\n\t/* Boolean keeping track of the call to onReady, to avoid double calls */\n\tthis.readySent = false;\n\t/* Callback to call when segments are ready */\n\tthis.onSegment = null;\n\t/* Callback to call when samples are ready */\n\tthis.onSamples = null;\n\t/* Callback to call when there is an error in the parsing or processing of samples */\n\tthis.onError = null;\n\t/* Boolean indicating if the moov box run-length encoded tables of sample information have been processed */\n\tthis.sampleListBuilt = false;\n\t/* Array of Track objects for which fragmentation of samples is requested */\n\tthis.fragmentedTracks = [];\n\t/* Array of Track objects for which extraction of samples is requested */\n\tthis.extractedTracks = [];\n\t/* Boolean indicating that fragmention is ready */\n\tthis.isFragmentationInitialized = false;\n\t/* Boolean indicating that fragmented has started */\n\tthis.sampleProcessingStarted = false;\n\t/* Number of the next 'moof' to generate when fragmenting */\n\tthis.nextMoofNumber = 0;\n\t/* Boolean indicating if the initial list of items has been produced */\n\tthis.itemListBuilt = false;\n\t/* Callback called when the sidx box is entirely parsed */\n\tthis.onSidx = null;\n\t/* Boolean keeping track of the call to onSidx, to avoid double calls */\n\tthis.sidxSent = false;\n}\n\nISOFile.prototype.setSegmentOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar fragTrack = {};\n\t\tthis.fragmentedTracks.push(fragTrack);\n\t\tfragTrack.id = id;\n\t\tfragTrack.user = user;\n\t\tfragTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\tfragTrack.segmentStream = null;\n\t\tfragTrack.nb_samples = 1000;\n\t\tfragTrack.rapAlignement = true;\n\t\tif (options) {\n\t\t\tif (options.nbSamples) fragTrack.nb_samples = options.nbSamples;\n\t\t\tif (options.rapAlignement) fragTrack.rapAlignement = options.rapAlignement;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetSegmentOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar fragTrack = this.fragmentedTracks[i];\n\t\tif (fragTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.fragmentedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.setExtractionOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar extractTrack = {};\n\t\tthis.extractedTracks.push(extractTrack);\n\t\textractTrack.id = id;\n\t\textractTrack.user = user;\n\t\textractTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\textractTrack.nb_samples = 1000;\n\t\textractTrack.samples = [];\n\t\tif (options) {\n\t\t\tif (options.nbSamples) extractTrack.nb_samples = options.nbSamples;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetExtractionOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.extractedTracks.length; i++) {\n\t\tvar extractTrack = this.extractedTracks[i];\n\t\tif (extractTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.extractedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.parse = function() {\n\tvar found;\n\tvar ret;\n\tvar box;\n\tvar parseBoxHeadersOnly = false;\n\n\tif (this.restoreParsePosition)\t{\n\t\tif (!this.restoreParsePosition()) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\twhile (true) {\n\n\t\tif (this.hasIncompleteMdat && this.hasIncompleteMdat()) {\n\t\t\tif (this.processIncompleteMdat()) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.saveParsePosition)\t{\n\t\t\t\tthis.saveParsePosition();\n\t\t\t}\n\t\t\tret = BoxParser.parseOneBox(this.stream, parseBoxHeadersOnly);\n\t\t\tif (ret.code === BoxParser.ERR_NOT_ENOUGH_DATA) {\n\t\t\t\tif (this.processIncompleteBox) {\n\t\t\t\t\tif (this.processIncompleteBox(ret)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar box_type;\n\t\t\t\t/* the box is entirely parsed */\n\t\t\t\tbox = ret.box;\n\t\t\t\tbox_type = (box.type !== \"uuid\" ? box.type : box.uuid);\n\t\t\t\t/* store the box in the 'boxes' array to preserve box order (for file rewrite if needed) */\n\t\t\t\tthis.boxes.push(box);\n\t\t\t\t/* but also store box in a property for more direct access */\n\t\t\t\tswitch (box_type) {\n\t\t\t\t\tcase \"mdat\":\n\t\t\t\t\t\tthis.mdats.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moof\":\n\t\t\t\t\t\tthis.moofs.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moov\":\n\t\t\t\t\t\tthis.moovStartFound = true;\n\t\t\t\t\t\tif (this.mdats.length === 0) {\n\t\t\t\t\t\t\tthis.isProgressive = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/* no break */\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (this[box_type] !== undefined) {\n\t\t\t\t\t\t\tLog.warn(\"ISOFile\", \"Duplicate Box of type: \"+box_type+\", overriding previous occurrence\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (this.updateUsedBytes) {\n\t\t\t\t\tthis.updateUsedBytes(box, ret);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.checkBuffer = function (ab) {\n\tif (ab === null || ab === undefined) {\n\t\tthrow(\"Buffer must be defined and non empty\");\n\t}\n\tif (ab.fileStart === undefined) {\n\t\tthrow(\"Buffer must have a fileStart property\");\n\t}\n\tif (ab.byteLength === 0) {\n\t\tLog.warn(\"ISOFile\", \"Ignoring empty buffer (fileStart: \"+ab.fileStart+\")\");\n\t\tthis.stream.logBufferLevel();\n\t\treturn false;\n\t}\n\tLog.info(\"ISOFile\", \"Processing buffer (fileStart: \"+ab.fileStart+\")\");\n\n\t/* mark the bytes in the buffer as not being used yet */\n\tab.usedBytes = 0;\n\tthis.stream.insertBuffer(ab);\n\tthis.stream.logBufferLevel();\n\n\tif (!this.stream.initialized()) {\n\t\tLog.warn(\"ISOFile\", \"Not ready to start parsing\");\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/* Processes a new ArrayBuffer (with a fileStart property)\n Returns the next expected file position, or undefined if not ready to parse */\nISOFile.prototype.appendBuffer = function(ab, last) {\n\tvar nextFileStart;\n\tif (!this.checkBuffer(ab)) {\n\t\treturn;\n\t}\n\n\t/* Parse whatever is in the existing buffers */\n\tthis.parse();\n\n\t/* Check if the moovStart callback needs to be called */\n\tif (this.moovStartFound && !this.moovStartSent) {\n\t\tthis.moovStartSent = true;\n\t\tif (this.onMoovStart) this.onMoovStart();\n\t}\n\n\tif (this.moov) {\n\t\t/* A moov box has been entirely parsed */\n\n\t\t/* if this is the first call after the moov is found we initialize the list of samples (may be empty in fragmented files) */\n\t\tif (!this.sampleListBuilt) {\n\t\t\tthis.buildSampleLists();\n\t\t\tthis.sampleListBuilt = true;\n\t\t}\n\n\t\t/* We update the sample information if there are any new moof boxes */\n\t\tthis.updateSampleLists();\n\n\t\t/* If the application needs to be informed that the 'moov' has been found,\n\t\t we create the information object and callback the application */\n\t\tif (this.onReady && !this.readySent) {\n\t\t\tthis.readySent = true;\n\t\t\tthis.onReady(this.getInfo());\n\t\t}\n\n\t\t/* See if any sample extraction or segment creation needs to be done with the available samples */\n\t\tthis.processSamples(last);\n\n\t\t/* Inform about the best range to fetch next */\n\t\tif (this.nextSeekPosition) {\n\t\t\tnextFileStart = this.nextSeekPosition;\n\t\t\tthis.nextSeekPosition = undefined;\n\t\t} else {\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t}\n\t\tif (this.stream.getEndFilePositionAfter) {\n\t\t\tnextFileStart = this.stream.getEndFilePositionAfter(nextFileStart);\n\t\t}\n\t} else {\n\t\tif (this.nextParsePosition) {\n\t\t\t/* moov has not been parsed but the first buffer was received,\n\t\t\t the next fetch should probably be the next box start */\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t} else {\n\t\t\t/* No valid buffer has been parsed yet, we cannot know what to parse next */\n\t\t\tnextFileStart = 0;\n\t\t}\n\t}\n\tif (this.sidx) {\n\t\tif (this.onSidx && !this.sidxSent) {\n\t\t\tthis.onSidx(this.sidx);\n\t\t\tthis.sidxSent = true;\n\t\t}\n\t}\n\tif (this.meta) {\n\t\tif (this.flattenItemInfo && !this.itemListBuilt) {\n\t\t\tthis.flattenItemInfo();\n\t\t\tthis.itemListBuilt = true;\n\t\t}\n\t\tif (this.processItems) {\n\t\t\tthis.processItems(this.onItem);\n\t\t}\n\t}\n\n\tif (this.stream.cleanBuffers) {\n\t\tLog.info(\"ISOFile\", \"Done processing buffer (fileStart: \"+ab.fileStart+\") - next buffer to fetch should have a fileStart position of \"+nextFileStart);\n\t\tthis.stream.logBufferLevel();\n\t\tthis.stream.cleanBuffers();\n\t\tthis.stream.logBufferLevel(true);\n\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t}\n\treturn nextFileStart;\n}\n\nISOFile.prototype.getInfo = function() {\n\tvar i, j;\n\tvar movie = {};\n\tvar trak;\n\tvar track;\n\tvar ref;\n\tvar sample_desc;\n\tvar _1904 = (new Date('1904-01-01T00:00:00Z').getTime());\n\n\tif (this.moov) {\n\t\tmovie.hasMoov = true;\n\t\tmovie.duration = this.moov.mvhd.duration;\n\t\tmovie.timescale = this.moov.mvhd.timescale;\n\t\tmovie.isFragmented = (this.moov.mvex != null);\n\t\tif (movie.isFragmented && this.moov.mvex.mehd) {\n\t\t\tmovie.fragment_duration = this.moov.mvex.mehd.fragment_duration;\n\t\t}\n\t\tmovie.isProgressive = this.isProgressive;\n\t\tmovie.hasIOD = (this.moov.iods != null);\n\t\tmovie.brands = [];\n\t\tmovie.brands.push(this.ftyp.major_brand);\n\t\tmovie.brands = movie.brands.concat(this.ftyp.compatible_brands);\n\t\tmovie.created = new Date(_1904+this.moov.mvhd.creation_time*1000);\n\t\tmovie.modified = new Date(_1904+this.moov.mvhd.modification_time*1000);\n\t\tmovie.tracks = [];\n\t\tmovie.audioTracks = [];\n\t\tmovie.videoTracks = [];\n\t\tmovie.subtitleTracks = [];\n\t\tmovie.metadataTracks = [];\n\t\tmovie.hintTracks = [];\n\t\tmovie.otherTracks = [];\n\t\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\t\ttrak = this.moov.traks[i];\n\t\t\tsample_desc = trak.mdia.minf.stbl.stsd.entries[0];\n\t\t\ttrack = {};\n\t\t\tmovie.tracks.push(track);\n\t\t\ttrack.id = trak.tkhd.track_id;\n\t\t\ttrack.name = trak.mdia.hdlr.name;\n\t\t\ttrack.references = [];\n\t\t\tif (trak.tref) {\n\t\t\t\tfor (j = 0; j < trak.tref.boxes.length; j++) {\n\t\t\t\t\tref = {};\n\t\t\t\t\ttrack.references.push(ref);\n\t\t\t\t\tref.type = trak.tref.boxes[j].type;\n\t\t\t\t\tref.track_ids = trak.tref.boxes[j].track_ids;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (trak.edts) {\n\t\t\t\ttrack.edits = trak.edts.elst.entries;\n\t\t\t}\n\t\t\ttrack.created = new Date(_1904+trak.tkhd.creation_time*1000);\n\t\t\ttrack.modified = new Date(_1904+trak.tkhd.modification_time*1000);\n\t\t\ttrack.movie_duration = trak.tkhd.duration;\n\t\t\ttrack.movie_timescale = movie.timescale;\n\t\t\ttrack.layer = trak.tkhd.layer;\n\t\t\ttrack.alternate_group = trak.tkhd.alternate_group;\n\t\t\ttrack.volume = trak.tkhd.volume;\n\t\t\ttrack.matrix = trak.tkhd.matrix;\n\t\t\ttrack.track_width = trak.tkhd.width/(1<<16);\n\t\t\ttrack.track_height = trak.tkhd.height/(1<<16);\n\t\t\ttrack.timescale = trak.mdia.mdhd.timescale;\n\t\t\ttrack.cts_shift = trak.mdia.minf.stbl.cslg;\n\t\t\ttrack.duration = trak.mdia.mdhd.duration;\n\t\t\ttrack.samples_duration = trak.samples_duration;\n\t\t\ttrack.codec = sample_desc.getCodec();\n\t\t\ttrack.kind = (trak.udta && trak.udta.kinds.length ? trak.udta.kinds[0] : { schemeURI: \"\", value: \"\"});\n\t\t\ttrack.language = (trak.mdia.elng ? trak.mdia.elng.extended_language : trak.mdia.mdhd.languageString);\n\t\t\ttrack.nb_samples = trak.samples.length;\n\t\t\ttrack.size = trak.samples_size;\n\t\t\ttrack.bitrate = (track.size*8*track.timescale)/track.samples_duration;\n\t\t\tif (sample_desc.isAudio()) {\n\t\t\t\ttrack.type = \"audio\";\n\t\t\t\tmovie.audioTracks.push(track);\n\t\t\t\ttrack.audio = {};\n\t\t\t\ttrack.audio.sample_rate = sample_desc.getSampleRate();\n\t\t\t\ttrack.audio.channel_count = sample_desc.getChannelCount();\n\t\t\t\ttrack.audio.sample_size = sample_desc.getSampleSize();\n\t\t\t} else if (sample_desc.isVideo()) {\n\t\t\t\ttrack.type = \"video\";\n\t\t\t\tmovie.videoTracks.push(track);\n\t\t\t\ttrack.video = {};\n\t\t\t\ttrack.video.width = sample_desc.getWidth();\n\t\t\t\ttrack.video.height = sample_desc.getHeight();\n\t\t\t} else if (sample_desc.isSubtitle()) {\n\t\t\t\ttrack.type = \"subtitles\";\n\t\t\t\tmovie.subtitleTracks.push(track);\n\t\t\t} else if (sample_desc.isHint()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.hintTracks.push(track);\n\t\t\t} else if (sample_desc.isMetadata()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.metadataTracks.push(track);\n\t\t\t} else {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.otherTracks.push(track);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tmovie.hasMoov = false;\n\t}\n\tmovie.mime = \"\";\n\tif (movie.hasMoov && movie.tracks) {\n\t\tif (movie.videoTracks && movie.videoTracks.length > 0) {\n\t\t\tmovie.mime += 'video/mp4; codecs=\\\"';\n\t\t} else if (movie.audioTracks && movie.audioTracks.length > 0) {\n\t\t\tmovie.mime += 'audio/mp4; codecs=\\\"';\n\t\t} else {\n\t\t\tmovie.mime += 'application/mp4; codecs=\\\"';\n\t\t}\n\t\tfor (i = 0; i < movie.tracks.length; i++) {\n\t\t\tif (i !== 0) movie.mime += ',';\n\t\t\tmovie.mime+= movie.tracks[i].codec;\n\t\t}\n\t\tmovie.mime += '\\\"; profiles=\\\"';\n\t\tmovie.mime += this.ftyp.compatible_brands.join();\n\t\tmovie.mime += '\\\"';\n\t}\n\treturn movie;\n}\n\nISOFile.prototype.setNextSeekPositionFromSample = function (sample) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (this.nextSeekPosition) {\n\t\tthis.nextSeekPosition = Math.min(sample.offset+sample.alreadyRead,this.nextSeekPosition);\n\t} else {\n\t\tthis.nextSeekPosition = sample.offset+sample.alreadyRead;\n\t}\n}\n\nISOFile.prototype.processSamples = function(last) {\n\tvar i;\n\tvar trak;\n\tif (!this.sampleProcessingStarted) return;\n\n\t/* For each track marked for fragmentation,\n\t check if the next sample is there (i.e. if the sample information is known (i.e. moof has arrived) and if it has been downloaded)\n\t and create a fragment with it */\n\tif (this.isFragmentationInitialized && this.onSegment !== null) {\n\t\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\t\tvar fragTrak = this.fragmentedTracks[i];\n\t\t\ttrak = fragTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\t/* The sample information is there (either because the file is not fragmented and this is not the last sample,\n\t\t\t\tor because the file is fragmented and the moof for that sample has been received */\n\t\t\t\tLog.debug(\"ISOFile\", \"Creating media fragment on track #\"+fragTrak.id +\" for sample \"+trak.nextSample);\n\t\t\t\tvar result = this.createFragment(fragTrak.id, trak.nextSample, fragTrak.segmentStream);\n\t\t\t\tif (result) {\n\t\t\t\t\tfragTrak.segmentStream = result;\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t} else {\n\t\t\t\t\t/* The fragment could not be created because the media data is not there (not downloaded), wait for it */\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t/* A fragment is created by sample, but the segment is the accumulation in the buffer of these fragments.\n\t\t\t\t It is flushed only as requested by the application (nb_samples) to avoid too many callbacks */\n\t\t\t\tif (trak.nextSample % fragTrak.nb_samples === 0 || (last || trak.nextSample >= trak.samples.length)) {\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sending fragmented data on track #\"+fragTrak.id+\" for samples [\"+Math.max(0,trak.nextSample-fragTrak.nb_samples)+\",\"+(trak.nextSample-1)+\"]\");\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t\t\t\t\tif (this.onSegment) {\n\t\t\t\t\t\tthis.onSegment(fragTrak.id, fragTrak.user, fragTrak.segmentStream.buffer, trak.nextSample, (last || trak.nextSample >= trak.samples.length));\n\t\t\t\t\t}\n\t\t\t\t\t/* force the creation of a new buffer */\n\t\t\t\t\tfragTrak.segmentStream = null;\n\t\t\t\t\tif (fragTrak !== this.fragmentedTracks[i]) {\n\t\t\t\t\t\t/* make sure we can stop fragmentation if needed */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.onSamples !== null) {\n\t\t/* For each track marked for data export,\n\t\t check if the next sample is there (i.e. has been downloaded) and send it */\n\t\tfor (i = 0; i < this.extractedTracks.length; i++) {\n\t\t\tvar extractTrak = this.extractedTracks[i];\n\t\t\ttrak = extractTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\tLog.debug(\"ISOFile\", \"Exporting on track #\"+extractTrak.id +\" sample #\"+trak.nextSample);\n\t\t\t\tvar sample = this.getSample(trak, trak.nextSample);\n\t\t\t\tif (sample) {\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t\textractTrak.samples.push(sample);\n\t\t\t\t} else {\n\t\t\t\t\tthis.setNextSeekPositionFromSample(trak.samples[trak.nextSample]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (trak.nextSample % extractTrak.nb_samples === 0 || trak.nextSample >= trak.samples.length) {\n\t\t\t\t\tLog.debug(\"ISOFile\", \"Sending samples on track #\"+extractTrak.id+\" for sample \"+trak.nextSample);\n\t\t\t\t\tif (this.onSamples) {\n\t\t\t\t\t\tthis.onSamples(extractTrak.id, extractTrak.user, extractTrak.samples);\n\t\t\t\t\t}\n\t\t\t\t\textractTrak.samples = [];\n\t\t\t\t\tif (extractTrak !== this.extractedTracks[i]) {\n\t\t\t\t\t\t/* check if the extraction needs to be stopped */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* Find and return specific boxes using recursion and early return */\nISOFile.prototype.getBox = function(type) {\n var result = this.getBoxes(type, true);\n return (result.length ? result[0] : null);\n}\n\nISOFile.prototype.getBoxes = function(type, returnEarly) {\n var result = [];\n ISOFile._sweep.call(this, type, result, returnEarly);\n return result;\n}\n\nISOFile._sweep = function(type, result, returnEarly) {\n if (this.type && this.type == type) result.push(this);\n for (var box in this.boxes) {\n if (result.length && returnEarly) return;\n ISOFile._sweep.call(this.boxes[box], type, result, returnEarly);\n }\n}\n\nISOFile.prototype.getTrackSamplesInfo = function(track_id) {\n\tvar track = this.getTrackById(track_id);\n\tif (track) {\n\t\treturn track.samples;\n\t} else {\n\t\treturn;\n\t}\n}\n\nISOFile.prototype.getTrackSample = function(track_id, number) {\n\tvar track = this.getTrackById(track_id);\n\tvar sample = this.getSample(track, number);\n\treturn sample;\n}\n\n/* Called by the application to release the resources associated to samples already forwarded to the application */\nISOFile.prototype.releaseUsedSamples = function (id, sampleNum) {\n\tvar size = 0;\n\tvar trak = this.getTrackById(id);\n\tif (!trak.lastValidSample) trak.lastValidSample = 0;\n\tfor (var i = trak.lastValidSample; i < sampleNum; i++) {\n\t\tsize+=this.releaseSample(trak, i);\n\t}\n\tLog.info(\"ISOFile\", \"Track #\"+id+\" released samples up to \"+sampleNum+\" (released size: \"+size+\", remaining: \"+this.samplesDataSize+\")\");\n\ttrak.lastValidSample = sampleNum;\n}\n\nISOFile.prototype.start = function() {\n\tthis.sampleProcessingStarted = true;\n\tthis.processSamples(false);\n}\n\nISOFile.prototype.stop = function() {\n\tthis.sampleProcessingStarted = false;\n}\n\n/* Called by the application to flush the remaining samples (e.g. once the download is finished or when no more samples will be added) */\nISOFile.prototype.flush = function() {\n\tLog.info(\"ISOFile\", \"Flushing remaining samples\");\n\tthis.updateSampleLists();\n\tthis.processSamples(true);\n\tthis.stream.cleanBuffers();\n\tthis.stream.logBufferLevel(true);\n}\n\n/* Finds the byte offset for a given time on a given track\n also returns the time of the previous rap */\nISOFile.prototype.seekTrack = function(time, useRap, trak) {\n\tvar j;\n\tvar sample;\n\tvar seek_offset = Infinity;\n\tvar rap_seek_sample_num = 0;\n\tvar seek_sample_num = 0;\n\tvar timescale;\n\n\tif (trak.samples.length === 0) {\n\t\tLog.info(\"ISOFile\", \"No sample in track, cannot seek! Using time \"+Log.getDurationString(0, 1) +\" and offset: \"+0);\n\t\treturn { offset: 0, time: 0 };\n\t}\n\n\tfor (j = 0; j < trak.samples.length; j++) {\n\t\tsample = trak.samples[j];\n\t\tif (j === 0) {\n\t\t\tseek_sample_num = 0;\n\t\t\ttimescale = sample.timescale;\n\t\t} else if (sample.cts > time * sample.timescale) {\n\t\t\tseek_sample_num = j-1;\n\t\t\tbreak;\n\t\t}\n\t\tif (useRap && sample.is_sync) {\n\t\t\trap_seek_sample_num = j;\n\t\t}\n\t}\n\tif (useRap) {\n\t\tseek_sample_num = rap_seek_sample_num;\n\t}\n\ttime = trak.samples[seek_sample_num].cts;\n\ttrak.nextSample = seek_sample_num;\n\twhile (trak.samples[seek_sample_num].alreadyRead === trak.samples[seek_sample_num].size) {\n\t\t// No remaining samples to look for, all are downloaded.\n\t\tif (!trak.samples[seek_sample_num + 1]) {\n\t\t\tbreak;\n\t\t}\n\t\tseek_sample_num++;\n\t}\n\tseek_offset = trak.samples[seek_sample_num].offset+trak.samples[seek_sample_num].alreadyRead;\n\tLog.info(\"ISOFile\", \"Seeking to \"+(useRap ? \"RAP\": \"\")+\" sample #\"+trak.nextSample+\" on track \"+trak.tkhd.track_id+\", time \"+Log.getDurationString(time, timescale) +\" and offset: \"+seek_offset);\n\treturn { offset: seek_offset, time: time/timescale };\n}\n\nISOFile.prototype.getTrackDuration = function (trak) {\n\tvar sample;\n\n\tif (!trak.samples) {\n\t\treturn Infinity;\n\t}\n\tsample = trak.samples[trak.samples.length - 1];\n\treturn (sample.cts + sample.duration) / sample.timescale;\n}\n\n/* Finds the byte offset in the file corresponding to the given time or to the time of the previous RAP */\nISOFile.prototype.seek = function(time, useRap) {\n\tvar moov = this.moov;\n\tvar trak;\n\tvar trak_seek_info;\n\tvar i;\n\tvar seek_info = { offset: Infinity, time: Infinity };\n\tif (!this.moov) {\n\t\tthrow \"Cannot seek: moov not received!\";\n\t} else {\n\t\tfor (i = 0; i this.getTrackDuration(trak)) { // skip tracks that already ended\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttrak_seek_info = this.seekTrack(time, useRap, trak);\n\t\t\tif (trak_seek_info.offset < seek_info.offset) {\n\t\t\t\tseek_info.offset = trak_seek_info.offset;\n\t\t\t}\n\t\t\tif (trak_seek_info.time < seek_info.time) {\n\t\t\t\tseek_info.time = trak_seek_info.time;\n\t\t\t}\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Seeking at time \"+Log.getDurationString(seek_info.time, 1)+\" needs a buffer with a fileStart position of \"+seek_info.offset);\n\t\tif (seek_info.offset === Infinity) {\n\t\t\t/* No sample info, in all tracks, cannot seek */\n\t\t\tseek_info = { offset: this.nextParsePosition, time: 0 };\n\t\t} else {\n\t\t\t/* check if the seek position is already in some buffer and\n\t\t\t in that case return the end of that buffer (or of the last contiguous buffer) */\n\t\t\t/* TODO: Should wait until append operations are done */\n\t\t\tseek_info.offset = this.stream.getEndFilePositionAfter(seek_info.offset);\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Adjusted seek position (after checking data already in buffer): \"+seek_info.offset);\n\t\treturn seek_info;\n\t}\n}\n\nISOFile.prototype.equal = function(b) {\n\tvar box_index = 0;\n\twhile (box_index < this.boxes.length && box_index < b.boxes.length) {\n\t\tvar a_box = this.boxes[box_index];\n\t\tvar b_box = b.boxes[box_index];\n\t\tif (!BoxParser.boxEqual(a_box, b_box)) {\n\t\t\treturn false;\n\t\t}\n\t\tbox_index++;\n\t}\n\treturn true;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.ISOFile = ISOFile;\n}\n// file:src/isofile-advanced-parsing.js\n/* position in the current buffer of the beginning of the last box parsed */\nISOFile.prototype.lastBoxStartPosition = 0;\n/* indicator if the parsing is stuck in the middle of an mdat box */\nISOFile.prototype.parsingMdat = null;\n/* next file position that the parser needs:\n - 0 until the first buffer (i.e. fileStart ===0) has been received \n - otherwise, the next box start until the moov box has been parsed\n - otherwise, the position of the next sample to fetch\n */\nISOFile.prototype.nextParsePosition = 0;\n/* keep mdat data */\nISOFile.prototype.discardMdatData = false;\n\nISOFile.prototype.processIncompleteBox = function(ret) {\n\tvar box;\n\tvar merged;\n\tvar found;\n\t\n\t/* we did not have enough bytes in the current buffer to parse the entire box */\n\tif (ret.type === \"mdat\") { \n\t\t/* we had enough bytes to get its type and size and it's an 'mdat' */\n\t\t\n\t\t/* special handling for mdat boxes, since we don't actually need to parse it linearly \n\t\t we create the box */\n\t\tbox = new BoxParser[ret.type+\"Box\"](ret.size);\t\n\t\tthis.parsingMdat = box;\n\t\tthis.boxes.push(box);\n\t\tthis.mdats.push(box);\t\t\t\n\t\tbox.start = ret.start;\n\t\tbox.hdr_size = ret.hdr_size;\n\t\tthis.stream.addUsedBytes(box.hdr_size);\n\n\t\t/* indicate that the parsing should start from the end of the box */\n\t\tthis.lastBoxStartPosition = box.start + box.size;\n \t\t/* let's see if we have the end of the box in the other buffers */\n\t\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\t\tif (found) {\n\t\t\t/* found the end of the box */\n\t\t\tthis.parsingMdat = null;\n\t\t\t/* let's see if we can parse more in this buffer */\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* 'mdat' end not found in the existing buffers */\n\t\t\t/* determine the next position in the file to start parsing from */\n\t\t\tif (!this.moovStartFound) {\n\t\t\t\t/* moov not find yet, \n\t\t\t\t the file probably has 'mdat' at the beginning, and 'moov' at the end, \n\t\t\t\t indicate that the downloader should not try to download those bytes now */\n\t\t\t\tthis.nextParsePosition = box.start + box.size;\n\t\t\t} else {\n\t\t\t\t/* we have the start of the moov box, \n\t\t\t\t the next bytes should try to complete the current 'mdat' */\n\t\t\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\t\t}\n\t\t\t/* not much we can do, wait for more buffers to arrive */\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\t/* box is incomplete, we may not even know its type */\n\t\tif (ret.type === \"moov\") { \n\t\t\t/* the incomplete box is a 'moov' box */\n\t\t\tthis.moovStartFound = true;\n\t\t\tif (this.mdats.length === 0) {\n\t\t\t\tthis.isProgressive = true;\n\t\t\t}\n\t\t}\n\t\t/* either it's not an mdat box (and we need to parse it, we cannot skip it)\n\t\t (TODO: we could skip 'free' boxes ...)\n\t\t\t or we did not have enough data to parse the type and size of the box, \n\t\t we try to concatenate the current buffer with the next buffer to restart parsing */\n\t\tmerged = (this.stream.mergeNextBuffer ? this.stream.mergeNextBuffer() : false);\n\t\tif (merged) {\n\t\t\t/* The next buffer was contiguous, the merging succeeded,\n\t\t\t we can now continue parsing, \n\t\t\t the next best position to parse is at the end of this new buffer */\n\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* we cannot concatenate existing buffers because they are not contiguous or because there is no additional buffer */\n\t\t\t/* The next best position to parse is still at the end of this old buffer */\n\t\t\tif (!ret.type) {\n\t\t\t\t/* There were not enough bytes in the buffer to parse the box type and length,\n\t\t\t\t the next fetch should retrieve those missing bytes, i.e. the next bytes after this buffer */\n\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t} else {\n\t\t\t\t/* we had enough bytes to parse size and type of the incomplete box\n\t\t\t\t if we haven't found yet the moov box, skip this one and try the next one \n\t\t\t\t if we have found the moov box, let's continue linear parsing */\n\t\t\t\tif (this.moovStartFound) {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t\t} else {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getPosition() + ret.size;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasIncompleteMdat = function () {\n\treturn (this.parsingMdat !== null);\n}\n\nISOFile.prototype.processIncompleteMdat = function () {\n\tvar box;\n\tvar found;\n\t\n\t/* we are in the parsing of an incomplete mdat box */\n\tbox = this.parsingMdat;\n\n\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\tif (found) {\n\t\tLog.debug(\"ISOFile\", \"Found 'mdat' end in buffered data\");\n\t\t/* the end of the mdat has been found */ \n\t\tthis.parsingMdat = null;\n\t\t/* we can parse more in this buffer */\n\t\treturn true;\n\t} else {\n\t\t/* we don't have the end of this mdat yet, \n\t\t indicate that the next byte to fetch is the end of the buffers we have so far, \n\t\t return and wait for more buffer to come */\n\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\treturn false;\n\t}\n}\n\nISOFile.prototype.restoreParsePosition = function() {\n\t/* Reposition at the start position of the previous box not entirely parsed */\n\treturn this.stream.seek(this.lastBoxStartPosition, true, this.discardMdatData);\n}\n\nISOFile.prototype.saveParsePosition = function() {\n\t/* remember the position of the box start in case we need to roll back (if the box is incomplete) */\n\tthis.lastBoxStartPosition = this.stream.getPosition();\t\n}\n\nISOFile.prototype.updateUsedBytes = function(box, ret) {\n\tif (this.stream.addUsedBytes) {\n\t\tif (box.type === \"mdat\") {\n\t\t\t/* for an mdat box, only its header is considered used, other bytes will be used when sample data is requested */\n\t\t\tthis.stream.addUsedBytes(box.hdr_size);\n\t\t\tif (this.discardMdatData) {\n\t\t\t\tthis.stream.addUsedBytes(box.size-box.hdr_size);\n\t\t\t}\n\t\t} else {\n\t\t\t/* for all other boxes, the entire box data is considered used */\n\t\t\tthis.stream.addUsedBytes(box.size);\n\t\t}\t\n\t}\n}\n// file:src/isofile-advanced-creation.js\nISOFile.prototype.add = BoxParser.Box.prototype.add;\nISOFile.prototype.addBox = BoxParser.Box.prototype.addBox;\n\nISOFile.prototype.init = function (_options) {\n\tvar options = _options || {}; \n\tvar ftyp = this.add(\"ftyp\").set(\"major_brand\", (options.brands && options.brands[0]) || \"iso4\")\n\t\t\t\t\t\t\t .set(\"minor_version\", 0)\n\t\t\t\t\t\t\t .set(\"compatible_brands\", options.brands || [\"iso4\"]);\n\tvar moov = this.add(\"moov\");\n\tmoov.add(\"mvhd\").set(\"timescale\", options.timescale || 600)\n\t\t\t\t\t.set(\"rate\", options.rate || 1<<16)\n\t\t\t\t\t.set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"volume\", (options.width) ? 0 : 0x0100)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000])\n\t\t\t\t\t.set(\"next_track_id\", 1);\n\tmoov.add(\"mvex\");\n\treturn this;\n}\n\nISOFile.prototype.addTrack = function (_options) {\n\tif (!this.moov) {\n\t\tthis.init(_options);\n\t}\n\n\tvar options = _options || {}; \n\toptions.width = options.width || 320;\n\toptions.height = options.height || 320;\n\toptions.id = options.id || this.moov.mvhd.next_track_id;\n\toptions.type = options.type || \"avc1\";\n\n\tvar trak = this.moov.add(\"trak\");\n\tthis.moov.mvhd.next_track_id = options.id+1;\n\ttrak.add(\"tkhd\").set(\"flags\",BoxParser.TKHD_FLAG_ENABLED | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_MOVIE | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_PREVIEW)\n\t\t\t\t\t.set(\"creation_time\",0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"track_id\", options.id)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"layer\", options.layer || 0)\n\t\t\t\t\t.set(\"alternate_group\", 0)\n\t\t\t\t\t.set(\"volume\", 1)\n\t\t\t\t\t.set(\"matrix\", [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ])\n\t\t\t\t\t.set(\"width\", options.width << 16)\n\t\t\t\t\t.set(\"height\", options.height << 16);\n\n\tvar mdia = trak.add(\"mdia\");\n\tmdia.add(\"mdhd\").set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"timescale\", options.timescale || 1)\n\t\t\t\t\t.set(\"duration\", options.media_duration || 0)\n\t\t\t\t\t.set(\"language\", options.language || \"und\");\n\n\tmdia.add(\"hdlr\").set(\"handler\", options.hdlr || \"vide\")\n\t\t\t\t\t.set(\"name\", options.name || \"Track created with MP4Box.js\");\n\n\tmdia.add(\"elng\").set(\"extended_language\", options.language || \"fr-FR\");\n\n\tvar minf = mdia.add(\"minf\");\n\tif (BoxParser[options.type+\"SampleEntry\"] === undefined) return;\n\tvar sample_description_entry = new BoxParser[options.type+\"SampleEntry\"]();\n\tsample_description_entry.data_reference_index = 1;\n\tvar media_type = \"\";\n\tfor (var mediaType in BoxParser.sampleEntryCodes) {\n\t\tvar codes = BoxParser.sampleEntryCodes[mediaType];\n\t\tfor (var i = 0; i < codes.length; i++) {\n\t\t\tif (codes.indexOf(options.type) > -1) {\n\t\t\t\tmedia_type = mediaType;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tswitch(media_type) {\n\t\tcase \"Visual\":\n\t\t\tminf.add(\"vmhd\").set(\"graphicsmode\",0).set(\"opcolor\", [ 0, 0, 0 ]);\n\t\t\tsample_description_entry.set(\"width\", options.width)\n\t\t\t\t\t\t.set(\"height\", options.height)\n\t\t\t\t\t\t.set(\"horizresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"vertresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"frame_count\", 1)\n\t\t\t\t\t\t.set(\"compressorname\", options.type+\" Compressor\")\n\t\t\t\t\t\t.set(\"depth\", 0x18);\n\t\t\tif (options.avcDecoderConfigRecord) {\n\t\t\t\tvar avcC = new BoxParser.avcCBox();\n\t\t\t\tavcC.parse(new MP4BoxStream(options.avcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(avcC);\n\t\t\t} else if (options.hevcDecoderConfigRecord) {\n\t\t\t\tvar hvcC = new BoxParser.hvcCBox();\n\t\t\t\thvcC.parse(new MP4BoxStream(options.hevcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(hvcC);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Audio\":\n\t\t\tminf.add(\"smhd\").set(\"balance\", options.balance || 0);\n\t\t\tsample_description_entry.set(\"channel_count\", options.channel_count || 2)\n\t\t\t\t\t\t.set(\"samplesize\", options.samplesize || 16)\n\t\t\t\t\t\t.set(\"samplerate\", options.samplerate || 1<<16);\n\t\t\tbreak;\n\t\tcase \"Hint\":\n\t\t\tminf.add(\"hmhd\"); // TODO: add properties\n\t\t\tbreak;\n\t\tcase \"Subtitle\":\n\t\t\tminf.add(\"sthd\");\n\t\t\tswitch (options.type) {\n\t\t\t\tcase \"stpp\":\n\t\t\t\t\tsample_description_entry.set(\"namespace\", options.namespace || \"nonamespace\")\n\t\t\t\t\t\t\t\t.set(\"schema_location\", options.schema_location || \"\")\n\t\t\t\t\t\t\t\t.set(\"auxiliary_mime_types\", options.auxiliary_mime_types || \"\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Metadata\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tcase \"System\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t}\n\tif (options.description) {\n\t\tsample_description_entry.addBox(options.description);\n\t}\n\tif (options.description_boxes) {\n\t\toptions.description_boxes.forEach(function (b) {\n\t\t\tsample_description_entry.addBox(b);\n\t\t});\n\t}\n\tminf.add(\"dinf\").add(\"dref\").addEntry((new BoxParser[\"url Box\"]()).set(\"flags\", 0x1));\n\tvar stbl = minf.add(\"stbl\");\n\tstbl.add(\"stsd\").addEntry(sample_description_entry);\n\tstbl.add(\"stts\").set(\"sample_counts\", [])\n\t\t\t\t\t.set(\"sample_deltas\", []);\n\tstbl.add(\"stsc\").set(\"first_chunk\", [])\n\t\t\t\t\t.set(\"samples_per_chunk\", [])\n\t\t\t\t\t.set(\"sample_description_index\", []);\n\tstbl.add(\"stco\").set(\"chunk_offsets\", []);\n\tstbl.add(\"stsz\").set(\"sample_sizes\", []);\n\n\tthis.moov.mvex.add(\"trex\").set(\"track_id\", options.id)\n\t\t\t\t\t\t\t .set(\"default_sample_description_index\", options.default_sample_description_index || 1)\n\t\t\t\t\t\t\t .set(\"default_sample_duration\", options.default_sample_duration || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_size\", options.default_sample_size || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_flags\", options.default_sample_flags || 0);\n\tthis.buildTrakSampleLists(trak);\n\treturn options.id;\n}\n\nBoxParser.Box.prototype.computeSize = function(stream_) {\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n}\n\nISOFile.prototype.addSample = function (track_id, data, _options) {\n\tvar options = _options || {};\n\tvar sample = {};\n\tvar trak = this.getTrackById(track_id);\n\tif (trak === null) return;\n sample.number = trak.samples.length;\n\tsample.track_id = trak.tkhd.track_id;\n\tsample.timescale = trak.mdia.mdhd.timescale;\n\tsample.description_index = (options.sample_description_index ? options.sample_description_index - 1: 0);\n\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\tsample.data = data;\n\tsample.size = data.byteLength;\n\tsample.alreadyRead = sample.size;\n\tsample.duration = options.duration || 1;\n\tsample.cts = options.cts || 0;\n\tsample.dts = options.dts || 0;\n\tsample.is_sync = options.is_sync || false;\n\tsample.is_leading = options.is_leading || 0;\n\tsample.depends_on = options.depends_on || 0;\n\tsample.is_depended_on = options.is_depended_on || 0;\n\tsample.has_redundancy = options.has_redundancy || 0;\n\tsample.degradation_priority = options.degradation_priority || 0;\n\tsample.offset = 0;\n\tsample.subsamples = options.subsamples;\n\ttrak.samples.push(sample);\n\ttrak.samples_size += sample.size;\n\ttrak.samples_duration += sample.duration;\n\tif (trak.first_dts === undefined) {\n\t\ttrak.first_dts = options.dts;\n\t}\n\n\tthis.processSamples();\n\t\n\tvar moof = this.createSingleSampleMoof(sample);\n\tthis.addBox(moof);\n\tmoof.computeSize();\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tthis.add(\"mdat\").data = new Uint8Array(data);\n\treturn sample;\n}\n\nISOFile.prototype.createSingleSampleMoof = function(sample) {\n\tvar sample_flags = 0;\n\tif (sample.is_sync)\n\t\tsample_flags = (1 << 25); // sample_depends_on_none (I picture)\n\telse\n\t\tsample_flags = (1 << 16); // non-sync\n\n\tvar moof = new BoxParser.moofBox();\n\tmoof.add(\"mfhd\").set(\"sequence_number\", this.nextMoofNumber);\n\tthis.nextMoofNumber++;\n\tvar traf = moof.add(\"traf\");\n\tvar trak = this.getTrackById(sample.track_id);\n\ttraf.add(\"tfhd\").set(\"track_id\", sample.track_id)\n\t\t\t\t\t.set(\"flags\", BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF);\n\ttraf.add(\"tfdt\").set(\"baseMediaDecodeTime\", (sample.dts - (trak.first_dts || 0)));\n\ttraf.add(\"trun\").set(\"flags\", BoxParser.TRUN_FLAGS_DATA_OFFSET | BoxParser.TRUN_FLAGS_DURATION | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_SIZE | BoxParser.TRUN_FLAGS_FLAGS | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_CTS_OFFSET)\n\t\t\t\t\t.set(\"data_offset\",0)\n\t\t\t\t\t.set(\"first_sample_flags\",0)\n\t\t\t\t\t.set(\"sample_count\",1)\n\t\t\t\t\t.set(\"sample_duration\",[sample.duration])\n\t\t\t\t\t.set(\"sample_size\",[sample.size])\n\t\t\t\t\t.set(\"sample_flags\",[sample_flags])\n\t\t\t\t\t.set(\"sample_composition_time_offset\", [sample.cts - sample.dts]);\n\treturn moof;\n}\n\n// file:src/isofile-sample-processing.js\n/* Index of the last moof box received */\nISOFile.prototype.lastMoofIndex = 0;\n\n/* size of the buffers allocated for samples */\nISOFile.prototype.samplesDataSize = 0;\n\n/* Resets all sample tables */\nISOFile.prototype.resetTables = function () {\n\tvar i;\n\tvar trak, stco, stsc, stsz, stts, ctts, stss;\n\tthis.initial_duration = this.moov.mvhd.duration;\n\tthis.moov.mvhd.duration = 0;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\ttrak.tkhd.duration = 0;\n\t\ttrak.mdia.mdhd.duration = 0;\n\t\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\t\tstco.chunk_offsets = [];\n\t\tstsc = trak.mdia.minf.stbl.stsc;\n\t\tstsc.first_chunk = [];\n\t\tstsc.samples_per_chunk = [];\n\t\tstsc.sample_description_index = [];\n\t\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\t\tstsz.sample_sizes = [];\n\t\tstts = trak.mdia.minf.stbl.stts;\n\t\tstts.sample_counts = [];\n\t\tstts.sample_deltas = [];\n\t\tctts = trak.mdia.minf.stbl.ctts;\n\t\tif (ctts) {\n\t\t\tctts.sample_counts = [];\n\t\t\tctts.sample_offsets = [];\n\t\t}\n\t\tstss = trak.mdia.minf.stbl.stss;\n\t\tvar k = trak.mdia.minf.stbl.boxes.indexOf(stss);\n\t\tif (k != -1) trak.mdia.minf.stbl.boxes[k] = null;\n\t}\n}\n\nISOFile.initSampleGroups = function(trak, traf, sbgps, trak_sgpds, traf_sgpds) {\n\tvar l;\n\tvar k;\n\tvar sample_groups_info;\n\tvar sample_group_info;\n\tvar sample_group_key;\n\tfunction SampleGroupInfo(_type, _parameter, _sbgp) {\n\t\tthis.grouping_type = _type;\n\t\tthis.grouping_type_parameter = _parameter;\n\t\tthis.sbgp = _sbgp;\n\t\tthis.last_sample_in_run = -1;\n\t\tthis.entry_index = -1;\t\t\n\t}\n\tif (traf) {\n\t\ttraf.sample_groups_info = [];\n\t} \n\tif (!trak.sample_groups_info) {\n\t\ttrak.sample_groups_info = [];\n\t}\n\tfor (k = 0; k < sbgps.length; k++) {\n\t\tsample_group_key = sbgps[k].grouping_type +\"/\"+ sbgps[k].grouping_type_parameter;\n\t\tsample_group_info = new SampleGroupInfo(sbgps[k].grouping_type, sbgps[k].grouping_type_parameter, sbgps[k]);\n\t\tif (traf) {\n\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tfor (l=0; l = 2) {\n\t\t\t\tsample_group_key = trak_sgpds[k].grouping_type +\"/0\";\n\t\t\t\tsample_group_info = new SampleGroupInfo(trak_sgpds[k].grouping_type, 0);\n\t\t\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (traf_sgpds) {\n\t\t\tfor (k = 0; k < traf_sgpds.length; k++) {\n\t\t\t\tif (!traf_sgpds[k].used && traf_sgpds[k].version >= 2) {\n\t\t\t\t\tsample_group_key = traf_sgpds[k].grouping_type +\"/0\";\n\t\t\t\t\tsample_group_info = new SampleGroupInfo(traf_sgpds[k].grouping_type, 0);\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t\tif (!traf.sample_groups_info[sample_group_key]) {\n\t\t\t\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.setSampleGroupProperties = function(trak, sample, sample_number, sample_groups_info) {\n\tvar k;\n\tvar index;\n\tsample.sample_groups = [];\n\tfor (k in sample_groups_info) {\n\t\tsample.sample_groups[k] = {};\n\t\tsample.sample_groups[k].grouping_type = sample_groups_info[k].grouping_type;\n\t\tsample.sample_groups[k].grouping_type_parameter = sample_groups_info[k].grouping_type_parameter;\n\t\tif (sample_number >= sample_groups_info[k].last_sample_in_run) {\n\t\t\tif (sample_groups_info[k].last_sample_in_run < 0) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run = 0;\n\t\t\t}\n\t\t\tsample_groups_info[k].entry_index++;\t\n\t\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run += sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].sample_count;\n\t\t\t}\n\t\t}\n\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\tsample.sample_groups[k].group_description_index = sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].group_description_index;\n\t\t} else {\n\t\t\tsample.sample_groups[k].group_description_index = -1; // special value for not defined\n\t\t}\n\t\tif (sample.sample_groups[k].group_description_index !== 0) {\n\t\t\tvar description;\n\t\t\tif (sample_groups_info[k].fragment_description) {\n\t\t\t\tdescription = sample_groups_info[k].fragment_description;\n\t\t\t} else {\n\t\t\t\tdescription = sample_groups_info[k].description;\n\t\t\t}\n\t\t\tif (sample.sample_groups[k].group_description_index > 0) {\n\t\t\t\tif (sample.sample_groups[k].group_description_index > 65535) {\n\t\t\t\t\tindex = (sample.sample_groups[k].group_description_index >> 16)-1;\n\t\t\t\t} else {\n\t\t\t\t\tindex = sample.sample_groups[k].group_description_index-1;\n\t\t\t\t}\n\t\t\t\tif (description && index >= 0) {\n\t\t\t\t\tsample.sample_groups[k].description = description.entries[index];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (description && description.version >= 2) {\n\t\t\t\t\tif (description.default_group_description_index > 0) {\t\t\t\t\t\t\t\t\n\t\t\t\t\t\tsample.sample_groups[k].description = description.entries[description.default_group_description_index-1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.process_sdtp = function (sdtp, sample, number) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (sdtp) {\n\t\tsample.is_leading = sdtp.is_leading[number];\n\t\tsample.depends_on = sdtp.sample_depends_on[number];\n\t\tsample.is_depended_on = sdtp.sample_is_depended_on[number];\n\t\tsample.has_redundancy = sdtp.sample_has_redundancy[number];\n\t} else {\n\t\tsample.is_leading = 0;\n\t\tsample.depends_on = 0;\n\t\tsample.is_depended_on = 0\n\t\tsample.has_redundancy = 0;\n\t}\t\n}\n\n/* Build initial sample list from sample tables */\nISOFile.prototype.buildSampleLists = function() {\t\n\tvar i;\n\tvar trak;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\tthis.buildTrakSampleLists(trak);\n\t}\n}\n\nISOFile.prototype.buildTrakSampleLists = function(trak) {\t\n\tvar j, k;\n\tvar stco, stsc, stsz, stts, ctts, stss, stsd, subs, sbgps, sgpds, stdp;\n\tvar chunk_run_index, chunk_index, last_chunk_in_run, offset_in_chunk, last_sample_in_chunk;\n\tvar last_sample_in_stts_run, stts_run_index, last_sample_in_ctts_run, ctts_run_index, last_stss_index, last_subs_index, subs_entry_index, last_subs_sample_index;\n\n\ttrak.samples = [];\n\ttrak.samples_duration = 0;\n\ttrak.samples_size = 0;\n\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\tstsc = trak.mdia.minf.stbl.stsc;\n\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\tstts = trak.mdia.minf.stbl.stts;\n\tctts = trak.mdia.minf.stbl.ctts;\n\tstss = trak.mdia.minf.stbl.stss;\n\tstsd = trak.mdia.minf.stbl.stsd;\n\tsubs = trak.mdia.minf.stbl.subs;\n\tstdp = trak.mdia.minf.stbl.stdp;\n\tsbgps = trak.mdia.minf.stbl.sbgps;\n\tsgpds = trak.mdia.minf.stbl.sgpds;\n\t\n\tlast_sample_in_stts_run = -1;\n\tstts_run_index = -1;\n\tlast_sample_in_ctts_run = -1;\n\tctts_run_index = -1;\n\tlast_stss_index = 0;\n\tsubs_entry_index = 0;\n\tlast_subs_sample_index = 0;\t\t\n\n\tISOFile.initSampleGroups(trak, null, sbgps, sgpds);\n\n\tif (typeof stsz === \"undefined\") {\n\t\treturn;\n\t}\n\n\t/* we build the samples one by one and compute their properties */\n\tfor (j = 0; j < stsz.sample_sizes.length; j++) {\n\t\tvar sample = {};\n\t\tsample.number = j;\n\t\tsample.track_id = trak.tkhd.track_id;\n\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\tsample.alreadyRead = 0;\n\t\ttrak.samples[j] = sample;\n\t\t/* size can be known directly */\n\t\tsample.size = stsz.sample_sizes[j];\n\t\ttrak.samples_size += sample.size;\n\t\t/* computing chunk-based properties (offset, sample description index)*/\n\t\tif (j === 0) {\t\t\t\t\n\t\t\tchunk_index = 1; /* the first sample is in the first chunk (chunk indexes are 1-based) */\n\t\t\tchunk_run_index = 0; /* the first chunk is the first entry in the first_chunk table */\n\t\t\tsample.chunk_index = chunk_index;\n\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\tlast_sample_in_chunk = stsc.samples_per_chunk[chunk_run_index];\n\t\t\toffset_in_chunk = 0;\n\n\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t} else {\n\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t}\n\t\t} else {\n\t\t\tif (j < last_sample_in_chunk) {\n\t\t\t\t/* the sample is still in the current chunk */\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t} else {\n\t\t\t\t/* the sample is in the next chunk */\n\t\t\t\tchunk_index++;\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\t/* reset the accumulated offset in the chunk */\n\t\t\t\toffset_in_chunk = 0;\n\t\t\t\tif (chunk_index <= last_chunk_in_run) {\n\t\t\t\t\t/* stay in the same entry of the first_chunk table */\n\t\t\t\t\t/* chunk_run_index unmodified */\n\t\t\t\t} else {\n\t\t\t\t\tchunk_run_index++;\n\t\t\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t\tlast_sample_in_chunk += stsc.samples_per_chunk[chunk_run_index];\n\t\t\t}\n\t\t}\n\n\t\tsample.description_index = stsc.sample_description_index[sample.chunk_run_index]-1;\n\t\tsample.description = stsd.entries[sample.description_index];\n\t\tsample.offset = stco.chunk_offsets[sample.chunk_index-1] + offset_in_chunk; /* chunk indexes are 1-based */\n\t\toffset_in_chunk += sample.size;\n\n\t\t/* setting dts, cts, duration and rap flags */\n\t\tif (j > last_sample_in_stts_run) {\n\t\t\tstts_run_index++;\n\t\t\tif (last_sample_in_stts_run < 0) {\n\t\t\t\tlast_sample_in_stts_run = 0;\n\t\t\t}\n\t\t\tlast_sample_in_stts_run += stts.sample_counts[stts_run_index];\t\t\t\t\n\t\t}\n\t\tif (j > 0) {\n\t\t\ttrak.samples[j-1].duration = stts.sample_deltas[stts_run_index];\n\t\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t\t\tsample.dts = trak.samples[j-1].dts + trak.samples[j-1].duration;\n\t\t} else {\n\t\t\tsample.dts = 0;\n\t\t}\n\t\tif (ctts) {\n\t\t\tif (j >= last_sample_in_ctts_run) {\n\t\t\t\tctts_run_index++;\n\t\t\t\tif (last_sample_in_ctts_run < 0) {\n\t\t\t\t\tlast_sample_in_ctts_run = 0;\n\t\t\t\t}\n\t\t\t\tlast_sample_in_ctts_run += ctts.sample_counts[ctts_run_index];\t\t\t\t\n\t\t\t}\n\t\t\tsample.cts = trak.samples[j].dts + ctts.sample_offsets[ctts_run_index];\n\t\t} else {\n\t\t\tsample.cts = sample.dts;\n\t\t}\n\t\tif (stss) {\n\t\t\tif (j == stss.sample_numbers[last_stss_index] - 1) { // sample numbers are 1-based\n\t\t\t\tsample.is_sync = true;\n\t\t\t\tlast_stss_index++;\n\t\t\t} else {\n\t\t\t\tsample.is_sync = false;\t\t\t\t\n\t\t\t\tsample.degradation_priority = 0;\n\t\t\t}\n\t\t\tif (subs) {\n\t\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j+1) {\n\t\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t\t\tsubs_entry_index++;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tsample.is_sync = true;\n\t\t}\n\t\tISOFile.process_sdtp(trak.mdia.minf.stbl.sdtp, sample, sample.number);\n\t\tif (stdp) {\n\t\t\tsample.degradation_priority = stdp.priority[j];\n\t\t} else {\n\t\t\tsample.degradation_priority = 0;\n\t\t}\n\t\tif (subs) {\n\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j) {\n\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t}\n\t\t}\n\t\tif (sbgps.length > 0 || sgpds.length > 0) {\n\t\t\tISOFile.setSampleGroupProperties(trak, sample, j, trak.sample_groups_info);\n\t\t}\n\t}\n\tif (j>0) {\n\t\ttrak.samples[j-1].duration = Math.max(trak.mdia.mdhd.duration - trak.samples[j-1].dts, 0);\n\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t}\n}\n\n/* Update sample list when new 'moof' boxes are received */\nISOFile.prototype.updateSampleLists = function() {\t\n\tvar i, j, k;\n\tvar default_sample_description_index, default_sample_duration, default_sample_size, default_sample_flags;\n\tvar last_run_position;\n\tvar box, moof, traf, trak, trex;\n\tvar sample;\n\tvar sample_flags;\n\t\n\tif (this.moov === undefined) {\n\t\treturn;\n\t}\n\t/* if the input file is fragmented and fetched in multiple downloads, we need to update the list of samples */\n\twhile (this.lastMoofIndex < this.moofs.length) {\n\t\tbox = this.moofs[this.lastMoofIndex];\n\t\tthis.lastMoofIndex++;\n\t\tif (box.type == \"moof\") {\n\t\t\tmoof = box;\n\t\t\tfor (i = 0; i < moof.trafs.length; i++) {\n\t\t\t\ttraf = moof.trafs[i];\n\t\t\t\ttrak = this.getTrackById(traf.tfhd.track_id);\n\t\t\t\ttrex = this.getTrexById(traf.tfhd.track_id);\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\t\t\t\tdefault_sample_description_index = traf.tfhd.default_sample_description_index;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_description_index = (trex ? trex.default_sample_description_index: 1);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\t\t\t\tdefault_sample_duration = traf.tfhd.default_sample_duration;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_duration = (trex ? trex.default_sample_duration : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\t\t\t\tdefault_sample_size = traf.tfhd.default_sample_size;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_size = (trex ? trex.default_sample_size : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\t\t\t\tdefault_sample_flags = traf.tfhd.default_sample_flags;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_flags = (trex ? trex.default_sample_flags : 0);\n\t\t\t\t}\n\t\t\t\ttraf.sample_number = 0;\n\t\t\t\t/* process sample groups */\n\t\t\t\tif (traf.sbgps.length > 0) {\n\t\t\t\t\tISOFile.initSampleGroups(trak, traf, traf.sbgps, trak.mdia.minf.stbl.sgpds, traf.sgpds);\n\t\t\t\t}\n\t\t\t\tfor (j = 0; j < traf.truns.length; j++) {\n\t\t\t\t\tvar trun = traf.truns[j];\n\t\t\t\t\tfor (k = 0; k < trun.sample_count; k++) {\n\t\t\t\t\t\tsample = {};\n\t\t\t\t\t\tsample.moof_number = this.lastMoofIndex;\n\t\t\t\t\t\tsample.number_in_traf = traf.sample_number;\n\t\t\t\t\t\ttraf.sample_number++;\n\t\t\t sample.number = trak.samples.length;\n\t\t\t\t\t\ttraf.first_sample_index = trak.samples.length;\n\t\t\t\t\t\ttrak.samples.push(sample);\n\t\t\t\t\t\tsample.track_id = trak.tkhd.track_id;\n\t\t\t\t\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\t\t\t\t\tsample.description_index = default_sample_description_index-1;\n\t\t\t\t\t\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\t\t\t\t\t\tsample.size = default_sample_size;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\t\t\t\tsample.size = trun.sample_size[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_size += sample.size;\n\t\t\t\t\t\tsample.duration = default_sample_duration;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\t\t\t\tsample.duration = trun.sample_duration[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_duration += sample.duration;\n\t\t\t\t\t\tif (trak.first_traf_merged || k > 0) {\n\t\t\t\t\t\t\tsample.dts = trak.samples[trak.samples.length-2].dts+trak.samples[trak.samples.length-2].duration;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (traf.tfdt) {\n\t\t\t\t\t\t\t\tsample.dts = traf.tfdt.baseMediaDecodeTime;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.dts = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttrak.first_traf_merged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.cts = sample.dts;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\t\t\t\tsample.cts = sample.dts + trun.sample_composition_time_offset[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample_flags = default_sample_flags;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\t\t\t\tsample_flags = trun.sample_flags[k];\n\t\t\t\t\t\t} else if (k === 0 && (trun.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG)) {\n\t\t\t\t\t\t\tsample_flags = trun.first_sample_flags;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.is_sync = ((sample_flags >> 16 & 0x1) ? false : true);\n\t\t\t\t\t\tsample.is_leading = (sample_flags >> 26 & 0x3);\n\t\t\t\t\t\tsample.depends_on = (sample_flags >> 24 & 0x3);\n\t\t\t\t\t\tsample.is_depended_on = (sample_flags >> 22 & 0x3);\n\t\t\t\t\t\tsample.has_redundancy = (sample_flags >> 20 & 0x3);\n\t\t\t\t\t\tsample.degradation_priority = (sample_flags & 0xFFFF);\n\t\t\t\t\t\t//ISOFile.process_sdtp(traf.sdtp, sample, sample.number_in_traf);\n\t\t\t\t\t\tvar bdop = (traf.tfhd.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar dbim = (traf.tfhd.flags & BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF) ? true : false;\n\t\t\t\t\t\tvar dop = (trun.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar bdo = 0;\n\t\t\t\t\t\tif (!bdop) {\n\t\t\t\t\t\t\tif (!dbim) {\n\t\t\t\t\t\t\t\tif (j === 0) { // the first track in the movie fragment\n\t\t\t\t\t\t\t\t\tbdo = moof.start; // the position of the first byte of the enclosing Movie Fragment Box\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbdo = last_run_position; // end of the data defined by the preceding *track* (irrespective of the track id) fragment in the moof\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbdo = moof.start;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbdo = traf.tfhd.base_data_offset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (j === 0 && k === 0) {\n\t\t\t\t\t\t\tif (dop) {\n\t\t\t\t\t\t\t\tsample.offset = bdo + trun.data_offset; // If the data-offset is present, it is relative to the base-data-offset established in the track fragment header\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.offset = bdo; // the data for this run starts the base-data-offset defined by the track fragment header\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsample.offset = last_run_position; // this run starts immediately after the data of the previous run\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlast_run_position = sample.offset + sample.size;\n\t\t\t\t\t\tif (traf.sbgps.length > 0 || traf.sgpds.length > 0 ||\n\t\t\t\t\t\t\ttrak.mdia.minf.stbl.sbgps.length > 0 || trak.mdia.minf.stbl.sgpds.length > 0) {\n\t\t\t\t\t\t\tISOFile.setSampleGroupProperties(trak, sample, sample.number_in_traf, traf.sample_groups_info);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (traf.subs) {\n\t\t\t\t\ttrak.has_fragment_subsamples = true;\n\t\t\t\t\tvar sample_index = traf.first_sample_index;\n\t\t\t\t\tfor (j = 0; j < traf.subs.entries.length; j++) {\n\t\t\t\t\t\tsample_index += traf.subs.entries[j].sample_delta;\n\t\t\t\t\t\tsample = trak.samples[sample_index-1];\n\t\t\t\t\t\tsample.subsamples = traf.subs.entries[j].subsamples;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\t\n}\n\n/* Try to get sample data for a given sample:\n returns null if not found\n returns the same sample if already requested\n */\nISOFile.prototype.getSample = function(trak, sampleNum) {\t\n\tvar buffer;\n\tvar sample = trak.samples[sampleNum];\n\t\n\tif (!this.moov) {\n\t\treturn null;\n\t}\n\n\tif (!sample.data) {\n\t\t/* Not yet fetched */\n\t\tsample.data = new Uint8Array(sample.size);\n\t\tsample.alreadyRead = 0;\n\t\tthis.samplesDataSize += sample.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating sample #\"+sampleNum+\" on track #\"+trak.tkhd.track_id+\" of size \"+sample.size+\" (total: \"+this.samplesDataSize+\")\");\n\t} else if (sample.alreadyRead == sample.size) {\n\t\t/* Already fetched entirely */\n\t\treturn sample;\n\t}\n\n\t/* The sample has only been partially fetched, we need to check in all buffers */\n\twhile(true) {\n\t\tvar index =\tthis.stream.findPosition(true, sample.offset + sample.alreadyRead, false);\n\t\tif (index > -1) {\n\t\t\tbuffer = this.stream.buffers[index];\n\t\t\tvar lengthAfterStart = buffer.byteLength - (sample.offset + sample.alreadyRead - buffer.fileStart);\n\t\t\tif (sample.size - sample.alreadyRead <= lengthAfterStart) {\n\t\t\t\t/* the (rest of the) sample is entirely contained in this buffer */\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+(sample.size - sample.alreadyRead)+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, sample.size - sample.alreadyRead);\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += sample.size - sample.alreadyRead;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\tsample.alreadyRead = sample.size;\n\n\t\t\t\treturn sample;\n\t\t\t} else {\n\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\tif (lengthAfterStart === 0) return null;\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" partial data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\tsample.alreadyRead += lengthAfterStart;\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t/* keep looking in the next buffer */\n\t\t\t}\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\n/* Release the memory used to store the data of the sample */\nISOFile.prototype.releaseSample = function(trak, sampleNum) {\t\n\tvar sample = trak.samples[sampleNum];\n\tif (sample.data) {\n\t\tthis.samplesDataSize -= sample.size;\n\t\tsample.data = null;\n\t\tsample.alreadyRead = 0;\n\t\treturn sample.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\nISOFile.prototype.getAllocatedSampleDataSize = function() {\n\treturn this.samplesDataSize;\n}\n\n/* Builds the MIME Type 'codecs' sub-parameters for the whole file */\nISOFile.prototype.getCodecs = function() {\t\n\tvar i;\n\tvar codecs = \"\";\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\tvar trak = this.moov.traks[i];\n\t\tif (i>0) {\n\t\t\tcodecs+=\",\"; \n\t\t}\n\t\tcodecs += trak.mdia.minf.stbl.stsd.entries[0].getCodec();\t\t\n\t}\n\treturn codecs;\n}\n\n/* Helper function */\nISOFile.prototype.getTrexById = function(id) {\t\n\tvar i;\n\tif (!this.moov || !this.moov.mvex) return null;\n\tfor (i = 0; i < this.moov.mvex.trexs.length; i++) {\n\t\tvar trex = this.moov.mvex.trexs[i];\n\t\tif (trex.track_id == id) return trex;\n\t}\n\treturn null;\n}\n\n/* Helper function */\nISOFile.prototype.getTrackById = function(id) {\n\tif (this.moov === undefined) {\n\t\treturn null;\n\t}\n\tfor (var j = 0; j < this.moov.traks.length; j++) {\n\t\tvar trak = this.moov.traks[j];\n\t\tif (trak.tkhd.track_id == id) return trak;\n\t}\n\treturn null;\n}\n// file:src/isofile-item-processing.js\nISOFile.prototype.items = [];\n/* size of the buffers allocated for samples */\nISOFile.prototype.itemsDataSize = 0;\n\nISOFile.prototype.flattenItemInfo = function() {\t\n\tvar items = this.items;\n\tvar i, j;\n\tvar item;\n\tvar meta = this.meta;\n\tif (meta === null || meta === undefined) return;\n\tif (meta.hdlr === undefined) return;\n\tif (meta.iinf === undefined) return;\n\tfor (i = 0; i < meta.iinf.item_infos.length; i++) {\n\t\titem = {};\n\t\titem.id = meta.iinf.item_infos[i].item_ID;\n\t\titems[item.id] = item;\n\t\titem.ref_to = [];\n\t\titem.name = meta.iinf.item_infos[i].item_name;\n\t\tif (meta.iinf.item_infos[i].protection_index > 0) {\n\t\t\titem.protection = meta.ipro.protections[meta.iinf.item_infos[i].protection_index-1];\n\t\t}\n\t\tif (meta.iinf.item_infos[i].item_type) {\n\t\t\titem.type = meta.iinf.item_infos[i].item_type;\n\t\t} else {\n\t\t\titem.type = \"mime\";\n\t\t}\n\t\titem.content_type = meta.iinf.item_infos[i].content_type;\n\t\titem.content_encoding = meta.iinf.item_infos[i].content_encoding;\n\t}\n\tif (meta.iloc) {\n\t\tfor(i = 0; i < meta.iloc.items.length; i++) {\n\t\t\tvar offset;\n\t\t\tvar itemloc = meta.iloc.items[i];\n\t\t\titem = items[itemloc.item_ID];\n\t\t\tif (itemloc.data_reference_index !== 0) {\n\t\t\t\tLog.warn(\"Item storage with reference to other files: not supported\");\n\t\t\t\titem.source = meta.dinf.boxes[itemloc.data_reference_index-1];\n\t\t\t}\n\t\t\tswitch(itemloc.construction_method) {\n\t\t\t\tcase 0: // offset into the file referenced by the data reference index\n\t\t\t\tbreak;\n\t\t\t\tcase 1: // offset into the idat box of this meta box\n\t\t\t\tLog.warn(\"Item storage with construction_method : not supported\");\n\t\t\t\tbreak;\n\t\t\t\tcase 2: // offset into another item\n\t\t\t\tLog.warn(\"Item storage with construction_method : not supported\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\titem.extents = [];\n\t\t\titem.size = 0;\n\t\t\tfor (j = 0; j < itemloc.extents.length; j++) {\n\t\t\t\titem.extents[j] = {};\n\t\t\t\titem.extents[j].offset = itemloc.extents[j].extent_offset + itemloc.base_offset;\n\t\t\t\titem.extents[j].length = itemloc.extents[j].extent_length;\n\t\t\t\titem.extents[j].alreadyRead = 0;\n\t\t\t\titem.size += item.extents[j].length;\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.pitm) {\n\t\titems[meta.pitm.item_id].primary = true;\n\t}\n\tif (meta.iref) {\n\t\tfor (i=0; i 0 && propEntry.property_index-1 < meta.iprp.ipco.boxes.length) {\n\t\t\t\t\t\tvar propbox = meta.iprp.ipco.boxes[propEntry.property_index-1];\n\t\t\t\t\t\titem.properties[propbox.type] = propbox;\n\t\t\t\t\t\titem.properties.boxes.push(propbox);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.getItem = function(item_id) {\t\n\tvar buffer;\n\tvar item;\n\t\n\tif (!this.meta) {\n\t\treturn null;\n\t}\n\n \titem = this.items[item_id];\n\tif (!item.data && item.size) {\n\t\t/* Not yet fetched */\n\t\titem.data = new Uint8Array(item.size);\n\t\titem.alreadyRead = 0;\n\t\tthis.itemsDataSize += item.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating item #\"+item_id+\" of size \"+item.size+\" (total: \"+this.itemsDataSize+\")\");\n\t} else if (item.alreadyRead === item.size) {\n\t\t/* Already fetched entirely */\n\t\treturn item;\n\t}\n\n\t/* The item has only been partially fetched, we need to check in all buffers to find the remaining extents*/\n\n\tfor (var i = 0; i < item.extents.length; i++) {\n\t\tvar extent = item.extents[i];\n\t\tif (extent.alreadyRead === extent.length) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tvar index =\tthis.stream.findPosition(true, extent.offset + extent.alreadyRead, false);\n\t\t\tif (index > -1) {\n\t\t\t\tbuffer = this.stream.buffers[index];\n\t\t\t\tvar lengthAfterStart = buffer.byteLength - (extent.offset + extent.alreadyRead - buffer.fileStart);\n\t\t\t\tif (extent.length - extent.alreadyRead <= lengthAfterStart) {\n\t\t\t\t\t/* the (rest of the) extent is entirely contained in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" data (alreadyRead: \"+extent.alreadyRead+\n\t\t\t\t\t\t\" offset: \"+(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+(extent.length - extent.alreadyRead)+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, extent.length - extent.alreadyRead);\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += extent.length - extent.alreadyRead;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t\titem.alreadyRead += (extent.length - extent.alreadyRead);\n\t\t\t\t\textent.alreadyRead = extent.length;\n\t\t\t\t} else {\n\t\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" partial data (alreadyRead: \"+extent.alreadyRead+\" offset: \"+\n\t\t\t\t\t\t(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\t\textent.alreadyRead += lengthAfterStart;\n\t\t\t\t\titem.alreadyRead += lengthAfterStart;\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tif (item.alreadyRead === item.size) {\n\t\t/* fetched entirely */\n\t\treturn item;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n/* Release the memory used to store the data of the item */\nISOFile.prototype.releaseItem = function(item_id) {\t\n\tvar item = this.items[item_id];\n\tif (item.data) {\n\t\tthis.itemsDataSize -= item.size;\n\t\titem.data = null;\n\t\titem.alreadyRead = 0;\n\t\tfor (var i = 0; i < item.extents.length; i++) {\n\t\t\tvar extent = item.extents[i];\n\t\t\textent.alreadyRead = 0;\n\t\t}\n\t\treturn item.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n\nISOFile.prototype.processItems = function(callback) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tthis.getItem(item.id);\n\t\tif (callback && !item.sent) {\n\t\t\tcallback(item);\n\t\t\titem.sent = true;\n\t\t\titem.data = null;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasItem = function(name) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tif (item.name === name) {\n\t\t\treturn item.id;\n\t\t}\n\t}\n\treturn -1;\n}\n\nISOFile.prototype.getMetaHandler = function() {\n\tif (!this.meta) {\n\t\treturn null;\n\t} else {\n\t\treturn this.meta.hdlr.handler;\t\t\n\t}\n}\n\nISOFile.prototype.getPrimaryItem = function() {\n\tif (!this.meta || !this.meta.pitm) {\n\t\treturn null;\n\t} else {\n\t\treturn this.getItem(this.meta.pitm.item_id);\n\t}\n}\n\nISOFile.prototype.itemToFragmentedTrackFile = function(_options) {\n\tvar options = _options || {};\n\tvar item = null;\n\tif (options.itemId) {\n\t\titem = this.getItem(options.itemId);\n\t} else {\n\t\titem = this.getPrimaryItem();\n\t}\n\tif (item == null) return null;\n\n\tvar file = new ISOFile();\n\tfile.discardMdatData = false;\n\t// assuming the track type is the same as the item type\n\tvar trackOptions = { type: item.type, description_boxes: item.properties.boxes};\n\tif (item.properties.ispe) {\n\t\ttrackOptions.width = item.properties.ispe.image_width;\n\t\ttrackOptions.height = item.properties.ispe.image_height;\n\t}\n\tvar trackId = file.addTrack(trackOptions);\n\tif (trackId) {\n\t\tfile.addSample(trackId, item.data);\n\t\treturn file;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n// file:src/isofile-write.js\n/* Rewrite the entire file */\nISOFile.prototype.write = function(outstream) {\n\tfor (var i=0; i0 ? this.moov.traks[i].samples[0].duration: 0));\n\t\tinitSegs.push(seg);\n\t}\n\treturn initSegs;\n}\n\n// file:src/box-print.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.printHeader = function(output) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\toutput.log(output.indent+\"size:\"+this.size);\n\toutput.log(output.indent+\"type:\"+this.type);\n}\n\nBoxParser.FullBox.prototype.printHeader = function(output) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"version:\"+this.version);\n\toutput.log(output.indent+\"flags:\"+this.flags);\n}\n\nBoxParser.Box.prototype.print = function(output) {\n\tthis.printHeader(output);\n}\n\nBoxParser.ContainerBox.prototype.print = function(output) {\n\tthis.printHeader(output);\n\tfor (var i=0; i>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"next_track_id: \"+this.next_track_id);\n}\n\nBoxParser.tkhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"track_id: \"+this.track_id);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"layer: \"+this.layer);\n\toutput.log(output.indent+\"alternate_group: \"+this.alternate_group);\n\toutput.log(output.indent+\"width: \"+this.width);\n\toutput.log(output.indent+\"height: \"+this.height);\n}// file:src/mp4box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MP4Box = {};\n\nMP4Box.createFile = function (_keepMdatData, _stream) {\n\t/* Boolean indicating if bytes containing media data should be kept in memory */\n\tvar keepMdatData = (_keepMdatData !== undefined ? _keepMdatData : true);\n\tvar file = new ISOFile(_stream);\n\tfile.discardMdatData = (keepMdatData ? false : true);\n\treturn file;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.createFile = MP4Box.createFile;\n}\n","interface IClipMeta {\n width: number;\n height: number;\n duration: number;\n}\n\n/**\n * 所有素材需要实现的接口\n *\n * 素材(Clip)是不同数据类型的抽象,给其他模块提供数据\n *\n * WebAV 内置了 {@link MP4Clip}, {@link AudioClip}, {@link ImgClip}, {@link MediaStreamClip} 等常用素材,用于给 {@link Combinator} {@link AVCanvas} 提供数据\n *\n * 你只需实现该接口即可自定义素材,拥有最大的灵活度来生成视频内容,比如动画、转场效果等\n * @see [自定义素材](https://bilibili.github.io/WebAV/demo/2_6-custom-clip)\n *\n */\nexport interface IClip {\n /**\n * 从素材中提取指定时间数据\n * @param time 时间,单位 微秒\n */\n tick: (time: number) => Promise<{\n video?: VideoFrame | ImageBitmap | null;\n audio?: Float32Array[];\n state: 'done' | 'success';\n }>;\n\n /**\n * 当素材准备完成,ready 会切换到 resolved 状态\n */\n readonly ready: Promise;\n\n /**\n * 数据元数据\n */\n readonly meta: IClipMeta;\n\n /**\n * clone,返回一个新素材\n */\n clone: () => Promise;\n\n /**\n * 按指定时间切割,返回该时刻前后两个新素材\n *\n * 该方法不会破坏原素材的数据\n *\n * @param time 时间,微秒\n * @returns\n */\n split: (time: number) => Promise<[this, this]>;\n\n /**\n * 销毁实例,释放资源\n */\n destroy: () => void;\n}\n\n/**\n * 默认的音频设置,⚠️ 不要变更它的值 ⚠️\n */\nexport const DEFAULT_AUDIO_CONF = {\n sampleRate: 48000,\n channelCount: 2,\n codec: 'mp4a.40.2',\n};\n","import mp4box, {\n AudioTrackOpts,\n ESDSBoxParser,\n MP4ABoxParser,\n MP4File,\n MP4Info,\n TrakBoxParser,\n VideoTrackOpts,\n} from '@webav/mp4box.js';\nimport { DEFAULT_AUDIO_CONF } from '../clips';\n\nexport function extractFileConfig(file: MP4File, info: MP4Info) {\n const vTrack = info.videoTracks[0];\n const rs: {\n videoTrackConf?: VideoTrackOpts;\n videoDecoderConf?: Parameters[0];\n audioTrackConf?: AudioTrackOpts;\n audioDecoderConf?: Parameters[0];\n } = {};\n if (vTrack != null) {\n const videoDesc = parseVideoCodecDesc(file.getTrackById(vTrack.id)).buffer;\n const { descKey, type } = vTrack.codec.startsWith('avc1')\n ? { descKey: 'avcDecoderConfigRecord', type: 'avc1' }\n : vTrack.codec.startsWith('hvc1')\n ? { descKey: 'hevcDecoderConfigRecord', type: 'hvc1' }\n : { descKey: '', type: '' };\n if (descKey !== '') {\n rs.videoTrackConf = {\n timescale: vTrack.timescale,\n duration: vTrack.duration,\n width: vTrack.video.width,\n height: vTrack.video.height,\n brands: info.brands,\n type,\n [descKey]: videoDesc,\n };\n }\n\n rs.videoDecoderConf = {\n codec: vTrack.codec,\n codedHeight: vTrack.video.height,\n codedWidth: vTrack.video.width,\n description: videoDesc,\n };\n }\n\n const aTrack = info.audioTracks[0];\n if (aTrack != null) {\n const esdsBox = getESDSBoxFromMP4File(file);\n rs.audioTrackConf = {\n timescale: aTrack.timescale,\n samplerate: aTrack.audio.sample_rate,\n channel_count: aTrack.audio.channel_count,\n hdlr: 'soun',\n type: aTrack.codec.startsWith('mp4a') ? 'mp4a' : aTrack.codec,\n description: getESDSBoxFromMP4File(file),\n };\n rs.audioDecoderConf = {\n codec: aTrack.codec.startsWith('mp4a')\n ? DEFAULT_AUDIO_CONF.codec\n : aTrack.codec,\n numberOfChannels: aTrack.audio.channel_count,\n sampleRate: aTrack.audio.sample_rate,\n ...(esdsBox == null ? {} : parseAudioInfo4ESDSBox(esdsBox)),\n };\n }\n return rs;\n}\n\n// track is H.264, H.265 or VPX.\nfunction parseVideoCodecDesc(track: TrakBoxParser): Uint8Array {\n for (const entry of track.mdia.minf.stbl.stsd.entries) {\n // @ts-expect-error\n const box = entry.avcC ?? entry.hvcC ?? entry.vpcC;\n if (box != null) {\n const stream = new mp4box.DataStream(\n undefined,\n 0,\n mp4box.DataStream.BIG_ENDIAN,\n );\n box.write(stream);\n return new Uint8Array(stream.buffer.slice(8)); // Remove the box header.\n }\n }\n throw Error('avcC, hvcC or VPX not found');\n}\n\nfunction getESDSBoxFromMP4File(file: MP4File, codec = 'mp4a') {\n const mp4aBox = file.moov?.traks\n .map((t) => t.mdia.minf.stbl.stsd.entries)\n .flat()\n .find(({ type }) => type === codec) as MP4ABoxParser;\n\n return mp4aBox?.esds;\n}\n\n// 解决封装层音频信息标识错误,导致解码异常\nfunction parseAudioInfo4ESDSBox(esds: ESDSBoxParser) {\n const decoderConf = esds.esd.descs[0]?.descs[0];\n if (decoderConf == null) return {};\n\n const [byte1, byte2] = decoderConf.data;\n // sampleRate 是第一字节后 3bit + 第二字节前 1bit\n const sampleRateIdx = ((byte1 & 0x07) << 1) + (byte2 >> 7);\n // numberOfChannels 是第二字节 [2, 5] 4bit\n const numberOfChannels = (byte2 & 0x7f) >> 3;\n const sampleRateEnum = [\n 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025,\n 8000, 7350,\n ] as const;\n return {\n sampleRate: sampleRateEnum[sampleRateIdx],\n numberOfChannels,\n };\n}\n\n/**\n * 强行回收 mp4boxfile 尽量降低内存占用,会破坏 file 导致无法正常使用\n * 仅用于获取二进制后,不再需要任何 file 功能的场景\n */\nexport function unsafeReleaseMP4BoxFile(file: MP4File) {\n if (file.moov == null) return;\n for (var j = 0; j < file.moov.traks.length; j++) {\n file.moov.traks[j].samples = [];\n }\n file.mdats = [];\n file.moofs = [];\n}\n","import mp4box, {\n MP4ArrayBuffer,\n MP4File,\n MP4Info,\n MP4Sample,\n} from '@webav/mp4box.js';\n\n/**\n * 将原始字节流转换成 MP4Sample 流\n */\nexport class SampleTransform {\n readable: ReadableStream<\n | {\n chunkType: 'ready';\n data: { info: MP4Info; file: MP4File };\n }\n | {\n chunkType: 'samples';\n data: { id: number; type: 'video' | 'audio'; samples: MP4Sample[] };\n }\n >;\n\n writable: WritableStream;\n\n #inputBufOffset = 0;\n\n constructor() {\n const file = mp4box.createFile();\n let streamCancelled = false;\n this.readable = new ReadableStream(\n {\n start: (ctrl) => {\n file.onReady = (info) => {\n const vTrackId = info.videoTracks[0]?.id;\n if (vTrackId != null)\n file.setExtractionOptions(vTrackId, 'video', { nbSamples: 100 });\n\n const aTrackId = info.audioTracks[0]?.id;\n if (aTrackId != null)\n file.setExtractionOptions(aTrackId, 'audio', { nbSamples: 100 });\n\n ctrl.enqueue({ chunkType: 'ready', data: { info, file } });\n file.start();\n };\n\n const releasedCnt: Record = {};\n file.onSamples = (id, type, samples) => {\n ctrl.enqueue({\n chunkType: 'samples',\n data: { id, type, samples: samples.map((s) => ({ ...s })) },\n });\n releasedCnt[id] = (releasedCnt[id] ?? 0) + samples.length;\n file.releaseUsedSamples(id, releasedCnt[id]);\n };\n\n file.onFlush = () => {\n ctrl.close();\n };\n },\n cancel: () => {\n file.stop();\n streamCancelled = true;\n },\n },\n {\n // 每条消息 100 个 samples\n highWaterMark: 50,\n },\n );\n\n this.writable = new WritableStream({\n write: async (ui8Arr) => {\n if (streamCancelled) {\n this.writable.abort();\n return;\n }\n\n const inputBuf = ui8Arr.buffer as MP4ArrayBuffer;\n inputBuf.fileStart = this.#inputBufOffset;\n this.#inputBufOffset += inputBuf.byteLength;\n file.appendBuffer(inputBuf);\n },\n close: () => {\n file.flush();\n file.stop();\n file.onFlush?.();\n },\n });\n }\n}\n","import { MP4Info, MP4Sample } from '@webav/mp4box.js';\nimport {\n audioResample,\n autoReadStream,\n extractPCM4AudioData,\n sleep,\n} from '../av-utils';\nimport { Log } from '../log';\nimport { extractFileConfig } from '../mp4-utils/mp4box-utils';\nimport { SampleTransform } from '../mp4-utils/sample-transform';\nimport { DEFAULT_AUDIO_CONF, IClip } from './iclip';\nimport { file, tmpfile, write } from 'opfs-tools';\n\nlet CLIP_ID = 0;\n\ntype OPFSToolFile = ReturnType;\nfunction isOTFile(obj: any): obj is OPFSToolFile {\n return obj.kind === 'file' && obj.createReader instanceof Function;\n}\n\n// 用于内部创建 MP4Clip 实例\ntype MPClipCloneArgs = Awaited> & {\n localFile: OPFSToolFile;\n};\n\ninterface MP4DecoderConf {\n video: VideoDecoderConfig | null;\n audio: AudioDecoderConfig | null;\n}\n\ninterface MP4ClipOpts {\n audio?: boolean | { volume: number };\n /**\n * 不安全,随时可能废弃\n */\n __unsafe_hardwareAcceleration__?: HardwarePreference;\n}\n\ntype ExtMP4Sample = Omit & {\n is_idr: boolean;\n deleted?: boolean;\n data: null | Uint8Array;\n};\n\ntype LocalFileReader = Awaited>;\n\ntype ThumbnailOpts = {\n start: number;\n end: number;\n step: number;\n};\n\n/**\n * MP4 素材,解析 MP4 文件,使用 {@link MP4Clip.tick} 按需解码指定时间的图像帧\n *\n * 可用于实现视频抽帧、生成缩略图、视频编辑等功能\n *\n * @example\n * new MP4Clip((await fetch('')).body)\n * new MP4Clip(mp4File.stream())\n *\n * @see {@link Combinator}\n * @see [AVCanvas](../../av-canvas/classes/AVCanvas.html)\n *\n * @see [解码播放视频](https://bilibili.github.io/WebAV/demo/1_1-decode-video)\n */\nexport class MP4Clip implements IClip {\n #log = Log.create(`MP4Clip id:${CLIP_ID++},`);\n\n ready: IClip['ready'];\n\n #destroyed = false;\n\n #meta = {\n // 微秒\n duration: 0,\n width: 0,\n height: 0,\n audioSampleRate: 0,\n audioChanCount: 0,\n };\n\n get meta() {\n return { ...this.#meta };\n }\n\n #localFile: OPFSToolFile;\n\n #volume = 1;\n\n #videoSamples: ExtMP4Sample[] = [];\n\n #audioSamples: ExtMP4Sample[] = [];\n\n #videoFrameFinder: VideoFrameFinder | null = null;\n #audioFrameFinder: AudioFrameFinder | null = null;\n\n #decoderConf: {\n video: VideoDecoderConfig | null;\n audio: AudioDecoderConfig | null;\n } = {\n video: null,\n audio: null,\n };\n\n #opts: MP4ClipOpts = { audio: true };\n\n constructor(\n source: OPFSToolFile | ReadableStream | MPClipCloneArgs,\n opts: MP4ClipOpts = { audio: true },\n ) {\n if (\n !(source instanceof ReadableStream) &&\n !isOTFile(source) &&\n !Array.isArray(source.videoSamples)\n ) {\n throw Error('Illegal argument');\n }\n\n this.#opts = { ...opts };\n this.#volume =\n typeof opts.audio === 'object' && 'volume' in opts.audio\n ? opts.audio.volume\n : 1;\n\n const initByStream = async (s: ReadableStream) => {\n await write(this.#localFile, s);\n return await this.#localFile.stream();\n };\n\n this.#localFile = isOTFile(source)\n ? source\n : 'localFile' in source\n ? source.localFile // from clone\n : tmpfile();\n\n this.ready = (\n source instanceof ReadableStream\n ? initByStream(source).then((s) => parseMP4Stream(s, this.#opts))\n : isOTFile(source)\n ? source.stream().then((s) => parseMP4Stream(s, this.#opts))\n : Promise.resolve(source)\n ).then(async ({ videoSamples, audioSamples, decoderConf }) => {\n this.#videoSamples = videoSamples;\n this.#audioSamples = audioSamples;\n this.#decoderConf = decoderConf;\n const { videoFrameFinder, audioFrameFinder } = genDecoder(\n {\n video:\n decoderConf.video == null\n ? null\n : {\n ...decoderConf.video,\n hardwareAcceleration:\n this.#opts.__unsafe_hardwareAcceleration__,\n },\n audio: decoderConf.audio,\n },\n await this.#localFile.createReader(),\n videoSamples,\n audioSamples,\n this.#opts.audio !== false ? this.#volume : null,\n );\n this.#videoFrameFinder = videoFrameFinder;\n this.#audioFrameFinder = audioFrameFinder;\n\n this.#meta = genMeta(decoderConf, videoSamples, audioSamples);\n this.#log.info('MP4Clip meta:', this.#meta);\n return { ...this.#meta };\n });\n }\n\n /**\n * 拦截 {@link MP4Clip.tick} 方法返回的数据,用于对图像、音频数据二次处理\n * @param time 调用 tick 的时间\n * @param tickRet tick 返回的数据\n *\n * @see [移除视频绿幕背景](https://bilibili.github.io/WebAV/demo/3_2-chromakey-video)\n */\n tickInterceptor: >>(\n time: number,\n tickRet: T,\n ) => Promise = async (_, tickRet) => tickRet;\n\n /**\n * 获取素材指定时刻的图像帧、音频数据\n * @param time 微秒\n */\n async tick(time: number): Promise<{\n video?: VideoFrame;\n audio: Float32Array[];\n state: 'success' | 'done';\n }> {\n if (time >= this.#meta.duration) {\n return await this.tickInterceptor(time, {\n audio: [],\n state: 'done',\n });\n }\n\n const [audio, video] = await Promise.all([\n this.#audioFrameFinder?.find(time) ?? [],\n this.#videoFrameFinder?.find(time),\n ]);\n\n if (video == null) {\n return await this.tickInterceptor(time, {\n audio,\n state: 'success',\n });\n }\n\n return await this.tickInterceptor(time, {\n video,\n audio,\n state: 'success',\n });\n }\n\n #thumbAborter = new AbortController();\n /**\n * 生成缩略图,默认每个关键帧生成一个 100px 宽度的缩略图。\n *\n * @param imgWidth 缩略图宽度,默认 100\n * @param opts Partial\n * @returns Promise>\n */\n async thumbnails(\n imgWidth = 100,\n opts?: Partial,\n ): Promise> {\n this.#thumbAborter.abort();\n this.#thumbAborter = new AbortController();\n const aborterSignal = this.#thumbAborter.signal;\n\n await this.ready;\n const abortMsg = 'generate thumbnails aborted';\n if (aborterSignal.aborted) throw Error(abortMsg);\n\n const { width, height } = this.#meta;\n const convtr = createVF2BlobConvtr(\n imgWidth,\n Math.round(height * (imgWidth / width)),\n { quality: 0.1, type: 'image/png' },\n );\n\n return new Promise>(\n async (resolve, reject) => {\n let pngPromises: Array<{ ts: number; img: Promise }> = [];\n const vc = this.#decoderConf.video;\n if (vc == null || this.#videoSamples.length === 0) {\n resolver();\n return;\n }\n aborterSignal.addEventListener('abort', () => {\n reject(Error(abortMsg));\n });\n\n async function resolver() {\n if (aborterSignal.aborted) return;\n resolve(\n await Promise.all(\n pngPromises.map(async (it) => ({\n ts: it.ts,\n img: await it.img,\n })),\n ),\n );\n }\n\n function pushPngPromise(vf: VideoFrame) {\n pngPromises.push({\n ts: vf.timestamp,\n img: convtr(vf),\n });\n }\n\n const { start = 0, end = this.#meta.duration, step } = opts ?? {};\n if (step) {\n let cur = start;\n // 创建一个新的 VideoFrameFinder 实例,避免与 tick 方法共用而导致冲突\n const videoFrameFinder = new VideoFrameFinder(\n await this.#localFile.createReader(),\n this.#videoSamples,\n {\n ...vc,\n hardwareAcceleration: this.#opts.__unsafe_hardwareAcceleration__,\n },\n );\n while (cur <= end && !aborterSignal.aborted) {\n const vf = await videoFrameFinder.find(cur);\n if (vf) pushPngPromise(vf);\n cur += step;\n }\n videoFrameFinder.destroy();\n resolver();\n } else {\n await thumbnailByKeyFrame(\n this.#videoSamples,\n this.#localFile,\n vc,\n aborterSignal,\n { start, end },\n (vf, done) => {\n pushPngPromise(vf);\n if (done) resolver();\n },\n );\n }\n },\n );\n }\n\n async split(time: number) {\n await this.ready;\n\n if (time <= 0 || time >= this.#meta.duration)\n throw Error('\"time\" out of bounds');\n\n const [preVideoSlice, postVideoSlice] = splitVideoSampleByTime(\n this.#videoSamples,\n time,\n );\n const [preAudioSlice, postAudioSlice] = splitAudioSampleByTime(\n this.#audioSamples,\n time,\n );\n const preClip = new MP4Clip(\n {\n localFile: this.#localFile,\n videoSamples: preVideoSlice ?? [],\n audioSamples: preAudioSlice ?? [],\n decoderConf: this.#decoderConf,\n },\n this.#opts,\n );\n const postClip = new MP4Clip(\n {\n localFile: this.#localFile,\n videoSamples: postVideoSlice ?? [],\n audioSamples: postAudioSlice ?? [],\n decoderConf: this.#decoderConf,\n },\n this.#opts,\n );\n await Promise.all([preClip.ready, postClip.ready]);\n\n return [preClip, postClip] as [this, this];\n }\n\n async clone() {\n await this.ready;\n const clip = new MP4Clip(\n {\n localFile: this.#localFile,\n videoSamples: [...this.#videoSamples],\n audioSamples: [...this.#audioSamples],\n decoderConf: this.#decoderConf,\n },\n this.#opts,\n );\n await clip.ready;\n clip.tickInterceptor = this.tickInterceptor;\n return clip as this;\n }\n\n /**\n * 拆分 MP4Clip 为仅包含视频轨道和音频轨道的 MP4Clip\n * @returns Mp4CLip[]\n */\n async splitTrack() {\n await this.ready;\n const clips: MP4Clip[] = [];\n if (this.#videoSamples.length > 0) {\n const videoClip = new MP4Clip(\n {\n localFile: this.#localFile,\n videoSamples: [...this.#videoSamples],\n audioSamples: [],\n decoderConf: {\n video: this.#decoderConf.video,\n audio: null,\n },\n },\n this.#opts,\n );\n await videoClip.ready;\n videoClip.tickInterceptor = this.tickInterceptor;\n clips.push(videoClip);\n }\n if (this.#audioSamples.length > 0) {\n const audioClip = new MP4Clip(\n {\n localFile: this.#localFile,\n videoSamples: [],\n audioSamples: [...this.#audioSamples],\n decoderConf: {\n audio: this.#decoderConf.audio,\n video: null,\n },\n },\n this.#opts,\n );\n await audioClip.ready;\n audioClip.tickInterceptor = this.tickInterceptor;\n clips.push(audioClip);\n }\n\n return clips;\n }\n\n destroy(): void {\n if (this.#destroyed) return;\n this.#log.info('MP4Clip destroy');\n this.#destroyed = true;\n\n this.#videoFrameFinder?.destroy();\n this.#audioFrameFinder?.destroy();\n }\n}\n\nfunction genMeta(\n decoderConf: MP4DecoderConf,\n videoSamples: ExtMP4Sample[],\n audioSamples: ExtMP4Sample[],\n) {\n const meta = {\n duration: 0,\n width: 0,\n height: 0,\n audioSampleRate: 0,\n audioChanCount: 0,\n };\n if (decoderConf.video != null && videoSamples.length > 0) {\n meta.width = decoderConf.video.codedWidth ?? 0;\n meta.height = decoderConf.video.codedHeight ?? 0;\n }\n if (decoderConf.audio != null && audioSamples.length > 0) {\n meta.audioSampleRate = DEFAULT_AUDIO_CONF.sampleRate;\n meta.audioChanCount = DEFAULT_AUDIO_CONF.channelCount;\n }\n\n let vDuration = 0;\n let aDuration = 0;\n if (videoSamples.length > 0) {\n for (let i = videoSamples.length - 1; i >= 0; i--) {\n const s = videoSamples[i];\n if (s.deleted) continue;\n vDuration = s.cts + s.duration;\n break;\n }\n }\n if (audioSamples.length > 0) {\n const lastSampele = audioSamples.at(-1)!;\n aDuration = lastSampele.cts + lastSampele.duration;\n }\n meta.duration = Math.max(vDuration, aDuration);\n\n return meta;\n}\n\nfunction genDecoder(\n decoderConf: MP4DecoderConf,\n localFileReader: LocalFileReader,\n videoSamples: ExtMP4Sample[],\n audioSamples: ExtMP4Sample[],\n volume: number | null,\n) {\n return {\n audioFrameFinder:\n volume == null || decoderConf.audio == null || audioSamples.length === 0\n ? null\n : new AudioFrameFinder(\n localFileReader,\n audioSamples,\n decoderConf.audio,\n {\n volume,\n targetSampleRate: DEFAULT_AUDIO_CONF.sampleRate,\n },\n ),\n videoFrameFinder:\n decoderConf.video == null || videoSamples.length === 0\n ? null\n : new VideoFrameFinder(\n localFileReader,\n videoSamples,\n decoderConf.video,\n ),\n };\n}\n\nasync function parseMP4Stream(\n source: ReadableStream,\n opts: MP4ClipOpts = {},\n) {\n let mp4Info: MP4Info;\n const decoderConf: MP4DecoderConf = { video: null, audio: null };\n let videoSamples: ExtMP4Sample[] = [];\n let audioSamples: ExtMP4Sample[] = [];\n\n return new Promise<{\n videoSamples: typeof videoSamples;\n audioSamples: typeof audioSamples;\n decoderConf: typeof decoderConf;\n }>(async (resolve, reject) => {\n let videoDeltaTS = -1;\n let audioDeltaTS = -1;\n const stopRead = autoReadStream(source.pipeThrough(new SampleTransform()), {\n onChunk: async ({ chunkType, data }) => {\n if (chunkType === 'ready') {\n // mp4File = data.file;\n mp4Info = data.info;\n let { videoDecoderConf: vc, audioDecoderConf: ac } =\n extractFileConfig(data.file, data.info);\n decoderConf.video = vc ?? null;\n decoderConf.audio = ac ?? null;\n if (vc == null && ac == null) {\n stopRead();\n reject(\n Error('MP4Clip must contain at least one video or audio track'),\n );\n }\n Log.info(\n 'mp4BoxFile moov ready',\n {\n ...data.info,\n tracks: null,\n videoTracks: null,\n audioTracks: null,\n },\n decoderConf,\n );\n } else if (chunkType === 'samples') {\n if (data.type === 'video') {\n if (videoDeltaTS === -1) videoDeltaTS = data.samples[0].dts;\n for (const s of data.samples) {\n videoSamples.push(normalizeTimescale(s, videoDeltaTS, 'video'));\n }\n } else if (data.type === 'audio' && opts.audio) {\n if (audioDeltaTS === -1) audioDeltaTS = data.samples[0].dts;\n for (const s of data.samples) {\n audioSamples.push(normalizeTimescale(s, audioDeltaTS, 'audio'));\n }\n }\n }\n },\n onDone: () => {\n const lastSampele = videoSamples.at(-1) ?? audioSamples.at(-1);\n if (mp4Info == null) {\n reject(Error('MP4Clip stream is done, but not emit ready'));\n return;\n } else if (lastSampele == null) {\n reject(Error('MP4Clip stream not contain any sample'));\n return;\n }\n // 修复首帧黑帧\n const firstSample = videoSamples[0];\n if (firstSample != null && firstSample.cts < 200e3) {\n firstSample.duration += firstSample.cts;\n firstSample.cts = 0;\n }\n Log.info('mp4 stream parsed');\n resolve({\n videoSamples,\n audioSamples,\n decoderConf,\n });\n },\n });\n });\n\n function normalizeTimescale(\n s: MP4Sample,\n delta = 0,\n sampleType: 'video' | 'audio',\n ) {\n return {\n ...s,\n is_idr: sampleType === 'video' && s.is_sync && isIDRFrame(s.data),\n cts: ((s.cts - delta) / s.timescale) * 1e6,\n dts: ((s.dts - delta) / s.timescale) * 1e6,\n duration: (s.duration / s.timescale) * 1e6,\n timescale: 1e6,\n // 音频数据量可控,直接保存在内存中\n data: sampleType === 'video' ? null : s.data,\n };\n }\n}\n\nclass VideoFrameFinder {\n #dec: VideoDecoder | null = null;\n constructor(\n public localFileReader: LocalFileReader,\n public samples: ExtMP4Sample[],\n public conf: VideoDecoderConfig,\n ) {}\n\n #ts = 0;\n #curAborter = { abort: false, st: performance.now() };\n find = async (time: number): Promise => {\n if (this.#dec == null || time <= this.#ts || time - this.#ts > 3e6) {\n this.#reset(time);\n }\n\n this.#curAborter.abort = true;\n this.#ts = time;\n\n this.#curAborter = { abort: false, st: performance.now() };\n return await this.#parseFrame(time, this.#dec, this.#curAborter);\n };\n\n // fix VideoFrame duration is null\n #lastVfDur = 0;\n\n #downgradeSoftDecode = false;\n #videoDecCusorIdx = 0;\n #videoFrames: VideoFrame[] = [];\n #outputFrameCnt = 0;\n #inputChunkCnt = 0;\n #parseFrame = async (\n time: number,\n dec: VideoDecoder | null,\n aborter: { abort: boolean; st: number },\n ): Promise => {\n if (dec == null || dec.state === 'closed' || aborter.abort) return null;\n\n if (this.#videoFrames.length > 0) {\n const vf = this.#videoFrames[0];\n if (time < vf.timestamp) return null;\n // 弹出第一帧\n this.#videoFrames.shift();\n // 第一帧过期,找下一帧\n if (time > vf.timestamp + (vf.duration ?? 0)) {\n vf.close();\n return await this.#parseFrame(time, dec, aborter);\n }\n\n if (this.#videoFrames.length < 10) {\n // 预解码 避免等待\n this.#startDecode(dec).catch((err) => {\n this.#reset(time);\n throw err;\n });\n }\n // 符合期望\n return vf;\n }\n\n // 缺少帧数据\n if (\n this.#decoding ||\n (this.#outputFrameCnt < this.#inputChunkCnt && dec.decodeQueueSize > 0)\n ) {\n if (performance.now() - aborter.st > 3e3) {\n throw Error(\n `MP4Clip.tick video timeout, ${JSON.stringify(this.#getState())}`,\n );\n }\n // 解码中,等待,然后重试\n await sleep(15);\n } else if (this.#videoDecCusorIdx >= this.samples.length) {\n // decode completed\n return null;\n } else {\n try {\n await this.#startDecode(dec);\n } catch (err) {\n this.#reset(time);\n throw err;\n }\n }\n return await this.#parseFrame(time, dec, aborter);\n };\n\n #decoding = false;\n #startDecode = async (dec: VideoDecoder) => {\n if (this.#decoding) return;\n this.#decoding = true;\n\n // 启动解码任务,然后重试\n let endIdx = this.#videoDecCusorIdx + 1;\n // 该 GoP 时间区间有时间匹配,且未被删除的帧\n let hasValidFrame = false;\n for (; endIdx < this.samples.length; endIdx++) {\n const s = this.samples[endIdx];\n if (!hasValidFrame && !s.deleted) {\n hasValidFrame = true;\n }\n // 找一个 GoP,所以是下一个 IDR 帧结束\n if (s.is_idr) break;\n }\n\n if (hasValidFrame) {\n const samples = this.samples.slice(this.#videoDecCusorIdx, endIdx);\n if (samples[0]?.is_idr !== true) {\n Log.warn('First sample not idr frame');\n } else {\n const chunks = await videosamples2Chunks(samples, this.localFileReader);\n // Wait for the previous asynchronous operation to complete, at which point the task may have already been terminated\n if (dec.state === 'closed') return;\n\n this.#lastVfDur = chunks[0]?.duration ?? 0;\n decodeGoP(dec, chunks, {\n onDecodingError: (err) => {\n if (this.#downgradeSoftDecode) {\n throw err;\n } else {\n this.#downgradeSoftDecode = true;\n Log.warn('Downgrade to software decode');\n this.#reset();\n }\n },\n });\n\n this.#inputChunkCnt += chunks.length;\n }\n }\n this.#videoDecCusorIdx = endIdx;\n this.#decoding = false;\n };\n\n #reset = (time?: number) => {\n this.#decoding = false;\n this.#videoFrames.forEach((f) => f.close());\n this.#videoFrames = [];\n if (time == null || time === 0) {\n this.#videoDecCusorIdx = 0;\n } else {\n let keyIdx = 0;\n for (let i = 0; i < this.samples.length; i++) {\n const s = this.samples[i];\n if (s.is_idr) keyIdx = i;\n if (s.cts < time) continue;\n this.#videoDecCusorIdx = keyIdx;\n break;\n }\n }\n this.#inputChunkCnt = 0;\n this.#outputFrameCnt = 0;\n if (this.#dec?.state !== 'closed') this.#dec?.close();\n this.#dec = new VideoDecoder({\n output: (vf) => {\n this.#outputFrameCnt += 1;\n if (vf.timestamp === -1) {\n vf.close();\n return;\n }\n let rsVf = vf;\n if (vf.duration == null) {\n rsVf = new VideoFrame(vf, {\n duration: this.#lastVfDur,\n });\n vf.close();\n }\n this.#videoFrames.push(rsVf);\n },\n error: (err) => {\n Log.error(`MP4Clip VideoDecoder err: ${err.message}`);\n },\n });\n this.#dec.configure({\n ...this.conf,\n ...(this.#downgradeSoftDecode\n ? { hardwareAcceleration: 'prefer-software' }\n : {}),\n });\n };\n\n #getState = () => ({\n time: this.#ts,\n decState: this.#dec?.state,\n decQSize: this.#dec?.decodeQueueSize,\n decCusorIdx: this.#videoDecCusorIdx,\n sampleLen: this.samples.length,\n inputCnt: this.#inputChunkCnt,\n outputCnt: this.#outputFrameCnt,\n cacheFrameLen: this.#videoFrames.length,\n softDeocde: this.#downgradeSoftDecode,\n });\n\n destroy = () => {\n if (this.#dec?.state !== 'closed') this.#dec?.close();\n this.#dec = null;\n this.#curAborter.abort = true;\n this.#videoFrames.forEach((f) => f.close());\n this.#videoFrames = [];\n this.localFileReader.close();\n };\n}\n\nclass AudioFrameFinder {\n #volume = 1;\n #sampleRate;\n constructor(\n public localFileReader: LocalFileReader,\n public samples: ExtMP4Sample[],\n public conf: AudioDecoderConfig,\n opts: { volume: number; targetSampleRate: number },\n ) {\n this.#volume = opts.volume;\n this.#sampleRate = opts.targetSampleRate;\n }\n\n #dec: ReturnType | null = null;\n #curAborter = { abort: false, st: performance.now() };\n find = async (time: number): Promise => {\n // 前后获取音频数据差异不能超过 100ms\n if (this.#dec == null || time <= this.#ts || time - this.#ts > 0.1e6) {\n this.#reset();\n this.#ts = time;\n for (let i = 0; i < this.samples.length; i++) {\n if (this.samples[i].cts < time) continue;\n this.#decCusorIdx = i;\n break;\n }\n return [];\n }\n\n this.#curAborter.abort = true;\n const deltaTime = time - this.#ts;\n this.#ts = time;\n\n this.#curAborter = { abort: false, st: performance.now() };\n return await this.#parseFrame(deltaTime, this.#dec, this.#curAborter);\n };\n\n #ts = 0;\n #decCusorIdx = 0;\n #pcmData: {\n frameCnt: number;\n data: [Float32Array, Float32Array][];\n } = {\n frameCnt: 0,\n data: [],\n };\n #parseFrame = async (\n deltaTime: number,\n dec: ReturnType | null = null,\n aborter: { abort: boolean; st: number },\n ): Promise => {\n if (dec == null || aborter.abort || dec.state === 'closed') return [];\n\n const emitFrameCnt = Math.ceil(deltaTime * (this.#sampleRate / 1e6));\n if (emitFrameCnt === 0) return [];\n\n // 数据满足需要\n const ramainFrameCnt = this.#pcmData.frameCnt - emitFrameCnt;\n if (ramainFrameCnt > 0) {\n // 剩余音频数据小于 100ms\n if (ramainFrameCnt < DEFAULT_AUDIO_CONF.sampleRate / 10) {\n this.#startDecode(dec);\n }\n return emitAudioFrames(this.#pcmData, emitFrameCnt);\n }\n\n if (dec.decodeQueueSize > 10) {\n if (performance.now() - aborter.st > 3e3) {\n aborter.abort = true;\n throw Error(\n `MP4Clip.tick audio timeout, ${JSON.stringify(this.#getState())}`,\n );\n }\n // 解码中,等待\n await sleep(15);\n } else if (this.#decCusorIdx >= this.samples.length - 1) {\n // decode completed\n return [];\n } else {\n this.#startDecode(dec);\n }\n return this.#parseFrame(deltaTime, dec, aborter);\n };\n\n #startDecode = (dec: ReturnType) => {\n if (dec.decodeQueueSize > 100) return;\n // 启动解码任务\n const samples = [];\n let i = this.#decCusorIdx;\n while (i < this.samples.length) {\n const s = this.samples[i];\n i += 1;\n if (s.deleted) continue;\n samples.push(s);\n if (samples.length >= 10) break;\n }\n this.#decCusorIdx = i;\n\n dec.decode(\n samples.map(\n (s) =>\n new EncodedAudioChunk({\n type: 'key',\n timestamp: s.cts,\n duration: s.duration,\n data: s.data!,\n }),\n ),\n );\n };\n\n #reset = () => {\n this.#ts = 0;\n this.#decCusorIdx = 0;\n this.#pcmData = {\n frameCnt: 0,\n data: [],\n };\n this.#dec?.close();\n this.#dec = createAudioChunksDecoder(\n this.conf,\n {\n resampleRate: DEFAULT_AUDIO_CONF.sampleRate,\n volume: this.#volume,\n },\n (pcmArr) => {\n this.#pcmData.data.push(pcmArr as [Float32Array, Float32Array]);\n this.#pcmData.frameCnt += pcmArr[0].length;\n },\n );\n };\n\n #getState = () => ({\n time: this.#ts,\n decState: this.#dec?.state,\n decQSize: this.#dec?.decodeQueueSize,\n decCusorIdx: this.#decCusorIdx,\n sampleLen: this.samples.length,\n pcmLen: this.#pcmData.frameCnt,\n });\n\n destroy = () => {\n this.#dec = null;\n this.#curAborter.abort = true;\n this.#pcmData = {\n frameCnt: 0,\n data: [],\n };\n this.localFileReader.close();\n };\n}\n\nfunction createAudioChunksDecoder(\n decoderConf: AudioDecoderConfig,\n opts: { resampleRate: number; volume: number },\n outputCb: (pcm: Float32Array[]) => void,\n) {\n const outputHandler = (pcmArr: Float32Array[]) => {\n if (pcmArr.length === 0) return;\n // 音量调节\n if (opts.volume !== 1) {\n for (const pcm of pcmArr)\n for (let i = 0; i < pcm.length; i++) pcm[i] *= opts.volume;\n }\n\n // 补齐双声道\n if (pcmArr.length === 1) pcmArr = [pcmArr[0], pcmArr[0]];\n\n outputCb(pcmArr);\n };\n const resampleQ = createPromiseQueue(outputHandler);\n\n const needResample = opts.resampleRate !== decoderConf.sampleRate;\n const adec = new AudioDecoder({\n output: (ad) => {\n const pcm = extractPCM4AudioData(ad);\n if (needResample) {\n resampleQ(() =>\n audioResample(pcm, ad.sampleRate, {\n rate: opts.resampleRate,\n chanCount: ad.numberOfChannels,\n }),\n );\n } else {\n outputHandler(pcm);\n }\n ad.close();\n },\n error: (err) => {\n Log.error(`MP4Clip AudioDecoder err: ${err.message}`);\n },\n });\n adec.configure(decoderConf);\n\n return {\n decode(chunks: EncodedAudioChunk[]) {\n for (const chunk of chunks) adec.decode(chunk);\n },\n close() {\n if (adec.state !== 'closed') adec.close();\n },\n get state() {\n return adec.state;\n },\n get decodeQueueSize() {\n return adec.decodeQueueSize;\n },\n };\n}\n\n// 并行执行任务,但按顺序emit结果\nfunction createPromiseQueue(onResult: (data: T) => void) {\n const rsCache: T[] = [];\n let waitingIdx = 0;\n\n function updateRs(rs: T, emitIdx: number) {\n rsCache[emitIdx] = rs;\n emitRs();\n }\n\n function emitRs() {\n const rs = rsCache[waitingIdx];\n if (rs == null) return;\n onResult(rs);\n\n waitingIdx += 1;\n emitRs();\n }\n\n let addIdx = 0;\n return (task: () => Promise) => {\n const emitIdx = addIdx;\n addIdx += 1;\n task()\n .then((rs) => updateRs(rs, emitIdx))\n .catch((err) => updateRs(err, emitIdx));\n };\n}\n\nfunction emitAudioFrames(\n pcmData: { frameCnt: number; data: [Float32Array, Float32Array][] },\n emitCnt: number,\n) {\n // todo: perf 重复利用内存空间\n const audio = [new Float32Array(emitCnt), new Float32Array(emitCnt)];\n let offset = 0;\n let i = 0;\n for (; i < pcmData.data.length; ) {\n const [chan0, chan1] = pcmData.data[i];\n if (offset + chan0.length > emitCnt) {\n const gapCnt = emitCnt - offset;\n audio[0].set(chan0.subarray(0, gapCnt), offset);\n audio[1].set(chan1.subarray(0, gapCnt), offset);\n pcmData.data[i][0] = chan0.subarray(gapCnt, chan0.length);\n pcmData.data[i][1] = chan1.subarray(gapCnt, chan1.length);\n break;\n } else {\n audio[0].set(chan0, offset);\n audio[1].set(chan1, offset);\n offset += chan0.length;\n i++;\n }\n }\n pcmData.data = pcmData.data.slice(i);\n pcmData.frameCnt -= emitCnt;\n return audio;\n}\n\nasync function videosamples2Chunks(\n samples: ExtMP4Sample[],\n reader: Awaited>,\n): Promise {\n const first = samples[0];\n const last = samples.at(-1);\n if (last == null) return [];\n\n const rangSize = last.offset + last.size - first.offset;\n if (rangSize < 30e6) {\n // 单次读取数据小于 30M,就一次性读取数据,降低 IO 频次\n const data = new Uint8Array(\n await reader.read(rangSize, { at: first.offset }),\n );\n return samples.map((s) => {\n const offset = s.offset - first.offset;\n let sData = data.subarray(offset, offset + s.size);\n if (s.is_idr) sData = removeSEIForIDR(sData);\n return new EncodedVideoChunk({\n type: s.is_sync ? 'key' : 'delta',\n timestamp: s.cts,\n duration: s.duration,\n data: sData,\n });\n });\n }\n\n return await Promise.all(\n samples.map(async (s) => {\n let sData = await reader.read(s.size, {\n at: s.offset,\n });\n if (s.is_idr) sData = removeSEIForIDR(new Uint8Array(sData));\n return new EncodedVideoChunk({\n type: s.is_sync ? 'key' : 'delta',\n timestamp: s.cts,\n duration: s.duration,\n data: sData,\n });\n }),\n );\n}\n\nfunction createVF2BlobConvtr(\n width: number,\n height: number,\n opts?: ImageEncodeOptions,\n) {\n const cvs = new OffscreenCanvas(width, height);\n const ctx = cvs.getContext('2d')!;\n\n return async (vf: VideoFrame) => {\n ctx.drawImage(vf, 0, 0, width, height);\n vf.close();\n const blob = await cvs.convertToBlob(opts);\n return blob;\n };\n}\n\nfunction splitVideoSampleByTime(videoSamples: ExtMP4Sample[], time: number) {\n if (videoSamples.length === 0) return [];\n let gopStartIdx = 0;\n let gopEndIdx = 0;\n let hitIdx = -1;\n for (let i = 0; i < videoSamples.length; i++) {\n const s = videoSamples[i];\n if (hitIdx === -1 && time < s.cts) hitIdx = i - 1;\n if (s.is_idr) {\n if (hitIdx === -1) {\n gopStartIdx = i;\n } else {\n gopEndIdx = i;\n break;\n }\n }\n }\n\n const hitSample = videoSamples[hitIdx];\n if (hitSample == null) throw Error('Not found video sample by time');\n\n const preSlice = videoSamples\n .slice(0, gopEndIdx === 0 ? videoSamples.length : gopEndIdx)\n .map((s) => ({ ...s }));\n for (let i = gopStartIdx; i < preSlice.length; i++) {\n const s = preSlice[i];\n if (time < s.cts) {\n s.deleted = true;\n s.cts = -1;\n }\n }\n\n const postSlice = videoSamples\n .slice(hitSample.is_idr ? gopEndIdx : gopStartIdx)\n .map((s) => ({ ...s, cts: s.cts - time }));\n\n for (const s of postSlice) {\n if (s.cts >= 0) break;\n // 将第一个 GoP 中前半部分标记为 deleted\n s.deleted = true;\n s.cts = -1;\n }\n\n return [preSlice, postSlice];\n}\n\nfunction splitAudioSampleByTime(audioSamples: ExtMP4Sample[], time: number) {\n if (audioSamples.length === 0) return [];\n let hitIdx = -1;\n for (let i = 0; i < audioSamples.length; i++) {\n const s = audioSamples[i];\n if (time > s.cts) continue;\n hitIdx = i;\n break;\n }\n if (hitIdx === -1) throw Error('Not found audio sample by time');\n const preSlice = audioSamples.slice(0, hitIdx);\n const postSlice = audioSamples\n .slice(hitIdx)\n .map((s) => ({ ...s, cts: s.cts - time }));\n return [preSlice, postSlice];\n}\n\n// 兼容解码错误\nfunction decodeGoP(\n dec: VideoDecoder,\n chunks: EncodedVideoChunk[],\n opts: {\n onDecodingError?: (err: Error) => void;\n },\n) {\n let i = 0;\n if (dec.state !== 'configured') return;\n for (; i < chunks.length; i++) dec.decode(chunks[i]);\n\n // windows 某些设备 flush 可能不会被 resolved,所以不能 await flush\n dec.flush().catch((err) => {\n if (!(err instanceof Error)) throw err;\n if (\n err.message.includes('Decoding error') &&\n opts.onDecodingError != null\n ) {\n opts.onDecodingError(err);\n return;\n }\n // reset 中断解码器,预期会抛出 AbortedError\n if (!err.message.includes('Aborted due to close')) {\n throw err;\n }\n });\n}\n\n// 当 IDR 帧前面携带其它数据(如 SEI)可能导致解码失败\nfunction removeSEIForIDR(u8buf: Uint8Array) {\n const dv = new DataView(u8buf.buffer);\n if ((dv.getUint8(4) & 0x1f) === 6) {\n return u8buf.subarray(dv.getUint32(0) + 4);\n }\n return u8buf;\n}\n\nfunction isIDRFrame(u8Arr: Uint8Array) {\n const dv = new DataView(u8Arr.buffer);\n let i = 0;\n for (; i < u8Arr.byteLength - 4; ) {\n if ((dv.getUint8(i + 4) & 0x1f) === 5) return true;\n // 跳至下一个 NALU 继续检查\n i += dv.getUint32(i) + 4;\n }\n return false;\n}\n\nasync function thumbnailByKeyFrame(\n samples: ExtMP4Sample[],\n localFile: OPFSToolFile,\n decConf: VideoDecoderConfig,\n abortSingl: AbortSignal,\n time: { start: number; end: number },\n onOutput: (vf: VideoFrame, done: boolean) => void,\n) {\n const fileReader = await localFile.createReader();\n let cnt = 0;\n const dec = new VideoDecoder({\n output: (vf) => {\n cnt += 1;\n const done = cnt === chunks.length;\n onOutput(vf, done);\n if (done) fileReader.close();\n },\n error: Log.error,\n });\n abortSingl.addEventListener('abort', () => {\n fileReader.close();\n dec.close();\n });\n\n const chunks = await videosamples2Chunks(\n samples.filter(\n (s) =>\n !s.deleted && s.is_sync && s.cts >= time.start && s.cts <= time.end,\n ),\n fileReader,\n );\n if (chunks.length === 0 || abortSingl.aborted) return;\n\n dec.configure(decConf);\n decodeGoP(dec, chunks, {});\n}\n","import { decodeImg } from '../av-utils';\nimport { Log } from '../log';\nimport { IClip } from './iclip';\n\ntype AnimateImgType = 'avif' | 'webp' | 'png' | 'gif';\n\n/**\n * 图像素材,支持动图\n *\n * 普通文字可通过 {@link renderTxt2ImgBitmap} 转换成图片素材\n *\n * @example\n * new ImgClip((await fetch('')).body);\n *\n * @example\n * new ImgClip(\n * await renderTxt2ImgBitmap(\n * '水印',\n * `font-size:40px; color: white; text-shadow: 2px 2px 6px red;`,\n * )\n * )\n *\n * @see [视频合成](https://bilibili.github.io/WebAV/demo/2_1-concat-video)\n */\nexport class ImgClip implements IClip {\n ready: IClip['ready'];\n\n #meta = {\n // 微秒\n duration: 0,\n width: 0,\n height: 0,\n };\n\n /**\n * ⚠️ 静态图片的 duration 为 Infinity\n *\n * 使用 Sprite 包装时需要将它的 duration 设置为有限数\n *\n */\n get meta() {\n return { ...this.#meta };\n }\n\n #img: ImageBitmap | null = null;\n\n #frames: VideoFrame[] = [];\n\n /**\n * 静态图片可使用流、ImageBitmap 初始化\n *\n * 动图需要使用 VideoFrame[] 或提供图片类型\n */\n constructor(\n dataSource:\n | ReadableStream\n | ImageBitmap\n | VideoFrame[]\n | { type: `image/${AnimateImgType}`; stream: ReadableStream },\n ) {\n const initWithImgBitmap = (imgBitmap: ImageBitmap) => {\n this.#img = imgBitmap;\n this.#meta.width = imgBitmap.width;\n this.#meta.height = imgBitmap.height;\n this.#meta.duration = Infinity;\n return { ...this.#meta };\n };\n\n if (dataSource instanceof ReadableStream) {\n this.ready = new Response(dataSource)\n .blob()\n .then((data) => createImageBitmap(data))\n .then(initWithImgBitmap);\n } else if (dataSource instanceof ImageBitmap) {\n this.ready = Promise.resolve(initWithImgBitmap(dataSource));\n } else if (\n Array.isArray(dataSource) &&\n dataSource.every((it) => it instanceof VideoFrame)\n ) {\n this.#frames = dataSource;\n const frame = this.#frames[0];\n if (frame == null) throw Error('The frame count must be greater than 0');\n this.#meta = {\n width: frame.displayWidth,\n height: frame.displayHeight,\n duration: this.#frames.reduce(\n (acc, cur) => acc + (cur.duration ?? 0),\n 0,\n ),\n };\n this.ready = Promise.resolve({ ...this.#meta, duration: Infinity });\n } else if ('type' in dataSource) {\n this.ready = this.#initAnimateImg(\n dataSource.stream,\n dataSource.type,\n ).then(() => ({\n width: this.#meta.width,\n height: this.#meta.height,\n duration: Infinity,\n }));\n } else {\n throw Error('Illegal arguments');\n }\n }\n\n async #initAnimateImg(\n stream: ReadableStream,\n type: `image/${AnimateImgType}`,\n ) {\n this.#frames = await decodeImg(stream, type);\n const firstVf = this.#frames[0];\n if (firstVf == null) throw Error('No frame available in gif');\n\n this.#meta = {\n duration: this.#frames.reduce((acc, cur) => acc + (cur.duration ?? 0), 0),\n width: firstVf.codedWidth,\n height: firstVf.codedHeight,\n };\n Log.info('ImgClip ready:', this.#meta);\n }\n\n async tick(time: number): Promise<{\n video: ImageBitmap | VideoFrame;\n state: 'success';\n }> {\n if (this.#img != null) {\n return {\n video: await createImageBitmap(this.#img),\n state: 'success',\n };\n }\n const tt = time % this.#meta.duration;\n return {\n video: (\n this.#frames.find(\n (f) => tt >= f.timestamp && tt <= f.timestamp + (f.duration ?? 0),\n ) ?? this.#frames[0]\n ).clone(),\n state: 'success',\n };\n }\n\n async split(time: number) {\n await this.ready;\n if (this.#img != null) {\n return [\n new ImgClip(await createImageBitmap(this.#img)),\n new ImgClip(await createImageBitmap(this.#img)),\n ] as [this, this];\n }\n let hitIdx = -1;\n for (let i = 0; i < this.#frames.length; i++) {\n const vf = this.#frames[i];\n if (time > vf.timestamp) continue;\n hitIdx = i;\n break;\n }\n if (hitIdx === -1) throw Error('Not found frame by time');\n const preSlice = this.#frames\n .slice(0, hitIdx)\n .map((vf) => new VideoFrame(vf));\n const postSlice = this.#frames.slice(hitIdx).map(\n (vf) =>\n new VideoFrame(vf, {\n timestamp: vf.timestamp - time,\n }),\n );\n return [new ImgClip(preSlice), new ImgClip(postSlice)] as [this, this];\n }\n\n async clone() {\n await this.ready;\n const data =\n this.#img == null\n ? this.#frames.map((vf) => vf.clone())\n : await createImageBitmap(this.#img);\n return new ImgClip(data) as this;\n }\n\n destroy(): void {\n Log.info('ImgClip destroy');\n this.#img?.close();\n this.#frames.forEach((f) => f.close());\n }\n}\n","import {\n concatPCMFragments,\n extractPCM4AudioBuffer,\n ringSliceFloat32Array,\n} from '../av-utils';\nimport { Log } from '../log';\nimport { DEFAULT_AUDIO_CONF, IClip } from './iclip';\n\ninterface IAudioClipOpts {\n loop?: boolean;\n volume?: number;\n}\n\n/**\n * 音频素材,为创建、编辑音视频功能提供音频数据\n *\n * @example\n * new AudioClip((await fetch('')).body, {\n * loop: true,\n * }),\n */\nexport class AudioClip implements IClip {\n static ctx: AudioContext | null = null;\n\n ready: IClip['ready'];\n\n #meta = {\n // 微秒\n duration: 0,\n width: 0,\n height: 0,\n };\n\n /**\n * 音频元信息\n *\n * ⚠️ 注意,这里是转换后(标准化)的元信息,非原始音频元信息\n */\n get meta() {\n return {\n ...this.#meta,\n sampleRate: DEFAULT_AUDIO_CONF.sampleRate,\n chanCount: 2,\n };\n }\n\n #chan0Buf = new Float32Array();\n #chan1Buf = new Float32Array();\n /**\n * 获取音频素材完整的 PCM 数据\n */\n getPCMData(): Float32Array[] {\n return [this.#chan0Buf, this.#chan1Buf];\n }\n\n #opts;\n\n /**\n *\n * @param dataSource 音频文件流\n * @param opts 音频配置,控制音量、是否循环\n */\n constructor(\n dataSource: ReadableStream | Float32Array[],\n opts: IAudioClipOpts = {},\n ) {\n this.#opts = {\n loop: false,\n volume: 1,\n ...opts,\n };\n\n this.ready = this.#init(dataSource).then(() => ({\n // audio 没有宽高,无需绘制\n width: 0,\n height: 0,\n duration: opts.loop ? Infinity : this.#meta.duration,\n }));\n }\n\n async #init(\n dataSource: ReadableStream | Float32Array[],\n ): Promise {\n if (AudioClip.ctx == null) {\n AudioClip.ctx = new AudioContext({\n sampleRate: DEFAULT_AUDIO_CONF.sampleRate,\n });\n }\n\n const tStart = performance.now();\n const pcm =\n dataSource instanceof ReadableStream\n ? await parseStream2PCM(dataSource, AudioClip.ctx)\n : dataSource;\n\n Log.info('Audio clip decoded complete:', performance.now() - tStart);\n\n const volume = this.#opts.volume;\n if (volume !== 1) {\n for (const chan of pcm)\n for (let i = 0; i < chan.length; i += 1) chan[i] *= volume;\n }\n\n this.#meta.duration = (pcm[0].length / DEFAULT_AUDIO_CONF.sampleRate) * 1e6;\n\n this.#chan0Buf = pcm[0];\n // 单声道 转 立体声\n this.#chan1Buf = pcm[1] ?? this.#chan0Buf;\n\n Log.info(\n 'Audio clip convert to AudioData, time:',\n performance.now() - tStart,\n );\n }\n\n // 微秒\n #ts = 0;\n #frameOffset = 0;\n /**\n * 返回上次与当前时刻差对应的音频 PCM 数据;\n *\n * 若差值超过 3s 或当前时间小于上次时间,则重置状态\n * @example\n * tick(0) // => []\n * tick(1e6) // => [leftChanPCM(1s), rightChanPCM(1s)]\n *\n */\n async tick(time: number): Promise<{\n audio: Float32Array[];\n state: 'success' | 'done';\n }> {\n if (!this.#opts.loop && time >= this.#meta.duration) {\n // 待观察:如果time跨度较大,返回done,理论上会丢失一些音频帧\n return { audio: [], state: 'done' };\n }\n\n const deltaTime = time - this.#ts;\n\n // reset\n if (time < this.#ts || deltaTime > 3e6) {\n this.#ts = time;\n this.#frameOffset = Math.ceil(\n (this.#ts / 1e6) * DEFAULT_AUDIO_CONF.sampleRate,\n );\n return {\n audio: [new Float32Array(0), new Float32Array(0)],\n state: 'success',\n };\n }\n\n this.#ts = time;\n const frameCnt = Math.ceil(\n (deltaTime / 1e6) * DEFAULT_AUDIO_CONF.sampleRate,\n );\n const endIdx = this.#frameOffset + frameCnt;\n const audio = this.#opts.loop\n ? [\n ringSliceFloat32Array(this.#chan0Buf, this.#frameOffset, endIdx),\n ringSliceFloat32Array(this.#chan1Buf, this.#frameOffset, endIdx),\n ]\n : [\n this.#chan0Buf.slice(this.#frameOffset, endIdx),\n this.#chan1Buf.slice(this.#frameOffset, endIdx),\n ];\n this.#frameOffset = endIdx;\n\n return { audio, state: 'success' };\n }\n\n /**\n * 按指定时间切割,返回前后两个音频素材\n * @param time 时间,单位微秒\n */\n async split(time: number) {\n await this.ready;\n const frameCnt = Math.ceil((time / 1e6) * DEFAULT_AUDIO_CONF.sampleRate);\n const preSlice = new AudioClip(\n this.getPCMData().map((chan) => chan.slice(0, frameCnt)),\n this.#opts,\n );\n const postSlice = new AudioClip(\n this.getPCMData().map((chan) => chan.slice(frameCnt)),\n this.#opts,\n );\n return [preSlice, postSlice] as [this, this];\n }\n\n async clone() {\n await this.ready;\n const clip = new AudioClip(this.getPCMData(), this.#opts) as this;\n await clip.ready;\n return clip;\n }\n\n /**\n * 销毁实例,释放资源\n */\n destroy(): void {\n this.#chan0Buf = new Float32Array(0);\n this.#chan1Buf = new Float32Array(0);\n Log.info('---- audioclip destroy ----');\n }\n}\n\n/**\n * 拼接多个 AudioClip\n */\nexport async function concatAudioClip(\n clips: AudioClip[],\n opts?: IAudioClipOpts,\n) {\n const bufs: Float32Array[][] = [];\n for (const clip of clips) {\n await clip.ready;\n bufs.push(clip.getPCMData());\n }\n return new AudioClip(concatPCMFragments(bufs), opts);\n}\n\nasync function parseStream2PCM(\n stream: ReadableStream,\n ctx: AudioContext | OfflineAudioContext,\n): Promise {\n const buf = await new Response(stream).arrayBuffer();\n return extractPCM4AudioBuffer(await ctx.decodeAudioData(buf));\n}\n","import { autoReadStream } from '../av-utils';\nimport { IClip } from './iclip';\n\n/**\n * 包装实时音视频流,仅用于 [AVCanvas](../../av-canvas/classes/AVCanvas.html)\n *\n * ⚠️ 不可用于 {@link Combinator} ,因为后台合成视频的速度是快于物理时间的,实时流无法提供非实时的数据\n *\n * @example\n * const spr = new VisibleSprite(\n * new MediaStreamClip(\n * await navigator.mediaDevices.getUserMedia({ video: true, audio: true, }),\n * ),\n * );\n * await avCvs.addSprite(spr);\n */\nexport class MediaStreamClip implements IClip {\n static ctx: AudioContext | null = null;\n\n ready: IClip['ready'];\n\n #meta = {\n // 微秒\n duration: 0,\n width: 0,\n height: 0,\n };\n\n get meta() {\n return {\n ...this.#meta,\n };\n }\n\n #stopRenderCvs = () => {};\n\n /**\n * 实时流的音轨\n */\n readonly audioTrack: MediaStreamAudioTrack | null;\n\n #cvs: OffscreenCanvas | null = null;\n\n #ms: MediaStream;\n constructor(ms: MediaStream) {\n this.#ms = ms;\n const videoTrack = ms.getVideoTracks()[0];\n if (videoTrack != null) {\n const { width, height } = videoTrack.getSettings();\n videoTrack.contentHint = 'motion';\n this.#meta.width = width ?? 0;\n this.#meta.height = height ?? 0;\n\n this.#cvs = new OffscreenCanvas(width ?? 0, height ?? 0);\n this.#stopRenderCvs = renderVideoTrackToCvs(\n this.#cvs.getContext('2d')!,\n videoTrack,\n );\n }\n\n this.audioTrack = ms.getAudioTracks()[0] ?? null;\n\n this.#meta.duration = Infinity;\n this.ready = Promise.resolve(this.meta);\n }\n\n async tick(): Promise<{\n video: ImageBitmap | null;\n audio: Float32Array[];\n state: 'success';\n }> {\n return {\n video: this.#cvs == null ? null : await createImageBitmap(this.#cvs),\n audio: [],\n state: 'success',\n };\n }\n\n async split() {\n return [await this.clone(), await this.clone()] as [this, this];\n }\n\n async clone() {\n return new MediaStreamClip(this.#ms.clone()) as this;\n }\n\n destroy(): void {\n this.#ms.getTracks().forEach((t) => t.stop());\n this.#stopRenderCvs();\n }\n}\n\nfunction renderVideoTrackToCvs(\n cvsCtx: OffscreenCanvasRenderingContext2D,\n track: MediaStreamVideoTrack,\n) {\n return autoReadStream(\n new MediaStreamTrackProcessor({\n track,\n }).readable,\n {\n onChunk: async (frame) => {\n cvsCtx.drawImage(frame, 0, 0);\n frame.close();\n },\n onDone: async () => {},\n },\n );\n}\n","import { IClip } from './iclip';\n\ninterface IEmbedSubtitlesOpts {\n color?: string;\n textBgColor?: string | null;\n type?: 'srt';\n fontFamily?: string;\n fontSize?: number;\n letterSpacing?: string | null;\n // 字幕偏离底部的距离\n bottomOffset?: number;\n strokeStyle?: string;\n lineWidth?: number | null;\n lineCap?: CanvasLineCap | null;\n lineJoin?: CanvasLineJoin | null;\n textShadow?: {\n offsetX: number;\n offsetY: number;\n blur: number;\n color: string;\n };\n videoWidth: number;\n videoHeight: number;\n}\n\ndeclare global {\n interface OffscreenCanvasRenderingContext2D {\n letterSpacing: string;\n }\n}\n\ninterface SubtitleStruct {\n start: number;\n end: number;\n text: string;\n}\n\n/**\n * 嵌入式字幕,将字幕(目前仅支持 SRT 格式)嵌入视频画面中\n *\n * @example\n * const es = new EmbedSubtitlesClip(srtSubtitleStr, {\n * videoWidth: 1280,\n * videoHeight: 720,\n * fontFamily: 'Noto Sans SC',\n * color: 'white',\n * });\n */\nexport class EmbedSubtitlesClip implements IClip {\n ready: IClip['ready'];\n\n #subtitles: SubtitleStruct[] = [];\n\n #meta = {\n width: 0,\n height: 0,\n duration: 0,\n };\n\n get meta() {\n return { ...this.#meta };\n }\n\n #opts: Required = {\n color: '#FFF',\n textBgColor: null,\n type: 'srt',\n fontSize: 30,\n letterSpacing: null,\n bottomOffset: 30,\n fontFamily: 'Noto Sans SC',\n strokeStyle: '#000',\n lineWidth: null,\n lineCap: null,\n lineJoin: null,\n textShadow: {\n offsetX: 2,\n offsetY: 2,\n blur: 4,\n color: '#000',\n },\n videoWidth: 1280,\n videoHeight: 720,\n };\n\n #cvs: OffscreenCanvas;\n #ctx: OffscreenCanvasRenderingContext2D;\n\n #lastVF: VideoFrame | null = null;\n\n #lineHeight = 0;\n #linePadding = 0;\n\n constructor(content: string | SubtitleStruct[], opts: IEmbedSubtitlesOpts) {\n this.#subtitles = Array.isArray(content)\n ? content\n : parseSrt(content).map(({ start, end, text }) => ({\n start: start * 1e6,\n end: end * 1e6,\n text,\n }));\n if (this.#subtitles.length === 0) throw Error('No subtitles content');\n\n this.#opts = Object.assign(this.#opts, opts);\n // 如果需要绘制背景,则需要给文字添加边距\n this.#linePadding =\n opts.textBgColor == null ? 0 : (opts.fontSize ?? 50) * 0.2;\n\n const { fontSize, fontFamily, videoWidth, videoHeight, letterSpacing } =\n this.#opts;\n this.#lineHeight = fontSize + this.#linePadding * 2;\n this.#cvs = new OffscreenCanvas(videoWidth, videoHeight);\n this.#ctx = this.#cvs.getContext('2d')!;\n this.#ctx.font = `${fontSize}px ${fontFamily}`;\n this.#ctx.textAlign = 'center';\n this.#ctx.textBaseline = 'top';\n this.#ctx.letterSpacing = letterSpacing ?? '0px';\n\n this.#meta = {\n width: videoWidth,\n height: videoHeight,\n duration: this.#subtitles.at(-1)?.end ?? 0,\n };\n // 字幕的宽高 由视频画面内容决定\n this.ready = Promise.resolve(this.meta);\n }\n\n #renderTxt(txt: string) {\n const lines = txt\n .split('\\n')\n .reverse()\n .map((t) => t.trim());\n\n const { width, height } = this.#cvs;\n\n const {\n color,\n fontSize,\n textBgColor,\n textShadow,\n strokeStyle,\n lineWidth,\n lineCap,\n lineJoin,\n bottomOffset,\n } = this.#opts;\n const ctx = this.#ctx;\n\n ctx.clearRect(0, 0, width, height);\n ctx.globalAlpha = 0.6;\n // 测试canvas背景\n // ctx.fillStyle = 'red'\n // ctx.fillRect(0, 0, this.#cvs.width, this.#cvs.height)\n\n let bottomDistance = bottomOffset;\n for (const lineStr of lines) {\n const txtMeas = ctx.measureText(lineStr);\n const centerX = width / 2;\n if (textBgColor != null) {\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = 0;\n // 字幕背景\n ctx.fillStyle = textBgColor;\n ctx.globalAlpha = 0.5;\n ctx.fillRect(\n centerX - txtMeas.actualBoundingBoxLeft - this.#linePadding,\n height - bottomDistance - this.#lineHeight,\n txtMeas.width + this.#linePadding * 2,\n this.#lineHeight,\n );\n } else {\n }\n\n ctx.shadowColor = textShadow.color;\n ctx.shadowOffsetX = textShadow.offsetX;\n ctx.shadowOffsetY = textShadow.offsetY;\n ctx.shadowBlur = textShadow.blur;\n\n ctx.globalAlpha = 1;\n\n if (strokeStyle != null) {\n ctx.lineWidth = lineWidth ?? fontSize / 6;\n if (lineCap != null) ctx.lineCap = lineCap;\n if (lineJoin != null) ctx.lineJoin = lineJoin;\n ctx.strokeStyle = strokeStyle;\n ctx.strokeText(\n lineStr,\n centerX,\n height - bottomDistance - this.#lineHeight + this.#linePadding,\n );\n }\n\n ctx.fillStyle = color;\n ctx.fillText(\n lineStr,\n centerX,\n height - bottomDistance - this.#lineHeight + this.#linePadding,\n );\n\n // 多行,底部偏移距离叠加\n bottomDistance += this.#lineHeight + fontSize * 0.2;\n }\n }\n\n /**\n * @see {@link IClip.tick}\n */\n async tick(time: number): Promise<{\n video?: VideoFrame;\n state: 'done' | 'success';\n }> {\n if (\n this.#lastVF != null &&\n time >= this.#lastVF.timestamp &&\n time <= this.#lastVF.timestamp + (this.#lastVF.duration ?? 0)\n ) {\n return { video: this.#lastVF.clone(), state: 'success' };\n }\n\n let i = 0;\n for (; i < this.#subtitles.length; i += 1) {\n if (time <= this.#subtitles[i].end) break;\n }\n\n const it = this.#subtitles[i] ?? this.#subtitles.at(-1);\n if (time > it.end) return { state: 'done' };\n if (time < it.start) {\n // 此时无字幕内容,清空画布\n this.#ctx.clearRect(0, 0, this.#cvs.width, this.#cvs.height);\n const vf = new VideoFrame(this.#cvs, {\n timestamp: time,\n // 直到下个字幕出现的时机\n duration: it.start - time,\n });\n this.#lastVF?.close();\n this.#lastVF = vf;\n\n return { video: vf.clone(), state: 'success' };\n }\n\n this.#renderTxt(it.text);\n\n const vf = new VideoFrame(this.#cvs, {\n timestamp: time,\n duration: it.end - time,\n });\n this.#lastVF?.close();\n this.#lastVF = vf;\n\n return { video: vf.clone(), state: 'success' };\n }\n\n /**\n * @see {@link IClip.destroy}\n */\n async split(time: number) {\n await this.ready;\n let hitIdx = -1;\n for (let i = 0; i < this.#subtitles.length; i++) {\n const sub = this.#subtitles[i];\n if (time > sub.start) continue;\n hitIdx = i;\n break;\n }\n if (hitIdx === -1) throw Error('Not found subtitle by time');\n const preSlice = this.#subtitles.slice(0, hitIdx).map((s) => ({ ...s }));\n let preLastIt = preSlice.at(-1);\n let postFirstIt = null;\n // 切割时间命中字幕区间,需要将当前字幕元素拆成前后两份\n if (preLastIt != null && preLastIt.end > time) {\n postFirstIt = {\n start: 0,\n end: preLastIt.end - time,\n text: preLastIt.text,\n };\n\n preLastIt.end = time;\n }\n const postSlice = this.#subtitles\n .slice(hitIdx)\n .map((s) => ({ ...s, start: s.start - time, end: s.end - time }));\n if (postFirstIt != null) postSlice.unshift(postFirstIt);\n return [\n new EmbedSubtitlesClip(preSlice, this.#opts),\n new EmbedSubtitlesClip(postSlice, this.#opts),\n ] as [this, this];\n }\n\n /**\n * @see {@link IClip.clone}\n */\n async clone() {\n return new EmbedSubtitlesClip(this.#subtitles.slice(0), this.#opts) as this;\n }\n\n /**\n * @see {@link IClip.destroy}\n */\n destroy() {\n this.#lastVF?.close();\n }\n}\n\n// SRT字幕格式 https://www.cnblogs.com/tocy/p/subtitle-format-srt.html\nfunction srtTimeToSeconds(time: string) {\n const match = time.match(/(\\d{2}):(\\d{2}):(\\d{2}),(\\d{3})/);\n if (match == null) throw Error(`time format error: ${time}`);\n\n const hours = Number(match[1]);\n const minutes = Number(match[2]);\n const seconds = Number(match[3]);\n const milliseconds = Number(match[4]);\n\n return hours * 60 * 60 + minutes * 60 + seconds + milliseconds / 1000;\n}\n\nfunction parseSrt(srt: string) {\n return (\n srt\n .split(/\\r|\\n/)\n .map((s) => s.trim())\n .filter((str) => str.length > 0)\n // 匹配时间戳标记行,匹配失败的为字幕内容\n .map((s) => ({\n lineStr: s,\n match: s.match(\n /(\\d{2}:\\d{2}:\\d{2},\\d{3}) --> (\\d{2}:\\d{2}:\\d{2},\\d{3})/,\n ),\n }))\n // 过滤掉时间上一行的数字标记\n .filter(\n ({ lineStr }, idx, source) =>\n !(/^\\d+$/.test(lineStr) && source[idx + 1]?.match != null),\n )\n // 按时间标记行聚合,拼接字幕内容到 text 字段\n .reduce(\n (acc, { lineStr, match }) => {\n if (match == null) {\n const last = acc.at(-1);\n if (last == null) return acc;\n\n last.text += last.text.length === 0 ? lineStr : `\\n${lineStr}`;\n } else {\n acc.push({\n start: srtTimeToSeconds(match[1]),\n end: srtTimeToSeconds(match[2]),\n text: '',\n });\n }\n\n return acc;\n },\n [] as Array<{\n start: number;\n end: number;\n text: string;\n }>,\n )\n );\n}\n","type EventKey = string | symbol;\n\ntype EventToolType = Record any>;\n\n/**\n * 事件工具类\n *\n * @example\n * const evtTool = new EventTool<{\n * timeupdate: (time: number) => void;\n * paused: () => void;\n * playing: () => void;\n * }>()\n * evtTool.on('paused', () => {})\n * evtTool.emit('paused')\n */\nexport class EventTool {\n /**\n * 在两个 EventTool 实例间转发消息\n * @param from\n * @param to\n * @param evtTypes 需转发的消息类型\n *\n * @example\n * EventTool.forwardEvent(from, to, ['evtName']),\n */\n static forwardEvent<\n T1 extends EventToolType,\n T2 extends EventToolType,\n EvtType extends (keyof T1 | [keyof T1, keyof T2])[],\n >(\n from: { on: EventTool['on'] },\n to: { emit: EventTool['emit'] },\n // 转发的事件名,如果 evtTypes 为序对(元组)表示事件名称需要映射\n evtTypes: EvtType,\n ): () => void {\n const removeHandlers = evtTypes.map((evtType) => {\n const [fromEvtType, toEvtType] = (\n Array.isArray(evtType) ? evtType : [evtType, evtType]\n ) as [keyof T1, keyof T2];\n\n // @ts-expect-error\n return from.on(fromEvtType, (...args) => {\n // @ts-expect-error\n to.emit(toEvtType, ...args);\n });\n });\n return () => {\n removeHandlers.forEach((fn) => fn());\n };\n }\n\n #listeners = new Map>();\n\n /**\n * 监听 EventType 中定义的事件\n */\n on = (type: Type, listener: T[Type]): (() => void) => {\n const handlers = this.#listeners.get(type) ?? new Set();\n handlers.add(listener);\n\n if (!this.#listeners.has(type)) {\n this.#listeners.set(type, handlers);\n }\n\n return () => {\n handlers.delete(listener);\n if (handlers.size === 0) {\n this.#listeners.delete(type);\n }\n };\n };\n\n /**\n * 监听事件,首次触发后自动移除监听\n *\n * 期望回调一次的事件,使用 once; 期望多次回调使用 on\n */\n once = (\n type: Type,\n listener: T[Type],\n ): (() => void) => {\n // @ts-ignore\n const off = this.on(type, (...args) => {\n off();\n listener(...args);\n });\n\n return off;\n };\n\n /**\n * 触发事件\n * @param type\n * @param args\n * @returns\n */\n emit = (\n type: Type,\n ...args: Type extends string\n ? T[Type] extends (...args: any[]) => any\n ? Parameters\n : never\n : never\n ): void => {\n const handlers = this.#listeners.get(type);\n if (handlers == null) return;\n\n handlers.forEach((handler) => handler(...args));\n };\n\n destroy(): void {\n this.#listeners.clear();\n }\n}\n","const createBoxHeader = (type: string, size: number): Uint8Array => {\n const buffer = new Uint8Array(8);\n const view = new DataView(buffer.buffer);\n view.setUint32(0, size); // Write size as a 32-bit unsigned integer\n for (let i = 0; i < 4; i++) {\n buffer[4 + i] = type.charCodeAt(i); // Write type as a 4-character string\n }\n return buffer;\n};\n\nconst createHdlrBox = (): Uint8Array => {\n const tec = new TextEncoder();\n const handlerType = tec.encode('mdta');\n const nameBytes = tec.encode('mp4 handler');\n // header8 + ?8 + mdta4 + ?12 + nameSize + endFlag1\n const size = 8 + 8 + 4 + 12 + nameBytes.byteLength + 1;\n const buffer = new Uint8Array(size);\n const view = new DataView(buffer.buffer);\n\n // Box header\n buffer.set(createBoxHeader('hdlr', size), 0);\n\n // Full box header (version and flags)\n view.setUint32(8, 0);\n\n buffer.set(handlerType, 16);\n buffer.set(nameBytes, 32);\n\n return buffer;\n};\n\nconst createKeysBox = (keys: string[]): Uint8Array => {\n const tec = new TextEncoder();\n const keyNamespace = tec.encode('mdta');\n const keyData = keys.map((key) => {\n const keyBuf = tec.encode(key);\n // size4 + namespace4 + keyBuf\n const size = 4 + 4 + keyBuf.byteLength;\n\n const entryBuf = new Uint8Array(size);\n const dv = new DataView(entryBuf.buffer);\n dv.setUint32(0, size);\n entryBuf.set(keyNamespace, 4);\n entryBuf.set(keyBuf, 4 + keyNamespace.byteLength);\n\n return entryBuf;\n });\n const keyDataSize = keyData.reduce((acc, cur) => acc + cur.byteLength, 0);\n\n const size = 16 + keyDataSize; // 16 bytes for the header and version/flags\n const buffer = new Uint8Array(size);\n const view = new DataView(buffer.buffer);\n\n // Box header\n buffer.set(createBoxHeader('keys', size), 0);\n\n // Full box header (version and flags)\n view.setUint32(8, 0);\n view.setUint32(12, keys.length); // Entry count\n\n // Keys\n let offset = 16;\n for (const keyBuf of keyData) {\n buffer.set(keyBuf, offset);\n offset += keyBuf.byteLength;\n }\n\n return buffer;\n};\n\nconst createIlstBox = (data: Record): Uint8Array => {\n const tec = new TextEncoder();\n const dataStrBuf = tec.encode('data');\n const valueData = Object.entries(data).map(([_, value], index) => {\n const keyId = index + 1; // Assuming keys start from 1\n const valueBytes = tec.encode(value);\n // size4 + keyId4 + valueSize4 + data4 + idx4 + ?4 + value\n const entrySize = 4 + 4 + 4 + 4 + 4 + 4 + valueBytes.byteLength;\n\n const buffer = new Uint8Array(entrySize);\n const view = new DataView(buffer.buffer);\n view.setUint32(0, entrySize);\n view.setUint32(4, keyId);\n\n view.setUint32(8, 16 + valueBytes.byteLength);\n buffer.set(dataStrBuf, 12); // 'data' type\n\n // data idx=1\n view.setUint32(16, 1);\n // Value\n buffer.set(valueBytes, 24);\n\n return buffer;\n });\n\n const valueDataSize = valueData.reduce((acc, cur) => acc + cur.byteLength, 0);\n const totalSizwe = 8 + valueDataSize;\n const buffer = new Uint8Array(totalSizwe);\n buffer.set(createBoxHeader('ilst', totalSizwe), 0);\n\n let offset = 8;\n for (const entry of valueData) {\n buffer.set(entry, offset);\n offset += entry.byteLength;\n }\n\n return buffer;\n};\n\nexport const createMetaBox = (data: Record): Uint8Array => {\n const hdlrBox = createHdlrBox();\n const keysBox = createKeysBox(Object.keys(data));\n const ilstBox = createIlstBox(data);\n\n const size = hdlrBox.length + keysBox.length + ilstBox.length;\n const buffer = new Uint8Array(size);\n\n // buffer.set(createBoxHeader('meta', size), 0);\n buffer.set(hdlrBox, 0);\n buffer.set(keysBox, hdlrBox.length);\n buffer.set(ilstBox, hdlrBox.length + keysBox.length);\n\n return buffer;\n};\n","import mp4box, {\n MP4ArrayBuffer,\n MP4File,\n MP4Sample,\n SampleOpts,\n TrakBoxParser,\n} from '@webav/mp4box.js';\nimport { Log } from '../log';\nimport {\n autoReadStream,\n extractPCM4AudioData,\n extractPCM4AudioBuffer,\n mixinPCM,\n ringSliceFloat32Array,\n concatPCMFragments,\n} from '../av-utils';\nimport { DEFAULT_AUDIO_CONF } from '../clips';\nimport { EventTool } from '../event-tool';\nimport { SampleTransform } from './sample-transform';\nimport { extractFileConfig, unsafeReleaseMP4BoxFile } from './mp4box-utils';\nimport { tmpfile, write } from 'opfs-tools';\nimport { createMetaBox } from './meta-box';\nimport { workerTimer } from '../worker-timer';\n\ntype TCleanFn = () => void;\n\n/**\n * 定义 recodemux 函数的配置选项\n */\ninterface IRecodeMuxOpts {\n /**\n * 视频配置选项,如果为 null 则不处理视频。\n */\n video: {\n width: number;\n height: number;\n expectFPS: number;\n codec: string;\n bitrate: number;\n /**\n * 不安全,随时可能废弃\n */\n __unsafe_hardwareAcceleration__?: HardwareAcceleration;\n } | null;\n /**\n * 音频配置选项,如果为 null 则不处理音频。\n */\n audio: {\n codec: 'opus' | 'aac';\n sampleRate: number;\n channelCount: number;\n } | null;\n /**\n * 预设时长,不代表 track 实际时长\n */\n duration?: number;\n metaDataTags?: Record;\n}\n\n/**\n * 处理音视频的编码和解码。\n * @param opts - 编码音视频数据的配置\n */\nexport function recodemux(opts: IRecodeMuxOpts): {\n /**\n * 编码视频帧\n */\n encodeVideo: (\n frame: VideoFrame,\n options: VideoEncoderEncodeOptions,\n gopId?: number,\n ) => void;\n /**\n * 编码音频数据\n */\n encodeAudio: (data: AudioData) => void;\n /**\n * close 编码器,停止任务\n */\n close: TCleanFn;\n /**\n * 清空编码器队列\n */\n flush: () => Promise;\n /**\n * mp4box 实例\n */\n mp4file: MP4File;\n /**\n * 返回队列长度(背压),用于控制生产视频的进度,队列过大会会占用大量显存\n */\n getEncodeQueueSize: () => number;\n} {\n Log.info('recodemux opts:', opts);\n const mp4file = mp4box.createFile();\n\n // 音视频轨道必须同时创建, 保存在 moov 中\n const avSyncEvtTool = new EventTool<\n Record<'VideoReady' | 'AudioReady', () => void>\n >();\n\n const addMetadata = (\n moov: NonNullable,\n tags: NonNullable,\n ) => {\n const udtaBox = moov.add('udta');\n const metaBox = udtaBox.add('meta');\n metaBox.data = createMetaBox(tags);\n metaBox.size = metaBox.data.byteLength;\n };\n\n let moovReady = false;\n const onMoovReady = () => {\n if (mp4file.moov == null || moovReady) return;\n moovReady = true;\n\n if (opts.metaDataTags != null) addMetadata(mp4file.moov, opts.metaDataTags);\n if (opts.duration != null) {\n mp4file.moov.mvhd.duration = opts.duration;\n }\n };\n\n avSyncEvtTool.once('VideoReady', onMoovReady);\n avSyncEvtTool.once('AudioReady', onMoovReady);\n\n let vEncoder =\n opts.video != null\n ? encodeVideoTrack(opts.video, mp4file, avSyncEvtTool)\n : null;\n let aEncoder =\n opts.audio != null\n ? encodeAudioTrack(opts.audio, mp4file, avSyncEvtTool)\n : null;\n if (opts.video == null) avSyncEvtTool.emit('VideoReady');\n if (opts.audio == null) avSyncEvtTool.emit('AudioReady');\n\n return {\n encodeVideo: (vf, opts) => {\n vEncoder?.encode(vf, opts);\n vf.close();\n },\n encodeAudio: (ad) => {\n if (aEncoder == null) return;\n aEncoder.encode(ad);\n ad.close();\n },\n getEncodeQueueSize: () =>\n vEncoder?.encodeQueueSize ?? aEncoder?.encodeQueueSize ?? 0,\n flush: async () => {\n await Promise.all([\n vEncoder?.flush(),\n aEncoder?.state === 'configured' ? aEncoder.flush() : null,\n ]);\n return;\n },\n close: () => {\n avSyncEvtTool.destroy();\n vEncoder?.close();\n if (aEncoder?.state === 'configured') aEncoder.close();\n },\n mp4file,\n };\n}\n\nfunction encodeVideoTrack(\n opts: NonNullable,\n mp4File: MP4File,\n avSyncEvtTool: EventTool void>>,\n) {\n const videoTrackOpts = {\n // 微秒\n timescale: 1e6,\n width: opts.width,\n height: opts.height,\n brands: ['isom', 'iso2', 'avc1', 'mp42', 'mp41'],\n avcDecoderConfigRecord: null as ArrayBuffer | undefined | null,\n name: 'Track created with WebAV',\n };\n\n let trackId = -1;\n let audioReady = false;\n avSyncEvtTool.once('AudioReady', () => {\n audioReady = true;\n });\n\n const samplesCache: Record<\n 'encoder0' | 'encoder1',\n Array>\n > = {\n encoder0: [],\n encoder1: [],\n };\n const outputHandler = (\n encId: 'encoder0' | 'encoder1',\n chunk: EncodedVideoChunk,\n meta?: EncodedVideoChunkMetadata,\n ) => {\n if (trackId === -1 && meta != null) {\n const desc = meta.decoderConfig?.description as ArrayBuffer;\n fixChromeConstraintSetFlagsBug(desc);\n videoTrackOpts.avcDecoderConfigRecord = desc;\n trackId = mp4File.addTrack(videoTrackOpts);\n avSyncEvtTool.emit('VideoReady');\n Log.info('VideoEncoder, video track ready, trackId:', trackId);\n }\n\n samplesCache[encId].push(chunk2MP4SampleOpts(chunk));\n };\n\n let curEncId: 'encoder0' | 'encoder1' = 'encoder1';\n let lastAddedSampleTime = 0;\n // 小于 10 ms 的帧判定为连续的\n const deltaTime = 10e3;\n function checkCache() {\n if (!audioReady) return;\n const nextEncId = curEncId === 'encoder1' ? 'encoder0' : 'encoder1';\n const curCache = samplesCache[curEncId];\n const nextCache = samplesCache[nextEncId];\n // 无数据\n if (curCache.length === 0 && nextCache.length === 0) return;\n\n let curFirst = curCache[0];\n if (curFirst != null && curFirst.cts - lastAddedSampleTime < deltaTime) {\n const lastTs = addSampleToFile(curCache);\n if (lastTs > lastAddedSampleTime) lastAddedSampleTime = lastTs;\n }\n\n // 检测是否需要切换消费队列\n const nextFirst = nextCache[0];\n // 另一个队列跟已消费的最后一帧是连续的,则需要切换\n if (nextFirst != null && nextFirst.cts - lastAddedSampleTime < deltaTime) {\n curEncId = nextEncId;\n // 说明另一个队列有数据,尽快消费\n checkCache();\n }\n }\n\n function addSampleToFile(\n chunks: Array>,\n ) {\n let lastTime = -1;\n let i = 0;\n for (; i < chunks.length; i++) {\n const c = chunks[i];\n // 每次消费到下一个关键帧结束,可能需要切换队列\n if (i > 0 && c.is_sync) break;\n\n mp4File.addSample(trackId, c.data, c);\n lastTime = c.cts + c.duration;\n }\n chunks.splice(0, i);\n return lastTime;\n }\n\n const stopTimer = workerTimer(checkCache, 15);\n\n const encoder0 = createVideoEncoder(opts, (chunk, meta) =>\n outputHandler('encoder0', chunk, meta),\n );\n const encoder1 = createVideoEncoder(opts, (chunk, meta) =>\n outputHandler('encoder1', chunk, meta),\n );\n\n let gopId = 0;\n return {\n get encodeQueueSize() {\n return encoder0.encodeQueueSize + encoder1.encodeQueueSize;\n },\n encode: (vf: VideoFrame, opts: VideoEncoderEncodeOptions) => {\n if (opts.keyFrame) gopId += 1;\n const encoder = gopId % 2 === 0 ? encoder0 : encoder1;\n encoder.encode(vf, opts);\n },\n flush: async () => {\n await Promise.all([\n encoder0.state === 'configured' ? await encoder0.flush() : null,\n encoder1.state === 'configured' ? await encoder1.flush() : null,\n ]);\n stopTimer();\n checkCache();\n },\n close: () => {\n if (encoder0.state === 'configured') encoder0.close();\n if (encoder1.state === 'configured') encoder1.close();\n },\n };\n}\n\n// https://github.com/bilibili/WebAV/issues/203\nfunction fixChromeConstraintSetFlagsBug(desc: ArrayBuffer) {\n const u8 = new Uint8Array(desc);\n const constraintSetFlag = u8[2];\n // 如果 constraint_set_flags 字节二进制 第0位或第1位值为1\n // 说明取值错误,忽略该字段避免解码异常\n if (constraintSetFlag.toString(2).slice(-2).includes('1')) {\n u8[2] = 0;\n }\n}\n\nfunction createVideoEncoder(\n videoOpts: NonNullable,\n outHandler: EncodedVideoChunkOutputCallback,\n): VideoEncoder {\n const encoder = new VideoEncoder({\n error: Log.error,\n output: outHandler,\n });\n\n encoder.configure({\n codec: videoOpts.codec,\n framerate: videoOpts.expectFPS,\n hardwareAcceleration: videoOpts.__unsafe_hardwareAcceleration__,\n // 码率\n bitrate: videoOpts.bitrate,\n width: videoOpts.width,\n height: videoOpts.height,\n // H264 不支持背景透明度\n alpha: 'discard',\n // macos 自带播放器只支持avc\n avc: { format: 'avc' },\n // mp4box.js 无法解析 annexb 的 mimeCodec ,只会显示 avc1\n // avc: { format: 'annexb' }\n });\n return encoder;\n}\n\nfunction encodeAudioTrack(\n audioOpts: NonNullable,\n mp4File: MP4File,\n avSyncEvtTool: EventTool void>>,\n): AudioEncoder {\n const audioTrackOpts = {\n timescale: 1e6,\n samplerate: audioOpts.sampleRate,\n channel_count: audioOpts.channelCount,\n hdlr: 'soun',\n type: audioOpts.codec === 'aac' ? 'mp4a' : 'Opus',\n name: 'Track created with WebAV',\n };\n\n let trackId = -1;\n let cache: EncodedAudioChunk[] = [];\n let videoReady = false;\n avSyncEvtTool.once('VideoReady', () => {\n videoReady = true;\n cache.forEach((c) => {\n const s = chunk2MP4SampleOpts(c);\n mp4File.addSample(trackId, s.data, s);\n });\n cache = [];\n });\n\n const encoder = new AudioEncoder({\n error: Log.error,\n output: (chunk, meta) => {\n if (trackId === -1) {\n // 某些设备不会输出 description\n const desc = meta.decoderConfig?.description;\n trackId = mp4File.addTrack({\n ...audioTrackOpts,\n description: desc == null ? undefined : createESDSBox(desc),\n });\n avSyncEvtTool.emit('AudioReady');\n Log.info('AudioEncoder, audio track ready, trackId:', trackId);\n }\n\n if (videoReady) {\n const s = chunk2MP4SampleOpts(chunk);\n mp4File.addSample(trackId, s.data, s);\n } else {\n cache.push(chunk);\n }\n },\n });\n encoder.configure({\n codec: audioOpts.codec === 'aac' ? DEFAULT_AUDIO_CONF.codec : 'opus',\n sampleRate: audioOpts.sampleRate,\n numberOfChannels: audioOpts.channelCount,\n bitrate: 128_000,\n });\n\n return encoder;\n}\n\nexport function _deprecated_stream2file(stream: ReadableStream): {\n file: MP4File;\n stop: () => void;\n} {\n const reader = stream.getReader();\n let chunkOffset = 0;\n const file = mp4box.createFile();\n let stoped = false;\n async function readFile(): Promise {\n while (!stoped) {\n const { done, value } = await reader.read();\n if (done) {\n Log.info('stream source read done');\n file.flush();\n file.onFlush?.();\n return;\n }\n\n const chunk = value.buffer as MP4ArrayBuffer;\n chunk.fileStart = chunkOffset;\n chunkOffset += chunk.byteLength;\n file.appendBuffer(chunk);\n }\n reader.releaseLock();\n stream.cancel();\n }\n readFile().catch(Log.error);\n\n return {\n file,\n stop: () => {\n stoped = true;\n },\n };\n}\n\n/**\n * 将 mp4box file 转换为文件流,用于上传服务器或存储到本地\n * @param file - MP4 文件实例 {@link MP4File}。\n * @param timeSlice - 时间片,用于控制流的发送速度。\n * @param onCancel - 当返回的流被取消时触发该回调函数\n */\nexport function file2stream(\n file: MP4File,\n timeSlice: number,\n onCancel?: TCleanFn,\n): {\n /**\n * 可读流,流的数据是 `Uint8Array`\n */\n stream: ReadableStream;\n /**\n * 流的生产者主动停止向流中输出数据,可向消费者传递错误信息\n */\n stop: (err?: Error) => void;\n} {\n let timerId = 0;\n\n let sendedBoxIdx = 0;\n const boxes = file.boxes;\n\n let firstMoofReady = false;\n const deltaBuf = (): Uint8Array | null => {\n // 避免 moov 未完成时写入文件,导致文件无法被识别\n if (!firstMoofReady) {\n if (boxes.find((box) => box.type === 'moof') != null) {\n firstMoofReady = true;\n } else {\n return null;\n }\n }\n if (sendedBoxIdx >= boxes.length) return null;\n\n const ds = new mp4box.DataStream();\n ds.endianness = mp4box.DataStream.BIG_ENDIAN;\n\n let i = sendedBoxIdx;\n try {\n for (; i < boxes.length; ) {\n boxes[i].write(ds);\n delete boxes[i];\n i += 1;\n }\n } catch (err) {\n const errBox = boxes[i];\n if (err instanceof Error && errBox != null) {\n throw Error(\n `${err.message} | deltaBuf( boxType: ${errBox.type}, boxSize: ${errBox.size}, boxDataLen: ${errBox.data?.length ?? -1})`,\n );\n }\n throw err;\n }\n\n unsafeReleaseMP4BoxFile(file);\n\n sendedBoxIdx = boxes.length;\n return new Uint8Array(ds.buffer);\n };\n\n let stoped = false;\n let canceled = false;\n let exit: ((err?: Error) => void) | null = null;\n const stream = new ReadableStream({\n start(ctrl) {\n timerId = self.setInterval(() => {\n const d = deltaBuf();\n if (d != null && !canceled) ctrl.enqueue(d);\n }, timeSlice);\n\n exit = (err) => {\n clearInterval(timerId);\n file.flush();\n if (err != null) {\n ctrl.error(err);\n return;\n }\n\n const d = deltaBuf();\n if (d != null && !canceled) ctrl.enqueue(d);\n\n if (!canceled) ctrl.close();\n };\n\n // 安全起见,检测如果start触发时已经 stoped\n if (stoped) exit();\n },\n cancel() {\n canceled = true;\n clearInterval(timerId);\n onCancel?.();\n },\n });\n\n return {\n stream,\n stop: (err) => {\n if (stoped) return;\n stoped = true;\n exit?.(err);\n },\n };\n}\n\nfunction fixMP4BoxFileDuration(\n inMP4File: MP4File,\n): () => Promise | null> {\n let sendedBoxIdx = 0;\n const boxes = inMP4File.boxes;\n const tracks: Array<{ track: TrakBoxParser; id: number }> = [];\n let totalDuration = 0;\n\n async function write2TmpFile() {\n const buf = box2Buf(boxes, sendedBoxIdx);\n sendedBoxIdx = boxes.length;\n // 释放引用,避免内存泄露\n // todo: use unsafeReleaseMP4BoxFile\n tracks.forEach(({ track, id }) => {\n const s = track.samples.at(-1);\n if (s != null)\n totalDuration = Math.max(totalDuration, s.cts + s.duration);\n\n inMP4File.releaseUsedSamples(id, track.samples.length);\n track.samples = [];\n });\n inMP4File.mdats = [];\n inMP4File.moofs = [];\n if (buf != null) await tmpFileWriter?.write(buf);\n }\n\n let moovPrevBoxes: typeof boxes = [];\n function moovBoxReady() {\n if (moovPrevBoxes.length > 0) return true;\n\n const moovIdx = boxes.findIndex((box) => box.type === 'moov');\n if (moovIdx === -1) return false;\n\n moovPrevBoxes = boxes.slice(0, moovIdx + 1);\n sendedBoxIdx = moovIdx + 1;\n\n if (tracks.length === 0) {\n for (let i = 1; true; i += 1) {\n const track = inMP4File.getTrackById(i);\n if (track == null) break;\n tracks.push({ track, id: i });\n }\n }\n\n return true;\n }\n\n let timerId = 0;\n // 把 moov 之外的 box 先写入临时文件,待更新 duration 之后再拼接临时文件\n const postFile = tmpfile();\n let tmpFileWriter: Awaited<\n ReturnType['createWriter']>\n > | null = null;\n\n const initPromise = (async () => {\n tmpFileWriter = await postFile.createWriter();\n\n timerId = self.setInterval(() => {\n if (!moovBoxReady()) return;\n write2TmpFile();\n }, 100);\n })();\n\n let stoped = false;\n return async () => {\n if (stoped) throw Error('File exported');\n stoped = true;\n\n await initPromise;\n clearInterval(timerId);\n\n if (!moovBoxReady() || tmpFileWriter == null) return null;\n inMP4File.flush();\n await write2TmpFile();\n await tmpFileWriter?.close();\n\n const moov = moovPrevBoxes.find((box) => box.type === 'moov') as\n | typeof inMP4File.moov\n | undefined;\n if (moov == null) return null;\n\n moov.mvhd.duration = totalDuration;\n\n const rsFile = tmpfile();\n const buf = box2Buf(moovPrevBoxes, 0)!;\n await write(rsFile, buf);\n await write(rsFile, postFile, { overwrite: false });\n\n return await rsFile.stream();\n };\n\n function box2Buf(source: typeof boxes, startIdx: number): Uint8Array | null {\n if (startIdx >= source.length) return null;\n\n const ds = new mp4box.DataStream();\n ds.endianness = mp4box.DataStream.BIG_ENDIAN;\n\n for (let i = startIdx; i < source.length; i++) {\n if (source[i] === null) continue;\n source[i].write(ds);\n delete source[i];\n }\n return new Uint8Array(ds.buffer);\n }\n}\n\n/**\n * EncodedAudioChunk | EncodedVideoChunk 转换为 MP4 addSample 需要的参数\n */\nfunction chunk2MP4SampleOpts(\n chunk: EncodedAudioChunk | EncodedVideoChunk,\n): SampleOpts & {\n data: ArrayBuffer;\n} {\n const buf = new ArrayBuffer(chunk.byteLength);\n chunk.copyTo(buf);\n const dts = chunk.timestamp;\n return {\n duration: chunk.duration ?? 0,\n dts,\n cts: dts,\n is_sync: chunk.type === 'key',\n data: buf,\n };\n}\n\n/**\n * 快速拼接多个mp4 文件流,要求所有 mp4 的属性一致,\n * 属性包括(不限于):音视频编码格式、分辨率、采样率\n *\n * @param streams 一个包含 Uint8Array 的可读流数组。\n * @returns 返回一个 Promise,该 Promise 在解析时返回一个包含合并后的 MP4 数据的可读流。\n * @throws 如果无法从流生成文件,将抛出错误。\n *\n * @example\n * const streams = [stream1, stream2, stream3];\n * const resultStream = await fastConcatMP4(streams);\n */\nexport async function fastConcatMP4(\n streams: ReadableStream[],\n): Promise> {\n const outfile = mp4box.createFile();\n\n const dumpFile = fixMP4BoxFileDuration(outfile);\n await concatStreamsToMP4BoxFile(streams, outfile);\n const outStream = await dumpFile();\n if (outStream == null) throw Error('Can not generate file from streams');\n return outStream;\n}\n\nasync function concatStreamsToMP4BoxFile(\n streams: ReadableStream[],\n outfile: MP4File,\n) {\n let vTrackId = 0;\n let vDTS = 0;\n let vCTS = 0;\n let aTrackId = 0;\n let aDTS = 0;\n let aCTS = 0;\n // ts bug, 不能正确识别类型\n let lastVSamp: any = null;\n let lastASamp: any = null;\n for (const stream of streams) {\n await new Promise(async (resolve) => {\n autoReadStream(stream.pipeThrough(new SampleTransform()), {\n onDone: resolve,\n onChunk: async ({ chunkType, data }) => {\n if (chunkType === 'ready') {\n const { videoTrackConf, audioTrackConf } = extractFileConfig(\n data.file,\n data.info,\n );\n if (vTrackId === 0 && videoTrackConf != null) {\n vTrackId = outfile.addTrack(videoTrackConf);\n }\n if (aTrackId === 0 && audioTrackConf != null) {\n aTrackId = outfile.addTrack(audioTrackConf);\n }\n } else if (chunkType === 'samples') {\n const { type, samples } = data;\n const trackId = type === 'video' ? vTrackId : aTrackId;\n const offsetDTS = type === 'video' ? vDTS : aDTS;\n const offsetCTS = type === 'video' ? vCTS : aCTS;\n\n samples.forEach((s) => {\n outfile.addSample(trackId, s.data, {\n duration: s.duration,\n dts: s.dts + offsetDTS,\n cts: s.cts + offsetCTS,\n is_sync: s.is_sync,\n });\n });\n\n const lastSamp = samples.at(-1);\n if (lastSamp == null) return;\n if (type === 'video') {\n lastVSamp = lastSamp;\n } else if (type === 'audio') {\n lastASamp = lastSamp;\n }\n }\n },\n });\n });\n if (lastVSamp != null) {\n vDTS += lastVSamp.dts;\n vCTS += lastVSamp.cts;\n }\n if (lastASamp != null) {\n aDTS += lastASamp.dts;\n aCTS += lastASamp.cts;\n }\n }\n}\n\n/**\n * 为 WebAV 生成的 fmp4 文件设置正确的时长值\n */\nexport async function fixFMP4Duration(\n stream: ReadableStream,\n): Promise> {\n return await fastConcatMP4([stream]);\n}\n\n/**\n * 创建 MP4 音频样本解码器。\n * @param adConf - 音频解码器配置参数 {@link AudioDecoderConfig}。\n * @returns 返回一个对象,包含 `decode` 和 `close` 方法。\n * - `decode` 方法用于解码 MP4 音频样本,返回解码后的音频数据数组。\n * - `close` 方法用于关闭音频解码器。\n */\nfunction createMP4AudioSampleDecoder(\n adConf: Parameters[0],\n) {\n let cacheAD: AudioData[] = [];\n const adDecoder = new AudioDecoder({\n output: (ad) => {\n cacheAD.push(ad);\n },\n error: Log.error,\n });\n adDecoder.configure(adConf);\n\n return {\n decode: async (ss: MP4Sample[]) => {\n ss.forEach((s) => {\n adDecoder.decode(\n new EncodedAudioChunk({\n type: s.is_sync ? 'key' : 'delta',\n timestamp: (1e6 * s.cts) / s.timescale,\n duration: (1e6 * s.duration) / s.timescale,\n data: s.data,\n }),\n );\n });\n\n await adDecoder.flush();\n\n const rs = cacheAD;\n cacheAD = [];\n\n return rs;\n },\n close: () => {\n adDecoder.close();\n },\n };\n}\n\n// 音频编码与解码API有很大区别,\n// 是因为编码中途调用 AudioEncoder.flush ,会导致声音听起来卡顿\nfunction createMP4AudioSampleEncoder(\n aeConf: Parameters[0],\n onOutput: (s: ReturnType) => void,\n) {\n const adEncoder = new AudioEncoder({\n output: (chunk) => {\n onOutput(chunk2MP4SampleOpts(chunk));\n },\n error: Log.error,\n });\n\n adEncoder.configure({\n codec: aeConf.codec,\n sampleRate: aeConf.sampleRate,\n numberOfChannels: aeConf.numberOfChannels,\n });\n\n // 保留一个音频数据,用于最后做声音淡出\n let lastData: { data: Float32Array; ts: number } | null = null;\n\n function createAD(data: Float32Array, ts: number) {\n return new AudioData({\n timestamp: ts,\n numberOfChannels: aeConf.numberOfChannels,\n numberOfFrames: data.length / aeConf.numberOfChannels,\n sampleRate: aeConf.sampleRate,\n format: 'f32-planar',\n data,\n });\n }\n return {\n encode: async (data: Float32Array, ts: number) => {\n if (lastData != null) {\n adEncoder.encode(createAD(lastData.data, lastData.ts));\n }\n lastData = { data, ts };\n },\n stop: async () => {\n if (lastData != null) {\n // 副作用修改数据\n audioFade(lastData.data, aeConf.numberOfChannels, aeConf.sampleRate);\n adEncoder.encode(createAD(lastData.data, lastData.ts));\n lastData = null;\n }\n await adEncoder.flush();\n adEncoder.close();\n },\n };\n}\n\n/**\n * 音频线性淡出,避免 POP 声\n * 副作用调整音量值\n */\nfunction audioFade(pcmData: Float32Array, chanCnt: number, sampleRate: number) {\n const dataLen = pcmData.length - 1;\n // 避免超出边界,最长 500ms 的淡出时间\n const fadeLen = Math.min(sampleRate / 2, dataLen);\n for (let i = 0; i < fadeLen; i++) {\n for (let j = 1; j <= chanCnt; j++) {\n // 从尾部开始,调整每个声道音量值\n pcmData[Math.floor(dataLen / j) - i] *= i / fadeLen;\n }\n }\n}\n\n/**\n * 视频配音;混合 MP4 与音频文件,仅重编码音频,视频轨道不变\n * @param mp4Stream - MP4 流\n * @param audio - 音频信息\n * @param audio.stream - 音频数据流\n * @param audio.volume - 音频音量\n * @param audio.loop - 音频时长小于视频时,是否循环使用音频流\n * @returns 输出混合后的音频流\n */\nexport function mixinMP4AndAudio(\n mp4Stream: ReadableStream,\n audio: {\n stream: ReadableStream;\n volume: number;\n loop: boolean;\n },\n) {\n Log.info('mixinMP4AndAudio, opts:', {\n volume: audio.volume,\n loop: audio.loop,\n });\n\n const outfile = mp4box.createFile();\n const { stream: outStream, stop: stopOut } = file2stream(outfile, 500);\n\n let audioSampleDecoder: ReturnType<\n typeof createMP4AudioSampleDecoder\n > | null = null;\n\n let audioSampleEncoder: ReturnType<\n typeof createMP4AudioSampleEncoder\n > | null = null;\n\n let inputAudioPCM: Float32Array[] = [];\n\n let vTrackId = 0;\n let aTrackId = 0;\n let audioOffset = 0;\n let mp4HasAudio = true;\n let sampleRate = 48000;\n autoReadStream(mp4Stream.pipeThrough(new SampleTransform()), {\n onDone: async () => {\n await audioSampleEncoder?.stop();\n audioSampleDecoder?.close();\n stopOut();\n },\n onChunk: async ({ chunkType, data }) => {\n if (chunkType === 'ready') {\n const { videoTrackConf, audioTrackConf, audioDecoderConf } =\n extractFileConfig(data.file, data.info);\n if (vTrackId === 0 && videoTrackConf != null) {\n vTrackId = outfile.addTrack(videoTrackConf);\n }\n\n const safeAudioTrackConf = audioTrackConf ?? {\n timescale: 1e6,\n samplerate: sampleRate,\n channel_count: DEFAULT_AUDIO_CONF.channelCount,\n hdlr: 'soun',\n name: 'SoundHandler',\n type: 'mp4a',\n };\n if (aTrackId === 0) {\n aTrackId = outfile.addTrack(safeAudioTrackConf);\n sampleRate = audioTrackConf?.samplerate ?? sampleRate;\n mp4HasAudio = audioTrackConf == null ? false : true;\n }\n const audioCtx = new AudioContext({ sampleRate });\n inputAudioPCM = extractPCM4AudioBuffer(\n await audioCtx.decodeAudioData(\n await new Response(audio.stream).arrayBuffer(),\n ),\n );\n\n if (audioDecoderConf != null) {\n audioSampleDecoder = createMP4AudioSampleDecoder(audioDecoderConf);\n }\n audioSampleEncoder = createMP4AudioSampleEncoder(\n audioDecoderConf ?? {\n codec:\n safeAudioTrackConf.type === 'mp4a'\n ? DEFAULT_AUDIO_CONF.codec\n : safeAudioTrackConf.type,\n numberOfChannels: safeAudioTrackConf.channel_count,\n sampleRate: safeAudioTrackConf.samplerate,\n },\n (s) => outfile.addSample(aTrackId, s.data, s),\n );\n } else if (chunkType === 'samples') {\n const { id, type, samples } = data;\n if (type === 'video') {\n samples.forEach((s) => outfile.addSample(id, s.data, s));\n\n if (!mp4HasAudio) await addInputAudio2Track(samples);\n return;\n }\n\n if (type === 'audio') await mixinAudioSampleAndInputPCM(samples);\n }\n },\n });\n\n function getInputAudioSlice(len: number) {\n const rs = inputAudioPCM.map((chanBuf) =>\n audio.loop\n ? ringSliceFloat32Array(chanBuf, audioOffset, audioOffset + len)\n : chanBuf.slice(audioOffset, audioOffset + len),\n );\n audioOffset += len;\n\n if (audio.volume !== 1) {\n for (const buf of rs)\n for (let i = 0; i < buf.length; i++) buf[i] *= audio.volume;\n }\n\n return rs;\n }\n\n async function addInputAudio2Track(vdieoSamples: MP4Sample[]) {\n const firstSamp = vdieoSamples[0];\n const lastSamp = vdieoSamples[vdieoSamples.length - 1];\n const pcmLength = Math.floor(\n ((lastSamp.cts + lastSamp.duration - firstSamp.cts) /\n lastSamp.timescale) *\n sampleRate,\n );\n const audioDataBuf = mixinPCM([getInputAudioSlice(pcmLength)]);\n if (audioDataBuf.length === 0) return;\n audioSampleEncoder?.encode(\n audioDataBuf,\n (firstSamp.cts / firstSamp.timescale) * 1e6,\n );\n }\n\n async function mixinAudioSampleAndInputPCM(samples: MP4Sample[]) {\n if (audioSampleDecoder == null) return;\n\n // 1. 先解码mp4音频\n // [[chan0, chan1], [chan0, chan1]...]\n const pcmFragments = (await audioSampleDecoder.decode(samples)).map(\n extractPCM4AudioData,\n );\n // [chan0, chan1]\n const mp4AudioPCM = concatPCMFragments(pcmFragments);\n const inputAudioPCM = getInputAudioSlice(mp4AudioPCM[0].length);\n const firstSamp = samples[0];\n\n // 3. 重编码音频\n audioSampleEncoder?.encode(\n // 2. 混合输入的音频\n mixinPCM([mp4AudioPCM, inputAudioPCM]),\n (firstSamp.cts / firstSamp.timescale) * 1e6,\n );\n }\n\n return outStream;\n}\n\n/**\n * 创建 ESDS 盒子(MPEG-4 Elementary Stream Descriptor)\n * ESDS 盒子用于描述 MPEG-4 的流信息,如编解码器类型、流类型、最大比特率、平均比特率等\n * @param config - 配置信息,可以是 `ArrayBuffer` 或 `ArrayBufferView` 类型\n * @return 返回一个 ESDS box\n */\nfunction createESDSBox(config: ArrayBuffer | ArrayBufferView) {\n const configlen = config.byteLength;\n const buf = new Uint8Array([\n 0x00, // version 0\n 0x00,\n 0x00,\n 0x00, // flags\n\n 0x03, // descriptor_type\n 0x17 + configlen, // length\n 0x00,\n // 0x01, // es_id\n 0x02, // es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x12 + configlen, // length\n 0x40, // codec : mpeg4_audio\n 0x15, // stream_type\n 0x00,\n 0x00,\n 0x00, // buffer_size\n 0x00,\n 0x00,\n 0x00,\n 0x00, // maxBitrate\n 0x00,\n 0x00,\n 0x00,\n 0x00, // avgBitrate\n\n 0x05, // descriptor_type\n\n configlen,\n ...new Uint8Array(config instanceof ArrayBuffer ? config : config.buffer),\n\n 0x06,\n 0x01,\n 0x02,\n ]);\n\n const esdsBox = new mp4box.BoxParser.esdsBox(buf.byteLength);\n esdsBox.hdr_size = 0;\n esdsBox.parse(new mp4box.DataStream(buf, 0, mp4box.DataStream.BIG_ENDIAN));\n return esdsBox;\n}\n","/**\n * @file stream.js\n */\n\n/**\n * A lightweight readable stream implemention that handles event dispatching.\n *\n * @class Stream\n */\nvar Stream = /*#__PURE__*/function () {\n function Stream() {\n this.listeners = {};\n }\n /**\n * Add a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */\n\n\n var _proto = Stream.prototype;\n\n _proto.on = function on(type, listener) {\n if (!this.listeners[type]) {\n this.listeners[type] = [];\n }\n\n this.listeners[type].push(listener);\n }\n /**\n * Remove a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {boolean} if we could turn it off or not\n */\n ;\n\n _proto.off = function off(type, listener) {\n if (!this.listeners[type]) {\n return false;\n }\n\n var index = this.listeners[type].indexOf(listener); // TODO: which is better?\n // In Video.js we slice listener functions\n // on trigger so that it does not mess up the order\n // while we loop through.\n //\n // Here we slice on off so that the loop in trigger\n // can continue using it's old reference to loop without\n // messing up the order.\n\n this.listeners[type] = this.listeners[type].slice(0);\n this.listeners[type].splice(index, 1);\n return index > -1;\n }\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {string} type the event name\n */\n ;\n\n _proto.trigger = function trigger(type) {\n var callbacks = this.listeners[type];\n\n if (!callbacks) {\n return;\n } // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n\n\n if (arguments.length === 2) {\n var length = callbacks.length;\n\n for (var i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var _length = callbacks.length;\n\n for (var _i = 0; _i < _length; ++_i) {\n callbacks[_i].apply(this, args);\n }\n }\n }\n /**\n * Destroys the stream and cleans up.\n */\n ;\n\n _proto.dispose = function dispose() {\n this.listeners = {};\n }\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\n ;\n\n _proto.pipe = function pipe(destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n };\n\n return Stream;\n}();\n\nexport { Stream as default };","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","var win;\n\nif (typeof window !== \"undefined\") {\n win = window;\n} else if (typeof global !== \"undefined\") {\n win = global;\n} else if (typeof self !== \"undefined\"){\n win = self;\n} else {\n win = {};\n}\n\nmodule.exports = win;\n","import window from 'global/window';\n\nvar atob = function atob(s) {\n return window.atob ? window.atob(s) : Buffer.from(s, 'base64').toString('binary');\n};\n\nexport default function decodeB64ToUint8Array(b64Text) {\n var decodedString = atob(b64Text);\n var array = new Uint8Array(decodedString.length);\n\n for (var i = 0; i < decodedString.length; i++) {\n array[i] = decodedString.charCodeAt(i);\n }\n\n return array;\n}","/*! @name m3u8-parser @version 7.1.0 @license Apache-2.0 */\nimport Stream from '@videojs/vhs-utils/es/stream.js';\nimport _extends from '@babel/runtime/helpers/extends';\nimport decodeB64ToUint8Array from '@videojs/vhs-utils/es/decode-b64-to-uint8-array.js';\n\n/**\n * @file m3u8/line-stream.js\n */\n/**\n * A stream that buffers string input and generates a `data` event for each\n * line.\n *\n * @class LineStream\n * @extends Stream\n */\n\nclass LineStream extends Stream {\n constructor() {\n super();\n this.buffer = '';\n }\n /**\n * Add new data to be parsed.\n *\n * @param {string} data the text to process\n */\n\n\n push(data) {\n let nextNewline;\n this.buffer += data;\n nextNewline = this.buffer.indexOf('\\n');\n\n for (; nextNewline > -1; nextNewline = this.buffer.indexOf('\\n')) {\n this.trigger('data', this.buffer.substring(0, nextNewline));\n this.buffer = this.buffer.substring(nextNewline + 1);\n }\n }\n\n}\n\nconst TAB = String.fromCharCode(0x09);\n\nconst parseByterange = function (byterangeString) {\n // optionally match and capture 0+ digits before `@`\n // optionally match and capture 0+ digits after `@`\n const match = /([0-9.]*)?@?([0-9.]*)?/.exec(byterangeString || '');\n const result = {};\n\n if (match[1]) {\n result.length = parseInt(match[1], 10);\n }\n\n if (match[2]) {\n result.offset = parseInt(match[2], 10);\n }\n\n return result;\n};\n/**\n * \"forgiving\" attribute list psuedo-grammar:\n * attributes -> keyvalue (',' keyvalue)*\n * keyvalue -> key '=' value\n * key -> [^=]*\n * value -> '\"' [^\"]* '\"' | [^,]*\n */\n\n\nconst attributeSeparator = function () {\n const key = '[^=]*';\n const value = '\"[^\"]*\"|[^,]*';\n const keyvalue = '(?:' + key + ')=(?:' + value + ')';\n return new RegExp('(?:^|,)(' + keyvalue + ')');\n};\n/**\n * Parse attributes from a line given the separator\n *\n * @param {string} attributes the attribute line to parse\n */\n\n\nconst parseAttributes = function (attributes) {\n const result = {};\n\n if (!attributes) {\n return result;\n } // split the string using attributes as the separator\n\n\n const attrs = attributes.split(attributeSeparator());\n let i = attrs.length;\n let attr;\n\n while (i--) {\n // filter out unmatched portions of the string\n if (attrs[i] === '') {\n continue;\n } // split the key and value\n\n\n attr = /([^=]*)=(.*)/.exec(attrs[i]).slice(1); // trim whitespace and remove optional quotes around the value\n\n attr[0] = attr[0].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^['\"](.*)['\"]$/g, '$1');\n result[attr[0]] = attr[1];\n }\n\n return result;\n};\n/**\n * A line-level M3U8 parser event stream. It expects to receive input one\n * line at a time and performs a context-free parse of its contents. A stream\n * interpretation of a manifest can be useful if the manifest is expected to\n * be too large to fit comfortably into memory or the entirety of the input\n * is not immediately available. Otherwise, it's probably much easier to work\n * with a regular `Parser` object.\n *\n * Produces `data` events with an object that captures the parser's\n * interpretation of the input. That object has a property `tag` that is one\n * of `uri`, `comment`, or `tag`. URIs only have a single additional\n * property, `line`, which captures the entirety of the input without\n * interpretation. Comments similarly have a single additional property\n * `text` which is the input without the leading `#`.\n *\n * Tags always have a property `tagType` which is the lower-cased version of\n * the M3U8 directive without the `#EXT` or `#EXT-X-` prefix. For instance,\n * `#EXT-X-MEDIA-SEQUENCE` becomes `media-sequence` when parsed. Unrecognized\n * tags are given the tag type `unknown` and a single additional property\n * `data` with the remainder of the input.\n *\n * @class ParseStream\n * @extends Stream\n */\n\n\nclass ParseStream extends Stream {\n constructor() {\n super();\n this.customParsers = [];\n this.tagMappers = [];\n }\n /**\n * Parses an additional line of input.\n *\n * @param {string} line a single line of an M3U8 file to parse\n */\n\n\n push(line) {\n let match;\n let event; // strip whitespace\n\n line = line.trim();\n\n if (line.length === 0) {\n // ignore empty lines\n return;\n } // URIs\n\n\n if (line[0] !== '#') {\n this.trigger('data', {\n type: 'uri',\n uri: line\n });\n return;\n } // map tags\n\n\n const newLines = this.tagMappers.reduce((acc, mapper) => {\n const mappedLine = mapper(line); // skip if unchanged\n\n if (mappedLine === line) {\n return acc;\n }\n\n return acc.concat([mappedLine]);\n }, [line]);\n newLines.forEach(newLine => {\n for (let i = 0; i < this.customParsers.length; i++) {\n if (this.customParsers[i].call(this, newLine)) {\n return;\n }\n } // Comments\n\n\n if (newLine.indexOf('#EXT') !== 0) {\n this.trigger('data', {\n type: 'comment',\n text: newLine.slice(1)\n });\n return;\n } // strip off any carriage returns here so the regex matching\n // doesn't have to account for them.\n\n\n newLine = newLine.replace('\\r', ''); // Tags\n\n match = /^#EXTM3U/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'm3u'\n });\n return;\n }\n\n match = /^#EXTINF:([0-9\\.]*)?,?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'inf'\n };\n\n if (match[1]) {\n event.duration = parseFloat(match[1]);\n }\n\n if (match[2]) {\n event.title = match[2];\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-TARGETDURATION:([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'targetduration'\n };\n\n if (match[1]) {\n event.duration = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-VERSION:([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'version'\n };\n\n if (match[1]) {\n event.version = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-MEDIA-SEQUENCE:(\\-?[0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media-sequence'\n };\n\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-DISCONTINUITY-SEQUENCE:(\\-?[0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'discontinuity-sequence'\n };\n\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PLAYLIST-TYPE:(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'playlist-type'\n };\n\n if (match[1]) {\n event.playlistType = match[1];\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-BYTERANGE:(.*)?$/.exec(newLine);\n\n if (match) {\n event = _extends(parseByterange(match[1]), {\n type: 'tag',\n tagType: 'byterange'\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-ALLOW-CACHE:(YES|NO)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'allow-cache'\n };\n\n if (match[1]) {\n event.allowed = !/NO/.test(match[1]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-MAP:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'map'\n };\n\n if (match[1]) {\n const attributes = parseAttributes(match[1]);\n\n if (attributes.URI) {\n event.uri = attributes.URI;\n }\n\n if (attributes.BYTERANGE) {\n event.byterange = parseByterange(attributes.BYTERANGE);\n }\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-STREAM-INF:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'stream-inf'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n\n if (event.attributes.RESOLUTION) {\n const split = event.attributes.RESOLUTION.split('x');\n const resolution = {};\n\n if (split[0]) {\n resolution.width = parseInt(split[0], 10);\n }\n\n if (split[1]) {\n resolution.height = parseInt(split[1], 10);\n }\n\n event.attributes.RESOLUTION = resolution;\n }\n\n if (event.attributes.BANDWIDTH) {\n event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10);\n }\n\n if (event.attributes['FRAME-RATE']) {\n event.attributes['FRAME-RATE'] = parseFloat(event.attributes['FRAME-RATE']);\n }\n\n if (event.attributes['PROGRAM-ID']) {\n event.attributes['PROGRAM-ID'] = parseInt(event.attributes['PROGRAM-ID'], 10);\n }\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-MEDIA:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-ENDLIST/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'endlist'\n });\n return;\n }\n\n match = /^#EXT-X-DISCONTINUITY/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'discontinuity'\n });\n return;\n }\n\n match = /^#EXT-X-PROGRAM-DATE-TIME:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'program-date-time'\n };\n\n if (match[1]) {\n event.dateTimeString = match[1];\n event.dateTimeObject = new Date(match[1]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-KEY:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'key'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]); // parse the IV string into a Uint32Array\n\n if (event.attributes.IV) {\n if (event.attributes.IV.substring(0, 2).toLowerCase() === '0x') {\n event.attributes.IV = event.attributes.IV.substring(2);\n }\n\n event.attributes.IV = event.attributes.IV.match(/.{8}/g);\n event.attributes.IV[0] = parseInt(event.attributes.IV[0], 16);\n event.attributes.IV[1] = parseInt(event.attributes.IV[1], 16);\n event.attributes.IV[2] = parseInt(event.attributes.IV[2], 16);\n event.attributes.IV[3] = parseInt(event.attributes.IV[3], 16);\n event.attributes.IV = new Uint32Array(event.attributes.IV);\n }\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-START:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'start'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n event.attributes['TIME-OFFSET'] = parseFloat(event.attributes['TIME-OFFSET']);\n event.attributes.PRECISE = /YES/.test(event.attributes.PRECISE);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-CUE-OUT-CONT:(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out-cont'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-CUE-OUT:(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-CUE-IN:(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-in'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-SKIP:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'skip'\n };\n event.attributes = parseAttributes(match[1]);\n\n if (event.attributes.hasOwnProperty('SKIPPED-SEGMENTS')) {\n event.attributes['SKIPPED-SEGMENTS'] = parseInt(event.attributes['SKIPPED-SEGMENTS'], 10);\n }\n\n if (event.attributes.hasOwnProperty('RECENTLY-REMOVED-DATERANGES')) {\n event.attributes['RECENTLY-REMOVED-DATERANGES'] = event.attributes['RECENTLY-REMOVED-DATERANGES'].split(TAB);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PART:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'part'\n };\n event.attributes = parseAttributes(match[1]);\n ['DURATION'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n ['INDEPENDENT', 'GAP'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = /YES/.test(event.attributes[key]);\n }\n });\n\n if (event.attributes.hasOwnProperty('BYTERANGE')) {\n event.attributes.byterange = parseByterange(event.attributes.BYTERANGE);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-SERVER-CONTROL:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'server-control'\n };\n event.attributes = parseAttributes(match[1]);\n ['CAN-SKIP-UNTIL', 'PART-HOLD-BACK', 'HOLD-BACK'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n ['CAN-SKIP-DATERANGES', 'CAN-BLOCK-RELOAD'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = /YES/.test(event.attributes[key]);\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PART-INF:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'part-inf'\n };\n event.attributes = parseAttributes(match[1]);\n ['PART-TARGET'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PRELOAD-HINT:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'preload-hint'\n };\n event.attributes = parseAttributes(match[1]);\n ['BYTERANGE-START', 'BYTERANGE-LENGTH'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseInt(event.attributes[key], 10);\n const subkey = key === 'BYTERANGE-LENGTH' ? 'length' : 'offset';\n event.attributes.byterange = event.attributes.byterange || {};\n event.attributes.byterange[subkey] = event.attributes[key]; // only keep the parsed byterange object.\n\n delete event.attributes[key];\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-RENDITION-REPORT:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'rendition-report'\n };\n event.attributes = parseAttributes(match[1]);\n ['LAST-MSN', 'LAST-PART'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseInt(event.attributes[key], 10);\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-DATERANGE:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'daterange'\n };\n event.attributes = parseAttributes(match[1]);\n ['ID', 'CLASS'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = String(event.attributes[key]);\n }\n });\n ['START-DATE', 'END-DATE'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = new Date(event.attributes[key]);\n }\n });\n ['DURATION', 'PLANNED-DURATION'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n ['END-ON-NEXT'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = /YES/i.test(event.attributes[key]);\n }\n });\n ['SCTE35-CMD', ' SCTE35-OUT', 'SCTE35-IN'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = event.attributes[key].toString(16);\n }\n });\n const clientAttributePattern = /^X-([A-Z]+-)+[A-Z]+$/;\n\n for (const key in event.attributes) {\n if (!clientAttributePattern.test(key)) {\n continue;\n }\n\n const isHexaDecimal = /[0-9A-Fa-f]{6}/g.test(event.attributes[key]);\n const isDecimalFloating = /^\\d+(\\.\\d+)?$/.test(event.attributes[key]);\n event.attributes[key] = isHexaDecimal ? event.attributes[key].toString(16) : isDecimalFloating ? parseFloat(event.attributes[key]) : String(event.attributes[key]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-INDEPENDENT-SEGMENTS/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'independent-segments'\n });\n return;\n }\n\n match = /^#EXT-X-CONTENT-STEERING:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'content-steering'\n };\n event.attributes = parseAttributes(match[1]);\n this.trigger('data', event);\n return;\n } // unknown tag type\n\n\n this.trigger('data', {\n type: 'tag',\n data: newLine.slice(4)\n });\n });\n }\n /**\n * Add a parser for custom headers\n *\n * @param {Object} options a map of options for the added parser\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {string} options.customType the custom type to register to the output\n * @param {Function} [options.dataParser] function to parse the line into an object\n * @param {boolean} [options.segment] should tag data be attached to the segment object\n */\n\n\n addParser({\n expression,\n customType,\n dataParser,\n segment\n }) {\n if (typeof dataParser !== 'function') {\n dataParser = line => line;\n }\n\n this.customParsers.push(line => {\n const match = expression.exec(line);\n\n if (match) {\n this.trigger('data', {\n type: 'custom',\n data: dataParser(line),\n customType,\n segment\n });\n return true;\n }\n });\n }\n /**\n * Add a custom header mapper\n *\n * @param {Object} options\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {Function} options.map function to translate tag into a different tag\n */\n\n\n addTagMapper({\n expression,\n map\n }) {\n const mapFn = line => {\n if (expression.test(line)) {\n return map(line);\n }\n\n return line;\n };\n\n this.tagMappers.push(mapFn);\n }\n\n}\n\nconst camelCase = str => str.toLowerCase().replace(/-(\\w)/g, a => a[1].toUpperCase());\n\nconst camelCaseKeys = function (attributes) {\n const result = {};\n Object.keys(attributes).forEach(function (key) {\n result[camelCase(key)] = attributes[key];\n });\n return result;\n}; // set SERVER-CONTROL hold back based upon targetDuration and partTargetDuration\n// we need this helper because defaults are based upon targetDuration and\n// partTargetDuration being set, but they may not be if SERVER-CONTROL appears before\n// target durations are set.\n\n\nconst setHoldBack = function (manifest) {\n const {\n serverControl,\n targetDuration,\n partTargetDuration\n } = manifest;\n\n if (!serverControl) {\n return;\n }\n\n const tag = '#EXT-X-SERVER-CONTROL';\n const hb = 'holdBack';\n const phb = 'partHoldBack';\n const minTargetDuration = targetDuration && targetDuration * 3;\n const minPartDuration = partTargetDuration && partTargetDuration * 2;\n\n if (targetDuration && !serverControl.hasOwnProperty(hb)) {\n serverControl[hb] = minTargetDuration;\n this.trigger('info', {\n message: `${tag} defaulting HOLD-BACK to targetDuration * 3 (${minTargetDuration}).`\n });\n }\n\n if (minTargetDuration && serverControl[hb] < minTargetDuration) {\n this.trigger('warn', {\n message: `${tag} clamping HOLD-BACK (${serverControl[hb]}) to targetDuration * 3 (${minTargetDuration})`\n });\n serverControl[hb] = minTargetDuration;\n } // default no part hold back to part target duration * 3\n\n\n if (partTargetDuration && !serverControl.hasOwnProperty(phb)) {\n serverControl[phb] = partTargetDuration * 3;\n this.trigger('info', {\n message: `${tag} defaulting PART-HOLD-BACK to partTargetDuration * 3 (${serverControl[phb]}).`\n });\n } // if part hold back is too small default it to part target duration * 2\n\n\n if (partTargetDuration && serverControl[phb] < minPartDuration) {\n this.trigger('warn', {\n message: `${tag} clamping PART-HOLD-BACK (${serverControl[phb]}) to partTargetDuration * 2 (${minPartDuration}).`\n });\n serverControl[phb] = minPartDuration;\n }\n};\n/**\n * A parser for M3U8 files. The current interpretation of the input is\n * exposed as a property `manifest` on parser objects. It's just two lines to\n * create and parse a manifest once you have the contents available as a string:\n *\n * ```js\n * var parser = new m3u8.Parser();\n * parser.push(xhr.responseText);\n * ```\n *\n * New input can later be applied to update the manifest object by calling\n * `push` again.\n *\n * The parser attempts to create a usable manifest object even if the\n * underlying input is somewhat nonsensical. It emits `info` and `warning`\n * events during the parse if it encounters input that seems invalid or\n * requires some property of the manifest object to be defaulted.\n *\n * @class Parser\n * @extends Stream\n */\n\n\nclass Parser extends Stream {\n constructor() {\n super();\n this.lineStream = new LineStream();\n this.parseStream = new ParseStream();\n this.lineStream.pipe(this.parseStream);\n this.lastProgramDateTime = null;\n /* eslint-disable consistent-this */\n\n const self = this;\n /* eslint-enable consistent-this */\n\n const uris = [];\n let currentUri = {}; // if specified, the active EXT-X-MAP definition\n\n let currentMap; // if specified, the active decryption key\n\n let key;\n let hasParts = false;\n\n const noop = function () {};\n\n const defaultMediaGroups = {\n 'AUDIO': {},\n 'VIDEO': {},\n 'CLOSED-CAPTIONS': {},\n 'SUBTITLES': {}\n }; // This is the Widevine UUID from DASH IF IOP. The same exact string is\n // used in MPDs with Widevine encrypted streams.\n\n const widevineUuid = 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed'; // group segments into numbered timelines delineated by discontinuities\n\n let currentTimeline = 0; // the manifest is empty until the parse stream begins delivering data\n\n this.manifest = {\n allowCache: true,\n discontinuityStarts: [],\n dateRanges: [],\n segments: []\n }; // keep track of the last seen segment's byte range end, as segments are not required\n // to provide the offset, in which case it defaults to the next byte after the\n // previous segment\n\n let lastByterangeEnd = 0; // keep track of the last seen part's byte range end.\n\n let lastPartByterangeEnd = 0;\n const dateRangeTags = {};\n this.on('end', () => {\n // only add preloadSegment if we don't yet have a uri for it.\n // and we actually have parts/preloadHints\n if (currentUri.uri || !currentUri.parts && !currentUri.preloadHints) {\n return;\n }\n\n if (!currentUri.map && currentMap) {\n currentUri.map = currentMap;\n }\n\n if (!currentUri.key && key) {\n currentUri.key = key;\n }\n\n if (!currentUri.timeline && typeof currentTimeline === 'number') {\n currentUri.timeline = currentTimeline;\n }\n\n this.manifest.preloadSegment = currentUri;\n }); // update the manifest with the m3u8 entry from the parse stream\n\n this.parseStream.on('data', function (entry) {\n let mediaGroup;\n let rendition;\n ({\n tag() {\n // switch based on the tag type\n (({\n version() {\n if (entry.version) {\n this.manifest.version = entry.version;\n }\n },\n\n 'allow-cache'() {\n this.manifest.allowCache = entry.allowed;\n\n if (!('allowed' in entry)) {\n this.trigger('info', {\n message: 'defaulting allowCache to YES'\n });\n this.manifest.allowCache = true;\n }\n },\n\n byterange() {\n const byterange = {};\n\n if ('length' in entry) {\n currentUri.byterange = byterange;\n byterange.length = entry.length;\n\n if (!('offset' in entry)) {\n /*\n * From the latest spec (as of this writing):\n * https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.2.2\n *\n * Same text since EXT-X-BYTERANGE's introduction in draft 7:\n * https://tools.ietf.org/html/draft-pantos-http-live-streaming-07#section-3.3.1)\n *\n * \"If o [offset] is not present, the sub-range begins at the next byte\n * following the sub-range of the previous media segment.\"\n */\n entry.offset = lastByterangeEnd;\n }\n }\n\n if ('offset' in entry) {\n currentUri.byterange = byterange;\n byterange.offset = entry.offset;\n }\n\n lastByterangeEnd = byterange.offset + byterange.length;\n },\n\n endlist() {\n this.manifest.endList = true;\n },\n\n inf() {\n if (!('mediaSequence' in this.manifest)) {\n this.manifest.mediaSequence = 0;\n this.trigger('info', {\n message: 'defaulting media sequence to zero'\n });\n }\n\n if (!('discontinuitySequence' in this.manifest)) {\n this.manifest.discontinuitySequence = 0;\n this.trigger('info', {\n message: 'defaulting discontinuity sequence to zero'\n });\n }\n\n if (entry.title) {\n currentUri.title = entry.title;\n }\n\n if (entry.duration > 0) {\n currentUri.duration = entry.duration;\n }\n\n if (entry.duration === 0) {\n currentUri.duration = 0.01;\n this.trigger('info', {\n message: 'updating zero segment duration to a small value'\n });\n }\n\n this.manifest.segments = uris;\n },\n\n key() {\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring key declaration without attribute list'\n });\n return;\n } // clear the active encryption key\n\n\n if (entry.attributes.METHOD === 'NONE') {\n key = null;\n return;\n }\n\n if (!entry.attributes.URI) {\n this.trigger('warn', {\n message: 'ignoring key declaration without URI'\n });\n return;\n }\n\n if (entry.attributes.KEYFORMAT === 'com.apple.streamingkeydelivery') {\n this.manifest.contentProtection = this.manifest.contentProtection || {}; // TODO: add full support for this.\n\n this.manifest.contentProtection['com.apple.fps.1_0'] = {\n attributes: entry.attributes\n };\n return;\n }\n\n if (entry.attributes.KEYFORMAT === 'com.microsoft.playready') {\n this.manifest.contentProtection = this.manifest.contentProtection || {}; // TODO: add full support for this.\n\n this.manifest.contentProtection['com.microsoft.playready'] = {\n uri: entry.attributes.URI\n };\n return;\n } // check if the content is encrypted for Widevine\n // Widevine/HLS spec: https://storage.googleapis.com/wvdocs/Widevine_DRM_HLS.pdf\n\n\n if (entry.attributes.KEYFORMAT === widevineUuid) {\n const VALID_METHODS = ['SAMPLE-AES', 'SAMPLE-AES-CTR', 'SAMPLE-AES-CENC'];\n\n if (VALID_METHODS.indexOf(entry.attributes.METHOD) === -1) {\n this.trigger('warn', {\n message: 'invalid key method provided for Widevine'\n });\n return;\n }\n\n if (entry.attributes.METHOD === 'SAMPLE-AES-CENC') {\n this.trigger('warn', {\n message: 'SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead'\n });\n }\n\n if (entry.attributes.URI.substring(0, 23) !== 'data:text/plain;base64,') {\n this.trigger('warn', {\n message: 'invalid key URI provided for Widevine'\n });\n return;\n }\n\n if (!(entry.attributes.KEYID && entry.attributes.KEYID.substring(0, 2) === '0x')) {\n this.trigger('warn', {\n message: 'invalid key ID provided for Widevine'\n });\n return;\n } // if Widevine key attributes are valid, store them as `contentProtection`\n // on the manifest to emulate Widevine tag structure in a DASH mpd\n\n\n this.manifest.contentProtection = this.manifest.contentProtection || {};\n this.manifest.contentProtection['com.widevine.alpha'] = {\n attributes: {\n schemeIdUri: entry.attributes.KEYFORMAT,\n // remove '0x' from the key id string\n keyId: entry.attributes.KEYID.substring(2)\n },\n // decode the base64-encoded PSSH box\n pssh: decodeB64ToUint8Array(entry.attributes.URI.split(',')[1])\n };\n return;\n }\n\n if (!entry.attributes.METHOD) {\n this.trigger('warn', {\n message: 'defaulting key method to AES-128'\n });\n } // setup an encryption key for upcoming segments\n\n\n key = {\n method: entry.attributes.METHOD || 'AES-128',\n uri: entry.attributes.URI\n };\n\n if (typeof entry.attributes.IV !== 'undefined') {\n key.iv = entry.attributes.IV;\n }\n },\n\n 'media-sequence'() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid media sequence: ' + entry.number\n });\n return;\n }\n\n this.manifest.mediaSequence = entry.number;\n },\n\n 'discontinuity-sequence'() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid discontinuity sequence: ' + entry.number\n });\n return;\n }\n\n this.manifest.discontinuitySequence = entry.number;\n currentTimeline = entry.number;\n },\n\n 'playlist-type'() {\n if (!/VOD|EVENT/.test(entry.playlistType)) {\n this.trigger('warn', {\n message: 'ignoring unknown playlist type: ' + entry.playlist\n });\n return;\n }\n\n this.manifest.playlistType = entry.playlistType;\n },\n\n map() {\n currentMap = {};\n\n if (entry.uri) {\n currentMap.uri = entry.uri;\n }\n\n if (entry.byterange) {\n currentMap.byterange = entry.byterange;\n }\n\n if (key) {\n currentMap.key = key;\n }\n },\n\n 'stream-inf'() {\n this.manifest.playlists = uris;\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring empty stream-inf attributes'\n });\n return;\n }\n\n if (!currentUri.attributes) {\n currentUri.attributes = {};\n }\n\n _extends(currentUri.attributes, entry.attributes);\n },\n\n media() {\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!(entry.attributes && entry.attributes.TYPE && entry.attributes['GROUP-ID'] && entry.attributes.NAME)) {\n this.trigger('warn', {\n message: 'ignoring incomplete or missing media group'\n });\n return;\n } // find the media group, creating defaults as necessary\n\n\n const mediaGroupType = this.manifest.mediaGroups[entry.attributes.TYPE];\n mediaGroupType[entry.attributes['GROUP-ID']] = mediaGroupType[entry.attributes['GROUP-ID']] || {};\n mediaGroup = mediaGroupType[entry.attributes['GROUP-ID']]; // collect the rendition metadata\n\n rendition = {\n default: /yes/i.test(entry.attributes.DEFAULT)\n };\n\n if (rendition.default) {\n rendition.autoselect = true;\n } else {\n rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT);\n }\n\n if (entry.attributes.LANGUAGE) {\n rendition.language = entry.attributes.LANGUAGE;\n }\n\n if (entry.attributes.URI) {\n rendition.uri = entry.attributes.URI;\n }\n\n if (entry.attributes['INSTREAM-ID']) {\n rendition.instreamId = entry.attributes['INSTREAM-ID'];\n }\n\n if (entry.attributes.CHARACTERISTICS) {\n rendition.characteristics = entry.attributes.CHARACTERISTICS;\n }\n\n if (entry.attributes.FORCED) {\n rendition.forced = /yes/i.test(entry.attributes.FORCED);\n } // insert the new rendition\n\n\n mediaGroup[entry.attributes.NAME] = rendition;\n },\n\n discontinuity() {\n currentTimeline += 1;\n currentUri.discontinuity = true;\n this.manifest.discontinuityStarts.push(uris.length);\n },\n\n 'program-date-time'() {\n if (typeof this.manifest.dateTimeString === 'undefined') {\n // PROGRAM-DATE-TIME is a media-segment tag, but for backwards\n // compatibility, we add the first occurence of the PROGRAM-DATE-TIME tag\n // to the manifest object\n // TODO: Consider removing this in future major version\n this.manifest.dateTimeString = entry.dateTimeString;\n this.manifest.dateTimeObject = entry.dateTimeObject;\n }\n\n currentUri.dateTimeString = entry.dateTimeString;\n currentUri.dateTimeObject = entry.dateTimeObject;\n const {\n lastProgramDateTime\n } = this;\n this.lastProgramDateTime = new Date(entry.dateTimeString).getTime(); // We should extrapolate Program Date Time backward only during first program date time occurrence.\n // Once we have at least one program date time point, we can always extrapolate it forward using lastProgramDateTime reference.\n\n if (lastProgramDateTime === null) {\n // Extrapolate Program Date Time backward\n // Since it is first program date time occurrence we're assuming that\n // all this.manifest.segments have no program date time info\n this.manifest.segments.reduceRight((programDateTime, segment) => {\n segment.programDateTime = programDateTime - segment.duration * 1000;\n return segment.programDateTime;\n }, this.lastProgramDateTime);\n }\n },\n\n targetduration() {\n if (!isFinite(entry.duration) || entry.duration < 0) {\n this.trigger('warn', {\n message: 'ignoring invalid target duration: ' + entry.duration\n });\n return;\n }\n\n this.manifest.targetDuration = entry.duration;\n setHoldBack.call(this, this.manifest);\n },\n\n start() {\n if (!entry.attributes || isNaN(entry.attributes['TIME-OFFSET'])) {\n this.trigger('warn', {\n message: 'ignoring start declaration without appropriate attribute list'\n });\n return;\n }\n\n this.manifest.start = {\n timeOffset: entry.attributes['TIME-OFFSET'],\n precise: entry.attributes.PRECISE\n };\n },\n\n 'cue-out'() {\n currentUri.cueOut = entry.data;\n },\n\n 'cue-out-cont'() {\n currentUri.cueOutCont = entry.data;\n },\n\n 'cue-in'() {\n currentUri.cueIn = entry.data;\n },\n\n 'skip'() {\n this.manifest.skip = camelCaseKeys(entry.attributes);\n this.warnOnMissingAttributes_('#EXT-X-SKIP', entry.attributes, ['SKIPPED-SEGMENTS']);\n },\n\n 'part'() {\n hasParts = true; // parts are always specifed before a segment\n\n const segmentIndex = this.manifest.segments.length;\n const part = camelCaseKeys(entry.attributes);\n currentUri.parts = currentUri.parts || [];\n currentUri.parts.push(part);\n\n if (part.byterange) {\n if (!part.byterange.hasOwnProperty('offset')) {\n part.byterange.offset = lastPartByterangeEnd;\n }\n\n lastPartByterangeEnd = part.byterange.offset + part.byterange.length;\n }\n\n const partIndex = currentUri.parts.length - 1;\n this.warnOnMissingAttributes_(`#EXT-X-PART #${partIndex} for segment #${segmentIndex}`, entry.attributes, ['URI', 'DURATION']);\n\n if (this.manifest.renditionReports) {\n this.manifest.renditionReports.forEach((r, i) => {\n if (!r.hasOwnProperty('lastPart')) {\n this.trigger('warn', {\n message: `#EXT-X-RENDITION-REPORT #${i} lacks required attribute(s): LAST-PART`\n });\n }\n });\n }\n },\n\n 'server-control'() {\n const attrs = this.manifest.serverControl = camelCaseKeys(entry.attributes);\n\n if (!attrs.hasOwnProperty('canBlockReload')) {\n attrs.canBlockReload = false;\n this.trigger('info', {\n message: '#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false'\n });\n }\n\n setHoldBack.call(this, this.manifest);\n\n if (attrs.canSkipDateranges && !attrs.hasOwnProperty('canSkipUntil')) {\n this.trigger('warn', {\n message: '#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set'\n });\n }\n },\n\n 'preload-hint'() {\n // parts are always specifed before a segment\n const segmentIndex = this.manifest.segments.length;\n const hint = camelCaseKeys(entry.attributes);\n const isPart = hint.type && hint.type === 'PART';\n currentUri.preloadHints = currentUri.preloadHints || [];\n currentUri.preloadHints.push(hint);\n\n if (hint.byterange) {\n if (!hint.byterange.hasOwnProperty('offset')) {\n // use last part byterange end or zero if not a part.\n hint.byterange.offset = isPart ? lastPartByterangeEnd : 0;\n\n if (isPart) {\n lastPartByterangeEnd = hint.byterange.offset + hint.byterange.length;\n }\n }\n }\n\n const index = currentUri.preloadHints.length - 1;\n this.warnOnMissingAttributes_(`#EXT-X-PRELOAD-HINT #${index} for segment #${segmentIndex}`, entry.attributes, ['TYPE', 'URI']);\n\n if (!hint.type) {\n return;\n } // search through all preload hints except for the current one for\n // a duplicate type.\n\n\n for (let i = 0; i < currentUri.preloadHints.length - 1; i++) {\n const otherHint = currentUri.preloadHints[i];\n\n if (!otherHint.type) {\n continue;\n }\n\n if (otherHint.type === hint.type) {\n this.trigger('warn', {\n message: `#EXT-X-PRELOAD-HINT #${index} for segment #${segmentIndex} has the same TYPE ${hint.type} as preload hint #${i}`\n });\n }\n }\n },\n\n 'rendition-report'() {\n const report = camelCaseKeys(entry.attributes);\n this.manifest.renditionReports = this.manifest.renditionReports || [];\n this.manifest.renditionReports.push(report);\n const index = this.manifest.renditionReports.length - 1;\n const required = ['LAST-MSN', 'URI'];\n\n if (hasParts) {\n required.push('LAST-PART');\n }\n\n this.warnOnMissingAttributes_(`#EXT-X-RENDITION-REPORT #${index}`, entry.attributes, required);\n },\n\n 'part-inf'() {\n this.manifest.partInf = camelCaseKeys(entry.attributes);\n this.warnOnMissingAttributes_('#EXT-X-PART-INF', entry.attributes, ['PART-TARGET']);\n\n if (this.manifest.partInf.partTarget) {\n this.manifest.partTargetDuration = this.manifest.partInf.partTarget;\n }\n\n setHoldBack.call(this, this.manifest);\n },\n\n 'daterange'() {\n this.manifest.dateRanges.push(camelCaseKeys(entry.attributes));\n const index = this.manifest.dateRanges.length - 1;\n this.warnOnMissingAttributes_(`#EXT-X-DATERANGE #${index}`, entry.attributes, ['ID', 'START-DATE']);\n const dateRange = this.manifest.dateRanges[index];\n\n if (dateRange.endDate && dateRange.startDate && new Date(dateRange.endDate) < new Date(dateRange.startDate)) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE END-DATE must be equal to or later than the value of the START-DATE'\n });\n }\n\n if (dateRange.duration && dateRange.duration < 0) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE DURATION must not be negative'\n });\n }\n\n if (dateRange.plannedDuration && dateRange.plannedDuration < 0) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE PLANNED-DURATION must not be negative'\n });\n }\n\n const endOnNextYes = !!dateRange.endOnNext;\n\n if (endOnNextYes && !dateRange.class) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE with an END-ON-NEXT=YES attribute must have a CLASS attribute'\n });\n }\n\n if (endOnNextYes && (dateRange.duration || dateRange.endDate)) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE with an END-ON-NEXT=YES attribute must not contain DURATION or END-DATE attributes'\n });\n }\n\n if (dateRange.duration && dateRange.endDate) {\n const startDate = dateRange.startDate;\n const newDateInSeconds = startDate.getTime() + dateRange.duration * 1000;\n this.manifest.dateRanges[index].endDate = new Date(newDateInSeconds);\n }\n\n if (!dateRangeTags[dateRange.id]) {\n dateRangeTags[dateRange.id] = dateRange;\n } else {\n for (const attribute in dateRangeTags[dateRange.id]) {\n if (!!dateRange[attribute] && JSON.stringify(dateRangeTags[dateRange.id][attribute]) !== JSON.stringify(dateRange[attribute])) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE tags with the same ID in a playlist must have the same attributes values'\n });\n break;\n }\n } // if tags with the same ID do not have conflicting attributes, merge them\n\n\n const dateRangeWithSameId = this.manifest.dateRanges.findIndex(dateRangeToFind => dateRangeToFind.id === dateRange.id);\n this.manifest.dateRanges[dateRangeWithSameId] = _extends(this.manifest.dateRanges[dateRangeWithSameId], dateRange);\n dateRangeTags[dateRange.id] = _extends(dateRangeTags[dateRange.id], dateRange); // after merging, delete the duplicate dateRange that was added last\n\n this.manifest.dateRanges.pop();\n }\n },\n\n 'independent-segments'() {\n this.manifest.independentSegments = true;\n },\n\n 'content-steering'() {\n this.manifest.contentSteering = camelCaseKeys(entry.attributes);\n this.warnOnMissingAttributes_('#EXT-X-CONTENT-STEERING', entry.attributes, ['SERVER-URI']);\n }\n\n })[entry.tagType] || noop).call(self);\n },\n\n uri() {\n currentUri.uri = entry.uri;\n uris.push(currentUri); // if no explicit duration was declared, use the target duration\n\n if (this.manifest.targetDuration && !('duration' in currentUri)) {\n this.trigger('warn', {\n message: 'defaulting segment duration to the target duration'\n });\n currentUri.duration = this.manifest.targetDuration;\n } // annotate with encryption information, if necessary\n\n\n if (key) {\n currentUri.key = key;\n }\n\n currentUri.timeline = currentTimeline; // annotate with initialization segment information, if necessary\n\n if (currentMap) {\n currentUri.map = currentMap;\n } // reset the last byterange end as it needs to be 0 between parts\n\n\n lastPartByterangeEnd = 0; // Once we have at least one program date time we can always extrapolate it forward\n\n if (this.lastProgramDateTime !== null) {\n currentUri.programDateTime = this.lastProgramDateTime;\n this.lastProgramDateTime += currentUri.duration * 1000;\n } // prepare for the next URI\n\n\n currentUri = {};\n },\n\n comment() {// comments are not important for playback\n },\n\n custom() {\n // if this is segment-level data attach the output to the segment\n if (entry.segment) {\n currentUri.custom = currentUri.custom || {};\n currentUri.custom[entry.customType] = entry.data; // if this is manifest-level data attach to the top level manifest object\n } else {\n this.manifest.custom = this.manifest.custom || {};\n this.manifest.custom[entry.customType] = entry.data;\n }\n }\n\n })[entry.type].call(self);\n });\n }\n\n warnOnMissingAttributes_(identifier, attributes, required) {\n const missing = [];\n required.forEach(function (key) {\n if (!attributes.hasOwnProperty(key)) {\n missing.push(key);\n }\n });\n\n if (missing.length) {\n this.trigger('warn', {\n message: `${identifier} lacks required attribute(s): ${missing.join(', ')}`\n });\n }\n }\n /**\n * Parse the input string and update the manifest object.\n *\n * @param {string} chunk a potentially incomplete portion of the manifest\n */\n\n\n push(chunk) {\n this.lineStream.push(chunk);\n }\n /**\n * Flush any remaining input. This can be handy if the last line of an M3U8\n * manifest did not contain a trailing newline but the file has been\n * completely received.\n */\n\n\n end() {\n // flush any buffered input\n this.lineStream.push('\\n');\n\n if (this.manifest.dateRanges.length && this.lastProgramDateTime === null) {\n this.trigger('warn', {\n message: 'A playlist with EXT-X-DATERANGE tag must contain atleast one EXT-X-PROGRAM-DATE-TIME tag'\n });\n }\n\n this.lastProgramDateTime = null;\n this.trigger('end');\n }\n /**\n * Add an additional parser for non-standard tags\n *\n * @param {Object} options a map of options for the added parser\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {string} options.customType the custom type to register to the output\n * @param {Function} [options.dataParser] function to parse the line into an object\n * @param {boolean} [options.segment] should tag data be attached to the segment object\n */\n\n\n addParser(options) {\n this.parseStream.addParser(options);\n }\n /**\n * Add a custom header mapper\n *\n * @param {Object} options\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {Function} options.map function to translate tag into a different tag\n */\n\n\n addTagMapper(options) {\n this.parseStream.addTagMapper(options);\n }\n\n}\n\nexport { LineStream, ParseStream, Parser };\n","import { Parser } from 'm3u8-parser';\nimport { Log } from '../log';\nimport { EventTool } from '../event-tool';\n\n/**\n * 创建一个 HLS 资源加载器\n */\nexport async function createHLSLoader(m3u8URL: string, concurrency = 10) {\n const parser = new Parser();\n parser.push(await (await fetch(m3u8URL)).text());\n parser.end();\n const segGroup = parser.manifest.segments.reduce(\n (acc, cur) => {\n acc[cur.map.uri] = acc[cur.map.uri] ?? [];\n acc[cur.map.uri].push(cur);\n return acc;\n },\n {} as Record,\n );\n const base = new URL(m3u8URL, location.href);\n\n const segmentBufferFetchqueue = {} as Record>;\n\n async function downloadSegments(\n segments: Parser['manifest']['segments'],\n ctrl: ReadableStreamDefaultController,\n evtTool: EventTool<{ progress: (progress: number) => void }>,\n ) {\n function createTaskQueue(concurrency: number) {\n let running = 0;\n let done = 0;\n let queue = [] as Array<() => Promise>;\n\n async function runTask(task: () => Promise) {\n queue.push(task);\n next();\n }\n\n async function next() {\n if (running < concurrency && queue.length) {\n const task = queue.shift();\n running++;\n try {\n await task?.();\n done++;\n evtTool.emit(\n 'progress',\n Math.round((done / segments.length) * 100) / 100,\n );\n next();\n } catch (err) {\n queue = [];\n ctrl.error(err);\n evtTool.destroy();\n Log.error(err);\n }\n running--;\n }\n }\n\n return runTask;\n }\n\n async function fetchSegmentBufferPromise(url: string) {\n return (await fetch(url)).arrayBuffer();\n }\n\n const runTask = createTaskQueue(concurrency);\n\n for (const [, item] of segments.entries()) {\n const url = new URL(item.uri, base).href;\n runTask(\n () => (segmentBufferFetchqueue[url] = fetchSegmentBufferPromise(url)),\n );\n }\n }\n\n async function getSegmentBuffer(url: string) {\n const segmentBuffer = await segmentBufferFetchqueue[url];\n delete segmentBufferFetchqueue[url];\n return segmentBuffer;\n }\n\n return {\n /**\n * 下载期望时间区间的分配数据,封装成流\n * 每个分片包含一个时间段,实际下载的分片数据时长会略大于期望的时间区间\n */\n load(expectStartTime = 0, expectEndTime = Infinity) {\n const filterSegGroup = {} as Record<\n string,\n {\n actualStartTime: number;\n actualEndTime: number;\n segments: Parser['manifest']['segments'];\n }\n >;\n let actualStartTime = 0;\n let actualEndTime = 0;\n for (const [gKey, gData] of Object.entries(segGroup)) {\n let time = 0;\n let segs = [] as Parser['manifest']['segments'];\n let startIdx = -1;\n let endIdx = -1;\n for (let i = 0; i < gData.length; i++) {\n const seg = gData[i];\n time += seg.duration;\n if (startIdx === -1 && time > expectStartTime / 1e6) {\n startIdx = i;\n actualStartTime = (time - seg.duration) * 1e6;\n }\n if (startIdx > -1 && endIdx === -1 && time >= expectEndTime / 1e6) {\n endIdx = i + 1;\n actualEndTime = time * 1e6;\n break;\n }\n }\n if (expectEndTime >= time * 1e6) {\n endIdx = gData.length;\n actualEndTime = time * 1e6;\n }\n\n if (endIdx > startIdx) {\n segs = segs.concat(gData.slice(startIdx, endIdx));\n }\n if (segs.length > 0)\n filterSegGroup[gKey] = {\n actualStartTime,\n actualEndTime,\n segments: segs,\n };\n }\n\n if (Object.keys(filterSegGroup).length === 0) return null;\n\n return Object.entries(filterSegGroup).map(\n ([initUri, { actualStartTime, actualEndTime, segments }]) => {\n let segIdx = 0;\n\n const evtTool = new EventTool<{\n progress: (progress: number) => void;\n }>();\n\n return {\n actualStartTime,\n actualEndTime,\n on: evtTool.on,\n stream: new ReadableStream({\n start: async (ctrl) => {\n downloadSegments(segments, ctrl, evtTool);\n ctrl.enqueue(\n new Uint8Array(\n await (\n await fetch(new URL(initUri, base).href)\n ).arrayBuffer(),\n ),\n );\n },\n pull: async (ctrl) => {\n const url = new URL(segments[segIdx].uri, base).href;\n ctrl.enqueue(new Uint8Array(await getSegmentBuffer(url)));\n segIdx += 1;\n if (segIdx >= segments.length) {\n ctrl.close();\n evtTool.destroy();\n }\n },\n }),\n };\n },\n );\n },\n };\n}\n","// 改编自 https://jameshfisher.com/2020/08/11/production-ready-green-screen-in-the-browser/\nconst vertexShader = `#version 300 es\n layout (location = 0) in vec4 a_position;\n layout (location = 1) in vec2 a_texCoord;\n out vec2 v_texCoord;\n void main () {\n gl_Position = a_position;\n v_texCoord = a_texCoord;\n }\n`;\n\nconst fragmentShader = `#version 300 es\nprecision mediump float;\nout vec4 FragColor;\nin vec2 v_texCoord;\n\nuniform sampler2D frameTexture;\nuniform vec3 keyColor;\n\n// 色度的相似度计算\nuniform float similarity;\n// 透明度的平滑度计算\nuniform float smoothness;\n// 降低绿幕饱和度,提高抠图准确度\nuniform float spill;\n\nvec2 RGBtoUV(vec3 rgb) {\n return vec2(\n rgb.r * -0.169 + rgb.g * -0.331 + rgb.b * 0.5 + 0.5,\n rgb.r * 0.5 + rgb.g * -0.419 + rgb.b * -0.081 + 0.5\n );\n}\n\nvoid main() {\n // 获取当前像素的rgba值\n vec4 rgba = texture(frameTexture, v_texCoord);\n // 计算当前像素与绿幕像素的色度差值\n vec2 chromaVec = RGBtoUV(rgba.rgb) - RGBtoUV(keyColor);\n // 计算当前像素与绿幕像素的色度距离(向量长度), 越相像则色度距离越小\n float chromaDist = sqrt(dot(chromaVec, chromaVec));\n // 设置了一个相似度阈值,baseMask为负,则表明是绿幕,为正则表明不是绿幕\n float baseMask = chromaDist - similarity;\n // 如果baseMask为负数,fullMask等于0;baseMask为正数,越大,则透明度越低\n float fullMask = pow(clamp(baseMask / smoothness, 0., 1.), 1.5);\n rgba.a = fullMask; // 设置透明度\n // 如果baseMask为负数,spillVal等于0;baseMask为整数,越小,饱和度越低\n float spillVal = pow(clamp(baseMask / spill, 0., 1.), 1.5);\n float desat = clamp(rgba.r * 0.2126 + rgba.g * 0.7152 + rgba.b * 0.0722, 0., 1.); // 计算当前像素的灰度值\n rgba.rgb = mix(vec3(desat, desat, desat), rgba.rgb, spillVal);\n FragColor = rgba;\n}\n`;\n\nconst POINT_POS = [-1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1];\nconst TEX_COORD_POS = [0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1];\n\n// 初始化着色器程序,让 WebGL 知道如何绘制我们的数据\nfunction initShaderProgram(\n gl: WebGLRenderingContext,\n vsSource: string,\n fsSource: string,\n) {\n const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource)!;\n const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource)!;\n\n // 创建着色器程序\n const shaderProgram = gl.createProgram()!;\n gl.attachShader(shaderProgram, vertexShader);\n gl.attachShader(shaderProgram, fragmentShader);\n gl.linkProgram(shaderProgram);\n\n if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {\n throw Error(\n gl.getProgramInfoLog(shaderProgram) ??\n 'Unable to initialize the shader program',\n );\n }\n\n return shaderProgram;\n}\n\n// 创建指定类型的着色器,上传 source 源码并编译\nfunction loadShader(gl: WebGLRenderingContext, type: number, source: string) {\n const shader = gl.createShader(type)!;\n\n // Send the source to the shader object\n gl.shaderSource(shader, source);\n\n // Compile the shader program\n gl.compileShader(shader);\n\n // See if it compiled successfully\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const errMsg = gl.getShaderInfoLog(shader);\n gl.deleteShader(shader);\n throw Error(errMsg ?? 'An error occurred compiling the shaders');\n }\n\n return shader;\n}\n\nfunction updateTexture(\n gl: WebGLRenderingContext,\n img: TImgSource,\n texture: WebGLTexture,\n) {\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n}\n\nfunction initTexture(gl: WebGLRenderingContext) {\n const texture = gl.createTexture();\n if (texture == null) throw Error('Create WebGL texture error');\n gl.bindTexture(gl.TEXTURE_2D, texture);\n\n // put a single pixel in the texture so we can use it immediately.\n const level = 0;\n const internalFormat = gl.RGBA;\n const width = 1;\n const height = 1;\n const border = 0;\n const srcFormat = gl.RGBA;\n const srcType = gl.UNSIGNED_BYTE;\n const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue\n gl.texImage2D(\n gl.TEXTURE_2D,\n level,\n internalFormat,\n width,\n height,\n border,\n srcFormat,\n srcType,\n pixel,\n );\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n return texture;\n}\n\ninterface IChromakeyOpts {\n keyColor: [number, number, number];\n similarity: number;\n smoothness: number;\n spill: number;\n}\n\nfunction initCvs(\n opts: {\n width: number;\n height: number;\n } & IChromakeyOpts,\n) {\n const cvs =\n 'document' in globalThis\n ? globalThis.document.createElement('canvas')\n : new OffscreenCanvas(opts.width, opts.height);\n cvs.width = opts.width;\n cvs.height = opts.height;\n\n const gl = cvs.getContext('webgl2', {\n premultipliedAlpha: false,\n alpha: true,\n }) as WebGL2RenderingContext | null;\n\n if (gl == null) throw Error('Cant create gl context');\n\n const shaderProgram = initShaderProgram(gl, vertexShader, fragmentShader);\n gl.useProgram(shaderProgram);\n\n gl.uniform3fv(\n gl.getUniformLocation(shaderProgram, 'keyColor'),\n opts.keyColor.map((v) => v / 255),\n );\n gl.uniform1f(\n gl.getUniformLocation(shaderProgram, 'similarity'),\n opts.similarity,\n );\n gl.uniform1f(\n gl.getUniformLocation(shaderProgram, 'smoothness'),\n opts.smoothness,\n );\n gl.uniform1f(gl.getUniformLocation(shaderProgram, 'spill'), opts.spill);\n\n const posBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, posBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(POINT_POS), gl.STATIC_DRAW);\n const a_position = gl.getAttribLocation(shaderProgram, 'a_position');\n gl.vertexAttribPointer(\n a_position,\n 2,\n gl.FLOAT,\n false,\n Float32Array.BYTES_PER_ELEMENT * 2,\n 0,\n );\n gl.enableVertexAttribArray(a_position);\n\n const texCoordBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array(TEX_COORD_POS),\n gl.STATIC_DRAW,\n );\n const a_texCoord = gl.getAttribLocation(shaderProgram, 'a_texCoord');\n gl.vertexAttribPointer(\n a_texCoord,\n 2,\n gl.FLOAT,\n false,\n Float32Array.BYTES_PER_ELEMENT * 2,\n 0,\n );\n gl.enableVertexAttribArray(a_texCoord);\n\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);\n\n return { cvs, gl };\n}\n\ntype TImgSource =\n | HTMLVideoElement\n | HTMLCanvasElement\n | HTMLImageElement\n | ImageBitmap\n | OffscreenCanvas\n | VideoFrame;\n\nfunction getSourceWH(imgSource: TImgSource) {\n return imgSource instanceof VideoFrame\n ? { width: imgSource.codedWidth, height: imgSource.codedHeight }\n : { width: imgSource.width, height: imgSource.height };\n}\n\nfunction getKeyColor(imgSource: TImgSource) {\n const cvs = new OffscreenCanvas(1, 1);\n const ctx = cvs.getContext('2d')!;\n ctx.drawImage(imgSource, 0, 0);\n const {\n data: [r, g, b],\n } = ctx.getImageData(0, 0, 1, 1);\n return [r, g, b] as [number, number, number];\n}\n\n/**\n * 绿幕抠图\n * keyColor 需要扣除的背景色,若不传则取第一个像素点\n * similarity 背景色相似度阈值,过小可能保留背景色,过大可能扣掉更多非背景像素点\n * smoothness 平滑度;过小可能出现锯齿,过大导致整体变透明\n * spill 饱和度;过小可能保留绿色混合,过大导致图片变灰度\n * @param opts: {\n * keyColor?: [r, g, b]\n * similarity: number\n * smoothness: number\n * spill: number\n * }\n */\nexport const createChromakey = (\n opts: Omit & {\n keyColor?: [number, number, number];\n },\n) => {\n let cvs: HTMLCanvasElement | OffscreenCanvas | null = null;\n let gl: WebGLRenderingContext | null = null;\n let keyC = opts.keyColor;\n let texture: WebGLTexture | null = null;\n\n return async (imgSource: TImgSource) => {\n if (cvs == null || gl == null || texture == null) {\n if (keyC == null) keyC = getKeyColor(imgSource);\n ({ cvs, gl } = initCvs({\n ...getSourceWH(imgSource),\n keyColor: keyC,\n ...opts,\n }));\n texture = initTexture(gl);\n }\n\n updateTexture(gl, imgSource, texture);\n\n if (\n globalThis.VideoFrame != null &&\n imgSource instanceof globalThis.VideoFrame\n ) {\n const rs = new VideoFrame(cvs, {\n alpha: 'keep',\n timestamp: imgSource.timestamp,\n duration: imgSource.duration ?? undefined,\n });\n imgSource.close();\n return rs;\n }\n\n return createImageBitmap(cvs, {\n imageOrientation: imgSource instanceof ImageBitmap ? 'flipY' : 'none',\n });\n };\n};\n","import { EventTool } from '../event-tool';\n\ninterface IPoint {\n x: number;\n y: number;\n}\n\n/**\n * @see {@link Rect.CTRL_KEYS}\n */\nexport type TCtrlKey = (typeof Rect.CTRL_KEYS)[number];\n\nexport interface IRectBaseProps {\n x: number;\n y: number;\n w: number;\n h: number;\n angle: number;\n}\n\n/**\n * 用于记录素材在视频或画布中的空间属性:位置、大小、旋转\n *\n * 并提供控制点位置,支持用户在画布中缩放、旋转素材\n *\n * 一般由内部 WebAV SDK 内部创建维护\n *\n * @see {@link Combinator}, {@link OffscreenSprite}\n * @see [AVCanvas](../../av-canvas/classes/AVCanvas.html), {@link VisibleSprite}\n *\n * @see [视频剪辑](https://bilibili.github.io/WebAV/demo/6_4-video-editor)\n */\nexport class Rect implements IRectBaseProps {\n /**\n * 统一设置所有 {@link Rect.ctrls} 的边长\n *\n * ⚠️ 交给 [AVCanvas](../../av-canvas/classes/AVCanvas.html) 设置,不要随意改变它的值\n */\n static CTRL_SIZE = 16;\n\n /**\n * 控制点:上、下、左、右,左上、左下、右上、右下、旋转\n */\n static readonly CTRL_KEYS = [\n 't',\n 'b',\n 'l',\n 'r',\n 'lt',\n 'lb',\n 'rt',\n 'rb',\n 'rotate',\n ] as const;\n\n #evtTool = new EventTool<{\n propsChange: (props: Partial) => void;\n }>();\n /**\n * 监听属性变更事件\n * @example\n * rect.on('propsChange', (changedProps) => {})\n */\n on = this.#evtTool.on;\n\n #x = 0;\n /**\n * x 坐标\n */\n get x() {\n return this.#x;\n }\n set x(v) {\n this.#setBaseProps('x', v);\n }\n #y = 0;\n get y() {\n return this.#y;\n }\n /**\n * y 坐标\n */\n set y(v) {\n this.#setBaseProps('y', v);\n }\n #w = 0;\n /**\n * 宽\n */\n get w() {\n return this.#w;\n }\n set w(v) {\n this.#setBaseProps('w', v);\n }\n #h = 0;\n /**\n * 高\n */\n get h() {\n return this.#h;\n }\n set h(v) {\n this.#setBaseProps('h', v);\n }\n #angle = 0;\n /**\n * 旋转角度\n * @see [MDN Canvas rotate](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/rotate)\n */\n get angle() {\n return this.#angle;\n }\n set angle(v) {\n this.#setBaseProps('angle', v);\n }\n\n #setBaseProps(prop: keyof IRectBaseProps, v: number) {\n const changed = this[prop] !== v;\n switch (prop) {\n case 'x':\n this.#x = v;\n break;\n case 'y':\n this.#y = v;\n break;\n case 'w':\n this.#w = v;\n break;\n case 'h':\n this.#h = v;\n break;\n case 'angle':\n this.#angle = v;\n break;\n }\n if (changed) this.#evtTool.emit('propsChange', { [prop]: v });\n\n // concat emit\n // if (changed) this.#nextTickEmitData[prop] = v;\n // Promise.resolve().then(() => {\n // if (Object.keys(this.#nextTickEmitData).length > 0) {\n // const data = this.#nextTickEmitData;\n // this.#nextTickEmitData = {};\n // this.#evtTool.emit('propsChange', { ...data });\n // }\n // });\n }\n\n /**\n * 如果当前实例是 Rect 控制点({@link Rect.ctrls})之一,`master` 将指向该 Rect\n *\n * 控制点的坐标是相对于它的 `master` 定位到\n */\n master: Rect | null = null;\n\n constructor(\n x?: number,\n y?: number,\n w?: number,\n h?: number,\n master?: Rect | null,\n ) {\n this.x = x ?? 0;\n this.y = y ?? 0;\n this.w = w ?? 0;\n this.h = h ?? 0;\n this.master = master ?? null;\n }\n\n /**\n * 根据坐标、宽高计算出来的矩形中心点\n */\n get center(): IPoint {\n const { x, y, w, h } = this;\n return { x: x + w / 2, y: y + h / 2 };\n }\n\n /**\n * 是否保持固定宽高比例,禁止变形缩放\n *\n * 值为 true 时,{@link Rect.ctrls} 将缺少上下左右四个控制点\n */\n fixedAspectRatio = false;\n\n /**\n * 根据坐标、宽高计算出来的矩形控制点\n *\n * {@link Rect.fixedAspectRatio} = `true` 时,将缺少上下左右(`t,b,l,r`)四个控制点\n */\n get ctrls() {\n const { w, h } = this;\n // 控制点元素大小, 以 分辨率 为基准\n const sz = Rect.CTRL_SIZE;\n // half size\n const hfSz = sz / 2;\n const hfW = w / 2;\n const hfH = h / 2;\n // rotate size\n const rtSz = sz * 1.5;\n const hfRtSz = rtSz / 2;\n // ctrl 坐标是相对于 sprite 中心点\n const tblr = this.fixedAspectRatio\n ? {}\n : {\n t: new Rect(-hfSz, -hfH - hfSz, sz, sz, this),\n b: new Rect(-hfSz, hfH - hfSz, sz, sz, this),\n l: new Rect(-hfW - hfSz, -hfSz, sz, sz, this),\n r: new Rect(hfW - hfSz, -hfSz, sz, sz, this),\n };\n return {\n ...tblr,\n lt: new Rect(-hfW - hfSz, -hfH - hfSz, sz, sz, this),\n lb: new Rect(-hfW - hfSz, hfH - hfSz, sz, sz, this),\n rt: new Rect(hfW - hfSz, -hfH - hfSz, sz, sz, this),\n rb: new Rect(hfW - hfSz, hfH - hfSz, sz, sz, this),\n rotate: new Rect(-hfRtSz, -hfH - sz * 2 - hfRtSz, rtSz, rtSz, this),\n };\n }\n\n clone(): Rect {\n const { x, y, w, h, master } = this;\n const rect = new Rect(x, y, w, h, master);\n rect.angle = this.angle;\n rect.fixedAspectRatio = this.fixedAspectRatio;\n return rect;\n }\n\n /**\n * 检测目标坐标是否命中当前实例\n * @param tx 目标点 x 坐标\n * @param ty 目标点 y 坐标\n */\n checkHit(tx: number, ty: number): boolean {\n let { angle, center, x, y, w, h, master } = this;\n // ctrls 的中心点、旋转角度都去自于 master (sprite)\n const cnt = master?.center ?? center;\n const agl = master?.angle ?? angle;\n // ctrl 初始化时其坐标就是相对于 master 的,参见 get ctrls()\n // 所以此处不用转换\n if (master == null) {\n x = x - cnt.x;\n y = y - cnt.y;\n }\n // 鼠标点击坐标映射成以中点为原点的坐标\n const tOX = tx - cnt.x;\n const tOY = ty - cnt.y;\n // 如果有旋转,映射成相对 sprite 原点,旋转前的坐标\n let mx = tOX;\n let my = tOY;\n if (agl !== 0) {\n // 推导公式 https://github.com/hughfenghen/hughfenghen.github.io/issues/96\n mx = tOX * Math.cos(agl) + tOY * Math.sin(agl);\n my = tOY * Math.cos(agl) - tOX * Math.sin(agl);\n }\n\n if (mx < x || mx > x + w || my < y || my > y + h) return false;\n\n return true;\n }\n}\n","import { EventTool } from '../event-tool';\nimport { IRectBaseProps, Rect } from './rect';\n\ninterface IAnimationOpts {\n duration: number;\n delay?: number;\n iterCount?: number;\n}\n\ntype TAnimateProps = IRectBaseProps & { opacity: number };\n\nexport type TAnimationKeyFrame = Array<[number, Partial]>;\n\ntype TKeyFrameOpts = Partial<\n Record<`${number}%` | 'from' | 'to', Partial>\n>;\n\n/**\n * Sprite 基类\n *\n * @see {@link OffscreenSprite}\n * @see {@link VisibleSprite}\n */\nexport abstract class BaseSprite {\n /**\n * 控制素材在视频中的空间属性(坐标、旋转、缩放)\n */\n rect = new Rect();\n\n /**\n * 控制素材在视频中的时间偏移与时长,常用于剪辑场景时间轴(轨道)模块\n *\n * duration 不能大于引用 {@link IClip} 的时长,单位 微秒\n */\n time = {\n offset: 0,\n duration: 0,\n };\n\n /**\n * 元素是否可见,用于不想删除,期望临时隐藏 Sprite 的场景\n */\n visible = true;\n\n #evtTool = new EventTool<{\n propsChange: (\n value: Partial<{ rect: Partial; zIndex: number }>,\n ) => void;\n }>();\n /**\n * 监听属性变更事件\n * @example\n * sprite.on('propsChange', (changedProps) => {})\n */\n on = this.#evtTool.on;\n\n #zIndex = 0;\n get zIndex(): number {\n return this.#zIndex;\n }\n\n /**\n * 控制素材间的层级关系,zIndex 值较小的素材会被遮挡\n */\n set zIndex(v: number) {\n const changed = this.#zIndex !== v;\n this.#zIndex = v;\n if (changed) this.#evtTool.emit('propsChange', { zIndex: v });\n }\n\n /**\n * 不透明度\n */\n opacity = 1;\n\n /**\n * 水平或垂直方向翻转素材\n */\n flip: 'horizontal' | 'vertical' | null = null;\n\n #animatKeyFrame: TAnimationKeyFrame | null = null;\n\n #animatOpts: Required | null = null;\n\n /**\n * @see {@link IClip.ready}\n */\n ready = Promise.resolve();\n\n constructor() {\n this.rect.on('propsChange', (props) => {\n this.#evtTool.emit('propsChange', { rect: props });\n });\n }\n\n protected _render(\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n ): void {\n const {\n rect: { center, angle },\n } = this;\n ctx.setTransform(\n // 水平 缩放、倾斜\n this.flip === 'horizontal' ? -1 : 1,\n 0,\n // 垂直 倾斜、缩放\n 0,\n this.flip === 'vertical' ? -1 : 1,\n // 坐标原点偏移 x y\n center.x,\n center.y,\n );\n // 任意方向翻转,旋转角度转为负值,才能与控制点同步\n ctx.rotate((this.flip == null ? 1 : -1) * angle);\n\n ctx.globalAlpha = this.opacity;\n }\n\n /**\n * 给素材添加动画,使用方法参考 css animation\n *\n * @example\n * sprite.setAnimation(\n * {\n * '0%': { x: 0, y: 0 },\n * '25%': { x: 1200, y: 680 },\n * '50%': { x: 1200, y: 0 },\n * '75%': { x: 0, y: 680 },\n * '100%': { x: 0, y: 0 },\n * },\n * { duration: 4, iterCount: 1 },\n * );\n *\n * @see [视频水印动画](https://bilibili.github.io/WebAV/demo/2_1-concat-video)\n */\n setAnimation(keyFrame: TKeyFrameOpts, opts: IAnimationOpts): void {\n this.#animatKeyFrame = Object.entries(keyFrame).map(([k, val]) => {\n const numK = { from: 0, to: 100 }[k] ?? Number(k.slice(0, -1));\n if (isNaN(numK) || numK > 100 || numK < 0) {\n throw Error('keyFrame must between 0~100');\n }\n return [numK / 100, val];\n }) as TAnimationKeyFrame;\n this.#animatOpts = Object.assign({}, this.#animatOpts, {\n duration: opts.duration * 1e6,\n delay: (opts.delay ?? 0) * 1e6,\n iterCount: opts.iterCount ?? Infinity,\n });\n }\n\n /**\n * 如果当前 sprite 已被设置动画,将 sprite 的动画属性设定到指定时间的状态\n */\n animate(time: number): void {\n if (\n this.#animatKeyFrame == null ||\n this.#animatOpts == null ||\n time < this.#animatOpts.delay\n )\n return;\n const updateProps = linearTimeFn(\n time,\n this.#animatKeyFrame,\n this.#animatOpts,\n );\n for (const k in updateProps) {\n switch (k) {\n case 'opacity':\n this.opacity = updateProps[k] as number;\n break;\n case 'x':\n case 'y':\n case 'w':\n case 'h':\n case 'angle':\n this.rect[k] = updateProps[k] as number;\n break;\n }\n }\n }\n\n /**\n * 将当前 sprite 的属性赋值到目标\n *\n * 用于 clone,或 {@link VisibleSprite} 与 {@link OffscreenSprite} 实例间的类型转换\n */\n copyStateTo(target: T) {\n target.#animatKeyFrame = this.#animatKeyFrame;\n target.#animatOpts = this.#animatOpts;\n target.visible = this.visible;\n target.zIndex = this.zIndex;\n target.opacity = this.opacity;\n target.flip = this.flip;\n target.rect = this.rect.clone();\n target.time = { ...this.time };\n }\n\n protected destroy() {\n this.#evtTool.destroy();\n }\n}\n\nexport function linearTimeFn(\n time: number,\n kf: TAnimationKeyFrame,\n opts: Required,\n): Partial {\n if (time / opts.duration >= opts.iterCount) return {};\n\n const t = time % opts.duration;\n\n const process = time === opts.duration ? 1 : t / opts.duration;\n const idx = kf.findIndex((it) => it[0] >= process);\n if (idx === -1) return {};\n\n const startState = kf[idx - 1];\n const nextState = kf[idx];\n const nextFrame = nextState[1];\n if (startState == null) return nextFrame;\n const startFrame = startState[1];\n\n const rs: Partial = {};\n // 介于两个Frame状态间的进度\n const stateProcess =\n (process - startState[0]) / (nextState[0] - startState[0]);\n for (const prop in nextFrame) {\n const p = prop as keyof TAnimateProps;\n if (startFrame[p] == null) continue;\n // @ts-expect-error\n // eslint-disable-next-line\n rs[p] = (nextFrame[p] - startFrame[p]) * stateProcess + startFrame[p];\n }\n\n return rs;\n}\n","import { BaseSprite } from './base-sprite';\nimport { IClip } from '../clips';\nimport { Log } from '../log';\n\n/**\n * 包装 {@link IClip} 给素材扩展坐标、层级、透明度等信息,用于 {@link Combinator} 在后台合成视频\n *\n * 跟 {@link VisibleSprite} 非常相似,应用场景不同\n *\n * @example\n * const spr = new OffscreenSprite(\n * new MP4Clip((await fetch('')).body),\n * );\n * spr.opacity = 0.5 // 半透明\n * spr.rect.x = 100 // x 坐标偏移 100 像素\n * spr.time.offset = 10e6 // 视频第 10s 开始绘制该视频素材\n *\n * @see [视频合成](https://bilibili.github.io/WebAV/demo/2_1-concat-video)\n */\nexport class OffscreenSprite extends BaseSprite {\n #clip: IClip;\n\n // 保持最近一帧,若 clip 在当前帧无数据,则绘制最近一帧\n #lastVf: VideoFrame | ImageBitmap | null = null;\n\n #destroyed = false;\n\n constructor(clip: IClip) {\n super();\n this.#clip = clip;\n this.ready = clip.ready.then(({ width, height, duration }) => {\n this.rect.w = this.rect.w === 0 ? width : this.rect.w;\n this.rect.h = this.rect.h === 0 ? height : this.rect.h;\n this.time.duration =\n this.time.duration === 0 ? duration : this.time.duration;\n });\n }\n\n /**\n * 绘制素材指定时刻的图像到 canvas 上下文,并返回对应的音频数据\n * @param time 指定时刻,微秒\n */\n async offscreenRender(\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n time: number,\n ): Promise<{\n audio: Float32Array[];\n done: boolean;\n }> {\n this.animate(time);\n super._render(ctx);\n const { w, h } = this.rect;\n const { video, audio, state } = await this.#clip.tick(time);\n if (state === 'done') {\n return {\n audio: audio ?? [],\n done: true,\n };\n }\n\n const imgSource = video ?? this.#lastVf;\n if (imgSource != null) {\n ctx.drawImage(imgSource, -w / 2, -h / 2, w, h);\n }\n\n if (video != null) {\n this.#lastVf?.close();\n this.#lastVf = video;\n }\n\n return {\n audio: audio ?? [],\n done: false,\n };\n }\n\n async clone() {\n const spr = new OffscreenSprite(await this.#clip.clone());\n await spr.ready;\n this.copyStateTo(spr);\n return spr;\n }\n\n destroy(): void {\n if (this.#destroyed) return;\n this.#destroyed = true;\n\n Log.info('OffscreenSprite destroy');\n super.destroy();\n this.#lastVf?.close();\n this.#lastVf = null;\n this.#clip.destroy();\n }\n}\n","import { BaseSprite } from './base-sprite';\nimport { IClip } from '../clips';\nimport { Log } from '../log';\n\n/**\n * 包装 {@link IClip} 给素材扩展坐标、层级、透明度等信息,用于 {@link [AVCanvas](../../av-canvas/classes/AVCanvas.html)} 响应用户交互\n *\n * 跟 {@link OffscreenSprite} 非常相似,应用场景不同\n *\n * @example\n * const spr = new VisibleSprite(\n * new MP4Clip((await fetch('')).body),\n * );\n * spr.opacity = 0.5 // 半透明\n * spr.rect.x = 100 // x 坐标偏移 100 像素\n * spr.time.offset = 10e6 // 视频第 10s 开始绘制素材\n *\n * @see [视频剪辑](https://bilibili.github.io/WebAV/demo/6_4-video-editor)\n *\n */\nexport class VisibleSprite extends BaseSprite {\n #clip: IClip;\n getClip() {\n return this.#clip;\n }\n\n constructor(clip: IClip) {\n super();\n this.#clip = clip;\n this.ready = clip.ready.then(({ width, height, duration }) => {\n this.rect.w = this.rect.w === 0 ? width : this.rect.w;\n this.rect.h = this.rect.h === 0 ? height : this.rect.h;\n this.time.duration =\n this.time.duration === 0 ? duration : this.time.duration;\n });\n }\n\n // 保持最近一帧,若 clip 在当前帧无数据,则绘制最近一帧\n #lastVf: VideoFrame | ImageBitmap | null = null;\n #lastAudio: Float32Array[] = [];\n #ticking = false;\n #update(time: number) {\n if (this.#ticking) return;\n this.#ticking = true;\n this.#clip\n .tick(time)\n .then(({ video, audio }) => {\n if (video != null) {\n this.#lastVf?.close();\n this.#lastVf = video ?? null;\n }\n this.#lastAudio = audio ?? [];\n })\n .finally(() => {\n this.#ticking = false;\n });\n }\n\n /**\n * 提前准备指定 time 的帧\n */\n preFrame(time: number) {\n this.#update(time);\n }\n\n #lastTime = -1;\n /**\n * 绘制素材指定时刻的图像到 canvas 上下文,并返回对应的音频数据\n * @param time 指定时刻,微秒\n */\n render(\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n time: number,\n ): { audio: Float32Array[] } {\n this.animate(time);\n super._render(ctx);\n const { w, h } = this.rect;\n if (this.#lastTime !== time) this.#update(time);\n this.#lastTime = time;\n\n const audio = this.#lastAudio;\n this.#lastAudio = [];\n const video = this.#lastVf;\n if (video != null) ctx.drawImage(video, -w / 2, -h / 2, w, h);\n\n return { audio };\n }\n\n #destroyed = false;\n destroy(): void {\n if (this.#destroyed) return;\n this.#destroyed = true;\n\n Log.info('VisibleSprite destroy');\n super.destroy();\n this.#lastVf?.close();\n this.#lastVf = null;\n this.#clip.destroy();\n }\n}\n","import { OffscreenSprite } from './sprite/offscreen-sprite';\nimport { file2stream, recodemux } from './mp4-utils';\nimport { Log } from './log';\nimport { mixinPCM, sleep } from './av-utils';\nimport { EventTool } from './event-tool';\nimport { DEFAULT_AUDIO_CONF } from './clips';\n\ninterface ICombinatorOpts {\n width?: number;\n height?: number;\n bitrate?: number;\n bgColor?: string;\n videoCodec?: string;\n /**\n * false 合成的视频文件中排除音轨\n */\n audio?: false;\n /**\n * 向输出的视频中写入 meta tags 数据\n */\n metaDataTags?: Record;\n /**\n * 不安全,随时可能废弃\n */\n __unsafe_hardwareAcceleration__?: HardwarePreference;\n}\n\nlet COM_ID = 0;\n\n/**\n * 避免 VideoEncoder 队列中的 VideoFrame 过多,打爆显存\n */\nasync function letEncoderCalmDown(getQSize: () => number) {\n if (getQSize() > 50) {\n await sleep(15);\n await letEncoderCalmDown(getQSize);\n }\n}\n\n/**\n * 视频合成器;能添加多个 {@link VisibleSprite},根据它们位置、层级、时间偏移等信息,合成输出为视频文件\n * @see [视频合成](https://bilibili.github.io/WebAV/demo/2_1-concat-video)\n * @see [视频配音](https://bilibili.github.io/WebAV/demo/2_2-video-add-audio)\n * @example\n * const spr1 = new OffscreenSprite(\n * new MP4Clip((await fetch('')).body),\n * );\n * const spr2 = new OffscreenSprite(\n * new AudioClip((await fetch('