@remotion/media-parser 4.0.273 → 4.0.275

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.
Files changed (46) hide show
  1. package/dist/containers/flac/get-channel-count.d.ts +1 -1
  2. package/dist/containers/iso-base-media/get-video-codec-from-iso-track.d.ts +1 -1
  3. package/dist/containers/iso-base-media/make-track.js +1 -0
  4. package/dist/containers/m3u/iterate-over-segment-files.js +4 -1
  5. package/dist/containers/riff/get-tracks-from-avi.js +1 -0
  6. package/dist/containers/transport-stream/handle-avc-packet.js +1 -0
  7. package/dist/containers/webm/make-track.js +1 -0
  8. package/dist/esm/index.mjs +9 -351
  9. package/dist/esm/worker-server-entry.mjs +8 -1
  10. package/dist/esm/worker-web-entry.mjs +8 -1
  11. package/dist/esm/worker.mjs +20 -8
  12. package/dist/get-tracks.d.ts +1 -0
  13. package/dist/index.d.ts +0 -2
  14. package/dist/index.js +0 -2
  15. package/dist/version.d.ts +1 -1
  16. package/dist/version.js +1 -1
  17. package/dist/worker.d.ts +3 -2
  18. package/dist/worker.js +2 -267
  19. package/package.json +13 -4
  20. package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +0 -5
  21. package/dist/containers/iso-base-media/get-seeking-from-mp4.js +0 -50
  22. package/dist/containers/m3u/m3u-child-stream.d.ts +0 -0
  23. package/dist/containers/m3u/m3u-child-stream.js +0 -1
  24. package/dist/containers/m3u/return-packets.d.ts +0 -17
  25. package/dist/containers/m3u/return-packets.js +0 -109
  26. package/dist/esm/fetch.mjs +0 -194
  27. package/dist/esm/web-file.mjs +0 -60
  28. package/dist/esm/worker-server.mjs +0 -12914
  29. package/dist/fields.d.ts +0 -63
  30. package/dist/fields.js +0 -1
  31. package/dist/get-seeking-info.d.ts +0 -5
  32. package/dist/get-seeking-info.js +0 -24
  33. package/dist/parse-media-on-browser-worker.d.ts +0 -2
  34. package/dist/parse-media-on-browser-worker.js +0 -4
  35. package/dist/parse-media-on-worker.d.ts +0 -2
  36. package/dist/parse-media-on-worker.js +0 -4
  37. package/dist/seeking-info.d.ts +0 -8
  38. package/dist/seeking-info.js +0 -1
  39. package/dist/state/last-eventloop-break.d.ts +0 -4
  40. package/dist/state/last-eventloop-break.js +0 -14
  41. package/dist/web-file.d.ts +0 -1
  42. package/dist/web-file.js +0 -1
  43. package/dist/worker-bun-entry.d.ts +0 -1
  44. package/dist/worker-bun-entry.js +0 -5
  45. package/dist/worker-entry.d.ts +0 -1
  46. package/dist/worker-entry.js +0 -5
package/dist/worker.js CHANGED
@@ -1,267 +1,2 @@
1
- import { deserializeError } from './worker/serialize-error';
2
- const convertToWorkerPayload = (
3
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
- payload) => {
5
- const { onAudioCodec, onContainer, onDimensions, onUnrotatedDimensions, onVideoCodec, onFps, onAudioTrack, onDurationInSeconds, onImages, onInternalStats, onIsHdr, onKeyframes, onLocation, onM3uStreams, onMetadata, onMimeType, onName, onNumberOfAudioChannels,
6
- // TODO: Callback functions
7
- onParseProgress, onRotation, onSampleRate, onSlowAudioBitrate, onSize, onSlowDurationInSeconds, onSlowFps, onSlowKeyframes, onSlowNumberOfFrames, onSlowVideoBitrate, onStructure, onTracks, onVideoTrack, selectM3uStream, selectM3uAssociatedPlaylists, ...others } = payload;
8
- return {
9
- type: 'request-worker',
10
- payload: others,
11
- postAudioCodec: Boolean(onAudioCodec),
12
- postContainer: Boolean(onContainer),
13
- postDimensions: Boolean(onDimensions),
14
- postDurationInSeconds: Boolean(onDurationInSeconds),
15
- postFps: Boolean(onFps),
16
- postImages: Boolean(onImages),
17
- postInternalStats: Boolean(onInternalStats),
18
- postIsHdr: Boolean(onIsHdr),
19
- postKeyframes: Boolean(onKeyframes),
20
- postLocation: Boolean(onLocation),
21
- postM3uStreams: Boolean(onM3uStreams),
22
- postMetadata: Boolean(onMetadata),
23
- postMimeType: Boolean(onMimeType),
24
- postName: Boolean(onName),
25
- postNumberOfAudioChannels: Boolean(onNumberOfAudioChannels),
26
- postRotation: Boolean(onRotation),
27
- postSampleRate: Boolean(onSampleRate),
28
- postSlowAudioBitrate: Boolean(onSlowAudioBitrate),
29
- postSlowDurationInSeconds: Boolean(onSlowDurationInSeconds),
30
- postSlowFps: Boolean(onSlowFps),
31
- postSlowKeyframes: Boolean(onSlowKeyframes),
32
- postSlowNumberOfFrames: Boolean(onSlowNumberOfFrames),
33
- postSlowVideoBitrate: Boolean(onSlowVideoBitrate),
34
- postStructure: Boolean(onStructure),
35
- postTracks: Boolean(onTracks),
36
- postUnrotatedDimensions: Boolean(onUnrotatedDimensions),
37
- postVideoCodec: Boolean(onVideoCodec),
38
- postSize: Boolean(onSize),
39
- postParseProgress: Boolean(onParseProgress),
40
- postM3uStreamSelection: Boolean(selectM3uStream),
41
- postM3uAssociatedPlaylistsSelection: Boolean(selectM3uAssociatedPlaylists),
42
- postOnAudioTrack: Boolean(onAudioTrack),
43
- postOnVideoTrack: Boolean(onVideoTrack),
44
- };
45
- };
46
- const post = (worker, payload) => {
47
- worker.postMessage(payload);
48
- };
49
- export const parseMediaOnWorker = async ({ controller, ...params }) => {
50
- if (typeof Worker === 'undefined') {
51
- throw new Error('"Worker" is not available. Cannot call workerClient()');
52
- }
53
- const worker = new Worker(new URL('./worker-server', import.meta.url));
54
- post(worker, convertToWorkerPayload(params));
55
- const { promise, resolve, reject } = Promise.withResolvers();
56
- const onAbort = () => {
57
- post(worker, { type: 'request-abort' });
58
- };
59
- const onResume = () => {
60
- post(worker, { type: 'request-resume' });
61
- };
62
- const onPause = () => {
63
- post(worker, { type: 'request-pause' });
64
- };
65
- const callbacks = {};
66
- function onMessage(message) {
67
- const data = message.data;
68
- if (data.type === 'response-done') {
69
- resolve(data.payload);
70
- }
71
- if (data.type === 'response-error') {
72
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
73
- cleanup();
74
- reject(deserializeError(data));
75
- }
76
- if (data.type === 'response-on-callback-request') {
77
- Promise.resolve()
78
- .then(async () => {
79
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6;
80
- if (data.payload.callbackType === 'audio-codec') {
81
- await ((_a = params.onAudioCodec) === null || _a === void 0 ? void 0 : _a.call(params, data.payload.value));
82
- return { payloadType: 'void' };
83
- }
84
- if (data.payload.callbackType === 'container') {
85
- await ((_b = params.onContainer) === null || _b === void 0 ? void 0 : _b.call(params, data.payload.value));
86
- return { payloadType: 'void' };
87
- }
88
- if (data.payload.callbackType === 'dimensions') {
89
- await ((_c = params.onDimensions) === null || _c === void 0 ? void 0 : _c.call(params, data.payload.value));
90
- return { payloadType: 'void' };
91
- }
92
- if (data.payload.callbackType === 'unrotated-dimensions') {
93
- await ((_d = params.onUnrotatedDimensions) === null || _d === void 0 ? void 0 : _d.call(params, data.payload.value));
94
- return { payloadType: 'void' };
95
- }
96
- if (data.payload.callbackType === 'video-codec') {
97
- await ((_e = params.onVideoCodec) === null || _e === void 0 ? void 0 : _e.call(params, data.payload.value));
98
- return { payloadType: 'void' };
99
- }
100
- if (data.payload.callbackType === 'tracks') {
101
- await ((_f = params.onTracks) === null || _f === void 0 ? void 0 : _f.call(params, data.payload.value));
102
- return { payloadType: 'void' };
103
- }
104
- if (data.payload.callbackType === 'rotation') {
105
- await ((_g = params.onRotation) === null || _g === void 0 ? void 0 : _g.call(params, data.payload.value));
106
- return { payloadType: 'void' };
107
- }
108
- if (data.payload.callbackType === 'sample-rate') {
109
- await ((_h = params.onSampleRate) === null || _h === void 0 ? void 0 : _h.call(params, data.payload.value));
110
- return { payloadType: 'void' };
111
- }
112
- if (data.payload.callbackType === 'slow-audio-bitrate') {
113
- await ((_j = params.onSlowAudioBitrate) === null || _j === void 0 ? void 0 : _j.call(params, data.payload.value));
114
- return { payloadType: 'void' };
115
- }
116
- if (data.payload.callbackType === 'slow-duration-in-seconds') {
117
- await ((_k = params.onSlowDurationInSeconds) === null || _k === void 0 ? void 0 : _k.call(params, data.payload.value));
118
- return { payloadType: 'void' };
119
- }
120
- if (data.payload.callbackType === 'slow-fps') {
121
- await ((_l = params.onSlowFps) === null || _l === void 0 ? void 0 : _l.call(params, data.payload.value));
122
- return { payloadType: 'void' };
123
- }
124
- if (data.payload.callbackType === 'slow-keyframes') {
125
- await ((_m = params.onSlowKeyframes) === null || _m === void 0 ? void 0 : _m.call(params, data.payload.value));
126
- return { payloadType: 'void' };
127
- }
128
- if (data.payload.callbackType === 'slow-number-of-frames') {
129
- await ((_o = params.onSlowNumberOfFrames) === null || _o === void 0 ? void 0 : _o.call(params, data.payload.value));
130
- return { payloadType: 'void' };
131
- }
132
- if (data.payload.callbackType === 'slow-video-bitrate') {
133
- await ((_p = params.onSlowVideoBitrate) === null || _p === void 0 ? void 0 : _p.call(params, data.payload.value));
134
- return { payloadType: 'void' };
135
- }
136
- if (data.payload.callbackType === 'structure') {
137
- await ((_q = params.onStructure) === null || _q === void 0 ? void 0 : _q.call(params, data.payload.value));
138
- return { payloadType: 'void' };
139
- }
140
- if (data.payload.callbackType === 'fps') {
141
- await ((_r = params.onFps) === null || _r === void 0 ? void 0 : _r.call(params, data.payload.value));
142
- return { payloadType: 'void' };
143
- }
144
- if (data.payload.callbackType === 'images') {
145
- await ((_s = params.onImages) === null || _s === void 0 ? void 0 : _s.call(params, data.payload.value));
146
- return { payloadType: 'void' };
147
- }
148
- if (data.payload.callbackType === 'internal-stats') {
149
- await ((_t = params.onInternalStats) === null || _t === void 0 ? void 0 : _t.call(params, data.payload.value));
150
- return { payloadType: 'void' };
151
- }
152
- if (data.payload.callbackType === 'is-hdr') {
153
- await ((_u = params.onIsHdr) === null || _u === void 0 ? void 0 : _u.call(params, data.payload.value));
154
- return { payloadType: 'void' };
155
- }
156
- if (data.payload.callbackType === 'keyframes') {
157
- await ((_v = params.onKeyframes) === null || _v === void 0 ? void 0 : _v.call(params, data.payload.value));
158
- return { payloadType: 'void' };
159
- }
160
- if (data.payload.callbackType === 'location') {
161
- await ((_w = params.onLocation) === null || _w === void 0 ? void 0 : _w.call(params, data.payload.value));
162
- return { payloadType: 'void' };
163
- }
164
- if (data.payload.callbackType === 'm3u-streams') {
165
- await ((_x = params.onM3uStreams) === null || _x === void 0 ? void 0 : _x.call(params, data.payload.value));
166
- return { payloadType: 'void' };
167
- }
168
- if (data.payload.callbackType === 'metadata') {
169
- await ((_y = params.onMetadata) === null || _y === void 0 ? void 0 : _y.call(params, data.payload.value));
170
- return { payloadType: 'void' };
171
- }
172
- if (data.payload.callbackType === 'mime-type') {
173
- await ((_z = params.onMimeType) === null || _z === void 0 ? void 0 : _z.call(params, data.payload.value));
174
- return { payloadType: 'void' };
175
- }
176
- if (data.payload.callbackType === 'name') {
177
- await ((_0 = params.onName) === null || _0 === void 0 ? void 0 : _0.call(params, data.payload.value));
178
- return { payloadType: 'void' };
179
- }
180
- if (data.payload.callbackType === 'number-of-audio-channels') {
181
- await ((_1 = params.onNumberOfAudioChannels) === null || _1 === void 0 ? void 0 : _1.call(params, data.payload.value));
182
- return { payloadType: 'void' };
183
- }
184
- if (data.payload.callbackType === 'size') {
185
- await ((_2 = params.onSize) === null || _2 === void 0 ? void 0 : _2.call(params, data.payload.value));
186
- return { payloadType: 'void' };
187
- }
188
- if (data.payload.callbackType === 'duration-in-seconds') {
189
- await ((_3 = params.onDurationInSeconds) === null || _3 === void 0 ? void 0 : _3.call(params, data.payload.value));
190
- return { payloadType: 'void' };
191
- }
192
- if (data.payload.callbackType === 'parse-progress') {
193
- await ((_4 = params.onParseProgress) === null || _4 === void 0 ? void 0 : _4.call(params, data.payload.value));
194
- return { payloadType: 'void' };
195
- }
196
- if (data.payload.callbackType === 'm3u-stream-selection') {
197
- const selection = await params.selectM3uStream(data.payload.value);
198
- return { payloadType: 'm3u-stream-selection', value: selection };
199
- }
200
- if (data.payload.callbackType === 'm3u-associated-playlists-selection') {
201
- const selection = await params.selectM3uAssociatedPlaylists(data.payload.value);
202
- return {
203
- payloadType: 'm3u-associated-playlists-selection',
204
- value: selection,
205
- };
206
- }
207
- if (data.payload.callbackType === 'on-audio-track') {
208
- const possibleCallback = await ((_5 = params.onAudioTrack) === null || _5 === void 0 ? void 0 : _5.call(params, data.payload.value));
209
- if (possibleCallback) {
210
- callbacks[data.payload.value.track.trackId] = possibleCallback;
211
- }
212
- return {
213
- payloadType: 'on-audio-track-response',
214
- registeredCallback: Boolean(possibleCallback),
215
- };
216
- }
217
- if (data.payload.callbackType === 'on-video-track') {
218
- const possibleCallback = await ((_6 = params.onVideoTrack) === null || _6 === void 0 ? void 0 : _6.call(params, data.payload.value));
219
- if (possibleCallback) {
220
- callbacks[data.payload.value.track.trackId] = possibleCallback;
221
- }
222
- return {
223
- payloadType: 'on-video-track-response',
224
- registeredCallback: Boolean(possibleCallback),
225
- };
226
- }
227
- if (data.payload.callbackType === 'on-audio-video-sample') {
228
- const callback = callbacks[data.payload.trackId];
229
- if (!callback) {
230
- throw new Error(`No callback registered for track ${data.payload.trackId}`);
231
- }
232
- await callback(data.payload.value);
233
- return { payloadType: 'void' };
234
- }
235
- throw new Error(`Unknown callback type: ${data.payload}`);
236
- })
237
- .then((payload) => {
238
- post(worker, {
239
- type: 'acknowledge-callback',
240
- nonce: data.nonce,
241
- ...payload,
242
- });
243
- })
244
- .catch((err) => {
245
- reject(err);
246
- post(worker, {
247
- type: 'signal-error-in-callback',
248
- nonce: data.nonce,
249
- });
250
- });
251
- }
252
- }
253
- worker.addEventListener('message', onMessage);
254
- controller === null || controller === void 0 ? void 0 : controller.addEventListener('abort', onAbort);
255
- controller === null || controller === void 0 ? void 0 : controller.addEventListener('resume', onResume);
256
- controller === null || controller === void 0 ? void 0 : controller.addEventListener('pause', onPause);
257
- function cleanup() {
258
- worker.removeEventListener('message', onMessage);
259
- controller === null || controller === void 0 ? void 0 : controller.removeEventListener('abort', onAbort);
260
- controller === null || controller === void 0 ? void 0 : controller.removeEventListener('resume', onResume);
261
- controller === null || controller === void 0 ? void 0 : controller.removeEventListener('pause', onPause);
262
- worker.terminate();
263
- }
264
- const val = await promise;
265
- cleanup();
266
- return val;
267
- };
1
+ export { parseMediaOnServerWorker } from './parse-media-on-server-worker';
2
+ export { parseMediaOnWebWorker } from './parse-media-on-web-worker';
package/package.json CHANGED
@@ -3,15 +3,15 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/media-parser"
4
4
  },
5
5
  "name": "@remotion/media-parser",
6
- "version": "4.0.273",
6
+ "version": "4.0.275",
7
7
  "main": "dist/index.js",
8
8
  "sideEffects": false,
9
9
  "devDependencies": {
10
10
  "@types/wicg-file-system-access": "2023.10.5",
11
11
  "eslint": "9.19.0",
12
- "@types/bun": "1.2.0",
13
- "@remotion/eslint-config-internal": "4.0.273",
14
- "@remotion/example-videos": "4.0.273"
12
+ "@types/bun": "1.2.5",
13
+ "@remotion/example-videos": "4.0.275",
14
+ "@remotion/eslint-config-internal": "4.0.275"
15
15
  },
16
16
  "publishConfig": {
17
17
  "access": "public"
@@ -62,6 +62,12 @@
62
62
  "require": "./dist/worker-server-entry.js",
63
63
  "module": "./dist/esm/worker-server-entry.mjs",
64
64
  "import": "./dist/esm/worker-server-entry.mjs"
65
+ },
66
+ "./worker": {
67
+ "types": "./dist/worker.d.ts",
68
+ "require": "./dist/worker.js",
69
+ "module": "./dist/esm/worker.mjs",
70
+ "import": "./dist/esm/worker.mjs"
65
71
  }
66
72
  },
67
73
  "typesVersions": {
@@ -83,6 +89,9 @@
83
89
  ],
84
90
  "worker-server-entry": [
85
91
  "dist/worker-server-entry.d.ts"
92
+ ],
93
+ "worker": [
94
+ "dist/worker.d.ts"
86
95
  ]
87
96
  }
88
97
  },
@@ -1,5 +0,0 @@
1
- import type { SamplePosition } from '../../get-sample-positions';
2
- import type { IsoBaseMediaSeekingInfo, SeekingInfo } from '../../seeking-info';
3
- import type { ParserState } from '../../state/parser-state';
4
- export declare const getSeekingInfoFromMp4: (state: ParserState) => SeekingInfo | null;
5
- export declare const getSeekingByteFromIsoBaseMedia: (info: IsoBaseMediaSeekingInfo, time: number) => SamplePosition;
@@ -1,50 +0,0 @@
1
- import { getTracksFromMoovBox } from '../../get-tracks';
2
- import { getSamplePositionsFromTrack } from './get-sample-positions-from-track';
3
- import { getMoofBoxes, getMoovBoxFromState } from './traversal';
4
- export const getSeekingInfoFromMp4 = (state) => {
5
- const structure = state.getIsoStructure();
6
- const moovAtom = getMoovBoxFromState(state);
7
- const moofBoxes = getMoofBoxes(structure.boxes);
8
- if (!moovAtom) {
9
- return null;
10
- }
11
- return {
12
- type: 'iso-base-media-seeking-info',
13
- moovBox: moovAtom,
14
- moofBoxes,
15
- };
16
- };
17
- export const getSeekingByteFromIsoBaseMedia = (info, time) => {
18
- const tracks = getTracksFromMoovBox(info.moovBox);
19
- const allTracks = [
20
- ...tracks.videoTracks,
21
- ...tracks.audioTracks,
22
- ...tracks.otherTracks,
23
- ];
24
- let byte = 0;
25
- let sam = null;
26
- for (const t of allTracks) {
27
- const { timescale: ts, type } = t;
28
- if (type !== 'video') {
29
- continue;
30
- }
31
- const samplePositions = getSamplePositionsFromTrack({
32
- trakBox: t.trakBox,
33
- moofBoxes: info.moofBoxes,
34
- });
35
- for (const sample of samplePositions) {
36
- const timestamp = sample.cts / ts;
37
- if (timestamp <= time &&
38
- byte < sample.offset &&
39
- type === 'video' &&
40
- sample.isKeyframe) {
41
- byte = sample.offset;
42
- sam = sample;
43
- }
44
- }
45
- }
46
- if (!sam) {
47
- throw new Error('No sample found');
48
- }
49
- return sam;
50
- };
File without changes
@@ -1 +0,0 @@
1
- "use strict";
@@ -1,17 +0,0 @@
1
- import type { AudioTrack, VideoTrack } from '../../get-tracks';
2
- import type { LogLevel } from '../../log';
3
- import type { MediaParserController } from '../../media-parser-controller';
4
- import type { ExistingM3uRun, M3uState } from '../../state/m3u-state';
5
- import type { OnAudioSample, OnVideoSample } from '../../webcodec-sample-types';
6
- import type { M3uStructure } from './types';
7
- export declare const iteratorOverSegmentFiles: ({ structure, onVideoTrack, m3uState, onAudioTrack, onDoneWithTracks, playlistUrl, logLevel, parentController, onInitialProgress, }: {
8
- structure: M3uStructure;
9
- onVideoTrack: (track: VideoTrack) => Promise<OnVideoSample | null>;
10
- onAudioTrack: (track: AudioTrack) => Promise<OnAudioSample | null>;
11
- onDoneWithTracks: () => void;
12
- m3uState: M3uState;
13
- playlistUrl: string;
14
- logLevel: LogLevel;
15
- parentController: MediaParserController;
16
- onInitialProgress: (run: ExistingM3uRun | null) => void;
17
- }) => Promise<void>;
@@ -1,109 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.iteratorOverSegmentFiles = void 0;
4
- const forward_controller_1 = require("../../forward-controller");
5
- const media_parser_controller_1 = require("../../media-parser-controller");
6
- const parse_media_1 = require("../../parse-media");
7
- const get_chunks_1 = require("./get-chunks");
8
- const get_playlist_1 = require("./get-playlist");
9
- const iteratorOverSegmentFiles = async ({ structure, onVideoTrack, m3uState, onAudioTrack, onDoneWithTracks, playlistUrl, logLevel, parentController, onInitialProgress, }) => {
10
- const playlist = (0, get_playlist_1.getPlaylist)(structure, playlistUrl);
11
- const chunks = (0, get_chunks_1.getChunks)(playlist);
12
- let resolver = onInitialProgress;
13
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
14
- let rejector = (_e) => { };
15
- const childController = (0, media_parser_controller_1.mediaParserController)();
16
- const forwarded = (0, forward_controller_1.forwardMediaParserController)({
17
- childController,
18
- parentController,
19
- });
20
- const makeContinuationFn = () => {
21
- return {
22
- continue() {
23
- const { promise, reject, resolve } = Promise.withResolvers();
24
- resolver = resolve;
25
- rejector = reject;
26
- childController.resume();
27
- return promise;
28
- },
29
- abort() {
30
- childController.abort();
31
- },
32
- };
33
- };
34
- for (const chunk of chunks) {
35
- const isLastChunk = chunk === chunks[chunks.length - 1];
36
- await childController._internals.checkForAbortAndPause();
37
- const src = new URL(chunk.url, playlistUrl);
38
- const isMp4 = src.pathname.endsWith('.mp4');
39
- try {
40
- const data = await (0, parse_media_1.parseMedia)({
41
- src,
42
- acknowledgeRemotionLicense: true,
43
- logLevel,
44
- controller: childController,
45
- progressIntervalInMs: 0,
46
- onParseProgress: () => {
47
- childController.pause();
48
- resolver(makeContinuationFn());
49
- },
50
- fields: isMp4 ? { structure: true } : undefined,
51
- onTracks: () => {
52
- if (!m3uState.hasEmittedDoneWithTracks(playlistUrl)) {
53
- m3uState.setHasEmittedDoneWithTracks(playlistUrl);
54
- onDoneWithTracks();
55
- return null;
56
- }
57
- },
58
- onAudioTrack: async ({ track }) => {
59
- const callbackOrFalse = m3uState.hasEmittedAudioTrack(playlistUrl);
60
- if (callbackOrFalse === false) {
61
- const callback = await onAudioTrack(track);
62
- if (!callback) {
63
- m3uState.setHasEmittedAudioTrack(playlistUrl, null);
64
- return null;
65
- }
66
- m3uState.setHasEmittedAudioTrack(playlistUrl, callback);
67
- return (sample) => {
68
- return callback(sample);
69
- };
70
- }
71
- return callbackOrFalse;
72
- },
73
- onVideoTrack: async ({ track }) => {
74
- const callbackOrFalse = m3uState.hasEmittedVideoTrack(playlistUrl);
75
- if (callbackOrFalse === false) {
76
- const callback = await onVideoTrack(track);
77
- if (!callback) {
78
- m3uState.setHasEmittedVideoTrack(playlistUrl, null);
79
- return null;
80
- }
81
- m3uState.setHasEmittedVideoTrack(playlistUrl, callback);
82
- return (sample) => {
83
- return callback(sample);
84
- };
85
- }
86
- return callbackOrFalse;
87
- },
88
- mp4HeaderSegment: m3uState.getMp4HeaderSegment(),
89
- });
90
- if (isMp4) {
91
- if (data.structure.type !== 'iso-base-media') {
92
- throw new Error('Expected an mp4 file');
93
- }
94
- m3uState.setMp4HeaderSegment(data.structure);
95
- }
96
- }
97
- catch (e) {
98
- rejector(e);
99
- throw e;
100
- }
101
- forwarded.cleanup();
102
- if (!isLastChunk) {
103
- childController.pause();
104
- resolver(makeContinuationFn());
105
- }
106
- }
107
- resolver(null);
108
- };
109
- exports.iteratorOverSegmentFiles = iteratorOverSegmentFiles;