@remotion/media-parser 4.0.280 → 4.0.282

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 (189) hide show
  1. package/dist/check-if-done.js +1 -1
  2. package/dist/containers/aac/parse-aac.js +21 -12
  3. package/dist/containers/flac/get-channel-count.d.ts +1 -1
  4. package/dist/containers/flac/get-duration-from-flac.js +1 -1
  5. package/dist/containers/flac/get-sample-rate.js +1 -1
  6. package/dist/containers/flac/parse-flac-frame.js +18 -13
  7. package/dist/containers/flac/parse-flac.js +3 -3
  8. package/dist/containers/flac/parse-header.js +1 -1
  9. package/dist/containers/flac/parse-metadata.js +1 -1
  10. package/dist/containers/flac/parse-streaminfo.js +7 -2
  11. package/dist/containers/flac/parse-unknown-block.js +1 -1
  12. package/dist/containers/iso-base-media/base-media-box.d.ts +2 -1
  13. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +11 -0
  14. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.js +13 -0
  15. package/dist/containers/iso-base-media/collect-sample-positions-from-trak.d.ts +2 -0
  16. package/dist/containers/iso-base-media/collect-sample-positions-from-trak.js +46 -0
  17. package/dist/containers/iso-base-media/find-keyframe-before-time.d.ts +10 -0
  18. package/dist/containers/iso-base-media/find-keyframe-before-time.js +28 -0
  19. package/dist/containers/iso-base-media/get-children.d.ts +7 -3
  20. package/dist/containers/iso-base-media/get-children.js +7 -3
  21. package/dist/containers/iso-base-media/get-keyframes.js +9 -4
  22. package/dist/containers/iso-base-media/get-mfra-atom.d.ts +9 -0
  23. package/dist/containers/iso-base-media/get-mfra-atom.js +12 -0
  24. package/dist/containers/iso-base-media/get-mfra-seeking-box.d.ts +13 -0
  25. package/dist/containers/iso-base-media/get-mfra-seeking-box.js +32 -0
  26. package/dist/containers/iso-base-media/get-moov-atom.js +58 -42
  27. package/dist/containers/iso-base-media/get-sample-position-bounds.d.ts +5 -0
  28. package/dist/containers/iso-base-media/get-sample-position-bounds.js +19 -0
  29. package/dist/containers/iso-base-media/get-sample-positions-from-track.d.ts +7 -2
  30. package/dist/containers/iso-base-media/get-sample-positions-from-track.js +18 -48
  31. package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +11 -5
  32. package/dist/containers/iso-base-media/get-seeking-from-mp4.js +100 -36
  33. package/dist/containers/iso-base-media/get-seeking-info-from-mp4.d.ts +11 -0
  34. package/dist/containers/iso-base-media/get-seeking-info-from-mp4.js +25 -0
  35. package/dist/containers/iso-base-media/mdat/mdat.js +42 -26
  36. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.d.ts +11 -0
  37. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.js +27 -0
  38. package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +81 -0
  39. package/dist/containers/iso-base-media/mfra/get-mfra-atom.js +23 -0
  40. package/dist/containers/iso-base-media/mfra/get-mfro-atom.d.ts +9 -0
  41. package/dist/containers/iso-base-media/mfra/get-mfro-atom.js +38 -0
  42. package/dist/containers/iso-base-media/mfra/mfra.d.ts +2 -0
  43. package/dist/containers/iso-base-media/mfra/mfra.js +11 -0
  44. package/dist/containers/iso-base-media/mfra/tfra.d.ts +19 -0
  45. package/dist/containers/iso-base-media/mfra/tfra.js +100 -0
  46. package/dist/containers/iso-base-media/moov/moov.d.ts +7 -3
  47. package/dist/containers/iso-base-media/moov/moov.js +4 -2
  48. package/dist/containers/iso-base-media/parse-boxes.js +20 -4
  49. package/dist/containers/iso-base-media/process-box.d.ts +26 -2
  50. package/dist/containers/iso-base-media/process-box.js +54 -15
  51. package/dist/containers/iso-base-media/stsd/mebx.d.ts +5 -3
  52. package/dist/containers/iso-base-media/stsd/mebx.js +6 -4
  53. package/dist/containers/iso-base-media/stsd/samples.d.ts +8 -5
  54. package/dist/containers/iso-base-media/stsd/samples.js +16 -9
  55. package/dist/containers/iso-base-media/stsd/stsd.d.ts +5 -3
  56. package/dist/containers/iso-base-media/stsd/stsd.js +3 -3
  57. package/dist/containers/iso-base-media/trak/trak.d.ts +5 -3
  58. package/dist/containers/iso-base-media/trak/trak.js +4 -2
  59. package/dist/containers/iso-base-media/traversal.d.ts +9 -2
  60. package/dist/containers/iso-base-media/traversal.js +15 -7
  61. package/dist/containers/m3u/get-duration-from-m3u.js +1 -1
  62. package/dist/containers/m3u/get-streams.js +1 -1
  63. package/dist/containers/m3u/iterate-over-segment-files.d.ts +1 -1
  64. package/dist/containers/m3u/iterate-over-segment-files.js +1 -1
  65. package/dist/containers/m3u/parse-m3u.js +1 -1
  66. package/dist/containers/m3u/run-over-m3u.js +11 -2
  67. package/dist/containers/mp3/id3.js +1 -1
  68. package/dist/containers/mp3/parse-mpeg-header.js +8 -2
  69. package/dist/containers/riff/expect-riff-box.js +7 -2
  70. package/dist/containers/riff/get-tracks-from-avi.js +1 -1
  71. package/dist/containers/riff/parse-movi.js +35 -26
  72. package/dist/containers/riff/parse-riff-body.js +13 -5
  73. package/dist/containers/riff/parse-riff-header.js +1 -1
  74. package/dist/containers/riff/parse-video-section.d.ts +1 -1
  75. package/dist/containers/riff/parse-video-section.js +3 -3
  76. package/dist/containers/transport-stream/get-tracks.js +1 -1
  77. package/dist/containers/transport-stream/handle-aac-packet.js +12 -3
  78. package/dist/containers/transport-stream/handle-avc-packet.js +16 -3
  79. package/dist/containers/transport-stream/parse-packet.js +1 -1
  80. package/dist/containers/transport-stream/parse-transport-stream.js +1 -1
  81. package/dist/containers/wav/get-duration-from-wav.js +1 -1
  82. package/dist/containers/wav/get-seeking-byte.d.ts +7 -0
  83. package/dist/containers/wav/get-seeking-byte.js +15 -0
  84. package/dist/containers/wav/get-seeking-info.d.ts +7 -0
  85. package/dist/containers/wav/get-seeking-info.js +20 -0
  86. package/dist/containers/wav/parse-data.js +2 -2
  87. package/dist/containers/wav/parse-fmt.js +7 -2
  88. package/dist/containers/wav/parse-header.js +1 -1
  89. package/dist/containers/wav/parse-id3.js +1 -1
  90. package/dist/containers/wav/parse-list.js +1 -1
  91. package/dist/containers/wav/parse-media-section.d.ts +5 -0
  92. package/dist/containers/wav/parse-media-section.js +44 -0
  93. package/dist/containers/wav/parse-video-section.js +7 -5
  94. package/dist/containers/wav/parse-wav.js +4 -4
  95. package/dist/containers/webm/get-ready-tracks.js +2 -2
  96. package/dist/containers/webm/parse-ebml.js +17 -5
  97. package/dist/containers/webm/parse-webm-header.js +1 -1
  98. package/dist/controller/emitter.d.ts +33 -0
  99. package/dist/controller/emitter.js +65 -0
  100. package/dist/controller/media-parser-controller.d.ts +23 -0
  101. package/dist/controller/media-parser-controller.js +41 -0
  102. package/dist/controller/pause-signal.d.ts +11 -0
  103. package/dist/controller/pause-signal.js +38 -0
  104. package/dist/controller/performed-seeks-stats.d.ts +11 -0
  105. package/dist/controller/performed-seeks-stats.js +21 -0
  106. package/dist/controller/seek-signal.d.ts +19 -0
  107. package/dist/controller/seek-signal.js +24 -0
  108. package/dist/convert-audio-or-video-sample.d.ts +4 -1
  109. package/dist/convert-audio-or-video-sample.js +19 -6
  110. package/dist/disallow-forward-seek-if-samples-are-needed.d.ts +6 -0
  111. package/dist/disallow-forward-seek-if-samples-are-needed.js +14 -0
  112. package/dist/emit-audio-sample.d.ts +8 -5
  113. package/dist/emit-audio-sample.js +6 -6
  114. package/dist/emit-available-info.js +6 -6
  115. package/dist/emitter.d.ts +9 -0
  116. package/dist/emitter.js +35 -3
  117. package/dist/esm/index.mjs +5687 -4586
  118. package/dist/esm/server-worker.mjs +453 -0
  119. package/dist/esm/worker-server-entry.mjs +6551 -5447
  120. package/dist/esm/worker-web-entry.mjs +5452 -4348
  121. package/dist/esm/worker.mjs +14 -11
  122. package/dist/forward-controller.d.ts +1 -1
  123. package/dist/get-dimensions.js +2 -2
  124. package/dist/get-duration.js +21 -31
  125. package/dist/get-fps.js +7 -3
  126. package/dist/get-keyframes.js +2 -2
  127. package/dist/get-seeking-info.d.ts +19 -3
  128. package/dist/get-seeking-info.js +33 -7
  129. package/dist/get-tracks.js +12 -4
  130. package/dist/has-all-info.js +1 -1
  131. package/dist/index.d.ts +153 -135
  132. package/dist/index.js +3 -1
  133. package/dist/init-video.js +21 -12
  134. package/dist/internal-parse-media.js +6 -2
  135. package/dist/media-parser-controller.d.ts +2 -1
  136. package/dist/media-parser-controller.js +3 -2
  137. package/dist/metadata/get-metadata.js +1 -1
  138. package/dist/metadata/metadata-from-iso.js +5 -1
  139. package/dist/options.d.ts +1 -1
  140. package/dist/parse-loop.js +17 -4
  141. package/dist/parse-media-on-worker-entry.js +7 -0
  142. package/dist/perform-seek.d.ts +23 -3
  143. package/dist/perform-seek.js +44 -8
  144. package/dist/readers/reader.d.ts +1 -1
  145. package/dist/register-track.d.ts +17 -4
  146. package/dist/register-track.js +31 -17
  147. package/dist/run-parse-iteration.js +1 -1
  148. package/dist/seek-backwards.d.ts +15 -2
  149. package/dist/seek-backwards.js +7 -8
  150. package/dist/seek-forwards.d.ts +19 -2
  151. package/dist/seek-forwards.js +19 -12
  152. package/dist/seek-signal.d.ts +3 -6
  153. package/dist/seek-signal.js +4 -6
  154. package/dist/seeking-info.d.ts +11 -1
  155. package/dist/server-worker.d.ts +3 -0
  156. package/dist/server-worker.js +7 -0
  157. package/dist/server-worker.module.d.ts +2 -0
  158. package/dist/server-worker.module.js +12 -0
  159. package/dist/state/current-reader.d.ts +6 -0
  160. package/dist/state/current-reader.js +13 -0
  161. package/dist/state/iso-base-media/cached-sample-positions.js +7 -9
  162. package/dist/state/iso-base-media/iso-state.d.ts +15 -1
  163. package/dist/state/iso-base-media/iso-state.js +9 -1
  164. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +14 -0
  165. package/dist/state/iso-base-media/lazy-mfra-load.js +29 -0
  166. package/dist/state/need-samples-for-fields.d.ts +1 -0
  167. package/dist/state/need-samples-for-fields.js +3 -3
  168. package/dist/state/parser-state.d.ts +145 -130
  169. package/dist/state/parser-state.js +15 -4
  170. package/dist/state/sample-callbacks.d.ts +3 -2
  171. package/dist/state/sample-callbacks.js +2 -4
  172. package/dist/state/seek-infinite-loop.d.ts +5 -0
  173. package/dist/state/seek-infinite-loop.js +22 -0
  174. package/dist/state/video-section.d.ts +23 -6
  175. package/dist/state/video-section.js +50 -22
  176. package/dist/state/work-on-seek-request-options.d.ts +3 -0
  177. package/dist/state/work-on-seek-request-options.js +26 -0
  178. package/dist/throttled-progress.d.ts +1 -1
  179. package/dist/version.d.ts +1 -1
  180. package/dist/version.js +1 -1
  181. package/dist/work-on-seek-request.d.ts +42 -1
  182. package/dist/work-on-seek-request.js +104 -15
  183. package/dist/worker/forward-controller.d.ts +1 -1
  184. package/dist/worker/forward-controller.js +4 -0
  185. package/dist/worker/worker-types.d.ts +6 -1
  186. package/dist/worker-server.js +1 -1
  187. package/dist/worker.module.d.ts +4 -0
  188. package/dist/worker.module.js +12 -0
  189. package/package.json +12 -3
@@ -0,0 +1,453 @@
1
+ // src/errors.ts
2
+ class IsAGifError extends Error {
3
+ mimeType;
4
+ sizeInBytes;
5
+ fileName;
6
+ constructor({
7
+ message,
8
+ mimeType,
9
+ sizeInBytes,
10
+ fileName
11
+ }) {
12
+ super(message);
13
+ this.name = "IsAGifError";
14
+ this.fileName = "IsAGifError";
15
+ this.mimeType = mimeType;
16
+ this.sizeInBytes = sizeInBytes;
17
+ this.fileName = fileName;
18
+ if (Error.captureStackTrace) {
19
+ Error.captureStackTrace(this, IsAGifError);
20
+ }
21
+ }
22
+ }
23
+
24
+ class IsAnImageError extends Error {
25
+ imageType;
26
+ dimensions;
27
+ mimeType;
28
+ sizeInBytes;
29
+ fileName;
30
+ constructor({
31
+ dimensions,
32
+ imageType,
33
+ message,
34
+ mimeType,
35
+ sizeInBytes,
36
+ fileName
37
+ }) {
38
+ super(message);
39
+ this.name = "IsAnImageError";
40
+ this.imageType = imageType;
41
+ this.dimensions = dimensions;
42
+ this.mimeType = mimeType;
43
+ this.sizeInBytes = sizeInBytes;
44
+ this.fileName = fileName;
45
+ if (Error.captureStackTrace) {
46
+ Error.captureStackTrace(this, IsAnImageError);
47
+ }
48
+ }
49
+ }
50
+
51
+ class IsAPdfError extends Error {
52
+ mimeType;
53
+ sizeInBytes;
54
+ fileName;
55
+ constructor({
56
+ message,
57
+ mimeType,
58
+ sizeInBytes,
59
+ fileName
60
+ }) {
61
+ super(message);
62
+ this.name = "IsAPdfError";
63
+ this.mimeType = mimeType;
64
+ this.sizeInBytes = sizeInBytes;
65
+ this.fileName = fileName;
66
+ if (Error.captureStackTrace) {
67
+ Error.captureStackTrace(this, IsAPdfError);
68
+ }
69
+ }
70
+ }
71
+
72
+ class IsAnUnsupportedFileTypeError extends Error {
73
+ mimeType;
74
+ sizeInBytes;
75
+ fileName;
76
+ constructor({
77
+ message,
78
+ mimeType,
79
+ sizeInBytes,
80
+ fileName
81
+ }) {
82
+ super(message);
83
+ this.name = "IsAnUnsupportedFileTypeError";
84
+ this.mimeType = mimeType;
85
+ this.sizeInBytes = sizeInBytes;
86
+ this.fileName = fileName;
87
+ if (Error.captureStackTrace) {
88
+ Error.captureStackTrace(this, IsAnUnsupportedFileTypeError);
89
+ }
90
+ }
91
+ }
92
+
93
+ class MediaParserAbortError extends Error {
94
+ constructor(message) {
95
+ super(message);
96
+ this.name = "MediaParserAbortError";
97
+ this.cause = undefined;
98
+ }
99
+ }
100
+
101
+ // src/worker/serialize-error.ts
102
+ var deserializeError = (error) => {
103
+ switch (error.errorName) {
104
+ case "IsAGifError":
105
+ return new IsAGifError({
106
+ fileName: error.fileName,
107
+ mimeType: error.mimeType,
108
+ sizeInBytes: error.sizeInBytes,
109
+ message: error.errorMessage
110
+ });
111
+ case "IsAnImageError":
112
+ return new IsAnImageError({
113
+ dimensions: error.dimensions,
114
+ fileName: error.fileName,
115
+ imageType: error.imageType,
116
+ mimeType: error.mimeType,
117
+ sizeInBytes: error.sizeInBytes,
118
+ message: error.errorMessage
119
+ });
120
+ case "IsAPdfError":
121
+ return new IsAPdfError({
122
+ fileName: error.fileName,
123
+ mimeType: error.mimeType,
124
+ sizeInBytes: error.sizeInBytes,
125
+ message: error.errorMessage
126
+ });
127
+ case "IsAnUnsupportedFileTypeError":
128
+ return new IsAnUnsupportedFileTypeError({
129
+ fileName: error.fileName,
130
+ mimeType: error.mimeType,
131
+ sizeInBytes: error.sizeInBytes,
132
+ message: error.errorMessage
133
+ });
134
+ case "MediaParserAbortError":
135
+ return new MediaParserAbortError(error.errorMessage);
136
+ default:
137
+ return new Error(error.errorMessage);
138
+ }
139
+ };
140
+
141
+ // src/parse-media-on-worker-entry.ts
142
+ var convertToWorkerPayload = (payload) => {
143
+ const {
144
+ onAudioCodec,
145
+ onContainer,
146
+ onDimensions,
147
+ onUnrotatedDimensions,
148
+ onVideoCodec,
149
+ onFps,
150
+ onAudioTrack,
151
+ onDurationInSeconds,
152
+ onImages,
153
+ onInternalStats,
154
+ onIsHdr,
155
+ onKeyframes,
156
+ onLocation,
157
+ onM3uStreams,
158
+ onMetadata,
159
+ onMimeType,
160
+ onName,
161
+ onNumberOfAudioChannels,
162
+ onParseProgress,
163
+ onRotation,
164
+ onSampleRate,
165
+ onSlowAudioBitrate,
166
+ onSize,
167
+ onSlowDurationInSeconds,
168
+ onSlowFps,
169
+ onSlowKeyframes,
170
+ onSlowNumberOfFrames,
171
+ onSlowVideoBitrate,
172
+ onStructure,
173
+ onTracks,
174
+ onVideoTrack,
175
+ selectM3uStream,
176
+ selectM3uAssociatedPlaylists,
177
+ src,
178
+ ...others
179
+ } = payload;
180
+ return {
181
+ type: "request-worker",
182
+ payload: others,
183
+ postAudioCodec: Boolean(onAudioCodec),
184
+ postContainer: Boolean(onContainer),
185
+ postDimensions: Boolean(onDimensions),
186
+ postDurationInSeconds: Boolean(onDurationInSeconds),
187
+ postFps: Boolean(onFps),
188
+ postImages: Boolean(onImages),
189
+ postInternalStats: Boolean(onInternalStats),
190
+ postIsHdr: Boolean(onIsHdr),
191
+ postKeyframes: Boolean(onKeyframes),
192
+ postLocation: Boolean(onLocation),
193
+ postM3uStreams: Boolean(onM3uStreams),
194
+ postMetadata: Boolean(onMetadata),
195
+ postMimeType: Boolean(onMimeType),
196
+ postName: Boolean(onName),
197
+ postNumberOfAudioChannels: Boolean(onNumberOfAudioChannels),
198
+ postRotation: Boolean(onRotation),
199
+ postSampleRate: Boolean(onSampleRate),
200
+ postSlowAudioBitrate: Boolean(onSlowAudioBitrate),
201
+ postSlowDurationInSeconds: Boolean(onSlowDurationInSeconds),
202
+ postSlowFps: Boolean(onSlowFps),
203
+ postSlowKeyframes: Boolean(onSlowKeyframes),
204
+ postSlowNumberOfFrames: Boolean(onSlowNumberOfFrames),
205
+ postSlowVideoBitrate: Boolean(onSlowVideoBitrate),
206
+ postStructure: Boolean(onStructure),
207
+ postTracks: Boolean(onTracks),
208
+ postUnrotatedDimensions: Boolean(onUnrotatedDimensions),
209
+ postVideoCodec: Boolean(onVideoCodec),
210
+ postSize: Boolean(onSize),
211
+ postParseProgress: Boolean(onParseProgress),
212
+ postM3uStreamSelection: Boolean(selectM3uStream),
213
+ postM3uAssociatedPlaylistsSelection: Boolean(selectM3uAssociatedPlaylists),
214
+ postOnAudioTrack: Boolean(onAudioTrack),
215
+ postOnVideoTrack: Boolean(onVideoTrack),
216
+ src
217
+ };
218
+ };
219
+ var post = (worker, payload) => {
220
+ worker.postMessage(payload);
221
+ };
222
+ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params }, worker, apiName) => {
223
+ if (reader) {
224
+ 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().`);
225
+ }
226
+ post(worker, convertToWorkerPayload(params));
227
+ const { promise, resolve, reject } = Promise.withResolvers();
228
+ const onAbort = () => {
229
+ post(worker, { type: "request-abort" });
230
+ };
231
+ const onResume = () => {
232
+ post(worker, { type: "request-resume" });
233
+ };
234
+ const onPause = () => {
235
+ post(worker, { type: "request-pause" });
236
+ };
237
+ const onSeek = ({ detail: { seek } }) => {
238
+ post(worker, { type: "request-seek", payload: seek });
239
+ controller?._internals.seekSignal.clearSeekIfStillSame(seek);
240
+ };
241
+ const callbacks = {};
242
+ function onMessage(message) {
243
+ const data = message.data;
244
+ if (data.type === "response-done") {
245
+ resolve(data.payload);
246
+ }
247
+ if (data.type === "response-error") {
248
+ cleanup();
249
+ reject(deserializeError(data));
250
+ }
251
+ if (data.type === "response-on-callback-request") {
252
+ Promise.resolve().then(async () => {
253
+ if (data.payload.callbackType === "audio-codec") {
254
+ await params.onAudioCodec?.(data.payload.value);
255
+ return { payloadType: "void" };
256
+ }
257
+ if (data.payload.callbackType === "container") {
258
+ await params.onContainer?.(data.payload.value);
259
+ return { payloadType: "void" };
260
+ }
261
+ if (data.payload.callbackType === "dimensions") {
262
+ await params.onDimensions?.(data.payload.value);
263
+ return { payloadType: "void" };
264
+ }
265
+ if (data.payload.callbackType === "unrotated-dimensions") {
266
+ await params.onUnrotatedDimensions?.(data.payload.value);
267
+ return { payloadType: "void" };
268
+ }
269
+ if (data.payload.callbackType === "video-codec") {
270
+ await params.onVideoCodec?.(data.payload.value);
271
+ return { payloadType: "void" };
272
+ }
273
+ if (data.payload.callbackType === "tracks") {
274
+ await params.onTracks?.(data.payload.value);
275
+ return { payloadType: "void" };
276
+ }
277
+ if (data.payload.callbackType === "rotation") {
278
+ await params.onRotation?.(data.payload.value);
279
+ return { payloadType: "void" };
280
+ }
281
+ if (data.payload.callbackType === "sample-rate") {
282
+ await params.onSampleRate?.(data.payload.value);
283
+ return { payloadType: "void" };
284
+ }
285
+ if (data.payload.callbackType === "slow-audio-bitrate") {
286
+ await params.onSlowAudioBitrate?.(data.payload.value);
287
+ return { payloadType: "void" };
288
+ }
289
+ if (data.payload.callbackType === "slow-duration-in-seconds") {
290
+ await params.onSlowDurationInSeconds?.(data.payload.value);
291
+ return { payloadType: "void" };
292
+ }
293
+ if (data.payload.callbackType === "slow-fps") {
294
+ await params.onSlowFps?.(data.payload.value);
295
+ return { payloadType: "void" };
296
+ }
297
+ if (data.payload.callbackType === "slow-keyframes") {
298
+ await params.onSlowKeyframes?.(data.payload.value);
299
+ return { payloadType: "void" };
300
+ }
301
+ if (data.payload.callbackType === "slow-number-of-frames") {
302
+ await params.onSlowNumberOfFrames?.(data.payload.value);
303
+ return { payloadType: "void" };
304
+ }
305
+ if (data.payload.callbackType === "slow-video-bitrate") {
306
+ await params.onSlowVideoBitrate?.(data.payload.value);
307
+ return { payloadType: "void" };
308
+ }
309
+ if (data.payload.callbackType === "structure") {
310
+ await params.onStructure?.(data.payload.value);
311
+ return { payloadType: "void" };
312
+ }
313
+ if (data.payload.callbackType === "fps") {
314
+ await params.onFps?.(data.payload.value);
315
+ return { payloadType: "void" };
316
+ }
317
+ if (data.payload.callbackType === "images") {
318
+ await params.onImages?.(data.payload.value);
319
+ return { payloadType: "void" };
320
+ }
321
+ if (data.payload.callbackType === "internal-stats") {
322
+ await params.onInternalStats?.(data.payload.value);
323
+ return { payloadType: "void" };
324
+ }
325
+ if (data.payload.callbackType === "is-hdr") {
326
+ await params.onIsHdr?.(data.payload.value);
327
+ return { payloadType: "void" };
328
+ }
329
+ if (data.payload.callbackType === "keyframes") {
330
+ await params.onKeyframes?.(data.payload.value);
331
+ return { payloadType: "void" };
332
+ }
333
+ if (data.payload.callbackType === "location") {
334
+ await params.onLocation?.(data.payload.value);
335
+ return { payloadType: "void" };
336
+ }
337
+ if (data.payload.callbackType === "m3u-streams") {
338
+ await params.onM3uStreams?.(data.payload.value);
339
+ return { payloadType: "void" };
340
+ }
341
+ if (data.payload.callbackType === "metadata") {
342
+ await params.onMetadata?.(data.payload.value);
343
+ return { payloadType: "void" };
344
+ }
345
+ if (data.payload.callbackType === "mime-type") {
346
+ await params.onMimeType?.(data.payload.value);
347
+ return { payloadType: "void" };
348
+ }
349
+ if (data.payload.callbackType === "name") {
350
+ await params.onName?.(data.payload.value);
351
+ return { payloadType: "void" };
352
+ }
353
+ if (data.payload.callbackType === "number-of-audio-channels") {
354
+ await params.onNumberOfAudioChannels?.(data.payload.value);
355
+ return { payloadType: "void" };
356
+ }
357
+ if (data.payload.callbackType === "size") {
358
+ await params.onSize?.(data.payload.value);
359
+ return { payloadType: "void" };
360
+ }
361
+ if (data.payload.callbackType === "duration-in-seconds") {
362
+ await params.onDurationInSeconds?.(data.payload.value);
363
+ return { payloadType: "void" };
364
+ }
365
+ if (data.payload.callbackType === "parse-progress") {
366
+ await params.onParseProgress?.(data.payload.value);
367
+ return { payloadType: "void" };
368
+ }
369
+ if (data.payload.callbackType === "m3u-stream-selection") {
370
+ const selection = await params.selectM3uStream(data.payload.value);
371
+ return { payloadType: "m3u-stream-selection", value: selection };
372
+ }
373
+ if (data.payload.callbackType === "m3u-associated-playlists-selection") {
374
+ const selection = await params.selectM3uAssociatedPlaylists(data.payload.value);
375
+ return {
376
+ payloadType: "m3u-associated-playlists-selection",
377
+ value: selection
378
+ };
379
+ }
380
+ if (data.payload.callbackType === "on-audio-track") {
381
+ const possibleCallback = await params.onAudioTrack?.(data.payload.value);
382
+ if (possibleCallback) {
383
+ callbacks[data.payload.value.track.trackId] = possibleCallback;
384
+ }
385
+ return {
386
+ payloadType: "on-audio-track-response",
387
+ registeredCallback: Boolean(possibleCallback)
388
+ };
389
+ }
390
+ if (data.payload.callbackType === "on-video-track") {
391
+ const possibleCallback = await params.onVideoTrack?.(data.payload.value);
392
+ if (possibleCallback) {
393
+ callbacks[data.payload.value.track.trackId] = possibleCallback;
394
+ }
395
+ return {
396
+ payloadType: "on-video-track-response",
397
+ registeredCallback: Boolean(possibleCallback)
398
+ };
399
+ }
400
+ if (data.payload.callbackType === "on-audio-video-sample") {
401
+ const callback = callbacks[data.payload.trackId];
402
+ if (!callback) {
403
+ throw new Error(`No callback registered for track ${data.payload.trackId}`);
404
+ }
405
+ await callback(data.payload.value);
406
+ return { payloadType: "void" };
407
+ }
408
+ throw new Error(`Unknown callback type: ${data.payload}`);
409
+ }).then((payload) => {
410
+ post(worker, {
411
+ type: "acknowledge-callback",
412
+ nonce: data.nonce,
413
+ ...payload
414
+ });
415
+ }).catch((err) => {
416
+ reject(err);
417
+ post(worker, {
418
+ type: "signal-error-in-callback",
419
+ nonce: data.nonce
420
+ });
421
+ });
422
+ }
423
+ }
424
+ worker.addEventListener("message", onMessage);
425
+ controller?.addEventListener("abort", onAbort);
426
+ controller?.addEventListener("resume", onResume);
427
+ controller?.addEventListener("pause", onPause);
428
+ controller?.addEventListener("seek", onSeek);
429
+ function cleanup() {
430
+ worker.removeEventListener("message", onMessage);
431
+ controller?.removeEventListener("abort", onAbort);
432
+ controller?.removeEventListener("resume", onResume);
433
+ controller?.removeEventListener("pause", onPause);
434
+ controller?.removeEventListener("seek", onSeek);
435
+ worker.terminate();
436
+ }
437
+ controller?._internals.markAsReadyToEmitEvents();
438
+ const val = await promise;
439
+ cleanup();
440
+ return val;
441
+ };
442
+
443
+ // src/server-worker.module.ts
444
+ var parseMediaOnServerWorker = (params) => {
445
+ if (typeof Worker === "undefined") {
446
+ throw new Error('"Worker" is not available. Cannot call parseMediaOnServerWorker()');
447
+ }
448
+ const worker = new Worker(new URL("./worker-server-entry", import.meta.url));
449
+ return parseMediaOnWorkerImplementation(params, worker, "parseMediaOnServerWorker");
450
+ };
451
+ export {
452
+ parseMediaOnServerWorker
453
+ };