@remotion/media-parser 4.0.272 → 4.0.274

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 (38) 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/m3u/m3u-child-stream.d.ts +0 -0
  21. package/dist/containers/m3u/m3u-child-stream.js +0 -1
  22. package/dist/containers/m3u/return-packets.d.ts +0 -17
  23. package/dist/containers/m3u/return-packets.js +0 -109
  24. package/dist/esm/fetch.mjs +0 -194
  25. package/dist/esm/web-file.mjs +0 -60
  26. package/dist/esm/worker-server.mjs +0 -12914
  27. package/dist/parse-media-on-browser-worker.d.ts +0 -2
  28. package/dist/parse-media-on-browser-worker.js +0 -4
  29. package/dist/parse-media-on-worker.d.ts +0 -2
  30. package/dist/parse-media-on-worker.js +0 -4
  31. package/dist/state/last-eventloop-break.d.ts +0 -4
  32. package/dist/state/last-eventloop-break.js +0 -14
  33. package/dist/web-file.d.ts +0 -1
  34. package/dist/web-file.js +0 -1
  35. package/dist/worker-bun-entry.d.ts +0 -1
  36. package/dist/worker-bun-entry.js +0 -5
  37. package/dist/worker-entry.d.ts +0 -1
  38. package/dist/worker-entry.js +0 -5
@@ -1,2 +1,2 @@
1
1
  import type { BufferIterator } from '../../buffer-iterator';
2
- export declare const getChannelCount: (iterator: BufferIterator) => 2 | 8 | 1 | 7 | 3 | 5 | 4 | 6;
2
+ export declare const getChannelCount: (iterator: BufferIterator) => 5 | 1 | 2 | 3 | 4 | 6 | 7 | 8;
@@ -1,2 +1,2 @@
1
1
  import type { TrakBox } from './trak/trak';
2
- export declare const getVideoCodecFromIsoTrak: (trakBox: TrakBox) => "h265" | "h264" | "av1" | "prores";
2
+ export declare const getVideoCodecFromIsoTrak: (trakBox: TrakBox) => "h264" | "av1" | "h265" | "prores";
@@ -75,6 +75,7 @@ export const makeBaseMediaTrack = (trakBox) => {
75
75
  }
76
76
  const privateData = getVideoPrivateData(trakBox);
77
77
  const track = {
78
+ m3uStreamFormat: null,
78
79
  type: 'video',
79
80
  trackId: tkhdBox.trackId,
80
81
  description: videoDescriptors !== null && videoDescriptors !== void 0 ? videoDescriptors : undefined,
@@ -74,7 +74,10 @@ export const iteratorOverSegmentFiles = async ({ structure, onVideoTrack, m3uSta
74
74
  : async ({ track }) => {
75
75
  const callbackOrFalse = m3uState.hasEmittedVideoTrack(playlistUrl);
76
76
  if (callbackOrFalse === false) {
77
- const callback = await onVideoTrack(track);
77
+ const callback = await onVideoTrack({
78
+ ...track,
79
+ m3uStreamFormat: chunk.isHeader || mp4HeaderSegment ? 'mp4' : 'ts',
80
+ });
78
81
  if (!callback) {
79
82
  m3uState.setHasEmittedVideoTrack(playlistUrl, null);
80
83
  return null;
@@ -43,6 +43,7 @@ export const makeAviVideoTrack = ({ strh, strf, index, }) => {
43
43
  displayAspectHeight: strf.height,
44
44
  timescale: MEDIA_PARSER_RIFF_TIMESCALE,
45
45
  description: undefined,
46
+ m3uStreamFormat: null,
46
47
  trackId: index,
47
48
  color: {
48
49
  fullRange: null,
@@ -18,6 +18,7 @@ export const handleAvcPacket = async ({ streamBuffer, programId, state, offset,
18
18
  const dimensions = getDimensionsFromSps(spsAndPps.sps.spsData);
19
19
  const sampleAspectRatio = getSampleAspectRatioFromSps(spsAndPps.sps.spsData);
20
20
  const track = {
21
+ m3uStreamFormat: null,
21
22
  rotation: 0,
22
23
  trackId: programId,
23
24
  type: 'video',
@@ -195,6 +195,7 @@ export const getTrack = ({ timescale, track, }) => {
195
195
  return null;
196
196
  }
197
197
  return {
198
+ m3uStreamFormat: null,
198
199
  type: 'video',
199
200
  trackId,
200
201
  codec: codecString,
@@ -2401,6 +2401,7 @@ var makeAviVideoTrack = ({
2401
2401
  displayAspectHeight: strf.height,
2402
2402
  timescale: MEDIA_PARSER_RIFF_TIMESCALE,
2403
2403
  description: undefined,
2404
+ m3uStreamFormat: null,
2404
2405
  trackId: index,
2405
2406
  color: {
2406
2407
  fullRange: null,
@@ -3086,6 +3087,7 @@ var getTrack = ({
3086
3087
  return null;
3087
3088
  }
3088
3089
  return {
3090
+ m3uStreamFormat: null,
3089
3091
  type: "video",
3090
3092
  trackId,
3091
3093
  codec: codecString,
@@ -3858,6 +3860,7 @@ var makeBaseMediaTrack = (trakBox) => {
3858
3860
  }
3859
3861
  const privateData = getVideoPrivateData(trakBox);
3860
3862
  const track = {
3863
+ m3uStreamFormat: null,
3861
3864
  type: "video",
3862
3865
  trackId: tkhdBox.trackId,
3863
3866
  description: videoDescriptors ?? undefined,
@@ -10045,7 +10048,10 @@ var iteratorOverSegmentFiles = async ({
10045
10048
  onVideoTrack: onVideoTrack === null ? null : async ({ track }) => {
10046
10049
  const callbackOrFalse = m3uState2.hasEmittedVideoTrack(playlistUrl);
10047
10050
  if (callbackOrFalse === false) {
10048
- const callback = await onVideoTrack(track);
10051
+ const callback = await onVideoTrack({
10052
+ ...track,
10053
+ m3uStreamFormat: chunk.isHeader || mp4HeaderSegment ? "mp4" : "ts"
10054
+ });
10049
10055
  if (!callback) {
10050
10056
  m3uState2.setHasEmittedVideoTrack(playlistUrl, null);
10051
10057
  return null;
@@ -11405,6 +11411,7 @@ var handleAvcPacket = async ({
11405
11411
  const dimensions = getDimensionsFromSps(spsAndPps.sps.spsData);
11406
11412
  const sampleAspectRatio = getSampleAspectRatioFromSps(spsAndPps.sps.spsData);
11407
11413
  const track = {
11414
+ m3uStreamFormat: null,
11408
11415
  rotation: 0,
11409
11416
  trackId: programId,
11410
11417
  type: "video",
@@ -12585,353 +12592,6 @@ var internalParseMedia = async function({
12585
12592
  }
12586
12593
  return returnValue;
12587
12594
  };
12588
- // src/worker/serialize-error.ts
12589
- var deserializeError = (error) => {
12590
- switch (error.errorName) {
12591
- case "IsAGifError":
12592
- return new IsAGifError({
12593
- fileName: error.fileName,
12594
- mimeType: error.mimeType,
12595
- sizeInBytes: error.sizeInBytes,
12596
- message: error.errorMessage
12597
- });
12598
- case "IsAnImageError":
12599
- return new IsAnImageError({
12600
- dimensions: error.dimensions,
12601
- fileName: error.fileName,
12602
- imageType: error.imageType,
12603
- mimeType: error.mimeType,
12604
- sizeInBytes: error.sizeInBytes,
12605
- message: error.errorMessage
12606
- });
12607
- case "IsAPdfError":
12608
- return new IsAPdfError({
12609
- fileName: error.fileName,
12610
- mimeType: error.mimeType,
12611
- sizeInBytes: error.sizeInBytes,
12612
- message: error.errorMessage
12613
- });
12614
- case "IsAnUnsupportedFileTypeError":
12615
- return new IsAnUnsupportedFileTypeError({
12616
- fileName: error.fileName,
12617
- mimeType: error.mimeType,
12618
- sizeInBytes: error.sizeInBytes,
12619
- message: error.errorMessage
12620
- });
12621
- case "MediaParserAbortError":
12622
- return new MediaParserAbortError(error.errorMessage);
12623
- default:
12624
- return new Error(error.errorMessage);
12625
- }
12626
- };
12627
-
12628
- // src/parse-media-on-worker-entry.ts
12629
- var convertToWorkerPayload = (payload) => {
12630
- const {
12631
- onAudioCodec,
12632
- onContainer,
12633
- onDimensions,
12634
- onUnrotatedDimensions,
12635
- onVideoCodec,
12636
- onFps,
12637
- onAudioTrack,
12638
- onDurationInSeconds,
12639
- onImages,
12640
- onInternalStats,
12641
- onIsHdr,
12642
- onKeyframes,
12643
- onLocation,
12644
- onM3uStreams,
12645
- onMetadata,
12646
- onMimeType,
12647
- onName,
12648
- onNumberOfAudioChannels,
12649
- onParseProgress,
12650
- onRotation,
12651
- onSampleRate,
12652
- onSlowAudioBitrate,
12653
- onSize,
12654
- onSlowDurationInSeconds,
12655
- onSlowFps,
12656
- onSlowKeyframes,
12657
- onSlowNumberOfFrames,
12658
- onSlowVideoBitrate,
12659
- onStructure,
12660
- onTracks,
12661
- onVideoTrack,
12662
- selectM3uStream,
12663
- selectM3uAssociatedPlaylists,
12664
- src,
12665
- ...others
12666
- } = payload;
12667
- return {
12668
- type: "request-worker",
12669
- payload: others,
12670
- postAudioCodec: Boolean(onAudioCodec),
12671
- postContainer: Boolean(onContainer),
12672
- postDimensions: Boolean(onDimensions),
12673
- postDurationInSeconds: Boolean(onDurationInSeconds),
12674
- postFps: Boolean(onFps),
12675
- postImages: Boolean(onImages),
12676
- postInternalStats: Boolean(onInternalStats),
12677
- postIsHdr: Boolean(onIsHdr),
12678
- postKeyframes: Boolean(onKeyframes),
12679
- postLocation: Boolean(onLocation),
12680
- postM3uStreams: Boolean(onM3uStreams),
12681
- postMetadata: Boolean(onMetadata),
12682
- postMimeType: Boolean(onMimeType),
12683
- postName: Boolean(onName),
12684
- postNumberOfAudioChannels: Boolean(onNumberOfAudioChannels),
12685
- postRotation: Boolean(onRotation),
12686
- postSampleRate: Boolean(onSampleRate),
12687
- postSlowAudioBitrate: Boolean(onSlowAudioBitrate),
12688
- postSlowDurationInSeconds: Boolean(onSlowDurationInSeconds),
12689
- postSlowFps: Boolean(onSlowFps),
12690
- postSlowKeyframes: Boolean(onSlowKeyframes),
12691
- postSlowNumberOfFrames: Boolean(onSlowNumberOfFrames),
12692
- postSlowVideoBitrate: Boolean(onSlowVideoBitrate),
12693
- postStructure: Boolean(onStructure),
12694
- postTracks: Boolean(onTracks),
12695
- postUnrotatedDimensions: Boolean(onUnrotatedDimensions),
12696
- postVideoCodec: Boolean(onVideoCodec),
12697
- postSize: Boolean(onSize),
12698
- postParseProgress: Boolean(onParseProgress),
12699
- postM3uStreamSelection: Boolean(selectM3uStream),
12700
- postM3uAssociatedPlaylistsSelection: Boolean(selectM3uAssociatedPlaylists),
12701
- postOnAudioTrack: Boolean(onAudioTrack),
12702
- postOnVideoTrack: Boolean(onVideoTrack),
12703
- src
12704
- };
12705
- };
12706
- var post = (worker, payload) => {
12707
- worker.postMessage(payload);
12708
- };
12709
- var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params }, workerUrlEntry, apiName) => {
12710
- if (typeof Worker === "undefined") {
12711
- throw new Error('"Worker" is not available. Cannot call workerClient()');
12712
- }
12713
- if (reader) {
12714
- 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().`);
12715
- }
12716
- const worker = new Worker(workerUrlEntry);
12717
- post(worker, convertToWorkerPayload(params));
12718
- const { promise, resolve, reject } = Promise.withResolvers();
12719
- const onAbort = () => {
12720
- post(worker, { type: "request-abort" });
12721
- };
12722
- const onResume = () => {
12723
- post(worker, { type: "request-resume" });
12724
- };
12725
- const onPause = () => {
12726
- post(worker, { type: "request-pause" });
12727
- };
12728
- const callbacks = {};
12729
- function onMessage(message) {
12730
- const data = message.data;
12731
- if (data.type === "response-done") {
12732
- resolve(data.payload);
12733
- }
12734
- if (data.type === "response-error") {
12735
- cleanup();
12736
- reject(deserializeError(data));
12737
- }
12738
- if (data.type === "response-on-callback-request") {
12739
- Promise.resolve().then(async () => {
12740
- if (data.payload.callbackType === "audio-codec") {
12741
- await params.onAudioCodec?.(data.payload.value);
12742
- return { payloadType: "void" };
12743
- }
12744
- if (data.payload.callbackType === "container") {
12745
- await params.onContainer?.(data.payload.value);
12746
- return { payloadType: "void" };
12747
- }
12748
- if (data.payload.callbackType === "dimensions") {
12749
- await params.onDimensions?.(data.payload.value);
12750
- return { payloadType: "void" };
12751
- }
12752
- if (data.payload.callbackType === "unrotated-dimensions") {
12753
- await params.onUnrotatedDimensions?.(data.payload.value);
12754
- return { payloadType: "void" };
12755
- }
12756
- if (data.payload.callbackType === "video-codec") {
12757
- await params.onVideoCodec?.(data.payload.value);
12758
- return { payloadType: "void" };
12759
- }
12760
- if (data.payload.callbackType === "tracks") {
12761
- await params.onTracks?.(data.payload.value);
12762
- return { payloadType: "void" };
12763
- }
12764
- if (data.payload.callbackType === "rotation") {
12765
- await params.onRotation?.(data.payload.value);
12766
- return { payloadType: "void" };
12767
- }
12768
- if (data.payload.callbackType === "sample-rate") {
12769
- await params.onSampleRate?.(data.payload.value);
12770
- return { payloadType: "void" };
12771
- }
12772
- if (data.payload.callbackType === "slow-audio-bitrate") {
12773
- await params.onSlowAudioBitrate?.(data.payload.value);
12774
- return { payloadType: "void" };
12775
- }
12776
- if (data.payload.callbackType === "slow-duration-in-seconds") {
12777
- await params.onSlowDurationInSeconds?.(data.payload.value);
12778
- return { payloadType: "void" };
12779
- }
12780
- if (data.payload.callbackType === "slow-fps") {
12781
- await params.onSlowFps?.(data.payload.value);
12782
- return { payloadType: "void" };
12783
- }
12784
- if (data.payload.callbackType === "slow-keyframes") {
12785
- await params.onSlowKeyframes?.(data.payload.value);
12786
- return { payloadType: "void" };
12787
- }
12788
- if (data.payload.callbackType === "slow-number-of-frames") {
12789
- await params.onSlowNumberOfFrames?.(data.payload.value);
12790
- return { payloadType: "void" };
12791
- }
12792
- if (data.payload.callbackType === "slow-video-bitrate") {
12793
- await params.onSlowVideoBitrate?.(data.payload.value);
12794
- return { payloadType: "void" };
12795
- }
12796
- if (data.payload.callbackType === "structure") {
12797
- await params.onStructure?.(data.payload.value);
12798
- return { payloadType: "void" };
12799
- }
12800
- if (data.payload.callbackType === "fps") {
12801
- await params.onFps?.(data.payload.value);
12802
- return { payloadType: "void" };
12803
- }
12804
- if (data.payload.callbackType === "images") {
12805
- await params.onImages?.(data.payload.value);
12806
- return { payloadType: "void" };
12807
- }
12808
- if (data.payload.callbackType === "internal-stats") {
12809
- await params.onInternalStats?.(data.payload.value);
12810
- return { payloadType: "void" };
12811
- }
12812
- if (data.payload.callbackType === "is-hdr") {
12813
- await params.onIsHdr?.(data.payload.value);
12814
- return { payloadType: "void" };
12815
- }
12816
- if (data.payload.callbackType === "keyframes") {
12817
- await params.onKeyframes?.(data.payload.value);
12818
- return { payloadType: "void" };
12819
- }
12820
- if (data.payload.callbackType === "location") {
12821
- await params.onLocation?.(data.payload.value);
12822
- return { payloadType: "void" };
12823
- }
12824
- if (data.payload.callbackType === "m3u-streams") {
12825
- await params.onM3uStreams?.(data.payload.value);
12826
- return { payloadType: "void" };
12827
- }
12828
- if (data.payload.callbackType === "metadata") {
12829
- await params.onMetadata?.(data.payload.value);
12830
- return { payloadType: "void" };
12831
- }
12832
- if (data.payload.callbackType === "mime-type") {
12833
- await params.onMimeType?.(data.payload.value);
12834
- return { payloadType: "void" };
12835
- }
12836
- if (data.payload.callbackType === "name") {
12837
- await params.onName?.(data.payload.value);
12838
- return { payloadType: "void" };
12839
- }
12840
- if (data.payload.callbackType === "number-of-audio-channels") {
12841
- await params.onNumberOfAudioChannels?.(data.payload.value);
12842
- return { payloadType: "void" };
12843
- }
12844
- if (data.payload.callbackType === "size") {
12845
- await params.onSize?.(data.payload.value);
12846
- return { payloadType: "void" };
12847
- }
12848
- if (data.payload.callbackType === "duration-in-seconds") {
12849
- await params.onDurationInSeconds?.(data.payload.value);
12850
- return { payloadType: "void" };
12851
- }
12852
- if (data.payload.callbackType === "parse-progress") {
12853
- await params.onParseProgress?.(data.payload.value);
12854
- return { payloadType: "void" };
12855
- }
12856
- if (data.payload.callbackType === "m3u-stream-selection") {
12857
- const selection = await params.selectM3uStream(data.payload.value);
12858
- return { payloadType: "m3u-stream-selection", value: selection };
12859
- }
12860
- if (data.payload.callbackType === "m3u-associated-playlists-selection") {
12861
- const selection = await params.selectM3uAssociatedPlaylists(data.payload.value);
12862
- return {
12863
- payloadType: "m3u-associated-playlists-selection",
12864
- value: selection
12865
- };
12866
- }
12867
- if (data.payload.callbackType === "on-audio-track") {
12868
- const possibleCallback = await params.onAudioTrack?.(data.payload.value);
12869
- if (possibleCallback) {
12870
- callbacks[data.payload.value.track.trackId] = possibleCallback;
12871
- }
12872
- return {
12873
- payloadType: "on-audio-track-response",
12874
- registeredCallback: Boolean(possibleCallback)
12875
- };
12876
- }
12877
- if (data.payload.callbackType === "on-video-track") {
12878
- const possibleCallback = await params.onVideoTrack?.(data.payload.value);
12879
- if (possibleCallback) {
12880
- callbacks[data.payload.value.track.trackId] = possibleCallback;
12881
- }
12882
- return {
12883
- payloadType: "on-video-track-response",
12884
- registeredCallback: Boolean(possibleCallback)
12885
- };
12886
- }
12887
- if (data.payload.callbackType === "on-audio-video-sample") {
12888
- const callback = callbacks[data.payload.trackId];
12889
- if (!callback) {
12890
- throw new Error(`No callback registered for track ${data.payload.trackId}`);
12891
- }
12892
- await callback(data.payload.value);
12893
- return { payloadType: "void" };
12894
- }
12895
- throw new Error(`Unknown callback type: ${data.payload}`);
12896
- }).then((payload) => {
12897
- post(worker, {
12898
- type: "acknowledge-callback",
12899
- nonce: data.nonce,
12900
- ...payload
12901
- });
12902
- }).catch((err) => {
12903
- reject(err);
12904
- post(worker, {
12905
- type: "signal-error-in-callback",
12906
- nonce: data.nonce
12907
- });
12908
- });
12909
- }
12910
- }
12911
- worker.addEventListener("message", onMessage);
12912
- controller?.addEventListener("abort", onAbort);
12913
- controller?.addEventListener("resume", onResume);
12914
- controller?.addEventListener("pause", onPause);
12915
- function cleanup() {
12916
- worker.removeEventListener("message", onMessage);
12917
- controller?.removeEventListener("abort", onAbort);
12918
- controller?.removeEventListener("resume", onResume);
12919
- controller?.removeEventListener("pause", onPause);
12920
- worker.terminate();
12921
- }
12922
- const val = await promise;
12923
- cleanup();
12924
- return val;
12925
- };
12926
-
12927
- // src/parse-media-on-server-worker.ts
12928
- var parseMediaOnServerWorker = (params) => {
12929
- return parseMediaOnWorkerImplementation(params, new URL("./worker-server-entry", import.meta.url), "parseMediaOnServerWorker");
12930
- };
12931
- // src/parse-media-on-web-worker.ts
12932
- var parseMediaOnWebWorker = (params) => {
12933
- return parseMediaOnWorkerImplementation(params, new URL("./worker-web-entry", import.meta.url), "parseMediaOnWebWorker");
12934
- };
12935
12595
  // src/download-and-parse-media.ts
12936
12596
  var downloadAndParseMedia = async (options) => {
12937
12597
  const logLevel = options.logLevel ?? "info";
@@ -13001,7 +12661,7 @@ var downloadAndParseMedia = async (options) => {
13001
12661
  return returnValue;
13002
12662
  };
13003
12663
  // src/version.ts
13004
- var VERSION = "4.0.272";
12664
+ var VERSION = "4.0.274";
13005
12665
 
13006
12666
  // src/index.ts
13007
12667
  var MediaParserInternals = {
@@ -13020,8 +12680,6 @@ var MediaParserInternals = {
13020
12680
  internalParseMedia
13021
12681
  };
13022
12682
  export {
13023
- parseMediaOnWebWorker,
13024
- parseMediaOnServerWorker,
13025
12683
  parseMedia,
13026
12684
  mediaParserController,
13027
12685
  hasBeenAborted,
@@ -2905,6 +2905,7 @@ var makeBaseMediaTrack = (trakBox) => {
2905
2905
  }
2906
2906
  const privateData = getVideoPrivateData(trakBox);
2907
2907
  const track = {
2908
+ m3uStreamFormat: null,
2908
2909
  type: "video",
2909
2910
  trackId: tkhdBox.trackId,
2910
2911
  description: videoDescriptors ?? undefined,
@@ -3053,6 +3054,7 @@ var makeAviVideoTrack = ({
3053
3054
  displayAspectHeight: strf.height,
3054
3055
  timescale: MEDIA_PARSER_RIFF_TIMESCALE,
3055
3056
  description: undefined,
3057
+ m3uStreamFormat: null,
3056
3058
  trackId: index,
3057
3059
  color: {
3058
3060
  fullRange: null,
@@ -3676,6 +3678,7 @@ var getTrack = ({
3676
3678
  return null;
3677
3679
  }
3678
3680
  return {
3681
+ m3uStreamFormat: null,
3679
3682
  type: "video",
3680
3683
  trackId,
3681
3684
  codec: codecString,
@@ -9600,7 +9603,10 @@ var iteratorOverSegmentFiles = async ({
9600
9603
  onVideoTrack: onVideoTrack === null ? null : async ({ track }) => {
9601
9604
  const callbackOrFalse = m3uState2.hasEmittedVideoTrack(playlistUrl);
9602
9605
  if (callbackOrFalse === false) {
9603
- const callback = await onVideoTrack(track);
9606
+ const callback = await onVideoTrack({
9607
+ ...track,
9608
+ m3uStreamFormat: chunk.isHeader || mp4HeaderSegment ? "mp4" : "ts"
9609
+ });
9604
9610
  if (!callback) {
9605
9611
  m3uState2.setHasEmittedVideoTrack(playlistUrl, null);
9606
9612
  return null;
@@ -11189,6 +11195,7 @@ var handleAvcPacket = async ({
11189
11195
  const dimensions = getDimensionsFromSps(spsAndPps.sps.spsData);
11190
11196
  const sampleAspectRatio = getSampleAspectRatioFromSps(spsAndPps.sps.spsData);
11191
11197
  const track = {
11198
+ m3uStreamFormat: null,
11192
11199
  rotation: 0,
11193
11200
  trackId: programId,
11194
11201
  type: "video",
@@ -2840,6 +2840,7 @@ var makeBaseMediaTrack = (trakBox) => {
2840
2840
  }
2841
2841
  const privateData = getVideoPrivateData(trakBox);
2842
2842
  const track = {
2843
+ m3uStreamFormat: null,
2843
2844
  type: "video",
2844
2845
  trackId: tkhdBox.trackId,
2845
2846
  description: videoDescriptors ?? undefined,
@@ -2988,6 +2989,7 @@ var makeAviVideoTrack = ({
2988
2989
  displayAspectHeight: strf.height,
2989
2990
  timescale: MEDIA_PARSER_RIFF_TIMESCALE,
2990
2991
  description: undefined,
2992
+ m3uStreamFormat: null,
2991
2993
  trackId: index,
2992
2994
  color: {
2993
2995
  fullRange: null,
@@ -3611,6 +3613,7 @@ var getTrack = ({
3611
3613
  return null;
3612
3614
  }
3613
3615
  return {
3616
+ m3uStreamFormat: null,
3614
3617
  type: "video",
3615
3618
  trackId,
3616
3619
  codec: codecString,
@@ -9513,7 +9516,10 @@ var iteratorOverSegmentFiles = async ({
9513
9516
  onVideoTrack: onVideoTrack === null ? null : async ({ track }) => {
9514
9517
  const callbackOrFalse = m3uState2.hasEmittedVideoTrack(playlistUrl);
9515
9518
  if (callbackOrFalse === false) {
9516
- const callback = await onVideoTrack(track);
9519
+ const callback = await onVideoTrack({
9520
+ ...track,
9521
+ m3uStreamFormat: chunk.isHeader || mp4HeaderSegment ? "mp4" : "ts"
9522
+ });
9517
9523
  if (!callback) {
9518
9524
  m3uState2.setHasEmittedVideoTrack(playlistUrl, null);
9519
9525
  return null;
@@ -11102,6 +11108,7 @@ var handleAvcPacket = async ({
11102
11108
  const dimensions = getDimensionsFromSps(spsAndPps.sps.spsData);
11103
11109
  const sampleAspectRatio = getSampleAspectRatioFromSps(spsAndPps.sps.spsData);
11104
11110
  const track = {
11111
+ m3uStreamFormat: null,
11105
11112
  rotation: 0,
11106
11113
  trackId: programId,
11107
11114
  type: "video",
@@ -138,7 +138,7 @@ var deserializeError = (error) => {
138
138
  }
139
139
  };
140
140
 
141
- // src/worker.ts
141
+ // src/parse-media-on-worker-entry.ts
142
142
  var convertToWorkerPayload = (payload) => {
143
143
  const {
144
144
  onAudioCodec,
@@ -174,6 +174,7 @@ var convertToWorkerPayload = (payload) => {
174
174
  onVideoTrack,
175
175
  selectM3uStream,
176
176
  selectM3uAssociatedPlaylists,
177
+ src,
177
178
  ...others
178
179
  } = payload;
179
180
  return {
@@ -211,20 +212,21 @@ var convertToWorkerPayload = (payload) => {
211
212
  postM3uStreamSelection: Boolean(selectM3uStream),
212
213
  postM3uAssociatedPlaylistsSelection: Boolean(selectM3uAssociatedPlaylists),
213
214
  postOnAudioTrack: Boolean(onAudioTrack),
214
- postOnVideoTrack: Boolean(onVideoTrack)
215
+ postOnVideoTrack: Boolean(onVideoTrack),
216
+ src
215
217
  };
216
218
  };
217
219
  var post = (worker, payload) => {
218
220
  worker.postMessage(payload);
219
221
  };
220
- var parseMediaOnWorker = async ({
221
- controller,
222
- ...params
223
- }) => {
222
+ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params }, workerUrlEntry, apiName) => {
224
223
  if (typeof Worker === "undefined") {
225
224
  throw new Error('"Worker" is not available. Cannot call workerClient()');
226
225
  }
227
- const worker = new Worker(new URL("./worker-server", import.meta.url));
226
+ if (reader) {
227
+ throw new Error(`\`reader\` should not be provided to \`${apiName}\`. If you want to use it in the browser, use parseMediaOnWorker(). If you also want to read files from the file system, use parseMediaOnServerWorker().`);
228
+ }
229
+ const worker = new Worker(workerUrlEntry);
228
230
  post(worker, convertToWorkerPayload(params));
229
231
  const { promise, resolve, reject } = Promise.withResolvers();
230
232
  const onAbort = () => {
@@ -434,6 +436,16 @@ var parseMediaOnWorker = async ({
434
436
  cleanup();
435
437
  return val;
436
438
  };
439
+
440
+ // src/parse-media-on-server-worker.ts
441
+ var parseMediaOnServerWorker = (params) => {
442
+ return parseMediaOnWorkerImplementation(params, new URL("./worker-server-entry", import.meta.url), "parseMediaOnServerWorker");
443
+ };
444
+ // src/parse-media-on-web-worker.ts
445
+ var parseMediaOnWebWorker = (params) => {
446
+ return parseMediaOnWorkerImplementation(params, new URL("./worker-web-entry", import.meta.url), "parseMediaOnWebWorker");
447
+ };
437
448
  export {
438
- parseMediaOnWorker
449
+ parseMediaOnWebWorker,
450
+ parseMediaOnServerWorker
439
451
  };
@@ -22,6 +22,7 @@ export type VideoTrack = {
22
22
  timescale: number;
23
23
  codec: string;
24
24
  codecWithoutConfig: MediaParserVideoCodec;
25
+ m3uStreamFormat: 'ts' | 'mp4' | null;
25
26
  sampleAspectRatio: SampleAspectRatio;
26
27
  width: number;
27
28
  height: number;
package/dist/index.d.ts CHANGED
@@ -6,8 +6,6 @@ export type { SamplePosition } from './get-sample-positions';
6
6
  export type { AudioTrack, MediaParserAudioCodec, MediaParserVideoCodec, OtherTrack, Track, VideoTrack, VideoTrackColorParams, } from './get-tracks';
7
7
  export type { MediaParserMetadataEntry } from './metadata/get-metadata';
8
8
  export type { MediaParserKeyframe, ParseMediaSrc } from './options';
9
- export { parseMediaOnServerWorker } from './parse-media-on-server-worker';
10
- export { parseMediaOnWebWorker } from './parse-media-on-web-worker';
11
9
  export type { MediaParserEmbeddedImage } from './state/images';
12
10
  export { downloadAndParseMedia } from './download-and-parse-media';
13
11
  export type { MediaParserContainer, MediaParserTracks, Options, ParseMediaCallbacks, ParseMediaFields, ParseMediaOnProgress, ParseMediaOptions, ParseMediaProgress, ParseMediaResult, } from './options';
package/dist/index.js CHANGED
@@ -11,8 +11,6 @@ import { internalParseMedia } from './internal-parse-media';
11
11
  import { Log } from './log';
12
12
  import { makeParserState } from './state/parser-state';
13
13
  export { hasBeenAborted, IsAGifError, IsAnImageError, IsAnUnsupportedFileTypeError, IsAPdfError, MediaParserAbortError, } from './errors';
14
- export { parseMediaOnServerWorker } from './parse-media-on-server-worker';
15
- export { parseMediaOnWebWorker } from './parse-media-on-web-worker';
16
14
  export { downloadAndParseMedia } from './download-and-parse-media';
17
15
  export { parseMedia } from './parse-media';
18
16
  export const MediaParserInternals = {
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "4.0.272";
1
+ export declare const VERSION = "4.0.274";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // Automatically generated on publish
2
- export const VERSION = '4.0.272';
2
+ export const VERSION = '4.0.274';
package/dist/worker.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- import type { ParseMedia } from './options';
2
- export declare const parseMediaOnWorker: ParseMedia;
1
+ export type { ParseMediaOnWorker, ParseMediaOnWorkerOptions } from './options';
2
+ export { parseMediaOnServerWorker } from './parse-media-on-server-worker';
3
+ export { parseMediaOnWebWorker } from './parse-media-on-web-worker';