@remotion/media-parser 4.0.285 → 4.0.287
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/aac-codecprivate.d.ts +1 -1
- package/dist/combine-uint8-arrays.d.ts +1 -1
- package/dist/containers/aac/parse-aac.js +0 -3
- package/dist/containers/avc/create-sps-pps-data.d.ts +1 -1
- package/dist/containers/flac/get-channel-count.d.ts +1 -1
- package/dist/containers/flac/parse-flac-frame.js +0 -2
- package/dist/containers/flac/parse-streaminfo.js +0 -2
- package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +2 -2
- package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.js +6 -3
- package/dist/containers/iso-base-media/collect-sample-positions-from-trak.js +4 -3
- package/dist/containers/iso-base-media/get-keyframes.js +1 -1
- package/dist/containers/iso-base-media/get-moov-atom.js +0 -4
- package/dist/containers/iso-base-media/get-sample-positions-from-track.d.ts +2 -2
- package/dist/containers/iso-base-media/get-seeking-byte.d.ts +15 -0
- package/dist/containers/iso-base-media/{get-seeking-from-mp4.js → get-seeking-byte.js} +16 -2
- package/dist/containers/iso-base-media/mdat/mdat.js +6 -6
- package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +3 -3
- package/dist/containers/iso-base-media/parse-boxes.js +0 -2
- package/dist/containers/iso-base-media/process-box.d.ts +0 -2
- package/dist/containers/iso-base-media/process-box.js +6 -6
- package/dist/containers/iso-base-media/{get-seeking-info-from-mp4.d.ts → seeking-hints.d.ts} +8 -3
- package/dist/containers/iso-base-media/seeking-hints.js +52 -0
- package/dist/containers/iso-base-media/traversal.d.ts +4 -2
- package/dist/containers/iso-base-media/traversal.js +6 -5
- package/dist/containers/m3u/iterate-over-segment-files.js +24 -20
- package/dist/containers/m3u/run-over-m3u.js +0 -3
- package/dist/containers/mp3/parse-mpeg-header.js +0 -3
- package/dist/containers/riff/expect-riff-box.js +0 -2
- package/dist/containers/riff/parse-movi.js +0 -3
- package/dist/containers/riff/parse-video-section.js +1 -1
- package/dist/containers/transport-stream/adts-header.d.ts +1 -1
- package/dist/containers/transport-stream/discard-rest-of-packet.d.ts +1 -1
- package/dist/containers/transport-stream/find-separator.d.ts +17 -1
- package/dist/containers/transport-stream/find-separator.js +6 -5
- package/dist/containers/transport-stream/handle-aac-packet.d.ts +10 -3
- package/dist/containers/transport-stream/handle-aac-packet.js +24 -16
- package/dist/containers/transport-stream/handle-avc-packet.d.ts +10 -3
- package/dist/containers/transport-stream/handle-avc-packet.js +29 -17
- package/dist/containers/transport-stream/parse-packet.d.ts +8 -4
- package/dist/containers/transport-stream/parse-packet.js +15 -16
- package/dist/containers/transport-stream/parse-pes.d.ts +5 -1
- package/dist/containers/transport-stream/parse-pes.js +4 -3
- package/dist/containers/transport-stream/parse-stream-packet.d.ts +6 -6
- package/dist/containers/transport-stream/parse-stream-packet.js +10 -115
- package/dist/containers/transport-stream/parse-transport-stream.js +15 -3
- package/dist/containers/transport-stream/process-stream-buffers.d.ts +26 -6
- package/dist/containers/transport-stream/process-stream-buffers.js +77 -12
- package/dist/containers/transport-stream/seeking-hints.d.ts +9 -0
- package/dist/containers/transport-stream/seeking-hints.js +26 -0
- package/dist/containers/transport-stream/traversal.d.ts +3 -1
- package/dist/containers/transport-stream/traversal.js +10 -2
- package/dist/containers/wav/get-seeking-byte.d.ts +2 -2
- package/dist/containers/wav/get-seeking-byte.js +2 -2
- package/dist/containers/wav/parse-fmt.js +0 -2
- package/dist/containers/wav/parse-media-section.js +0 -2
- package/dist/containers/wav/seeking-hints.d.ts +12 -0
- package/dist/containers/wav/seeking-hints.js +25 -0
- package/dist/containers/webm/get-byte-for-cues.d.ts +5 -0
- package/dist/containers/webm/get-byte-for-cues.js +33 -0
- package/dist/containers/webm/get-ready-tracks.d.ts +9 -4
- package/dist/containers/webm/get-ready-tracks.js +6 -6
- package/dist/containers/webm/get-sample-from-block.d.ts +3 -2
- package/dist/containers/webm/get-sample-from-block.js +9 -8
- package/dist/containers/webm/parse-ebml.d.ts +5 -4
- package/dist/containers/webm/parse-ebml.js +29 -34
- package/dist/containers/webm/parse-webm-header.js +14 -2
- package/dist/containers/webm/seek/fetch-web-cues.d.ts +12 -0
- package/dist/containers/webm/seek/fetch-web-cues.js +32 -0
- package/dist/containers/webm/seek/format-cues.d.ts +8 -0
- package/dist/containers/webm/seek/format-cues.js +42 -0
- package/dist/containers/webm/seek/get-seeking-byte.d.ts +12 -0
- package/dist/containers/webm/seek/get-seeking-byte.js +100 -0
- package/dist/containers/webm/seek/seeking-hints.d.ts +10 -0
- package/dist/containers/webm/seek/seeking-hints.js +28 -0
- package/dist/containers/webm/segments/all-segments.d.ts +1 -0
- package/dist/containers/webm/segments.d.ts +10 -4
- package/dist/containers/webm/segments.js +30 -12
- package/dist/containers/webm/state-for-processing.d.ts +15 -0
- package/dist/containers/webm/state-for-processing.js +14 -0
- package/dist/controller/media-parser-controller.d.ts +3 -0
- package/dist/controller/media-parser-controller.js +15 -0
- package/dist/controller/seek-signal.d.ts +2 -2
- package/dist/download-and-parse-media.js +3 -1
- package/dist/emit-audio-sample.d.ts +2 -5
- package/dist/emit-audio-sample.js +2 -5
- package/dist/emit-available-info.js +1 -1
- package/dist/esm/index.mjs +3859 -2963
- package/dist/esm/node-writer.mjs +1 -2
- package/dist/esm/node.mjs +1 -2
- package/dist/esm/server-worker.mjs +46 -1
- package/dist/esm/universal.mjs +3 -5
- package/dist/esm/web.mjs +2 -3
- package/dist/esm/worker-server-entry.mjs +2681 -1756
- package/dist/esm/worker-web-entry.mjs +2680 -1754
- package/dist/esm/worker.mjs +46 -1
- package/dist/file-types/detect-file-type.js +3 -1
- package/dist/{forward-controller.d.ts → forward-controller-pause-resume-abort.d.ts} +1 -1
- package/dist/{forward-controller.js → forward-controller-pause-resume-abort.js} +3 -3
- package/dist/get-audio-codec.d.ts +2 -1
- package/dist/get-audio-codec.js +17 -3
- package/dist/get-dimensions.js +1 -1
- package/dist/get-duration.js +3 -2
- package/dist/get-fps.js +1 -0
- package/dist/get-is-hdr.js +2 -2
- package/dist/get-keyframes.js +1 -1
- package/dist/{get-sample-positions-from-lpcm.d.ts → get-sample-positions-from-mp4.d.ts} +1 -1
- package/dist/{get-sample-positions-from-lpcm.js → get-sample-positions-from-mp4.js} +3 -3
- package/dist/{get-seeking-info.d.ts → get-seeking-byte.d.ts} +10 -9
- package/dist/get-seeking-byte.js +51 -0
- package/dist/get-seeking-hints.d.ts +19 -0
- package/dist/get-seeking-hints.js +35 -0
- package/dist/get-tracks.d.ts +4 -4
- package/dist/get-tracks.js +14 -8
- package/dist/get-video-codec.js +2 -2
- package/dist/has-all-info.js +1 -1
- package/dist/index.d.ts +74 -21
- package/dist/init-video.js +4 -3
- package/dist/internal-parse-media.js +18 -2
- package/dist/iterator/buffer-iterator.d.ts +3 -3
- package/dist/iterator/buffer-iterator.js +3 -4
- package/dist/iterator/buffer-manager.d.ts +3 -3
- package/dist/log.d.ts +5 -5
- package/dist/metadata/metadata-from-iso.js +1 -0
- package/dist/options.d.ts +3 -0
- package/dist/parse-loop.js +0 -3
- package/dist/parse-media-on-worker-entry.d.ts +1 -1
- package/dist/parse-media-on-worker-entry.js +51 -1
- package/dist/parse-media.js +3 -1
- package/dist/readers/from-web-file.js +1 -1
- package/dist/register-track.d.ts +2 -5
- package/dist/register-track.js +2 -10
- package/dist/samples-from-moof.d.ts +2 -2
- package/dist/samples-from-moof.js +5 -8
- package/dist/seek-backwards.js +2 -3
- package/dist/seeking-hints.d.ts +39 -0
- package/dist/set-seeking-hints.d.ts +6 -0
- package/dist/set-seeking-hints.js +27 -0
- package/dist/state/has-tracks-section.js +3 -1
- package/dist/state/iso-base-media/cached-sample-positions.d.ts +1 -1
- package/dist/state/iso-base-media/cached-sample-positions.js +1 -1
- package/dist/state/iso-base-media/iso-state.d.ts +18 -2
- package/dist/state/iso-base-media/iso-state.js +4 -0
- package/dist/state/iso-base-media/lazy-mfra-load.d.ts +3 -0
- package/dist/state/iso-base-media/lazy-mfra-load.js +13 -0
- package/dist/state/iso-base-media/moov-box.d.ts +7 -2
- package/dist/state/iso-base-media/moov-box.js +1 -1
- package/dist/state/iso-base-media/precomputed-moof.d.ts +11 -0
- package/dist/state/iso-base-media/precomputed-moof.js +28 -0
- package/dist/state/iso-base-media/precomputed-tfra.d.ts +6 -0
- package/dist/state/iso-base-media/precomputed-tfra.js +17 -0
- package/dist/state/keyframes.d.ts +2 -0
- package/dist/state/keyframes.js +17 -6
- package/dist/state/matroska/lazy-cues-fetch.d.ts +25 -0
- package/dist/state/matroska/lazy-cues-fetch.js +72 -0
- package/dist/state/matroska/webm.d.ts +53 -0
- package/dist/state/{webm.js → matroska/webm.js} +27 -7
- package/dist/state/parser-state.d.ts +64 -11
- package/dist/state/parser-state.js +7 -6
- package/dist/state/sample-callbacks.d.ts +1 -1
- package/dist/state/sample-callbacks.js +9 -9
- package/dist/{readers/state → state/samples-observed}/slow-duration-fps.d.ts +3 -3
- package/dist/state/samples-observed/slow-duration-fps.js +89 -0
- package/dist/state/seek-infinite-loop.js +12 -2
- package/dist/state/transport-stream/observed-pes-header.d.ts +15 -0
- package/dist/state/transport-stream/observed-pes-header.js +39 -0
- package/dist/state/transport-stream/pts-start-offset.d.ts +8 -0
- package/dist/state/transport-stream/{start-offset.js → pts-start-offset.js} +4 -4
- package/dist/state/transport-stream/transport-stream.d.ts +11 -1
- package/dist/state/transport-stream/transport-stream.js +4 -2
- package/dist/state/video-section.js +14 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/with-resolvers.d.ts +5 -0
- package/dist/work-on-seek-request.d.ts +8 -0
- package/dist/work-on-seek-request.js +31 -10
- package/dist/worker/{forward-controller.js → forward-controller-to-worker.js} +17 -0
- package/dist/worker/serialize-error.d.ts +6 -1
- package/dist/worker/serialize-error.js +2 -1
- package/dist/worker/worker-types.d.ts +12 -2
- package/dist/worker-server.js +16 -4
- package/dist/worker.d.ts +0 -1
- package/package.json +4 -4
- package/dist/containers/iso-base-media/get-mfra-atom.d.ts +0 -9
- package/dist/containers/iso-base-media/get-mfra-atom.js +0 -12
- package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +0 -11
- package/dist/containers/iso-base-media/get-seeking-info-from-mp4.js +0 -25
- package/dist/containers/iso-base-media/mfra/mfra.d.ts +0 -2
- package/dist/containers/iso-base-media/mfra/mfra.js +0 -11
- package/dist/containers/transport-stream/next-pes-header-store.d.ts +0 -6
- package/dist/containers/transport-stream/next-pes-header-store.js +0 -18
- package/dist/containers/transport-stream/start-offset.d.ts +0 -4
- package/dist/containers/transport-stream/start-offset.js +0 -13
- package/dist/containers/wav/get-seeking-info.d.ts +0 -7
- package/dist/containers/wav/get-seeking-info.js +0 -20
- package/dist/containers/wav/parse-video-section.d.ts +0 -5
- package/dist/containers/wav/parse-video-section.js +0 -41
- package/dist/emitter.d.ts +0 -33
- package/dist/emitter.js +0 -65
- package/dist/get-seeking-info.js +0 -48
- package/dist/media-parser-controller.d.ts +0 -21
- package/dist/media-parser-controller.js +0 -38
- package/dist/pause-signal.d.ts +0 -11
- package/dist/pause-signal.js +0 -38
- package/dist/readers/state/aac-state.d.ts +0 -13
- package/dist/readers/state/aac-state.js +0 -17
- package/dist/readers/state/can-skip-tracks.d.ts +0 -16
- package/dist/readers/state/can-skip-tracks.js +0 -60
- package/dist/readers/state/current-reader.d.ts +0 -6
- package/dist/readers/state/current-reader.js +0 -13
- package/dist/readers/state/emitted-fields.d.ts +0 -1
- package/dist/readers/state/emitted-fields.js +0 -37
- package/dist/readers/state/flac-state.d.ts +0 -4
- package/dist/readers/state/flac-state.js +0 -13
- package/dist/readers/state/has-tracks-section.d.ts +0 -14
- package/dist/readers/state/has-tracks-section.js +0 -37
- package/dist/readers/state/images.d.ts +0 -9
- package/dist/readers/state/images.js +0 -14
- package/dist/readers/state/iso-base-media/cached-sample-positions.d.ts +0 -12
- package/dist/readers/state/iso-base-media/cached-sample-positions.js +0 -46
- package/dist/readers/state/iso-base-media/iso-state.d.ts +0 -24
- package/dist/readers/state/iso-base-media/iso-state.js +0 -20
- package/dist/readers/state/iso-base-media/lazy-mfra-load.d.ts +0 -13
- package/dist/readers/state/iso-base-media/lazy-mfra-load.js +0 -29
- package/dist/readers/state/iso-base-media/moov-box.d.ts +0 -5
- package/dist/readers/state/iso-base-media/moov-box.js +0 -13
- package/dist/readers/state/keyframes.d.ts +0 -6
- package/dist/readers/state/keyframes.js +0 -15
- package/dist/readers/state/m3u-state.d.ts +0 -44
- package/dist/readers/state/m3u-state.js +0 -124
- package/dist/readers/state/may-skip-video-data.d.ts +0 -4
- package/dist/readers/state/may-skip-video-data.js +0 -18
- package/dist/readers/state/mp3.d.ts +0 -15
- package/dist/readers/state/mp3.js +0 -19
- package/dist/readers/state/need-samples-for-fields.d.ts +0 -6
- package/dist/readers/state/need-samples-for-fields.js +0 -39
- package/dist/readers/state/parser-state.d.ts +0 -252
- package/dist/readers/state/parser-state.js +0 -124
- package/dist/readers/state/riff.d.ts +0 -10
- package/dist/readers/state/riff.js +0 -32
- package/dist/readers/state/sample-callbacks.d.ts +0 -44
- package/dist/readers/state/sample-callbacks.js +0 -118
- package/dist/readers/state/seek-infinite-loop.d.ts +0 -5
- package/dist/readers/state/seek-infinite-loop.js +0 -22
- package/dist/readers/state/slow-duration-fps.js +0 -86
- package/dist/readers/state/structure.d.ts +0 -15
- package/dist/readers/state/structure.js +0 -78
- package/dist/readers/state/timings.d.ts +0 -8
- package/dist/readers/state/timings.js +0 -13
- package/dist/readers/state/transport-stream/last-emitted-sample.d.ts +0 -6
- package/dist/readers/state/transport-stream/last-emitted-sample.js +0 -16
- package/dist/readers/state/transport-stream/next-pes-header-store.d.ts +0 -6
- package/dist/readers/state/transport-stream/next-pes-header-store.js +0 -18
- package/dist/readers/state/transport-stream/start-offset.d.ts +0 -4
- package/dist/readers/state/transport-stream/start-offset.js +0 -13
- package/dist/readers/state/transport-stream/transport-stream.d.ts +0 -19
- package/dist/readers/state/transport-stream/transport-stream.js +0 -25
- package/dist/readers/state/video-section.d.ts +0 -33
- package/dist/readers/state/video-section.js +0 -65
- package/dist/readers/state/webm.d.ts +0 -28
- package/dist/readers/state/webm.js +0 -109
- package/dist/seek-signal.d.ts +0 -19
- package/dist/seek-signal.js +0 -24
- package/dist/seeking-info.d.ts +0 -18
- package/dist/server-worker.module.d.ts +0 -2
- package/dist/server-worker.module.js +0 -12
- package/dist/state/slow-duration-fps.d.ts +0 -11
- package/dist/state/slow-duration-fps.js +0 -86
- package/dist/state/transport-stream/start-offset.d.ts +0 -4
- package/dist/state/transport-stream.d.ts +0 -8
- package/dist/state/transport-stream.js +0 -11
- package/dist/state/uml.d.ts +0 -32
- package/dist/state/uml.js +0 -52
- package/dist/state/webm.d.ts +0 -30
- package/dist/state/work-on-seek-request-options.d.ts +0 -3
- package/dist/state/work-on-seek-request-options.js +0 -26
- package/dist/worker.module.d.ts +0 -4
- package/dist/worker.module.js +0 -12
- /package/dist/{seeking-info.js → seeking-hints.js} +0 -0
- /package/dist/worker/{forward-controller.d.ts → forward-controller-to-worker.d.ts} +0 -0
|
@@ -4,7 +4,7 @@ export declare const createAacCodecPrivate: ({ audioObjectType, sampleRate, chan
|
|
|
4
4
|
sampleRate: number;
|
|
5
5
|
channelConfiguration: number;
|
|
6
6
|
codecPrivate: Uint8Array | null;
|
|
7
|
-
}) => Uint8Array
|
|
7
|
+
}) => Uint8Array<ArrayBufferLike>;
|
|
8
8
|
export declare const parseAacCodecPrivate: (bytes: Uint8Array) => {
|
|
9
9
|
audioObjectType: number;
|
|
10
10
|
sampleRate: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const combineUint8Arrays: (arrays: Uint8Array[]) => Uint8Array
|
|
1
|
+
export declare const combineUint8Arrays: (arrays: Uint8Array[]) => Uint8Array<ArrayBufferLike>;
|
|
@@ -5,7 +5,6 @@ const aac_codecprivate_1 = require("../../aac-codecprivate");
|
|
|
5
5
|
const convert_audio_or_video_sample_1 = require("../../convert-audio-or-video-sample");
|
|
6
6
|
const emit_audio_sample_1 = require("../../emit-audio-sample");
|
|
7
7
|
const register_track_1 = require("../../register-track");
|
|
8
|
-
const work_on_seek_request_1 = require("../../work-on-seek-request");
|
|
9
8
|
const parseAac = async (state) => {
|
|
10
9
|
const { iterator } = state;
|
|
11
10
|
const startOffset = iterator.counter.getOffset();
|
|
@@ -49,7 +48,6 @@ const parseAac = async (state) => {
|
|
|
49
48
|
const data = iterator.getSlice(frameLength);
|
|
50
49
|
if (state.callbacks.tracks.getTracks().length === 0) {
|
|
51
50
|
await (0, register_track_1.registerAudioTrack)({
|
|
52
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
53
51
|
container: 'aac',
|
|
54
52
|
track: {
|
|
55
53
|
codec: (0, aac_codecprivate_1.mapAudioObjectTypeToCodecString)(audioObjectType),
|
|
@@ -90,7 +88,6 @@ const parseAac = async (state) => {
|
|
|
90
88
|
},
|
|
91
89
|
timescale: 1,
|
|
92
90
|
}),
|
|
93
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
94
91
|
callbacks: state.callbacks,
|
|
95
92
|
});
|
|
96
93
|
return Promise.resolve(null);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { SpsAndPps } from '../../state/parser-state';
|
|
2
|
-
export declare const createSpsPpsData: (avc1Profile: SpsAndPps) => Uint8Array
|
|
2
|
+
export declare const createSpsPpsData: (avc1Profile: SpsAndPps) => Uint8Array<ArrayBufferLike>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { BufferIterator } from '../../iterator/buffer-iterator';
|
|
2
|
-
export declare const getChannelCount: (iterator: BufferIterator) =>
|
|
2
|
+
export declare const getChannelCount: (iterator: BufferIterator) => 2 | 8 | 1 | 7 | 3 | 4 | 5 | 6;
|
|
@@ -4,7 +4,6 @@ exports.parseFlacFrame = exports.parseFrameHeader = void 0;
|
|
|
4
4
|
const convert_audio_or_video_sample_1 = require("../../convert-audio-or-video-sample");
|
|
5
5
|
const emit_audio_sample_1 = require("../../emit-audio-sample");
|
|
6
6
|
const buffer_iterator_1 = require("../../iterator/buffer-iterator");
|
|
7
|
-
const work_on_seek_request_1 = require("../../work-on-seek-request");
|
|
8
7
|
const get_block_size_1 = require("./get-block-size");
|
|
9
8
|
const get_channel_count_1 = require("./get-channel-count");
|
|
10
9
|
const get_sample_rate_1 = require("./get-sample-rate");
|
|
@@ -98,7 +97,6 @@ const emitSample = async ({ state, data, offset, }) => {
|
|
|
98
97
|
},
|
|
99
98
|
timescale: 1,
|
|
100
99
|
}),
|
|
101
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
102
100
|
callbacks: state.callbacks,
|
|
103
101
|
});
|
|
104
102
|
iterator.destroy();
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseStreamInfo = void 0;
|
|
4
4
|
const register_track_1 = require("../../register-track");
|
|
5
|
-
const work_on_seek_request_1 = require("../../work-on-seek-request");
|
|
6
5
|
const parseStreamInfo = async ({ iterator, state, }) => {
|
|
7
6
|
const counter = iterator.counter.getOffset();
|
|
8
7
|
const minimumBlockSize = iterator.getUint16();
|
|
@@ -34,7 +33,6 @@ const parseStreamInfo = async ({ iterator, state, }) => {
|
|
|
34
33
|
state.structure.getFlacStructure().boxes.push(flacStreamInfo);
|
|
35
34
|
await (0, register_track_1.registerAudioTrack)({
|
|
36
35
|
container: 'flac',
|
|
37
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
38
36
|
track: {
|
|
39
37
|
codec: 'flac',
|
|
40
38
|
type: 'audio',
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MoofBox } from '../../state/iso-base-media/precomputed-moof';
|
|
2
2
|
import type { TfraBox } from './mfra/tfra';
|
|
3
3
|
import type { TkhdBox } from './tkhd';
|
|
4
4
|
export declare const collectSamplePositionsFromMoofBoxes: ({ moofBoxes, tfraBoxes, tkhdBox, }: {
|
|
5
|
-
moofBoxes:
|
|
5
|
+
moofBoxes: MoofBox[];
|
|
6
6
|
tfraBoxes: TfraBox[];
|
|
7
7
|
tkhdBox: TkhdBox;
|
|
8
8
|
}) => {
|
|
@@ -5,9 +5,12 @@ const samples_from_moof_1 = require("../../samples-from-moof");
|
|
|
5
5
|
const collectSamplePositionsFromMoofBoxes = ({ moofBoxes, tfraBoxes, tkhdBox, }) => {
|
|
6
6
|
const isComplete = tfraBoxes.length > 0 &&
|
|
7
7
|
tfraBoxes.every((t) => t.entries.length === moofBoxes.length);
|
|
8
|
-
const
|
|
9
|
-
return (0, samples_from_moof_1.getSamplesFromMoof)({
|
|
8
|
+
const samplePositions = moofBoxes.map((m) => {
|
|
9
|
+
return (0, samples_from_moof_1.getSamplesFromMoof)({
|
|
10
|
+
moofBox: m,
|
|
11
|
+
trackId: tkhdBox.trackId,
|
|
12
|
+
});
|
|
10
13
|
});
|
|
11
|
-
return { samplePositions
|
|
14
|
+
return { samplePositions, isComplete };
|
|
12
15
|
};
|
|
13
16
|
exports.collectSamplePositionsFromMoofBoxes = collectSamplePositionsFromMoofBoxes;
|
|
@@ -4,13 +4,14 @@ exports.collectSamplePositionsFromTrak = void 0;
|
|
|
4
4
|
const get_audio_codec_1 = require("../../get-audio-codec");
|
|
5
5
|
const get_fps_1 = require("../../get-fps");
|
|
6
6
|
const get_sample_positions_1 = require("../../get-sample-positions");
|
|
7
|
-
const
|
|
7
|
+
const get_sample_positions_from_mp4_1 = require("../../get-sample-positions-from-mp4");
|
|
8
8
|
const traversal_1 = require("./traversal");
|
|
9
9
|
const collectSamplePositionsFromTrak = (trakBox) => {
|
|
10
10
|
const isLpcm = (0, get_audio_codec_1.isLpcmAudioCodec)(trakBox);
|
|
11
11
|
const timescaleAndDuration = (0, get_fps_1.getTimescaleAndDuration)(trakBox);
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const isIn24 = (0, get_audio_codec_1.isIn24AudioCodec)(trakBox);
|
|
13
|
+
if (isLpcm || isIn24) {
|
|
14
|
+
return (0, get_sample_positions_from_mp4_1.getGroupedSamplesPositionsFromMp4)(trakBox);
|
|
14
15
|
}
|
|
15
16
|
const stszBox = (0, traversal_1.getStszBox)(trakBox);
|
|
16
17
|
const stcoBox = (0, traversal_1.getStcoBox)(trakBox);
|
|
@@ -5,7 +5,7 @@ const get_tracks_1 = require("../../get-tracks");
|
|
|
5
5
|
const get_sample_positions_from_track_1 = require("./get-sample-positions-from-track");
|
|
6
6
|
const traversal_1 = require("./traversal");
|
|
7
7
|
const getKeyframesFromIsoBaseMedia = (state) => {
|
|
8
|
-
const { videoTracks } = (0, get_tracks_1.getTracksFromIsoBaseMedia)(state);
|
|
8
|
+
const { videoTracks } = (0, get_tracks_1.getTracksFromIsoBaseMedia)(state, true);
|
|
9
9
|
const structure = state.structure.getIsoStructure();
|
|
10
10
|
const moofBoxes = (0, traversal_1.getMoofBoxes)(structure.boxes);
|
|
11
11
|
const tfraBoxes = (0, traversal_1.getTfraBoxes)(structure);
|
|
@@ -7,7 +7,6 @@ const register_track_1 = require("../../register-track");
|
|
|
7
7
|
const can_skip_tracks_1 = require("../../state/can-skip-tracks");
|
|
8
8
|
const has_tracks_section_1 = require("../../state/has-tracks-section");
|
|
9
9
|
const structure_1 = require("../../state/structure");
|
|
10
|
-
const work_on_seek_request_1 = require("../../work-on-seek-request");
|
|
11
10
|
const process_box_1 = require("./process-box");
|
|
12
11
|
const traversal_1 = require("./traversal");
|
|
13
12
|
const getMoovAtom = async ({ endOfMdat, state, }) => {
|
|
@@ -29,7 +28,6 @@ const getMoovAtom = async ({ endOfMdat, state, }) => {
|
|
|
29
28
|
const onAudioTrack = state.onAudioTrack
|
|
30
29
|
? async ({ track, container }) => {
|
|
31
30
|
await (0, register_track_1.registerAudioTrack)({
|
|
32
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
33
31
|
track,
|
|
34
32
|
container,
|
|
35
33
|
logLevel: state.logLevel,
|
|
@@ -43,7 +41,6 @@ const getMoovAtom = async ({ endOfMdat, state, }) => {
|
|
|
43
41
|
const onVideoTrack = state.onVideoTrack
|
|
44
42
|
? async ({ track, container }) => {
|
|
45
43
|
await (0, register_track_1.registerVideoTrack)({
|
|
46
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
47
44
|
track,
|
|
48
45
|
container,
|
|
49
46
|
logLevel: state.logLevel,
|
|
@@ -79,7 +76,6 @@ const getMoovAtom = async ({ endOfMdat, state, }) => {
|
|
|
79
76
|
onlyIfMoovAtomExpected: {
|
|
80
77
|
tracks: tracksState,
|
|
81
78
|
isoState: null,
|
|
82
|
-
workOnSeekRequestOptions: null,
|
|
83
79
|
onAudioTrack,
|
|
84
80
|
onVideoTrack,
|
|
85
81
|
registerVideoSampleCallback: () => Promise.resolve(),
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { SamplePosition } from '../../get-sample-positions';
|
|
2
|
-
import type {
|
|
2
|
+
import type { MoofBox } from '../../state/iso-base-media/precomputed-moof';
|
|
3
3
|
import type { TfraBox } from './mfra/tfra';
|
|
4
4
|
import type { TrakBox } from './trak/trak';
|
|
5
5
|
export declare const getSamplePositionsFromTrack: ({ trakBox, moofBoxes, tfraBoxes, }: {
|
|
6
6
|
trakBox: TrakBox;
|
|
7
|
-
moofBoxes:
|
|
7
|
+
moofBoxes: MoofBox[];
|
|
8
8
|
tfraBoxes: TfraBox[];
|
|
9
9
|
}) => {
|
|
10
10
|
samplePositions: SamplePosition[];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LogLevel } from '../../log';
|
|
2
|
+
import type { IsoBaseMediaStructure } from '../../parse-result';
|
|
3
|
+
import type { IsoBaseMediaSeekingHints } from '../../seeking-hints';
|
|
4
|
+
import type { IsoBaseMediaState } from '../../state/iso-base-media/iso-state';
|
|
5
|
+
import type { StructureState } from '../../state/structure';
|
|
6
|
+
import type { SeekResolution } from '../../work-on-seek-request';
|
|
7
|
+
export declare const getSeekingByteFromIsoBaseMedia: ({ info, time, logLevel, currentPosition, isoState, mp4HeaderSegment, structure, }: {
|
|
8
|
+
info: IsoBaseMediaSeekingHints;
|
|
9
|
+
time: number;
|
|
10
|
+
logLevel: LogLevel;
|
|
11
|
+
currentPosition: number;
|
|
12
|
+
isoState: IsoBaseMediaState;
|
|
13
|
+
mp4HeaderSegment: IsoBaseMediaStructure | null;
|
|
14
|
+
structure: StructureState;
|
|
15
|
+
}) => Promise<SeekResolution>;
|
|
@@ -10,13 +10,25 @@ const get_sample_position_bounds_1 = require("./get-sample-position-bounds");
|
|
|
10
10
|
const get_sample_positions_from_track_1 = require("./get-sample-positions-from-track");
|
|
11
11
|
const find_best_segment_from_tfra_1 = require("./mfra/find-best-segment-from-tfra");
|
|
12
12
|
const traversal_1 = require("./traversal");
|
|
13
|
-
const getSeekingByteFromIsoBaseMedia = async ({ info, time, logLevel, currentPosition, isoState, }) => {
|
|
13
|
+
const getSeekingByteFromIsoBaseMedia = async ({ info, time, logLevel, currentPosition, isoState, mp4HeaderSegment, structure, }) => {
|
|
14
14
|
const tracks = (0, get_tracks_1.getTracksFromMoovBox)(info.moovBox);
|
|
15
15
|
const allTracks = [
|
|
16
16
|
...tracks.videoTracks,
|
|
17
17
|
...tracks.audioTracks,
|
|
18
18
|
...tracks.otherTracks,
|
|
19
19
|
];
|
|
20
|
+
const hasMoov = Boolean((0, traversal_1.getMoovBoxFromState)({
|
|
21
|
+
mp4HeaderSegment,
|
|
22
|
+
structureState: structure,
|
|
23
|
+
isoState,
|
|
24
|
+
mayUsePrecomputed: false,
|
|
25
|
+
}));
|
|
26
|
+
if (!hasMoov) {
|
|
27
|
+
log_1.Log.trace(logLevel, 'No moov box found, must wait');
|
|
28
|
+
return {
|
|
29
|
+
type: 'valid-but-must-wait',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
20
32
|
const firstVideoTrack = allTracks.find((t) => t.type === 'video');
|
|
21
33
|
if (!firstVideoTrack) {
|
|
22
34
|
throw new Error('No video track found');
|
|
@@ -52,7 +64,9 @@ const getSeekingByteFromIsoBaseMedia = async ({ info, time, logLevel, currentPos
|
|
|
52
64
|
}
|
|
53
65
|
}
|
|
54
66
|
}
|
|
55
|
-
const atom = await
|
|
67
|
+
const atom = await (info.mfraAlreadyLoaded
|
|
68
|
+
? Promise.resolve(info.mfraAlreadyLoaded)
|
|
69
|
+
: isoState.mfra.triggerLoad());
|
|
56
70
|
if (atom) {
|
|
57
71
|
const moofOffset = (0, find_best_segment_from_tfra_1.findBestSegmentFromTfra)({
|
|
58
72
|
mfra: atom,
|
|
@@ -8,7 +8,6 @@ const skip_1 = require("../../../skip");
|
|
|
8
8
|
const cached_sample_positions_1 = require("../../../state/iso-base-media/cached-sample-positions");
|
|
9
9
|
const may_skip_video_data_1 = require("../../../state/may-skip-video-data");
|
|
10
10
|
const video_section_1 = require("../../../state/video-section");
|
|
11
|
-
const work_on_seek_request_1 = require("../../../work-on-seek-request");
|
|
12
11
|
const get_moov_atom_1 = require("../get-moov-atom");
|
|
13
12
|
const parseMdatSection = async (state) => {
|
|
14
13
|
const mediaSection = (0, video_section_1.getCurrentMediaSection)({
|
|
@@ -23,13 +22,16 @@ const parseMdatSection = async (state) => {
|
|
|
23
22
|
if ((0, may_skip_video_data_1.maySkipVideoData)({ state })) {
|
|
24
23
|
return (0, skip_1.makeSkip)(endOfMdat);
|
|
25
24
|
}
|
|
26
|
-
const
|
|
27
|
-
if (!
|
|
25
|
+
const alreadyHasMoov = (0, get_tracks_1.getHasTracks)(state, true);
|
|
26
|
+
if (!alreadyHasMoov) {
|
|
28
27
|
const moov = await (0, get_moov_atom_1.getMoovAtom)({
|
|
29
28
|
endOfMdat,
|
|
30
29
|
state,
|
|
31
30
|
});
|
|
32
|
-
state.iso.moov.setMoovBox(
|
|
31
|
+
state.iso.moov.setMoovBox({
|
|
32
|
+
moovBox: moov,
|
|
33
|
+
precomputed: false,
|
|
34
|
+
});
|
|
33
35
|
state.callbacks.tracks.setIsDone(state.logLevel);
|
|
34
36
|
state.structure.getIsoStructure().boxes.push(moov);
|
|
35
37
|
return (0, exports.parseMdatSection)(state);
|
|
@@ -79,7 +81,6 @@ const parseMdatSection = async (state) => {
|
|
|
79
81
|
},
|
|
80
82
|
timescale: samplesWithIndex.track.timescale,
|
|
81
83
|
}),
|
|
82
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
83
84
|
callbacks: state.callbacks,
|
|
84
85
|
});
|
|
85
86
|
}
|
|
@@ -112,7 +113,6 @@ const parseMdatSection = async (state) => {
|
|
|
112
113
|
},
|
|
113
114
|
timescale: samplesWithIndex.track.timescale,
|
|
114
115
|
}),
|
|
115
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
116
116
|
callbacks: state.callbacks,
|
|
117
117
|
});
|
|
118
118
|
}
|
|
@@ -28,12 +28,12 @@ export declare const getMfraAtom: ({ src, contentLength, readerInterface, contro
|
|
|
28
28
|
leb128: () => number;
|
|
29
29
|
removeBytesRead: (force: boolean, mode: import("../../../options").ParseMediaMode) => {
|
|
30
30
|
bytesRemoved: number;
|
|
31
|
-
removedData: Uint8Array | null;
|
|
31
|
+
removedData: Uint8Array<ArrayBuffer> | null;
|
|
32
32
|
};
|
|
33
33
|
discard: (length: number) => void;
|
|
34
34
|
getEightByteNumber: (littleEndian?: boolean) => number;
|
|
35
35
|
getFourByteNumber: () => number;
|
|
36
|
-
getSlice: (amount: number) => Uint8Array
|
|
36
|
+
getSlice: (amount: number) => Uint8Array<ArrayBuffer>;
|
|
37
37
|
getAtom: () => string;
|
|
38
38
|
detectFileType: () => import("../../../file-types/detect-file-type").FileType;
|
|
39
39
|
getPaddedFourByteNumber: () => number;
|
|
@@ -57,7 +57,7 @@ export declare const getMfraAtom: ({ src, contentLength, readerInterface, contro
|
|
|
57
57
|
getUint(length: number): number;
|
|
58
58
|
getByteString(length: number, trimTrailingZeroes: boolean): string;
|
|
59
59
|
planBytes: (size: number) => {
|
|
60
|
-
discardRest: () => Uint8Array
|
|
60
|
+
discardRest: () => Uint8Array<ArrayBuffer>;
|
|
61
61
|
};
|
|
62
62
|
getFloat64: () => number;
|
|
63
63
|
readUntilNullTerminator: () => string;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseIsoBaseMedia = void 0;
|
|
4
|
-
const work_on_seek_request_1 = require("../../work-on-seek-request");
|
|
5
4
|
const mdat_1 = require("./mdat/mdat");
|
|
6
5
|
const process_box_1 = require("./process-box");
|
|
7
6
|
const parseIsoBaseMedia = async (state) => {
|
|
@@ -16,7 +15,6 @@ const parseIsoBaseMedia = async (state) => {
|
|
|
16
15
|
onlyIfMoovAtomExpected: {
|
|
17
16
|
tracks: state.callbacks.tracks,
|
|
18
17
|
isoState: state.iso,
|
|
19
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
20
18
|
onAudioTrack: state.onAudioTrack,
|
|
21
19
|
onVideoTrack: state.onVideoTrack,
|
|
22
20
|
registerAudioSampleCallback: state.callbacks.registerAudioSampleCallback,
|
|
@@ -5,12 +5,10 @@ import type { IsoBaseMediaState } from '../../state/iso-base-media/iso-state';
|
|
|
5
5
|
import type { SampleCallbacks } from '../../state/sample-callbacks';
|
|
6
6
|
import type { MediaSectionState } from '../../state/video-section';
|
|
7
7
|
import type { OnAudioTrack, OnVideoTrack } from '../../webcodec-sample-types';
|
|
8
|
-
import type { WorkOnSeekRequestOptions } from '../../work-on-seek-request';
|
|
9
8
|
import type { BoxAndNext } from './base-media-box';
|
|
10
9
|
export type OnlyIfMoovAtomExpected = {
|
|
11
10
|
tracks: TracksState;
|
|
12
11
|
isoState: IsoBaseMediaState | null;
|
|
13
|
-
workOnSeekRequestOptions: WorkOnSeekRequestOptions | null;
|
|
14
12
|
onVideoTrack: OnVideoTrack | null;
|
|
15
13
|
onAudioTrack: OnAudioTrack | null;
|
|
16
14
|
registerVideoSampleCallback: SampleCallbacks['registerVideoSampleCallback'];
|
|
@@ -33,7 +33,7 @@ const tkhd_1 = require("./tkhd");
|
|
|
33
33
|
const trak_1 = require("./trak/trak");
|
|
34
34
|
const trun_1 = require("./trun");
|
|
35
35
|
const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMdatAtomExpected, }) => {
|
|
36
|
-
var _a;
|
|
36
|
+
var _a, _b;
|
|
37
37
|
const fileOffset = iterator.counter.getOffset();
|
|
38
38
|
const { returnToCheckpoint } = iterator.startCheckpoint();
|
|
39
39
|
const bytesRemaining = iterator.bytesRemaining();
|
|
@@ -179,7 +179,9 @@ const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMd
|
|
|
179
179
|
iterator.discard(boxSize - 8);
|
|
180
180
|
return null;
|
|
181
181
|
}
|
|
182
|
-
if (isoState &&
|
|
182
|
+
if (isoState &&
|
|
183
|
+
isoState.moov.getMoovBoxAndPrecomputed() &&
|
|
184
|
+
!((_a = isoState.moov.getMoovBoxAndPrecomputed()) === null || _a === void 0 ? void 0 : _a.precomputed)) {
|
|
183
185
|
log_1.Log.verbose(logLevel, 'Moov box already parsed, skipping');
|
|
184
186
|
iterator.discard(boxSize - 8);
|
|
185
187
|
return null;
|
|
@@ -198,7 +200,7 @@ const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMd
|
|
|
198
200
|
if (!onlyIfMoovAtomExpected) {
|
|
199
201
|
throw new Error('State is required');
|
|
200
202
|
}
|
|
201
|
-
const {
|
|
203
|
+
const { tracks, onAudioTrack, onVideoTrack } = onlyIfMoovAtomExpected;
|
|
202
204
|
const box = await (0, trak_1.parseTrak)({
|
|
203
205
|
size: boxSize,
|
|
204
206
|
offsetAtStart: fileOffset,
|
|
@@ -208,7 +210,6 @@ const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMd
|
|
|
208
210
|
const transformedTrack = (0, make_track_1.makeBaseMediaTrack)(box);
|
|
209
211
|
if (transformedTrack && transformedTrack.type === 'video') {
|
|
210
212
|
await (0, register_track_1.registerVideoTrack)({
|
|
211
|
-
workOnSeekRequestOptions,
|
|
212
213
|
track: transformedTrack,
|
|
213
214
|
container: 'mp4',
|
|
214
215
|
logLevel,
|
|
@@ -219,7 +220,6 @@ const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMd
|
|
|
219
220
|
}
|
|
220
221
|
if (transformedTrack && transformedTrack.type === 'audio') {
|
|
221
222
|
await (0, register_track_1.registerAudioTrack)({
|
|
222
|
-
workOnSeekRequestOptions,
|
|
223
223
|
track: transformedTrack,
|
|
224
224
|
container: 'mp4',
|
|
225
225
|
registerAudioSampleCallback: onlyIfMoovAtomExpected.registerAudioSampleCallback,
|
|
@@ -278,7 +278,7 @@ const processBox = async ({ iterator, logLevel, onlyIfMoovAtomExpected, onlyIfMd
|
|
|
278
278
|
});
|
|
279
279
|
}
|
|
280
280
|
if (boxType === 'moof') {
|
|
281
|
-
(
|
|
281
|
+
(_b = onlyIfMoovAtomExpected === null || onlyIfMoovAtomExpected === void 0 ? void 0 : onlyIfMoovAtomExpected.isoState) === null || _b === void 0 ? void 0 : _b.mfra.triggerLoad();
|
|
282
282
|
}
|
|
283
283
|
if (boxType === 'mdia' ||
|
|
284
284
|
boxType === 'minf' ||
|
package/dist/containers/iso-base-media/{get-seeking-info-from-mp4.d.ts → seeking-hints.d.ts}
RENAMED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import type { IsoBaseMediaStructure } from '../../parse-result';
|
|
2
|
-
import type {
|
|
2
|
+
import type { IsoBaseMediaSeekingHints } from '../../seeking-hints';
|
|
3
3
|
import type { IsoBaseMediaState } from '../../state/iso-base-media/iso-state';
|
|
4
|
+
import type { ParserState } from '../../state/parser-state';
|
|
4
5
|
import type { StructureState } from '../../state/structure';
|
|
5
6
|
import type { MediaSectionState } from '../../state/video-section';
|
|
6
|
-
export declare const
|
|
7
|
+
export declare const getSeekingHintsFromMp4: ({ structureState, isoState, mp4HeaderSegment, mediaSectionState, }: {
|
|
7
8
|
structureState: StructureState;
|
|
8
9
|
isoState: IsoBaseMediaState;
|
|
9
10
|
mp4HeaderSegment: IsoBaseMediaStructure | null;
|
|
10
11
|
mediaSectionState: MediaSectionState;
|
|
11
|
-
}) =>
|
|
12
|
+
}) => IsoBaseMediaSeekingHints | null;
|
|
13
|
+
export declare const setSeekingHintsForMp4: ({ hints, state, }: {
|
|
14
|
+
hints: IsoBaseMediaSeekingHints;
|
|
15
|
+
state: ParserState;
|
|
16
|
+
}) => void;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setSeekingHintsForMp4 = exports.getSeekingHintsFromMp4 = void 0;
|
|
4
|
+
const precomputed_moof_1 = require("../../state/iso-base-media/precomputed-moof");
|
|
5
|
+
const precomputed_tfra_1 = require("../../state/iso-base-media/precomputed-tfra");
|
|
6
|
+
const traversal_1 = require("./traversal");
|
|
7
|
+
const getSeekingHintsFromMp4 = ({ structureState, isoState, mp4HeaderSegment, mediaSectionState, }) => {
|
|
8
|
+
const structure = structureState.getIsoStructure();
|
|
9
|
+
const moovAtom = (0, traversal_1.getMoovBoxFromState)({
|
|
10
|
+
isoState,
|
|
11
|
+
mp4HeaderSegment,
|
|
12
|
+
structureState,
|
|
13
|
+
mayUsePrecomputed: true,
|
|
14
|
+
});
|
|
15
|
+
const moofBoxes = (0, precomputed_moof_1.deduplicateMoofBoxesByOffset)([
|
|
16
|
+
...isoState.moof.getMoofBoxes(),
|
|
17
|
+
...(0, traversal_1.getMoofBoxes)(structure.boxes),
|
|
18
|
+
]);
|
|
19
|
+
const tfraBoxes = (0, precomputed_tfra_1.deduplicateTfraBoxesByOffset)([
|
|
20
|
+
...isoState.tfra.getTfraBoxes(),
|
|
21
|
+
...(0, traversal_1.getTfraBoxes)(structure),
|
|
22
|
+
]);
|
|
23
|
+
if (!moovAtom) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
type: 'iso-base-media-seeking-hints',
|
|
28
|
+
moovBox: moovAtom,
|
|
29
|
+
moofBoxes,
|
|
30
|
+
tfraBoxes,
|
|
31
|
+
mediaSections: mediaSectionState.getMediaSections(),
|
|
32
|
+
mfraAlreadyLoaded: isoState.mfra.getIfAlreadyLoaded(),
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
exports.getSeekingHintsFromMp4 = getSeekingHintsFromMp4;
|
|
36
|
+
const setSeekingHintsForMp4 = ({ hints, state, }) => {
|
|
37
|
+
state.iso.moov.setMoovBox({
|
|
38
|
+
moovBox: hints.moovBox,
|
|
39
|
+
precomputed: true,
|
|
40
|
+
});
|
|
41
|
+
// state.iso.mfra.setFromSeekingHints(hints);
|
|
42
|
+
// state.iso.moof.setMoofBoxes(hints.moofBoxes);
|
|
43
|
+
// TODO: Make use of these seeking hints and make tests pass
|
|
44
|
+
/*
|
|
45
|
+
// state.iso.tfra.setTfraBoxes(hints.tfraBoxes);
|
|
46
|
+
|
|
47
|
+
for (const mediaSection of hints.mediaSections) {
|
|
48
|
+
// state.mediaSection.addMediaSection(mediaSection);
|
|
49
|
+
}
|
|
50
|
+
*/
|
|
51
|
+
};
|
|
52
|
+
exports.setSeekingHintsForMp4 = setSeekingHintsForMp4;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AnySegment, IsoBaseMediaStructure } from '../../parse-result';
|
|
2
2
|
import type { IsoBaseMediaState } from '../../state/iso-base-media/iso-state';
|
|
3
|
+
import type { MoofBox } from '../../state/iso-base-media/precomputed-moof';
|
|
3
4
|
import type { StructureState } from '../../state/structure';
|
|
4
5
|
import type { IsoBaseMediaBox, RegularBox } from './base-media-box';
|
|
5
6
|
import type { FtypBox } from './ftyp';
|
|
@@ -21,12 +22,13 @@ import type { TrakBox } from './trak/trak';
|
|
|
21
22
|
import type { TrunBox } from './trun';
|
|
22
23
|
export declare const getFtypBox: (segments: AnySegment[]) => FtypBox | null;
|
|
23
24
|
export declare const getMoovFromFromIsoStructure: (structure: IsoBaseMediaStructure) => MoovBox | null;
|
|
24
|
-
export declare const getMoovBoxFromState: ({ structureState, isoState, mp4HeaderSegment, }: {
|
|
25
|
+
export declare const getMoovBoxFromState: ({ structureState, isoState, mp4HeaderSegment, mayUsePrecomputed, }: {
|
|
25
26
|
structureState: StructureState;
|
|
26
27
|
isoState: IsoBaseMediaState;
|
|
27
28
|
mp4HeaderSegment: IsoBaseMediaStructure | null;
|
|
29
|
+
mayUsePrecomputed: boolean;
|
|
28
30
|
}) => MoovBox | null;
|
|
29
|
-
export declare const getMoofBoxes: (main: AnySegment[]) =>
|
|
31
|
+
export declare const getMoofBoxes: (main: AnySegment[]) => MoofBox[];
|
|
30
32
|
export declare const getMvhdBox: (moovBox: MoovBox) => MvhdBox | null;
|
|
31
33
|
export declare const getTraks: (moovBox: MoovBox) => TrakBox[];
|
|
32
34
|
export declare const getTkhdBox: (trakBox: TrakBox) => TkhdBox | null;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getTfraBoxes = exports.getTrunBoxes = exports.getTfhdBox = exports.getTfdtBox = exports.getStssBox = exports.getStscBox = exports.getStszBox = exports.getCttsBox = exports.getSttsBox = exports.getStcoBox = exports.getVideoDescriptors = exports.getStsdBox = exports.getStblBox = exports.getMdhdBox = exports.getMdiaBox = exports.getTkhdBox = exports.getTraks = exports.getMvhdBox = exports.getMoofBoxes = exports.getMoovBoxFromState = exports.getMoovFromFromIsoStructure = exports.getFtypBox = void 0;
|
|
4
|
+
const precomputed_moof_1 = require("../../state/iso-base-media/precomputed-moof");
|
|
4
5
|
const getFtypBox = (segments) => {
|
|
5
6
|
const ftypBox = segments.find((s) => s.type === 'ftyp-box');
|
|
6
7
|
if (!ftypBox || ftypBox.type !== 'ftyp-box') {
|
|
@@ -17,10 +18,10 @@ const getMoovFromFromIsoStructure = (structure) => {
|
|
|
17
18
|
return moovBox;
|
|
18
19
|
};
|
|
19
20
|
exports.getMoovFromFromIsoStructure = getMoovFromFromIsoStructure;
|
|
20
|
-
const getMoovBoxFromState = ({ structureState, isoState, mp4HeaderSegment, }) => {
|
|
21
|
-
const got = isoState.moov.
|
|
22
|
-
if (got) {
|
|
23
|
-
return got;
|
|
21
|
+
const getMoovBoxFromState = ({ structureState, isoState, mp4HeaderSegment, mayUsePrecomputed, }) => {
|
|
22
|
+
const got = isoState.moov.getMoovBoxAndPrecomputed();
|
|
23
|
+
if (got && (mayUsePrecomputed || !got.precomputed)) {
|
|
24
|
+
return got.moovBox;
|
|
24
25
|
}
|
|
25
26
|
if (mp4HeaderSegment) {
|
|
26
27
|
return (0, exports.getMoovFromFromIsoStructure)(mp4HeaderSegment);
|
|
@@ -31,7 +32,7 @@ const getMoovBoxFromState = ({ structureState, isoState, mp4HeaderSegment, }) =>
|
|
|
31
32
|
exports.getMoovBoxFromState = getMoovBoxFromState;
|
|
32
33
|
const getMoofBoxes = (main) => {
|
|
33
34
|
const moofBoxes = main.filter((s) => s.type === 'regular-box' && s.boxType === 'moof');
|
|
34
|
-
return moofBoxes;
|
|
35
|
+
return moofBoxes.map((m) => (0, precomputed_moof_1.toMoofBox)(m));
|
|
35
36
|
};
|
|
36
37
|
exports.getMoofBoxes = getMoofBoxes;
|
|
37
38
|
const getMvhdBox = (moovBox) => {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.iteratorOverSegmentFiles = void 0;
|
|
4
4
|
const media_parser_controller_1 = require("../../controller/media-parser-controller");
|
|
5
|
-
const
|
|
5
|
+
const forward_controller_pause_resume_abort_1 = require("../../forward-controller-pause-resume-abort");
|
|
6
6
|
const parse_media_1 = require("../../parse-media");
|
|
7
7
|
const with_resolvers_1 = require("../../with-resolvers");
|
|
8
8
|
const get_chunks_1 = require("./get-chunks");
|
|
@@ -13,26 +13,29 @@ const iteratorOverSegmentFiles = async ({ structure, onVideoTrack, m3uState, onA
|
|
|
13
13
|
let resolver = onInitialProgress;
|
|
14
14
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
15
15
|
let rejector = (_e) => { };
|
|
16
|
-
const childController = (0, media_parser_controller_1.mediaParserController)();
|
|
17
|
-
const forwarded = (0, forward_controller_1.forwardMediaParserController)({
|
|
18
|
-
childController,
|
|
19
|
-
parentController,
|
|
20
|
-
});
|
|
21
|
-
const makeContinuationFn = () => {
|
|
22
|
-
return {
|
|
23
|
-
continue() {
|
|
24
|
-
const { promise, reject, resolve } = (0, with_resolvers_1.withResolvers)();
|
|
25
|
-
resolver = resolve;
|
|
26
|
-
rejector = reject;
|
|
27
|
-
childController.resume();
|
|
28
|
-
return promise;
|
|
29
|
-
},
|
|
30
|
-
abort() {
|
|
31
|
-
childController.abort();
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
16
|
for (const chunk of chunks) {
|
|
17
|
+
resolver = onInitialProgress;
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
19
|
+
rejector = (_e) => { };
|
|
20
|
+
const childController = (0, media_parser_controller_1.mediaParserController)();
|
|
21
|
+
const forwarded = (0, forward_controller_pause_resume_abort_1.forwardMediaParserControllerPauseResume)({
|
|
22
|
+
childController,
|
|
23
|
+
parentController,
|
|
24
|
+
});
|
|
25
|
+
const makeContinuationFn = () => {
|
|
26
|
+
return {
|
|
27
|
+
continue() {
|
|
28
|
+
const { promise, reject, resolve } = (0, with_resolvers_1.withResolvers)();
|
|
29
|
+
resolver = resolve;
|
|
30
|
+
rejector = reject;
|
|
31
|
+
childController.resume();
|
|
32
|
+
return promise;
|
|
33
|
+
},
|
|
34
|
+
abort() {
|
|
35
|
+
childController.abort();
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
};
|
|
36
39
|
const isLastChunk = chunk === chunks[chunks.length - 1];
|
|
37
40
|
await childController._internals.checkForAbortAndPause();
|
|
38
41
|
const src = readerInterface.createAdjacentFileSource(chunk.url, playlistUrl);
|
|
@@ -95,6 +98,7 @@ const iteratorOverSegmentFiles = async ({ structure, onVideoTrack, m3uState, onA
|
|
|
95
98
|
},
|
|
96
99
|
reader: readerInterface,
|
|
97
100
|
mp4HeaderSegment,
|
|
101
|
+
makeSamplesStartAtZero: false,
|
|
98
102
|
});
|
|
99
103
|
if (chunk.isHeader) {
|
|
100
104
|
if (data.structure.type !== 'iso-base-media') {
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.runOverM3u = void 0;
|
|
4
4
|
const log_1 = require("../../log");
|
|
5
5
|
const register_track_1 = require("../../register-track");
|
|
6
|
-
const work_on_seek_request_1 = require("../../work-on-seek-request");
|
|
7
6
|
const iterate_over_segment_files_1 = require("./iterate-over-segment-files");
|
|
8
7
|
const runOverM3u = async ({ state, structure, playlistUrl, logLevel, }) => {
|
|
9
8
|
const tracksDone = state.m3u.getTrackDone(playlistUrl);
|
|
@@ -52,7 +51,6 @@ const runOverM3u = async ({ state, structure, playlistUrl, logLevel, }) => {
|
|
|
52
51
|
}
|
|
53
52
|
const onAudioSample = await (0, register_track_1.registerAudioTrack)({
|
|
54
53
|
container: 'm3u8',
|
|
55
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
56
54
|
track: {
|
|
57
55
|
...track,
|
|
58
56
|
trackId,
|
|
@@ -81,7 +79,6 @@ const runOverM3u = async ({ state, structure, playlistUrl, logLevel, }) => {
|
|
|
81
79
|
}
|
|
82
80
|
const onVideoSample = await (0, register_track_1.registerVideoTrack)({
|
|
83
81
|
container: 'm3u8',
|
|
84
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
85
82
|
track: {
|
|
86
83
|
...track,
|
|
87
84
|
trackId,
|
|
@@ -5,7 +5,6 @@ exports.parseMpegHeader = void 0;
|
|
|
5
5
|
const emit_audio_sample_1 = require("../../emit-audio-sample");
|
|
6
6
|
const log_1 = require("../../log");
|
|
7
7
|
const register_track_1 = require("../../register-track");
|
|
8
|
-
const work_on_seek_request_1 = require("../../work-on-seek-request");
|
|
9
8
|
const get_frame_length_1 = require("./get-frame-length");
|
|
10
9
|
const samples_per_mpeg_file_1 = require("./samples-per-mpeg-file");
|
|
11
10
|
function getSamplingFrequency({ bits, mpegVersion, }) {
|
|
@@ -245,7 +244,6 @@ const parseMpegHeader = async ({ state, }) => {
|
|
|
245
244
|
state.mp3Info.setMp3Info(info);
|
|
246
245
|
await (0, register_track_1.registerAudioTrack)({
|
|
247
246
|
container: 'mp3',
|
|
248
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
249
247
|
track: {
|
|
250
248
|
type: 'audio',
|
|
251
249
|
codec: 'mp3',
|
|
@@ -295,7 +293,6 @@ const parseMpegHeader = async ({ state, }) => {
|
|
|
295
293
|
trackId: 0,
|
|
296
294
|
type: 'key',
|
|
297
295
|
},
|
|
298
|
-
workOnSeekRequestOptions: (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state),
|
|
299
296
|
callbacks: state.callbacks,
|
|
300
297
|
});
|
|
301
298
|
}
|