@remotion/media-parser 4.0.280 → 4.0.284
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/check-if-done.js +1 -1
- package/dist/containers/aac/parse-aac.js +21 -12
- package/dist/containers/flac/get-channel-count.d.ts +1 -1
- package/dist/containers/flac/get-duration-from-flac.js +1 -1
- package/dist/containers/flac/get-sample-rate.js +1 -1
- package/dist/containers/flac/parse-flac-frame.js +18 -13
- package/dist/containers/flac/parse-flac.js +3 -3
- package/dist/containers/flac/parse-header.js +1 -1
- package/dist/containers/flac/parse-metadata.js +1 -1
- package/dist/containers/flac/parse-streaminfo.js +7 -2
- package/dist/containers/flac/parse-unknown-block.js +1 -1
- package/dist/containers/iso-base-media/base-media-box.d.ts +2 -1
- package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +11 -0
- package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.js +13 -0
- package/dist/containers/iso-base-media/collect-sample-positions-from-trak.d.ts +2 -0
- package/dist/containers/iso-base-media/collect-sample-positions-from-trak.js +46 -0
- package/dist/containers/iso-base-media/find-keyframe-before-time.d.ts +10 -0
- package/dist/containers/iso-base-media/find-keyframe-before-time.js +28 -0
- package/dist/containers/iso-base-media/get-children.d.ts +7 -3
- package/dist/containers/iso-base-media/get-children.js +7 -3
- package/dist/containers/iso-base-media/get-keyframes.js +9 -4
- package/dist/containers/iso-base-media/get-mfra-atom.d.ts +9 -0
- package/dist/containers/iso-base-media/get-mfra-atom.js +12 -0
- package/dist/containers/iso-base-media/get-mfra-seeking-box.d.ts +13 -0
- package/dist/containers/iso-base-media/get-mfra-seeking-box.js +32 -0
- package/dist/containers/iso-base-media/get-moov-atom.js +58 -42
- package/dist/containers/iso-base-media/get-sample-position-bounds.d.ts +5 -0
- package/dist/containers/iso-base-media/get-sample-position-bounds.js +19 -0
- package/dist/containers/iso-base-media/get-sample-positions-from-track.d.ts +7 -2
- package/dist/containers/iso-base-media/get-sample-positions-from-track.js +18 -48
- package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +11 -5
- package/dist/containers/iso-base-media/get-seeking-from-mp4.js +100 -36
- package/dist/containers/iso-base-media/get-seeking-info-from-mp4.d.ts +11 -0
- package/dist/containers/iso-base-media/get-seeking-info-from-mp4.js +25 -0
- package/dist/containers/iso-base-media/mdat/mdat.js +42 -26
- package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.d.ts +11 -0
- package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.js +27 -0
- package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +81 -0
- package/dist/containers/iso-base-media/mfra/get-mfra-atom.js +23 -0
- package/dist/containers/iso-base-media/mfra/get-mfro-atom.d.ts +9 -0
- package/dist/containers/iso-base-media/mfra/get-mfro-atom.js +38 -0
- package/dist/containers/iso-base-media/mfra/mfra.d.ts +2 -0
- package/dist/containers/iso-base-media/mfra/mfra.js +11 -0
- package/dist/containers/iso-base-media/mfra/tfra.d.ts +19 -0
- package/dist/containers/iso-base-media/mfra/tfra.js +100 -0
- package/dist/containers/iso-base-media/moov/moov.d.ts +7 -3
- package/dist/containers/iso-base-media/moov/moov.js +4 -2
- package/dist/containers/iso-base-media/parse-boxes.js +20 -4
- package/dist/containers/iso-base-media/process-box.d.ts +26 -2
- package/dist/containers/iso-base-media/process-box.js +54 -15
- package/dist/containers/iso-base-media/stsd/mebx.d.ts +5 -3
- package/dist/containers/iso-base-media/stsd/mebx.js +6 -4
- package/dist/containers/iso-base-media/stsd/samples.d.ts +8 -5
- package/dist/containers/iso-base-media/stsd/samples.js +16 -9
- package/dist/containers/iso-base-media/stsd/stsd.d.ts +5 -3
- package/dist/containers/iso-base-media/stsd/stsd.js +3 -3
- package/dist/containers/iso-base-media/trak/trak.d.ts +5 -3
- package/dist/containers/iso-base-media/trak/trak.js +4 -2
- package/dist/containers/iso-base-media/traversal.d.ts +9 -2
- package/dist/containers/iso-base-media/traversal.js +15 -7
- package/dist/containers/m3u/get-duration-from-m3u.js +1 -1
- package/dist/containers/m3u/get-streams.js +1 -1
- package/dist/containers/m3u/iterate-over-segment-files.d.ts +1 -1
- package/dist/containers/m3u/iterate-over-segment-files.js +3 -2
- package/dist/containers/m3u/parse-m3u.js +1 -1
- package/dist/containers/m3u/run-over-m3u.js +11 -2
- package/dist/containers/mp3/id3.js +1 -1
- package/dist/containers/mp3/parse-mpeg-header.js +8 -2
- package/dist/containers/riff/expect-riff-box.js +7 -2
- package/dist/containers/riff/get-tracks-from-avi.js +1 -1
- package/dist/containers/riff/parse-movi.js +35 -26
- package/dist/containers/riff/parse-riff-body.js +13 -5
- package/dist/containers/riff/parse-riff-header.js +1 -1
- package/dist/containers/riff/parse-video-section.d.ts +1 -1
- package/dist/containers/riff/parse-video-section.js +3 -3
- package/dist/containers/transport-stream/get-tracks.js +1 -1
- package/dist/containers/transport-stream/handle-aac-packet.js +12 -3
- package/dist/containers/transport-stream/handle-avc-packet.js +16 -3
- package/dist/containers/transport-stream/parse-packet.js +1 -1
- package/dist/containers/transport-stream/parse-transport-stream.js +1 -1
- package/dist/containers/transport-stream/process-audio.d.ts +21 -0
- package/dist/containers/transport-stream/process-audio.js +54 -0
- package/dist/containers/transport-stream/process-sample-if-possible.d.ts +2 -0
- package/dist/containers/transport-stream/process-sample-if-possible.js +62 -0
- package/dist/containers/transport-stream/process-video.d.ts +20 -0
- package/dist/containers/transport-stream/process-video.js +39 -0
- package/dist/containers/transport-stream/start-offset.d.ts +4 -0
- package/dist/containers/transport-stream/start-offset.js +13 -0
- package/dist/containers/wav/get-duration-from-wav.js +1 -1
- package/dist/containers/wav/get-seeking-byte.d.ts +7 -0
- package/dist/containers/wav/get-seeking-byte.js +15 -0
- package/dist/containers/wav/get-seeking-info.d.ts +7 -0
- package/dist/containers/wav/get-seeking-info.js +20 -0
- package/dist/containers/wav/parse-data.js +2 -2
- package/dist/containers/wav/parse-fmt.js +7 -2
- package/dist/containers/wav/parse-header.js +1 -1
- package/dist/containers/wav/parse-id3.js +1 -1
- package/dist/containers/wav/parse-list.js +1 -1
- package/dist/containers/wav/parse-media-section.d.ts +5 -0
- package/dist/containers/wav/parse-media-section.js +44 -0
- package/dist/containers/wav/parse-video-section.js +7 -5
- package/dist/containers/wav/parse-wav.js +4 -4
- package/dist/containers/webm/get-ready-tracks.js +2 -2
- package/dist/containers/webm/parse-ebml.js +17 -5
- package/dist/containers/webm/parse-webm-header.js +1 -1
- package/dist/controller/emitter.d.ts +33 -0
- package/dist/controller/emitter.js +66 -0
- package/dist/controller/media-parser-controller.d.ts +23 -0
- package/dist/controller/media-parser-controller.js +41 -0
- package/dist/controller/pause-signal.d.ts +11 -0
- package/dist/controller/pause-signal.js +38 -0
- package/dist/controller/performed-seeks-stats.d.ts +11 -0
- package/dist/controller/performed-seeks-stats.js +21 -0
- package/dist/controller/seek-signal.d.ts +19 -0
- package/dist/controller/seek-signal.js +24 -0
- package/dist/convert-audio-or-video-sample.d.ts +4 -1
- package/dist/convert-audio-or-video-sample.js +19 -6
- package/dist/disallow-forward-seek-if-samples-are-needed.d.ts +6 -0
- package/dist/disallow-forward-seek-if-samples-are-needed.js +14 -0
- package/dist/emit-audio-sample.d.ts +8 -5
- package/dist/emit-audio-sample.js +6 -6
- package/dist/emit-available-info.js +6 -6
- package/dist/emitter.d.ts +9 -0
- package/dist/emitter.js +35 -3
- package/dist/esm/index.mjs +5698 -4585
- package/dist/esm/server-worker.mjs +464 -0
- package/dist/esm/worker-server-entry.mjs +6554 -5438
- package/dist/esm/worker-web-entry.mjs +5498 -4382
- package/dist/esm/worker.mjs +26 -12
- package/dist/forward-controller.d.ts +1 -1
- package/dist/get-dimensions.js +2 -2
- package/dist/get-duration.js +21 -31
- package/dist/get-fps.js +7 -3
- package/dist/get-keyframes.js +2 -2
- package/dist/get-seeking-info.d.ts +19 -3
- package/dist/get-seeking-info.js +33 -7
- package/dist/get-tracks.js +12 -4
- package/dist/has-all-info.js +1 -1
- package/dist/index.d.ts +154 -135
- package/dist/index.js +3 -1
- package/dist/init-video.js +21 -12
- package/dist/internal-parse-media.js +6 -2
- package/dist/media-parser-controller.d.ts +2 -1
- package/dist/media-parser-controller.js +3 -2
- package/dist/metadata/get-metadata.js +1 -1
- package/dist/metadata/metadata-from-iso.js +5 -1
- package/dist/options.d.ts +1 -1
- package/dist/parse-loop.js +17 -4
- package/dist/parse-media-on-worker-entry.js +10 -6
- package/dist/perform-seek.d.ts +23 -3
- package/dist/perform-seek.js +44 -8
- package/dist/readers/reader.d.ts +1 -1
- package/dist/readers/state/aac-state.d.ts +13 -0
- package/dist/readers/state/aac-state.js +17 -0
- package/dist/readers/state/can-skip-tracks.d.ts +16 -0
- package/dist/readers/state/can-skip-tracks.js +60 -0
- package/dist/readers/state/current-reader.d.ts +6 -0
- package/dist/readers/state/current-reader.js +13 -0
- package/dist/readers/state/emitted-fields.d.ts +1 -0
- package/dist/readers/state/emitted-fields.js +37 -0
- package/dist/readers/state/flac-state.d.ts +4 -0
- package/dist/readers/state/flac-state.js +13 -0
- package/dist/readers/state/has-tracks-section.d.ts +14 -0
- package/dist/readers/state/has-tracks-section.js +37 -0
- package/dist/readers/state/images.d.ts +9 -0
- package/dist/readers/state/images.js +14 -0
- package/dist/readers/state/iso-base-media/cached-sample-positions.d.ts +12 -0
- package/dist/readers/state/iso-base-media/cached-sample-positions.js +46 -0
- package/dist/readers/state/iso-base-media/iso-state.d.ts +24 -0
- package/dist/readers/state/iso-base-media/iso-state.js +20 -0
- package/dist/readers/state/iso-base-media/lazy-mfra-load.d.ts +13 -0
- package/dist/readers/state/iso-base-media/lazy-mfra-load.js +29 -0
- package/dist/readers/state/iso-base-media/moov-box.d.ts +5 -0
- package/dist/readers/state/iso-base-media/moov-box.js +13 -0
- package/dist/readers/state/keyframes.d.ts +6 -0
- package/dist/readers/state/keyframes.js +15 -0
- package/dist/readers/state/m3u-state.d.ts +44 -0
- package/dist/readers/state/m3u-state.js +124 -0
- package/dist/readers/state/may-skip-video-data.d.ts +4 -0
- package/dist/readers/state/may-skip-video-data.js +18 -0
- package/dist/readers/state/mp3.d.ts +15 -0
- package/dist/readers/state/mp3.js +19 -0
- package/dist/readers/state/need-samples-for-fields.d.ts +6 -0
- package/dist/readers/state/need-samples-for-fields.js +39 -0
- package/dist/readers/state/parser-state.d.ts +252 -0
- package/dist/readers/state/parser-state.js +124 -0
- package/dist/readers/state/riff.d.ts +10 -0
- package/dist/readers/state/riff.js +32 -0
- package/dist/readers/state/sample-callbacks.d.ts +44 -0
- package/dist/readers/state/sample-callbacks.js +118 -0
- package/dist/readers/state/seek-infinite-loop.d.ts +5 -0
- package/dist/readers/state/seek-infinite-loop.js +22 -0
- package/dist/readers/state/slow-duration-fps.d.ts +11 -0
- package/dist/readers/state/slow-duration-fps.js +86 -0
- package/dist/readers/state/structure.d.ts +15 -0
- package/dist/readers/state/structure.js +78 -0
- package/dist/readers/state/timings.d.ts +8 -0
- package/dist/readers/state/timings.js +13 -0
- package/dist/readers/state/transport-stream/last-emitted-sample.d.ts +6 -0
- package/dist/readers/state/transport-stream/last-emitted-sample.js +16 -0
- package/dist/readers/state/transport-stream/next-pes-header-store.d.ts +6 -0
- package/dist/readers/state/transport-stream/next-pes-header-store.js +18 -0
- package/dist/readers/state/transport-stream/start-offset.d.ts +4 -0
- package/dist/readers/state/transport-stream/start-offset.js +13 -0
- package/dist/readers/state/transport-stream/transport-stream.d.ts +19 -0
- package/dist/readers/state/transport-stream/transport-stream.js +25 -0
- package/dist/readers/state/video-section.d.ts +33 -0
- package/dist/readers/state/video-section.js +65 -0
- package/dist/readers/state/webm.d.ts +28 -0
- package/dist/readers/state/webm.js +109 -0
- package/dist/register-track.d.ts +17 -4
- package/dist/register-track.js +31 -17
- package/dist/run-parse-iteration.js +1 -1
- package/dist/seek-backwards.d.ts +15 -2
- package/dist/seek-backwards.js +7 -8
- package/dist/seek-forwards.d.ts +19 -2
- package/dist/seek-forwards.js +19 -12
- package/dist/seek-signal.d.ts +3 -6
- package/dist/seek-signal.js +4 -6
- package/dist/seeking-info.d.ts +11 -1
- package/dist/server-worker.d.ts +3 -0
- package/dist/server-worker.js +7 -0
- package/dist/server-worker.module.d.ts +2 -0
- package/dist/server-worker.module.js +12 -0
- package/dist/state/current-reader.d.ts +6 -0
- package/dist/state/current-reader.js +13 -0
- package/dist/state/iso-base-media/cached-sample-positions.d.ts +1 -1
- package/dist/state/iso-base-media/cached-sample-positions.js +7 -9
- package/dist/state/iso-base-media/iso-state.d.ts +15 -1
- package/dist/state/iso-base-media/iso-state.js +9 -1
- package/dist/state/iso-base-media/lazy-mfra-load.d.ts +14 -0
- package/dist/state/iso-base-media/lazy-mfra-load.js +29 -0
- package/dist/state/need-samples-for-fields.d.ts +1 -0
- package/dist/state/need-samples-for-fields.js +3 -3
- package/dist/state/parser-state.d.ts +146 -130
- package/dist/state/parser-state.js +15 -4
- package/dist/state/sample-callbacks.d.ts +3 -2
- package/dist/state/sample-callbacks.js +2 -4
- package/dist/state/seek-infinite-loop.d.ts +5 -0
- package/dist/state/seek-infinite-loop.js +22 -0
- package/dist/state/transport-stream/last-emitted-sample.d.ts +6 -0
- package/dist/state/transport-stream/last-emitted-sample.js +16 -0
- package/dist/state/transport-stream/next-pes-header-store.d.ts +6 -0
- package/dist/state/transport-stream/next-pes-header-store.js +18 -0
- package/dist/state/transport-stream/start-offset.d.ts +4 -0
- package/dist/state/transport-stream/start-offset.js +13 -0
- package/dist/state/transport-stream/transport-stream.d.ts +19 -0
- package/dist/state/transport-stream/transport-stream.js +24 -0
- package/dist/state/uml.d.ts +32 -0
- package/dist/state/uml.js +52 -0
- package/dist/state/video-section.d.ts +24 -6
- package/dist/state/video-section.js +51 -22
- package/dist/state/work-on-seek-request-options.d.ts +3 -0
- package/dist/state/work-on-seek-request-options.js +26 -0
- package/dist/throttled-progress.d.ts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/with-resolvers.d.ts +5 -0
- package/dist/with-resolvers.js +13 -0
- package/dist/work-on-seek-request.d.ts +42 -1
- package/dist/work-on-seek-request.js +104 -15
- package/dist/worker/forward-controller.d.ts +1 -1
- package/dist/worker/forward-controller.js +4 -0
- package/dist/worker/worker-types.d.ts +6 -1
- package/dist/worker-server.js +3 -2
- package/dist/worker.js +1 -5
- package/dist/worker.module.d.ts +4 -0
- package/dist/worker.module.js +12 -0
- package/package.json +12 -3
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseMediaOnWorkerImplementation = void 0;
|
|
4
|
+
const with_resolvers_1 = require("./with-resolvers");
|
|
4
5
|
const serialize_error_1 = require("./worker/serialize-error");
|
|
5
6
|
const convertToWorkerPayload = (
|
|
6
7
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -48,16 +49,12 @@ payload) => {
|
|
|
48
49
|
const post = (worker, payload) => {
|
|
49
50
|
worker.postMessage(payload);
|
|
50
51
|
};
|
|
51
|
-
const parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
|
|
52
|
-
if (typeof Worker === 'undefined') {
|
|
53
|
-
throw new Error('"Worker" is not available. Cannot call workerClient()');
|
|
54
|
-
}
|
|
52
|
+
const parseMediaOnWorkerImplementation = async ({ controller, reader, ...params }, worker, apiName) => {
|
|
55
53
|
if (reader) {
|
|
56
54
|
throw new Error(`\`reader\` should not be provided to \`${apiName}\`. If you want to use it in the browser, use parseMediaOnWorker(). If you also want to read files from the file system, use parseMediaOnServerWorker().`);
|
|
57
55
|
}
|
|
58
|
-
const worker = new Worker(workerUrlEntry);
|
|
59
56
|
post(worker, convertToWorkerPayload(params));
|
|
60
|
-
const { promise, resolve, reject } =
|
|
57
|
+
const { promise, resolve, reject } = (0, with_resolvers_1.withResolvers)();
|
|
61
58
|
const onAbort = () => {
|
|
62
59
|
post(worker, { type: 'request-abort' });
|
|
63
60
|
};
|
|
@@ -67,6 +64,10 @@ const parseMediaOnWorkerImplementation = async ({ controller, reader, ...params
|
|
|
67
64
|
const onPause = () => {
|
|
68
65
|
post(worker, { type: 'request-pause' });
|
|
69
66
|
};
|
|
67
|
+
const onSeek = ({ detail: { seek } }) => {
|
|
68
|
+
post(worker, { type: 'request-seek', payload: seek });
|
|
69
|
+
controller === null || controller === void 0 ? void 0 : controller._internals.seekSignal.clearSeekIfStillSame(seek);
|
|
70
|
+
};
|
|
70
71
|
const callbacks = {};
|
|
71
72
|
function onMessage(message) {
|
|
72
73
|
const data = message.data;
|
|
@@ -259,13 +260,16 @@ const parseMediaOnWorkerImplementation = async ({ controller, reader, ...params
|
|
|
259
260
|
controller === null || controller === void 0 ? void 0 : controller.addEventListener('abort', onAbort);
|
|
260
261
|
controller === null || controller === void 0 ? void 0 : controller.addEventListener('resume', onResume);
|
|
261
262
|
controller === null || controller === void 0 ? void 0 : controller.addEventListener('pause', onPause);
|
|
263
|
+
controller === null || controller === void 0 ? void 0 : controller.addEventListener('seek', onSeek);
|
|
262
264
|
function cleanup() {
|
|
263
265
|
worker.removeEventListener('message', onMessage);
|
|
264
266
|
controller === null || controller === void 0 ? void 0 : controller.removeEventListener('abort', onAbort);
|
|
265
267
|
controller === null || controller === void 0 ? void 0 : controller.removeEventListener('resume', onResume);
|
|
266
268
|
controller === null || controller === void 0 ? void 0 : controller.removeEventListener('pause', onPause);
|
|
269
|
+
controller === null || controller === void 0 ? void 0 : controller.removeEventListener('seek', onSeek);
|
|
267
270
|
worker.terminate();
|
|
268
271
|
}
|
|
272
|
+
controller === null || controller === void 0 ? void 0 : controller._internals.markAsReadyToEmitEvents();
|
|
269
273
|
const val = await promise;
|
|
270
274
|
cleanup();
|
|
271
275
|
return val;
|
package/dist/perform-seek.d.ts
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
1
|
+
import type { MediaParserController } from './controller/media-parser-controller';
|
|
2
|
+
import type { AllOptions, ParseMediaFields } from './fields';
|
|
3
|
+
import type { BufferIterator } from './iterator/buffer-iterator';
|
|
4
|
+
import type { LogLevel } from './log';
|
|
5
|
+
import type { ParseMediaMode, ParseMediaSrc } from './options';
|
|
6
|
+
import type { ReaderInterface } from './readers/reader';
|
|
7
|
+
import type { CurrentReader } from './state/current-reader';
|
|
8
|
+
import type { SeekInfiniteLoop } from './state/seek-infinite-loop';
|
|
9
|
+
import type { MediaSectionState } from './state/video-section';
|
|
10
|
+
export declare const performSeek: ({ seekTo, userInitiated, controller, mediaSection, iterator, seekInfiniteLoop, logLevel, mode, contentLength, currentReader, readerInterface, src, discardReadBytes, fields, }: {
|
|
3
11
|
seekTo: number;
|
|
4
|
-
|
|
12
|
+
userInitiated: boolean;
|
|
13
|
+
controller: MediaParserController;
|
|
14
|
+
mediaSection: MediaSectionState;
|
|
15
|
+
iterator: BufferIterator;
|
|
16
|
+
logLevel: LogLevel;
|
|
17
|
+
mode: ParseMediaMode;
|
|
18
|
+
contentLength: number;
|
|
19
|
+
seekInfiniteLoop: SeekInfiniteLoop;
|
|
20
|
+
currentReader: CurrentReader;
|
|
21
|
+
readerInterface: ReaderInterface;
|
|
22
|
+
fields: Partial<AllOptions<ParseMediaFields>>;
|
|
23
|
+
src: ParseMediaSrc;
|
|
24
|
+
discardReadBytes: (force: boolean) => Promise<void>;
|
|
5
25
|
}) => Promise<void>;
|
package/dist/perform-seek.js
CHANGED
|
@@ -4,13 +4,24 @@ exports.performSeek = void 0;
|
|
|
4
4
|
const log_1 = require("./log");
|
|
5
5
|
const seek_backwards_1 = require("./seek-backwards");
|
|
6
6
|
const seek_forwards_1 = require("./seek-forwards");
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
const
|
|
7
|
+
const video_section_1 = require("./state/video-section");
|
|
8
|
+
const performSeek = async ({ seekTo, userInitiated, controller, mediaSection, iterator, seekInfiniteLoop, logLevel, mode, contentLength, currentReader, readerInterface, src, discardReadBytes, fields, }) => {
|
|
9
|
+
const byteInMediaSection = (0, video_section_1.isByteInMediaSection)({
|
|
10
|
+
position: seekTo,
|
|
11
|
+
mediaSections: mediaSection.getMediaSections(),
|
|
12
|
+
});
|
|
13
|
+
if (byteInMediaSection !== 'in-section' && userInitiated) {
|
|
14
|
+
const sections = mediaSection.getMediaSections();
|
|
15
|
+
const sectionStrings = sections.map((section) => {
|
|
16
|
+
return `start: ${section.start}, end: ${section.size + section.start}`;
|
|
17
|
+
});
|
|
18
|
+
throw new Error(`Cannot seek to a byte that is not in the video section. Seeking to: ${seekTo}, sections: ${sectionStrings.join(' | ')}`);
|
|
19
|
+
}
|
|
20
|
+
seekInfiniteLoop.registerSeek(seekTo);
|
|
10
21
|
if (seekTo <= iterator.counter.getOffset() && mode === 'download') {
|
|
11
22
|
throw new Error(`Seeking backwards is not supported in parseAndDownloadMedia() mode. Current position: ${iterator.counter.getOffset()}, seekTo: ${seekTo}`);
|
|
12
23
|
}
|
|
13
|
-
if (seekTo >
|
|
24
|
+
if (seekTo > contentLength) {
|
|
14
25
|
throw new Error(`Cannot seek beyond the end of the file: ${seekTo} > ${contentLength}`);
|
|
15
26
|
}
|
|
16
27
|
if (mode === 'download') {
|
|
@@ -18,19 +29,44 @@ const performSeek = async ({ seekTo, state, }) => {
|
|
|
18
29
|
iterator.discard(seekTo - iterator.counter.getOffset());
|
|
19
30
|
return;
|
|
20
31
|
}
|
|
21
|
-
await
|
|
32
|
+
await controller._internals.checkForAbortAndPause();
|
|
22
33
|
const alreadyAtByte = iterator.counter.getOffset() === seekTo;
|
|
23
34
|
if (alreadyAtByte) {
|
|
24
35
|
log_1.Log.verbose(logLevel, `Already at the desired position, seeking done`);
|
|
36
|
+
controller._internals.performedSeeksSignal.markLastSeekAsUserInitiated();
|
|
25
37
|
return;
|
|
26
38
|
}
|
|
27
39
|
const skippingForward = seekTo > iterator.counter.getOffset();
|
|
40
|
+
controller._internals.performedSeeksSignal.recordSeek({
|
|
41
|
+
from: iterator.counter.getOffset(),
|
|
42
|
+
to: seekTo,
|
|
43
|
+
type: userInitiated ? 'user-initiated' : 'internal',
|
|
44
|
+
});
|
|
28
45
|
if (skippingForward) {
|
|
29
|
-
await (0, seek_forwards_1.seekForward)(
|
|
46
|
+
await (0, seek_forwards_1.seekForward)({
|
|
47
|
+
seekTo,
|
|
48
|
+
userInitiated,
|
|
49
|
+
iterator,
|
|
50
|
+
fields,
|
|
51
|
+
logLevel,
|
|
52
|
+
currentReader,
|
|
53
|
+
readerInterface,
|
|
54
|
+
src,
|
|
55
|
+
controller,
|
|
56
|
+
discardReadBytes,
|
|
57
|
+
});
|
|
30
58
|
}
|
|
31
59
|
else {
|
|
32
|
-
await (0, seek_backwards_1.seekBackwards)(
|
|
60
|
+
await (0, seek_backwards_1.seekBackwards)({
|
|
61
|
+
controller,
|
|
62
|
+
seekTo,
|
|
63
|
+
iterator,
|
|
64
|
+
logLevel,
|
|
65
|
+
currentReader,
|
|
66
|
+
readerInterface,
|
|
67
|
+
src,
|
|
68
|
+
});
|
|
33
69
|
}
|
|
34
|
-
await
|
|
70
|
+
await controller._internals.checkForAbortAndPause();
|
|
35
71
|
};
|
|
36
72
|
exports.performSeek = performSeek;
|
package/dist/readers/reader.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaParserController } from '../media-parser-controller';
|
|
1
|
+
import type { MediaParserController } from '../controller/media-parser-controller';
|
|
2
2
|
import type { ParseMediaSrc } from '../options';
|
|
3
3
|
export type Reader = {
|
|
4
4
|
reader: ReadableStreamDefaultReader<Uint8Array>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type AacSamplePosition = {
|
|
2
|
+
offset: number;
|
|
3
|
+
index: number;
|
|
4
|
+
size: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const aacState: () => {
|
|
7
|
+
addSample: ({ offset, size }: {
|
|
8
|
+
offset: number;
|
|
9
|
+
size: number;
|
|
10
|
+
}) => AacSamplePosition;
|
|
11
|
+
getSamples: () => AacSamplePosition[];
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.aacState = void 0;
|
|
4
|
+
const aacState = () => {
|
|
5
|
+
const samples = [];
|
|
6
|
+
return {
|
|
7
|
+
addSample: ({ offset, size }) => {
|
|
8
|
+
if (samples.find((s) => s.offset === offset)) {
|
|
9
|
+
throw new Error('Duplicate sample');
|
|
10
|
+
}
|
|
11
|
+
samples.push({ offset, index: samples.length, size });
|
|
12
|
+
return samples[samples.length - 1];
|
|
13
|
+
},
|
|
14
|
+
getSamples: () => samples,
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
exports.aacState = aacState;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Options, ParseMediaFields } from '../fields';
|
|
2
|
+
import type { MediaParserStructureUnstable } from '../parse-result';
|
|
3
|
+
import type { StructureState } from './structure';
|
|
4
|
+
export declare const needsTracksForField: ({ field, structure, }: {
|
|
5
|
+
field: keyof Options<ParseMediaFields>;
|
|
6
|
+
structure: MediaParserStructureUnstable | null;
|
|
7
|
+
}) => boolean;
|
|
8
|
+
export declare const makeCanSkipTracksState: ({ hasAudioTrackHandlers, fields, hasVideoTrackHandlers, structure, }: {
|
|
9
|
+
hasAudioTrackHandlers: boolean;
|
|
10
|
+
hasVideoTrackHandlers: boolean;
|
|
11
|
+
fields: Options<ParseMediaFields>;
|
|
12
|
+
structure: StructureState;
|
|
13
|
+
}) => {
|
|
14
|
+
canSkipTracks: () => boolean;
|
|
15
|
+
};
|
|
16
|
+
export type CanSkipTracksState = ReturnType<typeof makeCanSkipTracksState>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeCanSkipTracksState = exports.needsTracksForField = void 0;
|
|
4
|
+
const needsTracksForField = ({ field, structure, }) => {
|
|
5
|
+
if (field === 'dimensions') {
|
|
6
|
+
if ((structure === null || structure === void 0 ? void 0 : structure.type) === 'riff') {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
if (field === 'audioCodec' ||
|
|
12
|
+
field === 'durationInSeconds' ||
|
|
13
|
+
field === 'slowDurationInSeconds' ||
|
|
14
|
+
field === 'slowFps' ||
|
|
15
|
+
field === 'fps' ||
|
|
16
|
+
field === 'isHdr' ||
|
|
17
|
+
field === 'rotation' ||
|
|
18
|
+
field === 'structure' ||
|
|
19
|
+
field === 'tracks' ||
|
|
20
|
+
field === 'unrotatedDimensions' ||
|
|
21
|
+
field === 'videoCodec' ||
|
|
22
|
+
field === 'metadata' ||
|
|
23
|
+
field === 'location' ||
|
|
24
|
+
field === 'slowKeyframes' ||
|
|
25
|
+
field === 'slowNumberOfFrames' ||
|
|
26
|
+
field === 'keyframes' ||
|
|
27
|
+
field === 'images' ||
|
|
28
|
+
field === 'sampleRate' ||
|
|
29
|
+
field === 'numberOfAudioChannels' ||
|
|
30
|
+
field === 'slowAudioBitrate' ||
|
|
31
|
+
field === 'slowVideoBitrate' ||
|
|
32
|
+
field === 'm3uStreams') {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
if (field === 'container' ||
|
|
36
|
+
field === 'internalStats' ||
|
|
37
|
+
field === 'mimeType' ||
|
|
38
|
+
field === 'name' ||
|
|
39
|
+
field === 'size') {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
throw new Error(`field not implemeted ${field}`);
|
|
43
|
+
};
|
|
44
|
+
exports.needsTracksForField = needsTracksForField;
|
|
45
|
+
const makeCanSkipTracksState = ({ hasAudioTrackHandlers, fields, hasVideoTrackHandlers, structure, }) => {
|
|
46
|
+
return {
|
|
47
|
+
canSkipTracks: () => {
|
|
48
|
+
if (hasAudioTrackHandlers || hasVideoTrackHandlers) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const keys = Object.keys(fields !== null && fields !== void 0 ? fields : {});
|
|
52
|
+
const selectedKeys = keys.filter((k) => fields[k]);
|
|
53
|
+
return !selectedKeys.some((k) => (0, exports.needsTracksForField)({
|
|
54
|
+
field: k,
|
|
55
|
+
structure: structure.getStructureOrNull(),
|
|
56
|
+
}));
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
exports.makeCanSkipTracksState = makeCanSkipTracksState;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.currentReader = void 0;
|
|
4
|
+
const currentReader = (initialReader) => {
|
|
5
|
+
let current = initialReader;
|
|
6
|
+
return {
|
|
7
|
+
getCurrent: () => current,
|
|
8
|
+
setCurrent: (newReader) => {
|
|
9
|
+
current = newReader;
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
exports.currentReader = currentReader;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const emittedState: () => AllOptions<ParseMediaFields>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emittedState = void 0;
|
|
4
|
+
const emittedState = () => {
|
|
5
|
+
const emittedFields = {
|
|
6
|
+
audioCodec: false,
|
|
7
|
+
container: false,
|
|
8
|
+
dimensions: false,
|
|
9
|
+
durationInSeconds: false,
|
|
10
|
+
fps: false,
|
|
11
|
+
internalStats: false,
|
|
12
|
+
isHdr: false,
|
|
13
|
+
location: false,
|
|
14
|
+
metadata: false,
|
|
15
|
+
mimeType: false,
|
|
16
|
+
name: false,
|
|
17
|
+
rotation: false,
|
|
18
|
+
size: false,
|
|
19
|
+
structure: false,
|
|
20
|
+
tracks: false,
|
|
21
|
+
videoCodec: false,
|
|
22
|
+
unrotatedDimensions: false,
|
|
23
|
+
slowDurationInSeconds: false,
|
|
24
|
+
slowFps: false,
|
|
25
|
+
slowKeyframes: false,
|
|
26
|
+
slowNumberOfFrames: false,
|
|
27
|
+
keyframes: false,
|
|
28
|
+
images: false,
|
|
29
|
+
numberOfAudioChannels: false,
|
|
30
|
+
sampleRate: false,
|
|
31
|
+
slowAudioBitrate: false,
|
|
32
|
+
slowVideoBitrate: false,
|
|
33
|
+
m3uStreams: false,
|
|
34
|
+
};
|
|
35
|
+
return emittedFields;
|
|
36
|
+
};
|
|
37
|
+
exports.emittedState = emittedState;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.flacState = void 0;
|
|
4
|
+
const flacState = () => {
|
|
5
|
+
let blockingBitStrategy;
|
|
6
|
+
return {
|
|
7
|
+
setBlockingBitStrategy: (strategy) => {
|
|
8
|
+
blockingBitStrategy = strategy;
|
|
9
|
+
},
|
|
10
|
+
getBlockingBitStrategy: () => blockingBitStrategy,
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
exports.flacState = flacState;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Options, ParseMediaFields } from '../fields';
|
|
2
|
+
import type { Track } from '../get-tracks';
|
|
3
|
+
import type { LogLevel } from '../log';
|
|
4
|
+
import type { ParseMediaSrc } from '../options';
|
|
5
|
+
import type { CanSkipTracksState } from './can-skip-tracks';
|
|
6
|
+
export declare const makeTracksSectionState: (canSkipTracksState: CanSkipTracksState, src: ParseMediaSrc) => {
|
|
7
|
+
hasAllTracks: () => boolean;
|
|
8
|
+
getIsDone: () => boolean;
|
|
9
|
+
setIsDone: (logLevel: LogLevel) => void;
|
|
10
|
+
addTrack: (track: Track) => void;
|
|
11
|
+
getTracks: () => Track[];
|
|
12
|
+
ensureHasTracksAtEnd: (fields: Options<ParseMediaFields>) => void;
|
|
13
|
+
};
|
|
14
|
+
export type TracksState = ReturnType<typeof makeTracksSectionState>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeTracksSectionState = void 0;
|
|
4
|
+
const log_1 = require("../log");
|
|
5
|
+
const makeTracksSectionState = (canSkipTracksState, src) => {
|
|
6
|
+
const tracks = [];
|
|
7
|
+
let doneWithTracks = false;
|
|
8
|
+
return {
|
|
9
|
+
hasAllTracks: () => doneWithTracks,
|
|
10
|
+
getIsDone: () => doneWithTracks,
|
|
11
|
+
setIsDone: (logLevel) => {
|
|
12
|
+
if (doneWithTracks) {
|
|
13
|
+
throw new Error('Error in Media Parser: Tracks have already been parsed');
|
|
14
|
+
}
|
|
15
|
+
log_1.Log.verbose(logLevel, 'All tracks have been parsed');
|
|
16
|
+
doneWithTracks = true;
|
|
17
|
+
},
|
|
18
|
+
addTrack: (track) => {
|
|
19
|
+
tracks.push(track);
|
|
20
|
+
},
|
|
21
|
+
getTracks: () => tracks,
|
|
22
|
+
ensureHasTracksAtEnd: (fields) => {
|
|
23
|
+
if (canSkipTracksState.canSkipTracks()) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (!fields.tracks) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (!doneWithTracks) {
|
|
30
|
+
throw new Error('Error in Media Parser: End of parsing of ' +
|
|
31
|
+
src +
|
|
32
|
+
' has been reached, but no tracks have been found ');
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
exports.makeTracksSectionState = makeTracksSectionState;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type MediaParserEmbeddedImage = {
|
|
2
|
+
description: string | null;
|
|
3
|
+
mimeType: string | null;
|
|
4
|
+
data: Uint8Array;
|
|
5
|
+
};
|
|
6
|
+
export declare const imagesState: () => {
|
|
7
|
+
images: MediaParserEmbeddedImage[];
|
|
8
|
+
addImage: (image: MediaParserEmbeddedImage) => void;
|
|
9
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.imagesState = void 0;
|
|
4
|
+
const imagesState = () => {
|
|
5
|
+
const images = [];
|
|
6
|
+
const addImage = (image) => {
|
|
7
|
+
images.push(image);
|
|
8
|
+
};
|
|
9
|
+
return {
|
|
10
|
+
images,
|
|
11
|
+
addImage,
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
exports.imagesState = imagesState;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SamplePosition } from '../../get-sample-positions';
|
|
2
|
+
import type { AudioTrack, OtherTrack, VideoTrack } from '../../get-tracks';
|
|
3
|
+
import type { ParserState } from '../parser-state';
|
|
4
|
+
export type FlatSample = {
|
|
5
|
+
track: VideoTrack | AudioTrack | OtherTrack;
|
|
6
|
+
samplePosition: SamplePosition;
|
|
7
|
+
};
|
|
8
|
+
export declare const calculateFlatSamples: (state: ParserState) => any[];
|
|
9
|
+
export declare const cachedSamplePositionsState: () => {
|
|
10
|
+
getSamples: (mdatStart: number) => FlatSample[] | null;
|
|
11
|
+
setSamples: (mdatStart: number, samples: FlatSample[]) => void;
|
|
12
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cachedSamplePositionsState = exports.calculateFlatSamples = void 0;
|
|
4
|
+
const get_sample_positions_from_track_1 = require("../../containers/iso-base-media/get-sample-positions-from-track");
|
|
5
|
+
const traversal_1 = require("../../containers/iso-base-media/traversal");
|
|
6
|
+
const get_tracks_1 = require("../../get-tracks");
|
|
7
|
+
const calculateFlatSamples = (state) => {
|
|
8
|
+
const tracks = (0, get_tracks_1.getTracks)(state);
|
|
9
|
+
const allTracks = [
|
|
10
|
+
...tracks.videoTracks,
|
|
11
|
+
...tracks.audioTracks,
|
|
12
|
+
...tracks.otherTracks,
|
|
13
|
+
];
|
|
14
|
+
const flatSamples = allTracks
|
|
15
|
+
.map((track) => {
|
|
16
|
+
const { samplePositions } = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
|
|
17
|
+
trakBox: track.trakBox,
|
|
18
|
+
moofBoxes: (0, traversal_1.getMoofBoxes)(state.structure.getIsoStructure().boxes),
|
|
19
|
+
tfraBoxes: (0, traversal_1.getTfraBoxes)(state.structure.getIsoStructure()),
|
|
20
|
+
});
|
|
21
|
+
return samplePositions.map((samplePosition) => {
|
|
22
|
+
return {
|
|
23
|
+
track,
|
|
24
|
+
samplePosition,
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
})
|
|
28
|
+
.flat(1);
|
|
29
|
+
return flatSamples;
|
|
30
|
+
};
|
|
31
|
+
exports.calculateFlatSamples = calculateFlatSamples;
|
|
32
|
+
const cachedSamplePositionsState = () => {
|
|
33
|
+
const cachedForMdatStart = {};
|
|
34
|
+
return {
|
|
35
|
+
getSamples: (mdatStart) => {
|
|
36
|
+
if (cachedForMdatStart[mdatStart]) {
|
|
37
|
+
return cachedForMdatStart[mdatStart];
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
},
|
|
41
|
+
setSamples: (mdatStart, samples) => {
|
|
42
|
+
cachedForMdatStart[mdatStart] = samples;
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
exports.cachedSamplePositionsState = cachedSamplePositionsState;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { MediaParserController } from '../../controller/media-parser-controller';
|
|
2
|
+
import type { LogLevel } from '../../log';
|
|
3
|
+
import type { ParseMediaSrc } from '../../options';
|
|
4
|
+
import type { ReaderInterface } from '../../readers/reader';
|
|
5
|
+
export declare const isoBaseMediaState: ({ contentLength, controller, readerInterface, src, logLevel, }: {
|
|
6
|
+
contentLength: number;
|
|
7
|
+
controller: MediaParserController;
|
|
8
|
+
readerInterface: ReaderInterface;
|
|
9
|
+
src: ParseMediaSrc;
|
|
10
|
+
logLevel: LogLevel;
|
|
11
|
+
}) => {
|
|
12
|
+
flatSamples: {
|
|
13
|
+
getSamples: (mdatStart: number) => import("./cached-sample-positions").FlatSample[] | null;
|
|
14
|
+
setSamples: (mdatStart: number, samples: import("./cached-sample-positions").FlatSample[]) => void;
|
|
15
|
+
};
|
|
16
|
+
moov: {
|
|
17
|
+
setMoovBox: (moov: MediaParserController) => void;
|
|
18
|
+
getMoovBox: () => any;
|
|
19
|
+
};
|
|
20
|
+
mfra: {
|
|
21
|
+
triggerLoad: () => Promise<IsoBaseMediaBox[] | null> | null;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export type IsoBaseMediaState = ReturnType<typeof isoBaseMediaState>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isoBaseMediaState = void 0;
|
|
4
|
+
const cached_sample_positions_1 = require("./cached-sample-positions");
|
|
5
|
+
const lazy_mfra_load_1 = require("./lazy-mfra-load");
|
|
6
|
+
const moov_box_1 = require("./moov-box");
|
|
7
|
+
const isoBaseMediaState = ({ contentLength, controller, readerInterface, src, logLevel, }) => {
|
|
8
|
+
return {
|
|
9
|
+
flatSamples: (0, cached_sample_positions_1.cachedSamplePositionsState)(),
|
|
10
|
+
moov: (0, moov_box_1.moovState)(),
|
|
11
|
+
mfra: (0, lazy_mfra_load_1.lazyMfraLoad)({
|
|
12
|
+
contentLength,
|
|
13
|
+
controller,
|
|
14
|
+
readerInterface,
|
|
15
|
+
src,
|
|
16
|
+
logLevel,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
exports.isoBaseMediaState = isoBaseMediaState;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { MediaParserController } from '../../controller/media-parser-controller';
|
|
2
|
+
import { type LogLevel } from '../../log';
|
|
3
|
+
import type { ParseMediaSrc } from '../../options';
|
|
4
|
+
import type { ReaderInterface } from '../../readers/reader';
|
|
5
|
+
export declare const lazyMfraLoad: ({ contentLength, controller, readerInterface, src, logLevel, }: {
|
|
6
|
+
contentLength: number;
|
|
7
|
+
controller: MediaParserController;
|
|
8
|
+
readerInterface: ReaderInterface;
|
|
9
|
+
src: ParseMediaSrc;
|
|
10
|
+
logLevel: LogLevel;
|
|
11
|
+
}) => {
|
|
12
|
+
triggerLoad: () => Promise<IsoBaseMediaBox[] | null> | null;
|
|
13
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lazyMfraLoad = void 0;
|
|
4
|
+
const get_mfra_seeking_box_1 = require("../../containers/iso-base-media/get-mfra-seeking-box");
|
|
5
|
+
const log_1 = require("../../log");
|
|
6
|
+
const lazyMfraLoad = ({ contentLength, controller, readerInterface, src, logLevel, }) => {
|
|
7
|
+
let prom = null;
|
|
8
|
+
const triggerLoad = () => {
|
|
9
|
+
if (prom) {
|
|
10
|
+
return prom;
|
|
11
|
+
}
|
|
12
|
+
log_1.Log.verbose(logLevel, 'Moof box found, trying to lazy load mfra');
|
|
13
|
+
prom = (0, get_mfra_seeking_box_1.getMfraSeekingBox)({
|
|
14
|
+
contentLength,
|
|
15
|
+
controller,
|
|
16
|
+
readerInterface,
|
|
17
|
+
src,
|
|
18
|
+
logLevel,
|
|
19
|
+
}).then((boxes) => {
|
|
20
|
+
log_1.Log.verbose(logLevel, 'Lazily found mfra atom.');
|
|
21
|
+
return boxes;
|
|
22
|
+
});
|
|
23
|
+
return prom;
|
|
24
|
+
};
|
|
25
|
+
return {
|
|
26
|
+
triggerLoad,
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
exports.lazyMfraLoad = lazyMfraLoad;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.moovState = void 0;
|
|
4
|
+
const moovState = () => {
|
|
5
|
+
let moovBox = null;
|
|
6
|
+
return {
|
|
7
|
+
setMoovBox: (moov) => {
|
|
8
|
+
moovBox = moov;
|
|
9
|
+
},
|
|
10
|
+
getMoovBox: () => moovBox,
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
exports.moovState = moovState;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MediaParserKeyframe } from '../options';
|
|
2
|
+
export declare const keyframesState: () => {
|
|
3
|
+
addKeyframe: (keyframe: MediaParserKeyframe) => void;
|
|
4
|
+
getKeyframes: () => MediaParserKeyframe[];
|
|
5
|
+
};
|
|
6
|
+
export type KeyframesState = ReturnType<typeof keyframesState>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.keyframesState = void 0;
|
|
4
|
+
const keyframesState = () => {
|
|
5
|
+
const keyframes = [];
|
|
6
|
+
return {
|
|
7
|
+
addKeyframe: (keyframe) => {
|
|
8
|
+
keyframes.push(keyframe);
|
|
9
|
+
},
|
|
10
|
+
getKeyframes: () => {
|
|
11
|
+
return keyframes;
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
exports.keyframesState = keyframesState;
|