@remotion/media-parser 4.0.241 → 4.0.243

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 (109) hide show
  1. package/dist/add-avc-profile-to-track.js +2 -2
  2. package/dist/boxes/avc/codec-private.js +2 -2
  3. package/dist/boxes/avc/create-sps-pps-data.d.ts +2 -0
  4. package/dist/boxes/avc/create-sps-pps-data.js +28 -0
  5. package/dist/boxes/iso-base-media/get-keyframes.d.ts +3 -0
  6. package/dist/boxes/iso-base-media/get-keyframes.js +30 -0
  7. package/dist/boxes/iso-base-media/mdat/mdat.d.ts +3 -3
  8. package/dist/boxes/iso-base-media/mdat/mdat.js +9 -5
  9. package/dist/boxes/iso-base-media/moov/moov.d.ts +3 -3
  10. package/dist/boxes/iso-base-media/moov/moov.js +5 -4
  11. package/dist/boxes/iso-base-media/process-box.d.ts +9 -9
  12. package/dist/boxes/iso-base-media/process-box.js +48 -56
  13. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +3 -3
  14. package/dist/boxes/iso-base-media/stsd/mebx.js +5 -4
  15. package/dist/boxes/iso-base-media/stsd/samples.d.ts +5 -5
  16. package/dist/boxes/iso-base-media/stsd/samples.js +19 -16
  17. package/dist/boxes/iso-base-media/stsd/stsd.d.ts +3 -3
  18. package/dist/boxes/iso-base-media/stsd/stsd.js +2 -2
  19. package/dist/boxes/iso-base-media/trak/trak.d.ts +3 -3
  20. package/dist/boxes/iso-base-media/trak/trak.js +7 -6
  21. package/dist/boxes/riff/expect-riff-box.d.ts +3 -3
  22. package/dist/boxes/riff/expect-riff-box.js +5 -5
  23. package/dist/boxes/riff/get-tracks-from-avi.js +1 -1
  24. package/dist/boxes/riff/parse-box.d.ts +7 -7
  25. package/dist/boxes/riff/parse-box.js +29 -24
  26. package/dist/boxes/riff/parse-list-box.d.ts +3 -3
  27. package/dist/boxes/riff/parse-list-box.js +2 -2
  28. package/dist/boxes/riff/parse-movi.d.ts +5 -5
  29. package/dist/boxes/riff/parse-movi.js +35 -20
  30. package/dist/boxes/riff/parse-riff-box.d.ts +3 -3
  31. package/dist/boxes/riff/parse-riff-box.js +2 -2
  32. package/dist/boxes/transport-stream/get-tracks.js +1 -1
  33. package/dist/boxes/transport-stream/handle-aac-packet.d.ts +4 -3
  34. package/dist/boxes/transport-stream/handle-aac-packet.js +6 -4
  35. package/dist/boxes/transport-stream/handle-avc-packet.d.ts +4 -3
  36. package/dist/boxes/transport-stream/handle-avc-packet.js +8 -6
  37. package/dist/boxes/transport-stream/parse-packet.d.ts +3 -3
  38. package/dist/boxes/transport-stream/parse-packet.js +2 -2
  39. package/dist/boxes/transport-stream/parse-stream-packet.d.ts +3 -3
  40. package/dist/boxes/transport-stream/parse-stream-packet.js +14 -7
  41. package/dist/boxes/transport-stream/parse-transport-stream.d.ts +5 -6
  42. package/dist/boxes/transport-stream/parse-transport-stream.js +10 -9
  43. package/dist/boxes/transport-stream/process-stream-buffers.d.ts +6 -5
  44. package/dist/boxes/transport-stream/process-stream-buffers.js +18 -8
  45. package/dist/boxes/webm/ebml.d.ts +1 -1
  46. package/dist/boxes/webm/get-sample-from-block.d.ts +2 -2
  47. package/dist/boxes/webm/get-sample-from-block.js +8 -4
  48. package/dist/boxes/webm/parse-ebml.d.ts +4 -4
  49. package/dist/boxes/webm/parse-ebml.js +18 -18
  50. package/dist/boxes/webm/parse-webm-header.d.ts +5 -5
  51. package/dist/boxes/webm/parse-webm-header.js +6 -5
  52. package/dist/boxes/webm/segments/parse-children.d.ts +5 -5
  53. package/dist/boxes/webm/segments/parse-children.js +12 -13
  54. package/dist/boxes/webm/segments.d.ts +3 -3
  55. package/dist/boxes/webm/segments.js +13 -13
  56. package/dist/convert-audio-or-video-sample.js +5 -2
  57. package/dist/create/matroska/create-matroska-media.js +2 -0
  58. package/dist/create/progress-tracker.js +2 -2
  59. package/dist/emit-available-info.d.ts +4 -5
  60. package/dist/emit-available-info.js +171 -57
  61. package/dist/esm/index.mjs +899 -501
  62. package/dist/file-types/detect-file-type.js +4 -2
  63. package/dist/get-duration.d.ts +1 -0
  64. package/dist/get-duration.js +14 -1
  65. package/dist/get-fields-from-callbacks.js +5 -0
  66. package/dist/get-fps.d.ts +1 -0
  67. package/dist/get-fps.js +17 -12
  68. package/dist/get-keyframes.d.ts +5 -0
  69. package/dist/get-keyframes.js +20 -0
  70. package/dist/get-tracks.d.ts +7 -1
  71. package/dist/get-tracks.js +15 -10
  72. package/dist/has-all-info.d.ts +2 -5
  73. package/dist/has-all-info.js +23 -4
  74. package/dist/index.d.ts +2 -1
  75. package/dist/may-skip-video-data/may-skip-video-data.d.ts +4 -0
  76. package/dist/may-skip-video-data/may-skip-video-data.js +14 -0
  77. package/dist/may-skip-video-data/need-samples-for-fields.d.ts +5 -0
  78. package/dist/may-skip-video-data/need-samples-for-fields.js +33 -0
  79. package/dist/options.d.ts +32 -0
  80. package/dist/parse-media.js +12 -40
  81. package/dist/parse-result.d.ts +2 -4
  82. package/dist/parse-video.d.ts +5 -5
  83. package/dist/parse-video.js +24 -10
  84. package/dist/register-track.d.ts +5 -5
  85. package/dist/register-track.js +12 -12
  86. package/dist/state/can-skip-tracks.js +5 -0
  87. package/dist/state/emitted-fields.d.ts +2 -0
  88. package/dist/state/emitted-fields.js +31 -0
  89. package/dist/state/has-tracks-section.d.ts +1 -0
  90. package/dist/state/keyframes.d.ts +6 -0
  91. package/dist/state/keyframes.js +15 -0
  92. package/dist/state/parser-state.d.ts +60 -29
  93. package/dist/state/parser-state.js +32 -150
  94. package/dist/state/riff.d.ts +10 -0
  95. package/dist/state/riff.js +32 -0
  96. package/dist/state/sample-callbacks.d.ts +31 -0
  97. package/dist/state/sample-callbacks.js +101 -0
  98. package/dist/state/slow-duration-fps.d.ts +8 -0
  99. package/dist/state/slow-duration-fps.js +36 -0
  100. package/dist/state/structure.d.ts +7 -0
  101. package/dist/state/structure.js +21 -0
  102. package/dist/state/tracks-and-samples.d.ts +0 -0
  103. package/dist/state/tracks-and-samples.js +1 -0
  104. package/dist/state/webm.d.ts +11 -0
  105. package/dist/state/webm.js +67 -0
  106. package/dist/version.d.ts +1 -1
  107. package/dist/version.js +1 -1
  108. package/dist/webcodec-sample-types.d.ts +2 -0
  109. package/package.json +3 -3
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sampleCallback = void 0;
4
+ const need_samples_for_fields_1 = require("../may-skip-video-data/need-samples-for-fields");
5
+ const can_skip_tracks_1 = require("./can-skip-tracks");
6
+ const has_tracks_section_1 = require("./has-tracks-section");
7
+ const sampleCallback = ({ signal, hasAudioTrackHandlers, hasVideoTrackHandlers, fields, keyframes, emittedFields, slowDurationAndFpsState, }) => {
8
+ const videoSampleCallbacks = {};
9
+ const audioSampleCallbacks = {};
10
+ const queuedAudioSamples = {};
11
+ const queuedVideoSamples = {};
12
+ const canSkipTracksState = (0, can_skip_tracks_1.makeCanSkipTracksState)({
13
+ hasAudioTrackHandlers,
14
+ fields,
15
+ hasVideoTrackHandlers,
16
+ });
17
+ const tracksState = (0, has_tracks_section_1.makeTracksSectionState)(canSkipTracksState);
18
+ const samplesForTrack = {};
19
+ return {
20
+ registerVideoSampleCallback: async (id, callback) => {
21
+ var _a;
22
+ if (callback === null) {
23
+ delete videoSampleCallbacks[id];
24
+ return;
25
+ }
26
+ videoSampleCallbacks[id] = callback;
27
+ for (const queued of (_a = queuedVideoSamples[id]) !== null && _a !== void 0 ? _a : []) {
28
+ await callback(queued);
29
+ }
30
+ queuedVideoSamples[id] = [];
31
+ },
32
+ onAudioSample: async (trackId, audioSample) => {
33
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
34
+ throw new Error('Aborted');
35
+ }
36
+ if (typeof samplesForTrack[trackId] === 'undefined') {
37
+ samplesForTrack[trackId] = 0;
38
+ }
39
+ const callback = audioSampleCallbacks[trackId];
40
+ if (audioSample.data.length > 0) {
41
+ samplesForTrack[trackId]++;
42
+ // If we emit samples with data length 0, Chrome will fail
43
+ if (callback) {
44
+ await callback(audioSample);
45
+ }
46
+ }
47
+ },
48
+ getSamplesForTrack: (trackId) => {
49
+ var _a;
50
+ return (_a = samplesForTrack[trackId]) !== null && _a !== void 0 ? _a : 0;
51
+ },
52
+ onVideoSample: async (trackId, videoSample) => {
53
+ if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
54
+ throw new Error('Aborted');
55
+ }
56
+ if (typeof samplesForTrack[trackId] === 'undefined') {
57
+ samplesForTrack[trackId] = 0;
58
+ }
59
+ if (videoSample.data.length > 0) {
60
+ samplesForTrack[trackId]++;
61
+ const callback = videoSampleCallbacks[trackId];
62
+ // If we emit samples with data 0, Chrome will fail
63
+ if (callback) {
64
+ await callback(videoSample);
65
+ }
66
+ }
67
+ if ((0, need_samples_for_fields_1.needsToIterateOverSamples)({
68
+ fields,
69
+ emittedFields,
70
+ })) {
71
+ if (fields.slowKeyframes && videoSample.type === 'key') {
72
+ keyframes.addKeyframe({
73
+ trackId,
74
+ decodingTimeInSeconds: videoSample.dts / videoSample.timescale,
75
+ positionInBytes: videoSample.offset,
76
+ presentationTimeInSeconds: videoSample.cts / videoSample.timescale,
77
+ sizeInBytes: videoSample.data.length,
78
+ });
79
+ }
80
+ slowDurationAndFpsState.addSample(videoSample);
81
+ }
82
+ },
83
+ canSkipTracksState,
84
+ registerAudioSampleCallback: async (id, callback) => {
85
+ var _a;
86
+ if (callback === null) {
87
+ delete audioSampleCallbacks[id];
88
+ return;
89
+ }
90
+ audioSampleCallbacks[id] = callback;
91
+ for (const queued of (_a = queuedAudioSamples[id]) !== null && _a !== void 0 ? _a : []) {
92
+ await callback(queued);
93
+ }
94
+ queuedAudioSamples[id] = [];
95
+ },
96
+ tracks: tracksState,
97
+ audioSampleCallbacks,
98
+ videoSampleCallbacks,
99
+ };
100
+ };
101
+ exports.sampleCallback = sampleCallback;
@@ -0,0 +1,8 @@
1
+ import type { AudioOrVideoSample } from '../webcodec-sample-types';
2
+ export declare const slowDurationAndFpsState: () => {
3
+ addSample: (videoSample: AudioOrVideoSample) => void;
4
+ getSlowDurationInSeconds: () => number;
5
+ getFps: () => number;
6
+ getSlowNumberOfFrames: () => number;
7
+ };
8
+ export type SlowDurationAndFpsState = ReturnType<typeof slowDurationAndFpsState>;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.slowDurationAndFpsState = void 0;
4
+ const slowDurationAndFpsState = () => {
5
+ let smallestSample;
6
+ let largestSample;
7
+ let samples = 0;
8
+ const getSlowDurationInSeconds = () => {
9
+ if (smallestSample !== undefined && largestSample !== undefined) {
10
+ const startingTimestampDifference = largestSample - smallestSample;
11
+ const timeBetweenSamples = startingTimestampDifference / (samples - 1);
12
+ return timeBetweenSamples * samples;
13
+ }
14
+ throw new Error('No samples');
15
+ };
16
+ return {
17
+ addSample: (videoSample) => {
18
+ samples++;
19
+ const presentationTimeInSeconds = videoSample.cts / videoSample.timescale;
20
+ if (largestSample === undefined ||
21
+ presentationTimeInSeconds > largestSample) {
22
+ largestSample = presentationTimeInSeconds;
23
+ }
24
+ if (smallestSample === undefined ||
25
+ presentationTimeInSeconds < smallestSample) {
26
+ smallestSample = presentationTimeInSeconds;
27
+ }
28
+ },
29
+ getSlowDurationInSeconds,
30
+ getFps: () => {
31
+ return samples / getSlowDurationInSeconds();
32
+ },
33
+ getSlowNumberOfFrames: () => samples,
34
+ };
35
+ };
36
+ exports.slowDurationAndFpsState = slowDurationAndFpsState;
@@ -0,0 +1,7 @@
1
+ import type { Structure } from '../parse-result';
2
+ export declare const structureState: () => {
3
+ getStructureOrNull: () => Structure | null;
4
+ getStructure: () => Structure;
5
+ setStructure: (value: Structure) => void;
6
+ };
7
+ export type StructureState = ReturnType<typeof structureState>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.structureState = void 0;
4
+ const structureState = () => {
5
+ let structure = null;
6
+ return {
7
+ getStructureOrNull: () => {
8
+ return structure;
9
+ },
10
+ getStructure: () => {
11
+ if (structure === null) {
12
+ throw new Error('Expected structure');
13
+ }
14
+ return structure;
15
+ },
16
+ setStructure: (value) => {
17
+ structure = value;
18
+ },
19
+ };
20
+ };
21
+ exports.structureState = structureState;
File without changes
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,11 @@
1
+ import type { OnTrackEntrySegment } from '../boxes/webm/segments';
2
+ import type { TrackInfo } from '../boxes/webm/segments/track-entry';
3
+ export declare const webmState: () => {
4
+ onTrackEntrySegment: OnTrackEntrySegment;
5
+ getTrackInfoByNumber: (id: number) => TrackInfo;
6
+ setTimestampOffset: (byteOffset: number, timestamp: number) => void;
7
+ getTimestampOffsetForByteOffset: (byteOffset: number) => number | undefined;
8
+ timescale: null;
9
+ getTimescale: () => number;
10
+ setTimescale: (newTimescale: number) => void;
11
+ };
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.webmState = void 0;
4
+ const traversal_1 = require("../boxes/webm/traversal");
5
+ const webmState = () => {
6
+ const trackEntries = {};
7
+ const onTrackEntrySegment = (trackEntry) => {
8
+ var _a;
9
+ const trackId = (0, traversal_1.getTrackId)(trackEntry);
10
+ if (!trackId) {
11
+ throw new Error('Expected track id');
12
+ }
13
+ if (trackEntries[trackId]) {
14
+ return;
15
+ }
16
+ const codec = (0, traversal_1.getTrackCodec)(trackEntry);
17
+ if (!codec) {
18
+ throw new Error('Expected codec');
19
+ }
20
+ const trackTimescale = (0, traversal_1.getTrackTimestampScale)(trackEntry);
21
+ trackEntries[trackId] = {
22
+ codec: codec.value,
23
+ trackTimescale: (_a = trackTimescale === null || trackTimescale === void 0 ? void 0 : trackTimescale.value) !== null && _a !== void 0 ? _a : null,
24
+ };
25
+ };
26
+ const timestampMap = new Map();
27
+ const getTimestampOffsetForByteOffset = (byteOffset) => {
28
+ const entries = Array.from(timestampMap.entries());
29
+ const sortedByByteOffset = entries
30
+ .sort((a, b) => {
31
+ return a[0] - b[0];
32
+ })
33
+ .reverse();
34
+ for (const [offset, timestamp] of sortedByByteOffset) {
35
+ if (offset >= byteOffset) {
36
+ continue;
37
+ }
38
+ return timestamp;
39
+ }
40
+ return timestampMap.get(byteOffset);
41
+ };
42
+ const setTimestampOffset = (byteOffset, timestamp) => {
43
+ timestampMap.set(byteOffset, timestamp);
44
+ };
45
+ let timescale = null;
46
+ const setTimescale = (newTimescale) => {
47
+ timescale = newTimescale;
48
+ };
49
+ const getTimescale = () => {
50
+ // https://www.matroska.org/technical/notes.html
51
+ // When using the default value of TimestampScale of “1,000,000”, one Segment Tick represents one millisecond.
52
+ if (timescale === null) {
53
+ return 1000000;
54
+ }
55
+ return timescale;
56
+ };
57
+ return {
58
+ onTrackEntrySegment,
59
+ getTrackInfoByNumber: (id) => trackEntries[id],
60
+ setTimestampOffset,
61
+ getTimestampOffsetForByteOffset,
62
+ timescale,
63
+ getTimescale,
64
+ setTimescale,
65
+ };
66
+ };
67
+ exports.webmState = webmState;
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "4.0.241";
1
+ export declare const VERSION = "4.0.243";
package/dist/version.js CHANGED
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  // Automatically generated on publish
5
- exports.VERSION = '4.0.241';
5
+ exports.VERSION = '4.0.243';
@@ -18,4 +18,6 @@ export type AudioOrVideoSample = {
18
18
  type: 'key' | 'delta';
19
19
  cts: number;
20
20
  dts: number;
21
+ offset: number;
22
+ timescale: number;
21
23
  };
package/package.json CHANGED
@@ -3,14 +3,14 @@
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.241",
6
+ "version": "4.0.243",
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.14.0",
12
- "@remotion/example-videos": "4.0.241",
13
- "@remotion/eslint-config-internal": "4.0.241"
12
+ "@remotion/example-videos": "4.0.243",
13
+ "@remotion/eslint-config-internal": "4.0.243"
14
14
  },
15
15
  "publishConfig": {
16
16
  "access": "public"