@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
package/dist/esm/worker.mjs
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
// src/with-resolvers.ts
|
|
2
|
+
var withResolvers = function() {
|
|
3
|
+
let resolve;
|
|
4
|
+
let reject;
|
|
5
|
+
const promise = new Promise((res, rej) => {
|
|
6
|
+
resolve = res;
|
|
7
|
+
reject = rej;
|
|
8
|
+
});
|
|
9
|
+
return { promise, resolve, reject };
|
|
10
|
+
};
|
|
11
|
+
|
|
1
12
|
// src/errors.ts
|
|
2
13
|
class IsAGifError extends Error {
|
|
3
14
|
mimeType;
|
|
@@ -219,16 +230,12 @@ var convertToWorkerPayload = (payload) => {
|
|
|
219
230
|
var post = (worker, payload) => {
|
|
220
231
|
worker.postMessage(payload);
|
|
221
232
|
};
|
|
222
|
-
var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
|
|
223
|
-
if (typeof Worker === "undefined") {
|
|
224
|
-
throw new Error('"Worker" is not available. Cannot call workerClient()');
|
|
225
|
-
}
|
|
233
|
+
var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params }, worker, apiName) => {
|
|
226
234
|
if (reader) {
|
|
227
235
|
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().`);
|
|
228
236
|
}
|
|
229
|
-
const worker = new Worker(workerUrlEntry);
|
|
230
237
|
post(worker, convertToWorkerPayload(params));
|
|
231
|
-
const { promise, resolve, reject } =
|
|
238
|
+
const { promise, resolve, reject } = withResolvers();
|
|
232
239
|
const onAbort = () => {
|
|
233
240
|
post(worker, { type: "request-abort" });
|
|
234
241
|
};
|
|
@@ -238,6 +245,10 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
|
|
|
238
245
|
const onPause = () => {
|
|
239
246
|
post(worker, { type: "request-pause" });
|
|
240
247
|
};
|
|
248
|
+
const onSeek = ({ detail: { seek } }) => {
|
|
249
|
+
post(worker, { type: "request-seek", payload: seek });
|
|
250
|
+
controller?._internals.seekSignal.clearSeekIfStillSame(seek);
|
|
251
|
+
};
|
|
241
252
|
const callbacks = {};
|
|
242
253
|
function onMessage(message) {
|
|
243
254
|
const data = message.data;
|
|
@@ -425,13 +436,16 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
|
|
|
425
436
|
controller?.addEventListener("abort", onAbort);
|
|
426
437
|
controller?.addEventListener("resume", onResume);
|
|
427
438
|
controller?.addEventListener("pause", onPause);
|
|
439
|
+
controller?.addEventListener("seek", onSeek);
|
|
428
440
|
function cleanup() {
|
|
429
441
|
worker.removeEventListener("message", onMessage);
|
|
430
442
|
controller?.removeEventListener("abort", onAbort);
|
|
431
443
|
controller?.removeEventListener("resume", onResume);
|
|
432
444
|
controller?.removeEventListener("pause", onPause);
|
|
445
|
+
controller?.removeEventListener("seek", onSeek);
|
|
433
446
|
worker.terminate();
|
|
434
447
|
}
|
|
448
|
+
controller?._internals.markAsReadyToEmitEvents();
|
|
435
449
|
const val = await promise;
|
|
436
450
|
cleanup();
|
|
437
451
|
return val;
|
|
@@ -439,12 +453,12 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
|
|
|
439
453
|
|
|
440
454
|
// src/worker.module.ts
|
|
441
455
|
var parseMediaOnWebWorker = (params) => {
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
456
|
+
if (typeof Worker === "undefined") {
|
|
457
|
+
throw new Error('"Worker" is not available. Cannot call parseMediaOnWebWorker()');
|
|
458
|
+
}
|
|
459
|
+
const worker = new Worker(new URL("./worker-web-entry", import.meta.url));
|
|
460
|
+
return parseMediaOnWorkerImplementation(params, worker, "parseMediaOnWebWorker");
|
|
446
461
|
};
|
|
447
462
|
export {
|
|
448
|
-
parseMediaOnWebWorker
|
|
449
|
-
parseMediaOnServerWorker
|
|
463
|
+
parseMediaOnWebWorker
|
|
450
464
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaParserController } from './media-parser-controller';
|
|
1
|
+
import type { MediaParserController } from './controller/media-parser-controller';
|
|
2
2
|
export declare const forwardMediaParserController: ({ parentController, childController, }: {
|
|
3
3
|
parentController: MediaParserController;
|
|
4
4
|
childController: MediaParserController;
|
package/dist/get-dimensions.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.hasDimensions = exports.getDimensions = void 0;
|
|
|
4
4
|
const get_tracks_1 = require("./get-tracks");
|
|
5
5
|
const is_audio_structure_1 = require("./is-audio-structure");
|
|
6
6
|
const getDimensions = (state) => {
|
|
7
|
-
const structure = state.getStructureOrNull();
|
|
7
|
+
const structure = state.structure.getStructureOrNull();
|
|
8
8
|
if (structure && (0, is_audio_structure_1.isAudioStructure)(structure)) {
|
|
9
9
|
return null;
|
|
10
10
|
}
|
|
@@ -23,7 +23,7 @@ const getDimensions = (state) => {
|
|
|
23
23
|
};
|
|
24
24
|
exports.getDimensions = getDimensions;
|
|
25
25
|
const hasDimensions = (state) => {
|
|
26
|
-
const structure = state.getStructureOrNull();
|
|
26
|
+
const structure = state.structure.getStructureOrNull();
|
|
27
27
|
if (structure && (0, is_audio_structure_1.isAudioStructure)(structure)) {
|
|
28
28
|
return true;
|
|
29
29
|
}
|
package/dist/get-duration.js
CHANGED
|
@@ -38,35 +38,18 @@ const isMatroska = (boxes) => {
|
|
|
38
38
|
return matroskaBox;
|
|
39
39
|
};
|
|
40
40
|
exports.isMatroska = isMatroska;
|
|
41
|
-
const isoHasDuration = (parserState) => {
|
|
42
|
-
const structure = parserState.getIsoStructure();
|
|
43
|
-
const moovBox = (0, traversal_1.getMoovBoxFromState)(parserState);
|
|
44
|
-
if (!moovBox) {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
const mvhdBox = (0, traversal_1.getMvhdBox)(moovBox);
|
|
48
|
-
if (!mvhdBox) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
if (mvhdBox.type !== 'mvhd-box') {
|
|
52
|
-
throw new Error('Expected mvhd-box');
|
|
53
|
-
}
|
|
54
|
-
if (mvhdBox.durationInSeconds > 0) {
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
// Checking if this is a fragmented mp4
|
|
58
|
-
const moofBoxes = (0, traversal_1.getMoofBoxes)(structure.boxes);
|
|
59
|
-
const hasMvex = moovBox.children.some((b) => b.type === 'regular-box' && b.boxType === 'mvex');
|
|
60
|
-
const isFragmented = moofBoxes.length > 0 || hasMvex;
|
|
61
|
-
return !isFragmented;
|
|
62
|
-
};
|
|
63
41
|
const getDurationFromIsoBaseMedia = (parserState) => {
|
|
64
|
-
const structure = parserState.getIsoStructure();
|
|
65
|
-
const moovBox = (0, traversal_1.getMoovBoxFromState)(
|
|
42
|
+
const structure = parserState.structure.getIsoStructure();
|
|
43
|
+
const moovBox = (0, traversal_1.getMoovBoxFromState)({
|
|
44
|
+
structureState: parserState.structure,
|
|
45
|
+
isoState: parserState.iso,
|
|
46
|
+
mp4HeaderSegment: parserState.mp4HeaderSegment,
|
|
47
|
+
});
|
|
66
48
|
if (!moovBox) {
|
|
67
49
|
return null;
|
|
68
50
|
}
|
|
69
51
|
const moofBoxes = (0, traversal_1.getMoofBoxes)(structure.boxes);
|
|
52
|
+
const tfraBoxes = (0, traversal_1.getTfraBoxes)(structure);
|
|
70
53
|
const mvhdBox = (0, traversal_1.getMvhdBox)(moovBox);
|
|
71
54
|
if (!mvhdBox) {
|
|
72
55
|
return null;
|
|
@@ -85,18 +68,28 @@ const getDurationFromIsoBaseMedia = (parserState) => {
|
|
|
85
68
|
];
|
|
86
69
|
const allSamples = allTracks.map((t) => {
|
|
87
70
|
const { timescale: ts } = t;
|
|
88
|
-
const samplePositions = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
|
|
71
|
+
const { samplePositions, isComplete } = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
|
|
89
72
|
trakBox: t.trakBox,
|
|
90
73
|
moofBoxes,
|
|
74
|
+
tfraBoxes,
|
|
91
75
|
});
|
|
76
|
+
if (!isComplete) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
if (samplePositions.length === 0) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
92
82
|
const highest = samplePositions === null || samplePositions === void 0 ? void 0 : samplePositions.map((sp) => (sp.cts + sp.duration) / ts).reduce((a, b) => Math.max(a, b), 0);
|
|
93
83
|
return highest !== null && highest !== void 0 ? highest : 0;
|
|
94
84
|
});
|
|
95
|
-
|
|
85
|
+
if (allSamples.every((s) => s === null)) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const highestTimestamp = Math.max(...allSamples.filter((s) => s !== null));
|
|
96
89
|
return highestTimestamp;
|
|
97
90
|
};
|
|
98
91
|
const getDuration = (parserState) => {
|
|
99
|
-
const structure = parserState.getStructure();
|
|
92
|
+
const structure = parserState.structure.getStructure();
|
|
100
93
|
if (structure.type === 'matroska') {
|
|
101
94
|
return getDurationFromMatroska(structure.boxes);
|
|
102
95
|
}
|
|
@@ -130,13 +123,10 @@ exports.getDuration = getDuration;
|
|
|
130
123
|
// `duration` just grabs from metadata, and otherwise returns null
|
|
131
124
|
// Therefore just checking if we have tracks
|
|
132
125
|
const hasDuration = (parserState) => {
|
|
133
|
-
const structure = parserState.getStructureOrNull();
|
|
126
|
+
const structure = parserState.structure.getStructureOrNull();
|
|
134
127
|
if (structure === null) {
|
|
135
128
|
return false;
|
|
136
129
|
}
|
|
137
|
-
if (structure.type === 'iso-base-media') {
|
|
138
|
-
return isoHasDuration(parserState);
|
|
139
|
-
}
|
|
140
130
|
return (0, get_tracks_1.getHasTracks)(parserState);
|
|
141
131
|
};
|
|
142
132
|
exports.hasDuration = hasDuration;
|
package/dist/get-fps.js
CHANGED
|
@@ -65,7 +65,11 @@ const getFpsFromMp4TrakBox = (trakBox) => {
|
|
|
65
65
|
};
|
|
66
66
|
exports.getFpsFromMp4TrakBox = getFpsFromMp4TrakBox;
|
|
67
67
|
const getFpsFromIsoMaseMedia = (state) => {
|
|
68
|
-
const moovBox = (0, traversal_1.getMoovBoxFromState)(
|
|
68
|
+
const moovBox = (0, traversal_1.getMoovBoxFromState)({
|
|
69
|
+
structureState: state.structure,
|
|
70
|
+
isoState: state.iso,
|
|
71
|
+
mp4HeaderSegment: state.mp4HeaderSegment,
|
|
72
|
+
});
|
|
69
73
|
if (!moovBox) {
|
|
70
74
|
return null;
|
|
71
75
|
}
|
|
@@ -91,7 +95,7 @@ const getFpsFromAvi = (structure) => {
|
|
|
91
95
|
return null;
|
|
92
96
|
};
|
|
93
97
|
const getFps = (state) => {
|
|
94
|
-
const segments = state.getStructure();
|
|
98
|
+
const segments = state.structure.getStructure();
|
|
95
99
|
if (segments.type === 'iso-base-media') {
|
|
96
100
|
return getFpsFromIsoMaseMedia(state);
|
|
97
101
|
}
|
|
@@ -133,7 +137,7 @@ const hasFps = (state) => {
|
|
|
133
137
|
// Not bothering to parse
|
|
134
138
|
// Users should use `slowFps` field
|
|
135
139
|
// same goes for audio
|
|
136
|
-
const structure = state.getStructure();
|
|
140
|
+
const structure = state.structure.getStructure();
|
|
137
141
|
if ((0, is_audio_structure_1.isAudioStructure)(structure)) {
|
|
138
142
|
return true;
|
|
139
143
|
}
|
package/dist/get-keyframes.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.hasKeyframes = exports.getKeyframes = void 0;
|
|
|
4
4
|
const get_keyframes_1 = require("./containers/iso-base-media/get-keyframes");
|
|
5
5
|
const get_tracks_1 = require("./get-tracks");
|
|
6
6
|
const getKeyframes = (state) => {
|
|
7
|
-
const structure = state.getStructure();
|
|
7
|
+
const structure = state.structure.getStructure();
|
|
8
8
|
if (structure.type === 'iso-base-media') {
|
|
9
9
|
return (0, get_keyframes_1.getKeyframesFromIsoBaseMedia)(state);
|
|
10
10
|
}
|
|
@@ -12,7 +12,7 @@ const getKeyframes = (state) => {
|
|
|
12
12
|
};
|
|
13
13
|
exports.getKeyframes = getKeyframes;
|
|
14
14
|
const hasKeyframes = (parserState) => {
|
|
15
|
-
const structure = parserState.getStructure();
|
|
15
|
+
const structure = parserState.structure.getStructure();
|
|
16
16
|
if (structure.type === 'iso-base-media') {
|
|
17
17
|
return (0, get_tracks_1.getHasTracks)(parserState);
|
|
18
18
|
}
|
|
@@ -1,4 +1,20 @@
|
|
|
1
|
+
import type { LogLevel } from './log';
|
|
2
|
+
import type { IsoBaseMediaStructure } from './parse-result';
|
|
1
3
|
import type { SeekingInfo } from './seeking-info';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
import type { IsoBaseMediaState } from './state/iso-base-media/iso-state';
|
|
5
|
+
import type { StructureState } from './state/structure';
|
|
6
|
+
import type { MediaSectionState } from './state/video-section';
|
|
7
|
+
import type { SeekResolution } from './work-on-seek-request';
|
|
8
|
+
export declare const getSeekingInfo: ({ structureState, mp4HeaderSegment, mediaSectionState, isoState, }: {
|
|
9
|
+
structureState: StructureState;
|
|
10
|
+
mp4HeaderSegment: IsoBaseMediaStructure | null;
|
|
11
|
+
mediaSectionState: MediaSectionState;
|
|
12
|
+
isoState: IsoBaseMediaState;
|
|
13
|
+
}) => SeekingInfo | null;
|
|
14
|
+
export declare const getSeekingByte: ({ info, time, logLevel, currentPosition, isoState, }: {
|
|
15
|
+
info: SeekingInfo;
|
|
16
|
+
time: number;
|
|
17
|
+
logLevel: LogLevel;
|
|
18
|
+
currentPosition: number;
|
|
19
|
+
isoState: IsoBaseMediaState;
|
|
20
|
+
}) => Promise<SeekResolution>;
|
package/dist/get-seeking-info.js
CHANGED
|
@@ -2,21 +2,47 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getSeekingByte = exports.getSeekingInfo = void 0;
|
|
4
4
|
const get_seeking_from_mp4_1 = require("./containers/iso-base-media/get-seeking-from-mp4");
|
|
5
|
-
const
|
|
6
|
-
|
|
5
|
+
const get_seeking_info_from_mp4_1 = require("./containers/iso-base-media/get-seeking-info-from-mp4");
|
|
6
|
+
const get_seeking_byte_1 = require("./containers/wav/get-seeking-byte");
|
|
7
|
+
const get_seeking_info_1 = require("./containers/wav/get-seeking-info");
|
|
8
|
+
const getSeekingInfo = ({ structureState, mp4HeaderSegment, mediaSectionState, isoState, }) => {
|
|
9
|
+
const structure = structureState.getStructureOrNull();
|
|
7
10
|
if (!structure) {
|
|
8
11
|
return null;
|
|
9
12
|
}
|
|
10
13
|
if (structure.type === 'iso-base-media') {
|
|
11
|
-
return (0,
|
|
14
|
+
return (0, get_seeking_info_from_mp4_1.getSeekingInfoFromMp4)({
|
|
15
|
+
structureState,
|
|
16
|
+
isoState,
|
|
17
|
+
mp4HeaderSegment,
|
|
18
|
+
mediaSectionState,
|
|
19
|
+
});
|
|
12
20
|
}
|
|
13
|
-
|
|
21
|
+
if (structure.type === 'wav') {
|
|
22
|
+
return (0, get_seeking_info_1.getSeekingInfoFromWav)({
|
|
23
|
+
structure,
|
|
24
|
+
mediaSectionState,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
throw new Error(`Seeking is not supported for this format: ${structure.type}`);
|
|
14
28
|
};
|
|
15
29
|
exports.getSeekingInfo = getSeekingInfo;
|
|
16
|
-
const getSeekingByte = (info, time) => {
|
|
30
|
+
const getSeekingByte = ({ info, time, logLevel, currentPosition, isoState, }) => {
|
|
17
31
|
if (info.type === 'iso-base-media-seeking-info') {
|
|
18
|
-
return (0, get_seeking_from_mp4_1.getSeekingByteFromIsoBaseMedia)(
|
|
32
|
+
return (0, get_seeking_from_mp4_1.getSeekingByteFromIsoBaseMedia)({
|
|
33
|
+
info,
|
|
34
|
+
time,
|
|
35
|
+
logLevel,
|
|
36
|
+
currentPosition,
|
|
37
|
+
isoState,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (info.type === 'wav-seeking-info') {
|
|
41
|
+
return (0, get_seeking_byte_1.getSeekingByteFromWav)({
|
|
42
|
+
info,
|
|
43
|
+
time,
|
|
44
|
+
});
|
|
19
45
|
}
|
|
20
|
-
throw new Error(`Unknown seeking info type: ${info
|
|
46
|
+
throw new Error(`Unknown seeking info type: ${info}`);
|
|
21
47
|
};
|
|
22
48
|
exports.getSeekingByte = getSeekingByte;
|
package/dist/get-tracks.js
CHANGED
|
@@ -15,11 +15,15 @@ const getNumberOfTracks = (moovBox) => {
|
|
|
15
15
|
};
|
|
16
16
|
exports.getNumberOfTracks = getNumberOfTracks;
|
|
17
17
|
const isoBaseMediaHasTracks = (state) => {
|
|
18
|
-
return Boolean((0, traversal_1.getMoovBoxFromState)(
|
|
18
|
+
return Boolean((0, traversal_1.getMoovBoxFromState)({
|
|
19
|
+
structureState: state.structure,
|
|
20
|
+
isoState: state.iso,
|
|
21
|
+
mp4HeaderSegment: state.mp4HeaderSegment,
|
|
22
|
+
}));
|
|
19
23
|
};
|
|
20
24
|
exports.isoBaseMediaHasTracks = isoBaseMediaHasTracks;
|
|
21
25
|
const getHasTracks = (state) => {
|
|
22
|
-
const structure = state.getStructure();
|
|
26
|
+
const structure = state.structure.getStructure();
|
|
23
27
|
if (structure.type === 'matroska') {
|
|
24
28
|
return (0, get_ready_tracks_1.matroskaHasTracks)(state);
|
|
25
29
|
}
|
|
@@ -102,7 +106,11 @@ const getTracksFromMoovBox = (moovBox) => {
|
|
|
102
106
|
};
|
|
103
107
|
exports.getTracksFromMoovBox = getTracksFromMoovBox;
|
|
104
108
|
const getTracksFromIsoBaseMedia = (state) => {
|
|
105
|
-
const moovBox = (0, traversal_1.getMoovBoxFromState)(
|
|
109
|
+
const moovBox = (0, traversal_1.getMoovBoxFromState)({
|
|
110
|
+
structureState: state.structure,
|
|
111
|
+
isoState: state.iso,
|
|
112
|
+
mp4HeaderSegment: state.mp4HeaderSegment,
|
|
113
|
+
});
|
|
106
114
|
if (!moovBox) {
|
|
107
115
|
return {
|
|
108
116
|
videoTracks: [],
|
|
@@ -136,7 +144,7 @@ const defaultHasallTracks = (parserState) => {
|
|
|
136
144
|
};
|
|
137
145
|
exports.defaultHasallTracks = defaultHasallTracks;
|
|
138
146
|
const getTracks = (state) => {
|
|
139
|
-
const structure = state.getStructure();
|
|
147
|
+
const structure = state.structure.getStructure();
|
|
140
148
|
if (structure.type === 'matroska') {
|
|
141
149
|
return getCategorizedTracksFromMatroska(state);
|
|
142
150
|
}
|
package/dist/has-all-info.js
CHANGED
|
@@ -17,7 +17,7 @@ const get_metadata_1 = require("./metadata/get-metadata");
|
|
|
17
17
|
const may_skip_video_data_1 = require("./state/may-skip-video-data");
|
|
18
18
|
const getAvailableInfo = ({ state, }) => {
|
|
19
19
|
const keys = Object.entries(state.fields).filter(([, value]) => value);
|
|
20
|
-
const structure = state.getStructureOrNull();
|
|
20
|
+
const structure = state.structure.getStructureOrNull();
|
|
21
21
|
const infos = keys.map(([_key]) => {
|
|
22
22
|
const key = _key;
|
|
23
23
|
if (key === 'structure') {
|