@remotion/media-parser 4.0.229 → 4.0.231

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 (182) hide show
  1. package/dist/boxes/iso-base-media/esds/decoder-specific-config.d.ts +3 -2
  2. package/dist/boxes/iso-base-media/esds/decoder-specific-config.js +7 -8
  3. package/dist/boxes/iso-base-media/esds/esds-descriptors.d.ts +4 -2
  4. package/dist/boxes/iso-base-media/esds/esds-descriptors.js +5 -4
  5. package/dist/boxes/iso-base-media/esds/esds.d.ts +3 -1
  6. package/dist/boxes/iso-base-media/esds/esds.js +2 -2
  7. package/dist/boxes/iso-base-media/make-track.js +2 -1
  8. package/dist/boxes/iso-base-media/mdat/mdat.js +13 -7
  9. package/dist/boxes/iso-base-media/moov/moov.d.ts +3 -1
  10. package/dist/boxes/iso-base-media/moov/moov.js +2 -2
  11. package/dist/boxes/iso-base-media/mvhd.js +11 -9
  12. package/dist/boxes/iso-base-media/parse-icc-profile.d.ts +36 -0
  13. package/dist/boxes/iso-base-media/parse-icc-profile.js +115 -0
  14. package/dist/boxes/iso-base-media/process-box.d.ts +5 -4
  15. package/dist/boxes/iso-base-media/process-box.js +17 -14
  16. package/dist/boxes/iso-base-media/stsd/colr.d.ts +14 -4
  17. package/dist/boxes/iso-base-media/stsd/colr.js +13 -1
  18. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +1 -2
  19. package/dist/boxes/iso-base-media/stsd/mebx.js +2 -2
  20. package/dist/boxes/iso-base-media/stsd/samples.d.ts +5 -2
  21. package/dist/boxes/iso-base-media/stsd/samples.js +7 -6
  22. package/dist/boxes/iso-base-media/stsd/stsd.js +1 -0
  23. package/dist/boxes/iso-base-media/to-date.d.ts +1 -0
  24. package/dist/boxes/iso-base-media/to-date.js +9 -1
  25. package/dist/boxes/iso-base-media/trak/trak.d.ts +3 -1
  26. package/dist/boxes/iso-base-media/trak/trak.js +2 -2
  27. package/dist/boxes/webm/av1-codec-private.js +1 -1
  28. package/dist/boxes/webm/ebml.d.ts +1 -1
  29. package/dist/boxes/webm/get-sample-from-block.d.ts +4 -4
  30. package/dist/boxes/webm/get-sample-from-block.js +4 -2
  31. package/dist/boxes/webm/make-track.js +1 -0
  32. package/dist/boxes/webm/parse-webm-header.js +23 -4
  33. package/dist/boxes/webm/segments/parse-children.d.ts +12 -7
  34. package/dist/boxes/webm/segments/parse-children.js +67 -57
  35. package/dist/boxes/webm/segments.d.ts +8 -3
  36. package/dist/boxes/webm/segments.js +70 -39
  37. package/dist/buffer-iterator.d.ts +1 -1
  38. package/dist/buffer-iterator.js +1 -8
  39. package/dist/create/iso-base-media/codec-specific/avc1.d.ts +2 -0
  40. package/dist/create/iso-base-media/codec-specific/avc1.js +48 -0
  41. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +22 -0
  42. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +36 -0
  43. package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +2 -0
  44. package/dist/create/iso-base-media/codec-specific/mp4a.js +90 -0
  45. package/dist/create/iso-base-media/create-colr.d.ts +6 -0
  46. package/dist/create/iso-base-media/create-colr.js +26 -0
  47. package/dist/create/iso-base-media/create-ftyp.d.ts +10 -0
  48. package/dist/create/iso-base-media/create-ftyp.js +22 -0
  49. package/dist/create/iso-base-media/create-ilst.d.ts +1 -0
  50. package/dist/create/iso-base-media/create-ilst.js +14 -0
  51. package/dist/create/iso-base-media/create-iso-base-media.d.ts +2 -0
  52. package/dist/create/iso-base-media/create-iso-base-media.js +167 -0
  53. package/dist/create/iso-base-media/create-mdia.d.ts +5 -0
  54. package/dist/create/iso-base-media/create-mdia.js +18 -0
  55. package/dist/create/iso-base-media/create-moov.d.ts +5 -0
  56. package/dist/create/iso-base-media/create-moov.js +18 -0
  57. package/dist/create/iso-base-media/create-mvhd.d.ts +10 -0
  58. package/dist/create/iso-base-media/create-mvhd.js +48 -0
  59. package/dist/create/iso-base-media/create-trak.d.ts +4 -0
  60. package/dist/create/iso-base-media/create-trak.js +17 -0
  61. package/dist/create/iso-base-media/create-udta.d.ts +1 -0
  62. package/dist/create/iso-base-media/create-udta.js +14 -0
  63. package/dist/create/iso-base-media/create-url.d.ts +1 -0
  64. package/dist/create/iso-base-media/create-url.js +16 -0
  65. package/dist/create/iso-base-media/example-stts.d.ts +3 -0
  66. package/dist/create/iso-base-media/example-stts.js +2797 -0
  67. package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -0
  68. package/dist/create/iso-base-media/ilst/create-cmt.js +26 -0
  69. package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -0
  70. package/dist/create/iso-base-media/ilst/create-too.js +27 -0
  71. package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +6 -0
  72. package/dist/create/iso-base-media/mdia/create-mdhd.js +33 -0
  73. package/dist/create/iso-base-media/mp4-header.d.ts +6 -0
  74. package/dist/create/iso-base-media/mp4-header.js +47 -0
  75. package/dist/create/iso-base-media/primitives.d.ts +15 -0
  76. package/dist/create/iso-base-media/primitives.js +133 -0
  77. package/dist/create/iso-base-media/serialize-track.d.ts +9 -0
  78. package/dist/create/iso-base-media/serialize-track.js +63 -0
  79. package/dist/create/iso-base-media/trak/create-tkhd.d.ts +27 -0
  80. package/dist/create/iso-base-media/trak/create-tkhd.js +97 -0
  81. package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +4 -0
  82. package/dist/create/iso-base-media/trak/mdia/create-minf.js +19 -0
  83. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -0
  84. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +22 -0
  85. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -0
  86. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +20 -0
  87. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +6 -0
  88. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +35 -0
  89. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -0
  90. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +20 -0
  91. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +2 -0
  92. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +45 -0
  93. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +2 -0
  94. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +28 -0
  95. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +2 -0
  96. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +56 -0
  97. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +2 -0
  98. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +23 -0
  99. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +2 -0
  100. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +25 -0
  101. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +2 -0
  102. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +48 -0
  103. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -0
  104. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +20 -0
  105. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -0
  106. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +16 -0
  107. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -0
  108. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +13 -0
  109. package/dist/create/iso-base-media/udta/create-meta.d.ts +4 -0
  110. package/dist/create/iso-base-media/udta/create-meta.js +20 -0
  111. package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -0
  112. package/dist/create/iso-base-media/udta/meta/create-hdlr.js +32 -0
  113. package/dist/create/make-track-info.d.ts +20 -0
  114. package/dist/create/make-track-info.js +2 -0
  115. package/dist/create/{cluster-segment.d.ts → matroska/cluster-segment.d.ts} +1 -1
  116. package/dist/create/{cluster-segment.js → matroska/cluster-segment.js} +2 -2
  117. package/dist/create/{cluster.d.ts → matroska/cluster.d.ts} +12 -5
  118. package/dist/create/{cluster.js → matroska/cluster.js} +23 -20
  119. package/dist/create/matroska/create-matroska-media.d.ts +2 -0
  120. package/dist/create/{create-media.js → matroska/create-matroska-media.js} +49 -25
  121. package/dist/create/matroska/make-duration-with-padding.d.ts +1 -0
  122. package/dist/create/{make-duration-with-padding.js → matroska/make-duration-with-padding.js} +1 -1
  123. package/dist/create/{matroska-cues.d.ts → matroska/matroska-cues.d.ts} +1 -1
  124. package/dist/create/{matroska-cues.js → matroska/matroska-cues.js} +1 -1
  125. package/dist/create/matroska/matroska-header.d.ts +1 -0
  126. package/dist/create/{matroska-header.js → matroska/matroska-header.js} +1 -1
  127. package/dist/create/{matroska-info.d.ts → matroska/matroska-info.d.ts} +1 -1
  128. package/dist/create/{matroska-info.js → matroska/matroska-info.js} +1 -1
  129. package/dist/create/matroska/matroska-seek.d.ts +6 -0
  130. package/dist/create/{matroska-seek.js → matroska/matroska-seek.js} +1 -1
  131. package/dist/create/{matroska-segment.d.ts → matroska/matroska-segment.d.ts} +1 -1
  132. package/dist/create/{matroska-segment.js → matroska/matroska-segment.js} +1 -1
  133. package/dist/create/matroska/matroska-trackentry.d.ts +10 -0
  134. package/dist/create/{matroska-trackentry.js → matroska/matroska-trackentry.js} +9 -3
  135. package/dist/create/{create-media.d.ts → media-fn.d.ts} +17 -4
  136. package/dist/create/media-fn.js +2 -0
  137. package/dist/create/timescale.d.ts +1 -1
  138. package/dist/create/timescale.js +2 -2
  139. package/dist/emit-available-info.d.ts +1 -1
  140. package/dist/emit-available-info.js +23 -10
  141. package/dist/esm/buffer.mjs +3 -3
  142. package/dist/esm/index.mjs +2104 -735
  143. package/dist/esm/web-fs.mjs +2 -2
  144. package/dist/get-audio-codec.d.ts +2 -1
  145. package/dist/get-audio-codec.js +29 -10
  146. package/dist/get-duration.d.ts +5 -0
  147. package/dist/get-duration.js +7 -3
  148. package/dist/get-fps.d.ts +1 -0
  149. package/dist/get-fps.js +24 -13
  150. package/dist/get-sample-positions.d.ts +1 -0
  151. package/dist/get-sample-positions.js +1 -0
  152. package/dist/get-tracks.d.ts +1 -0
  153. package/dist/get-video-codec.d.ts +2 -2
  154. package/dist/get-video-codec.js +6 -6
  155. package/dist/has-all-info.d.ts +1 -1
  156. package/dist/has-all-info.js +8 -8
  157. package/dist/index.d.ts +6 -8
  158. package/dist/index.js +7 -3
  159. package/dist/options.d.ts +10 -1
  160. package/dist/parse-media.js +42 -14
  161. package/dist/parse-result.d.ts +15 -0
  162. package/dist/parse-video.d.ts +3 -1
  163. package/dist/parse-video.js +6 -14
  164. package/dist/parser-state.d.ts +3 -3
  165. package/dist/readers/reader.d.ts +2 -2
  166. package/dist/samples-from-moof.js +1 -0
  167. package/dist/version.d.ts +1 -0
  168. package/dist/version.js +5 -0
  169. package/dist/webcodec-sample-types.d.ts +7 -20
  170. package/dist/writers/buffer-implementation/writer.d.ts +2 -2
  171. package/dist/writers/buffer-implementation/writer.js +3 -3
  172. package/dist/writers/web-fs.js +2 -3
  173. package/dist/writers/writer.d.ts +5 -3
  174. package/package.json +3 -3
  175. package/dist/create/make-duration-with-padding.d.ts +0 -1
  176. package/dist/create/matroska-header.d.ts +0 -1
  177. package/dist/create/matroska-seek.d.ts +0 -6
  178. package/dist/create/matroska-trackentry.d.ts +0 -27
  179. package/dist/create/polyfill-audio-sample.d.ts +0 -3
  180. package/dist/create/polyfill-audio-sample.js +0 -15
  181. package/dist/writers/buffer-implementation/multi-buffer.d.ts +0 -0
  182. package/dist/writers/buffer-implementation/multi-buffer.js +0 -1
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMedia = void 0;
4
- const ebml_1 = require("../boxes/webm/ebml");
5
- const make_header_1 = require("../boxes/webm/make-header");
6
- const all_segments_1 = require("../boxes/webm/segments/all-segments");
3
+ exports.createMatroskaMedia = void 0;
4
+ const ebml_1 = require("../../boxes/webm/ebml");
5
+ const make_header_1 = require("../../boxes/webm/make-header");
6
+ const all_segments_1 = require("../../boxes/webm/segments/all-segments");
7
7
  const cluster_1 = require("./cluster");
8
8
  const make_duration_with_padding_1 = require("./make-duration-with-padding");
9
9
  const matroska_cues_1 = require("./matroska-cues");
@@ -12,14 +12,14 @@ const matroska_info_1 = require("./matroska-info");
12
12
  const matroska_seek_1 = require("./matroska-seek");
13
13
  const matroska_segment_1 = require("./matroska-segment");
14
14
  const matroska_trackentry_1 = require("./matroska-trackentry");
15
- const timescale_1 = require("./timescale");
16
- const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, }) => {
15
+ const timescale = 1000000;
16
+ const createMatroskaMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, filename, logLevel, }) => {
17
17
  var _a, _b, _c, _d, _e, _f, _g;
18
18
  const header = (0, matroska_header_1.makeMatroskaHeader)();
19
- const w = await writer.createContent();
19
+ const w = await writer.createContent({ filename, mimeType: 'video/webm' });
20
20
  await w.write(header.bytes);
21
21
  const matroskaInfo = (0, matroska_info_1.makeMatroskaInfo)({
22
- timescale: timescale_1.CREATE_TIME_SCALE,
22
+ timescale,
23
23
  });
24
24
  const currentTracks = [];
25
25
  const seeks = [];
@@ -69,14 +69,27 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
69
69
  };
70
70
  await w.write(matroskaSegment.bytes);
71
71
  const clusterOffset = w.getWrittenByteCount();
72
- let currentCluster = await (0, cluster_1.makeCluster)(w, 0);
72
+ let currentCluster = await (0, cluster_1.makeCluster)({
73
+ writer: w,
74
+ clusterStartTimestamp: 0,
75
+ timescale,
76
+ logLevel,
77
+ });
73
78
  seeks.push({
74
79
  hexString: all_segments_1.matroskaElements.Cluster,
75
80
  byte: clusterOffset - seekHeadOffset,
76
81
  });
77
82
  const trackNumberProgresses = {};
78
- const getClusterOrMakeNew = async ({ chunk, isVideo, }) => {
79
- const smallestProgress = Math.min(...Object.values(trackNumberProgresses));
83
+ const getClusterOrMakeNew = async ({ chunk, isVideo, trackNumber, }) => {
84
+ const trackProgressValues = Object.values(trackNumberProgresses);
85
+ const smallestProgress = trackProgressValues.length === 0 ? 0 : Math.min(...trackProgressValues);
86
+ // In Safari, samples can arrive out of order, e.g public/bigbuckbunny.mp4
87
+ // Therefore, only updating track number progress if it is a keyframe
88
+ // to allow for timestamps to be lower than the previous one
89
+ // Also doing this AFTER smallestProgress is calculated
90
+ if (chunk.type === 'key') {
91
+ trackNumberProgresses[trackNumber] = chunk.timestamp;
92
+ }
80
93
  if (!currentCluster.shouldMakeNewCluster({
81
94
  newT: smallestProgress,
82
95
  isVideo,
@@ -84,7 +97,12 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
84
97
  })) {
85
98
  return { cluster: currentCluster, isNew: false, smallestProgress };
86
99
  }
87
- currentCluster = await (0, cluster_1.makeCluster)(w, smallestProgress);
100
+ currentCluster = await (0, cluster_1.makeCluster)({
101
+ writer: w,
102
+ clusterStartTimestamp: smallestProgress,
103
+ timescale,
104
+ logLevel,
105
+ });
88
106
  return { cluster: currentCluster, isNew: true, smallestProgress };
89
107
  };
90
108
  const updateDuration = async (newDuration) => {
@@ -92,12 +110,12 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
92
110
  await w.updateDataAt(durationOffset, blocks.bytes);
93
111
  onBytesProgress(w.getWrittenByteCount());
94
112
  };
95
- const addSample = async (chunk, trackNumber, isVideo) => {
113
+ const addSample = async ({ chunk, trackNumber, isVideo, }) => {
96
114
  var _a;
97
- trackNumberProgresses[trackNumber] = chunk.timestamp;
98
115
  const { cluster, isNew, smallestProgress } = await getClusterOrMakeNew({
99
116
  chunk,
100
117
  isVideo,
118
+ trackNumber,
101
119
  });
102
120
  const newDuration = Math.round((chunk.timestamp + ((_a = chunk.duration) !== null && _a !== void 0 ? _a : 0)) / 1000);
103
121
  await updateDuration(newDuration);
@@ -105,7 +123,7 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
105
123
  if (isNew) {
106
124
  const newCluster = w.getWrittenByteCount();
107
125
  cues.push({
108
- time: (0, cluster_1.timestampToClusterTimestamp)(smallestProgress) +
126
+ time: (0, cluster_1.timestampToClusterTimestamp)(smallestProgress, timescale) +
109
127
  timecodeRelativeToCluster,
110
128
  clusterPosition: newCluster - seekHeadOffset,
111
129
  trackNumber,
@@ -122,15 +140,24 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
122
140
  const operationProm = { current: Promise.resolve() };
123
141
  const waitForFinishPromises = [];
124
142
  return {
125
- save: async () => {
126
- const file = await w.save();
127
- return file;
143
+ updateTrackSampleRate: ({ sampleRate, trackNumber }) => {
144
+ currentTracks.forEach((track) => {
145
+ if (track.trackNumber === trackNumber) {
146
+ if (track.type !== 'audio') {
147
+ throw new Error('track is not audio');
148
+ }
149
+ track.sampleRate = sampleRate;
150
+ }
151
+ });
152
+ },
153
+ save: () => {
154
+ return w.save();
128
155
  },
129
156
  remove: async () => {
130
157
  await w.remove();
131
158
  },
132
- addSample: (chunk, trackNumber, isVideo) => {
133
- operationProm.current = operationProm.current.then(() => addSample(chunk, trackNumber, isVideo));
159
+ addSample: ({ chunk, trackNumber, isVideo }) => {
160
+ operationProm.current = operationProm.current.then(() => addSample({ chunk, trackNumber, isVideo }));
134
161
  return operationProm.current;
135
162
  },
136
163
  updateDuration: (duration) => {
@@ -139,10 +166,7 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
139
166
  },
140
167
  addTrack: (track) => {
141
168
  const trackNumber = currentTracks.length + 1;
142
- const bytes = track.type === 'video'
143
- ? (0, matroska_trackentry_1.makeMatroskaVideoTrackEntryBytes)({ ...track, trackNumber })
144
- : (0, matroska_trackentry_1.makeMatroskaAudioTrackEntryBytes)({ ...track, trackNumber });
145
- operationProm.current = operationProm.current.then(() => addTrack(bytes));
169
+ operationProm.current = operationProm.current.then(() => addTrack({ ...track, trackNumber }));
146
170
  trackNumbers.push(trackNumber);
147
171
  return operationProm.current.then(() => ({ trackNumber }));
148
172
  },
@@ -167,4 +191,4 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
167
191
  },
168
192
  };
169
193
  };
170
- exports.createMedia = createMedia;
194
+ exports.createMatroskaMedia = createMatroskaMedia;
@@ -0,0 +1 @@
1
+ export declare const makeDurationWithPadding: (newDuration: number) => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeDurationWithPadding = void 0;
4
- const make_header_1 = require("../boxes/webm/make-header");
4
+ const make_header_1 = require("../../boxes/webm/make-header");
5
5
  const makeDurationWithPadding = (newDuration) => {
6
6
  return (0, make_header_1.makeMatroskaBytes)({
7
7
  type: 'Duration',
@@ -3,4 +3,4 @@ export type Cue = {
3
3
  clusterPosition: number;
4
4
  trackNumber: number;
5
5
  };
6
- export declare const createMatroskaCues: (cues: Cue[]) => import("../boxes/webm/segments/all-segments").BytesAndOffset;
6
+ export declare const createMatroskaCues: (cues: Cue[]) => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createMatroskaCues = void 0;
4
- const make_header_1 = require("../boxes/webm/make-header");
4
+ const make_header_1 = require("../../boxes/webm/make-header");
5
5
  const createMatroskaCues = (cues) => {
6
6
  return (0, make_header_1.makeMatroskaBytes)({
7
7
  type: 'Cues',
@@ -0,0 +1 @@
1
+ export declare const makeMatroskaHeader: () => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeMatroskaHeader = void 0;
4
- const make_header_1 = require("../boxes/webm/make-header");
4
+ const make_header_1 = require("../../boxes/webm/make-header");
5
5
  const makeMatroskaHeader = () => {
6
6
  return (0, make_header_1.makeMatroskaBytes)({
7
7
  type: 'Header',
@@ -1,3 +1,3 @@
1
1
  export declare const makeMatroskaInfo: ({ timescale }: {
2
2
  timescale: number;
3
- }) => import("../boxes/webm/segments/all-segments").BytesAndOffset;
3
+ }) => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeMatroskaInfo = void 0;
4
- const make_header_1 = require("../boxes/webm/make-header");
4
+ const make_header_1 = require("../../boxes/webm/make-header");
5
5
  const make_duration_with_padding_1 = require("./make-duration-with-padding");
6
6
  const makeMatroskaInfo = ({ timescale }) => {
7
7
  return (0, make_header_1.makeMatroskaBytes)({
@@ -0,0 +1,6 @@
1
+ import type { MatroskaElement } from '../../boxes/webm/segments/all-segments';
2
+ export type Seek = {
3
+ hexString: MatroskaElement;
4
+ byte: number;
5
+ };
6
+ export declare const createMatroskaSeekHead: (seeks: Seek[]) => import("../../boxes/webm/segments/all-segments").BytesAndOffset[];
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createMatroskaSeekHead = void 0;
4
- const make_header_1 = require("../boxes/webm/make-header");
4
+ const make_header_1 = require("../../boxes/webm/make-header");
5
5
  const createMatroskaSeekHead = (seeks) => {
6
6
  return (0, make_header_1.padMatroskaBytes)((0, make_header_1.makeMatroskaBytes)({
7
7
  type: 'SeekHead',
@@ -1,3 +1,3 @@
1
- import type { BytesAndOffset } from '../boxes/webm/segments/all-segments';
1
+ import type { BytesAndOffset } from '../../boxes/webm/segments/all-segments';
2
2
  export declare const MATROSKA_SEGMENT_MIN_VINT_WIDTH = 8;
3
3
  export declare const createMatroskaSegment: (children: BytesAndOffset[]) => BytesAndOffset;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createMatroskaSegment = exports.MATROSKA_SEGMENT_MIN_VINT_WIDTH = void 0;
4
- const make_header_1 = require("../boxes/webm/make-header");
4
+ const make_header_1 = require("../../boxes/webm/make-header");
5
5
  exports.MATROSKA_SEGMENT_MIN_VINT_WIDTH = 8;
6
6
  const createMatroskaSegment = (children) => {
7
7
  return (0, make_header_1.makeMatroskaBytes)({
@@ -0,0 +1,10 @@
1
+ import type { VideoTrackColorParams } from '../../get-tracks';
2
+ import type { MakeTrackAudio, MakeTrackVideo } from '../make-track-info';
3
+ export declare const makeMatroskaVideoBytes: ({ color, width, height, }: {
4
+ color: VideoTrackColorParams;
5
+ width: number;
6
+ height: number;
7
+ }) => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
8
+ export declare const makeMatroskaAudioTrackEntryBytes: ({ trackNumber, codec, numberOfChannels, sampleRate, codecPrivate, }: MakeTrackAudio) => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
9
+ export declare const makeMatroskaVideoTrackEntryBytes: ({ color, width, height, trackNumber, codec, codecPrivate, }: MakeTrackVideo) => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
10
+ export declare const makeMatroskaTracks: (tracks: (MakeTrackAudio | MakeTrackVideo)[]) => import("../../boxes/webm/segments/all-segments").BytesAndOffset[];
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeMatroskaTracks = exports.makeMatroskaVideoTrackEntryBytes = exports.makeMatroskaAudioTrackEntryBytes = exports.makeMatroskaVideoBytes = void 0;
4
- const color_1 = require("../boxes/webm/color");
5
- const make_header_1 = require("../boxes/webm/make-header");
4
+ const color_1 = require("../../boxes/webm/color");
5
+ const make_header_1 = require("../../boxes/webm/make-header");
6
6
  const makeMatroskaVideoBytes = ({ color, width, height, }) => {
7
7
  return (0, make_header_1.makeMatroskaBytes)({
8
8
  type: 'Video',
@@ -234,9 +234,15 @@ const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, trackNumber, c
234
234
  };
235
235
  exports.makeMatroskaVideoTrackEntryBytes = makeMatroskaVideoTrackEntryBytes;
236
236
  const makeMatroskaTracks = (tracks) => {
237
+ const bytesArr = tracks.map((t) => {
238
+ const bytes = t.type === 'video'
239
+ ? (0, exports.makeMatroskaVideoTrackEntryBytes)(t)
240
+ : (0, exports.makeMatroskaAudioTrackEntryBytes)(t);
241
+ return bytes;
242
+ });
237
243
  return (0, make_header_1.padMatroskaBytes)((0, make_header_1.makeMatroskaBytes)({
238
244
  type: 'Tracks',
239
- value: tracks,
245
+ value: bytesArr,
240
246
  minVintWidth: null,
241
247
  }), 500);
242
248
  };
@@ -1,19 +1,32 @@
1
+ import type { LogLevel } from '../log';
1
2
  import type { AudioOrVideoSample } from '../webcodec-sample-types';
2
3
  import type { WriterInterface } from '../writers/writer';
3
- import type { MakeTrackAudio, MakeTrackVideo } from './matroska-trackentry';
4
+ import type { MakeTrackAudio, MakeTrackVideo } from './make-track-info';
4
5
  export type MediaFn = {
5
6
  save: () => Promise<Blob>;
6
7
  remove: () => Promise<void>;
7
- addSample: (chunk: AudioOrVideoSample, trackNumber: number, isVideo: boolean) => Promise<void>;
8
+ addSample: (options: {
9
+ chunk: AudioOrVideoSample;
10
+ trackNumber: number;
11
+ isVideo: boolean;
12
+ timescale: number;
13
+ codecPrivate: Uint8Array | null;
14
+ }) => Promise<void>;
8
15
  updateDuration: (duration: number) => Promise<void>;
9
16
  addTrack: (track: Omit<MakeTrackAudio, 'trackNumber'> | Omit<MakeTrackVideo, 'trackNumber'>) => Promise<{
10
17
  trackNumber: number;
11
18
  }>;
12
19
  addWaitForFinishPromise: (promise: () => Promise<void>) => void;
13
20
  waitForFinish: () => Promise<void>;
21
+ updateTrackSampleRate: (options: {
22
+ trackNumber: number;
23
+ sampleRate: number;
24
+ }) => void;
14
25
  };
15
- export declare const createMedia: ({ writer, onBytesProgress, onMillisecondsProgress, }: {
26
+ export type MediaFnGeneratorInput = {
16
27
  writer: WriterInterface;
17
28
  onBytesProgress: (totalBytes: number) => void;
18
29
  onMillisecondsProgress: (totalMilliseconds: number) => void;
19
- }) => Promise<MediaFn>;
30
+ logLevel: LogLevel;
31
+ filename: string;
32
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1 +1 @@
1
- export declare const CREATE_TIME_SCALE = 1000000;
1
+ export declare const CREATE_WEBM_TIME_SCALE = 1000000;
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CREATE_TIME_SCALE = void 0;
4
- exports.CREATE_TIME_SCALE = 1000000;
3
+ exports.CREATE_WEBM_TIME_SCALE = void 0;
4
+ exports.CREATE_WEBM_TIME_SCALE = 1000000;
@@ -3,7 +3,7 @@ import type { ParseResult } from './parse-result';
3
3
  import type { ParserState } from './parser-state';
4
4
  export declare const emitAvailableInfo: ({ hasInfo, parseResult, moreFields, state, returnValue, contentLength, name, }: {
5
5
  hasInfo: Record<keyof Options<ParseMediaFields>, boolean>;
6
- parseResult: ParseResult;
6
+ parseResult: ParseResult | null;
7
7
  moreFields: ParseMediaCallbacks<AllParseMediaFields>;
8
8
  state: ParserState;
9
9
  returnValue: ParseMediaResult<AllParseMediaFields>;
@@ -13,7 +13,7 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
13
13
  const keys = Object.keys(hasInfo);
14
14
  for (const key of keys) {
15
15
  if (key === 'boxes') {
16
- if (hasInfo.boxes && returnValue.boxes === undefined) {
16
+ if (parseResult && hasInfo.boxes && returnValue.boxes === undefined) {
17
17
  (_a = moreFields.onBoxes) === null || _a === void 0 ? void 0 : _a.call(moreFields, parseResult.segments);
18
18
  returnValue.boxes = parseResult.segments;
19
19
  }
@@ -21,7 +21,8 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
21
21
  }
22
22
  if (key === 'durationInSeconds') {
23
23
  if (hasInfo.durationInSeconds &&
24
- returnValue.durationInSeconds === undefined) {
24
+ returnValue.durationInSeconds === undefined &&
25
+ parseResult) {
25
26
  const durationInSeconds = (0, get_duration_1.getDuration)(parseResult.segments, state);
26
27
  (_b = moreFields.onDurationInSeconds) === null || _b === void 0 ? void 0 : _b.call(moreFields, durationInSeconds);
27
28
  returnValue.durationInSeconds = durationInSeconds;
@@ -29,7 +30,9 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
29
30
  continue;
30
31
  }
31
32
  if (key === 'dimensions') {
32
- if (hasInfo.dimensions && returnValue.dimensions === undefined) {
33
+ if (hasInfo.dimensions &&
34
+ returnValue.dimensions === undefined &&
35
+ parseResult) {
33
36
  const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
34
37
  const dimensions = {
35
38
  height: dimensionsQueried.height,
@@ -42,7 +45,8 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
42
45
  }
43
46
  if (key === 'unrotatedDimensions') {
44
47
  if (returnValue.unrotatedDimensions === undefined &&
45
- hasInfo.unrotatedDimensions) {
48
+ hasInfo.unrotatedDimensions &&
49
+ parseResult) {
46
50
  const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
47
51
  const unrotatedDimensions = {
48
52
  height: dimensionsQueried.unrotatedHeight,
@@ -54,7 +58,9 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
54
58
  continue;
55
59
  }
56
60
  if (key === 'rotation') {
57
- if (returnValue.rotation === undefined && hasInfo.rotation) {
61
+ if (returnValue.rotation === undefined &&
62
+ hasInfo.rotation &&
63
+ parseResult) {
58
64
  const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
59
65
  const { rotation } = dimensionsQueried;
60
66
  (_e = moreFields.onRotation) === null || _e === void 0 ? void 0 : _e.call(moreFields, rotation);
@@ -63,7 +69,7 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
63
69
  continue;
64
70
  }
65
71
  if (key === 'fps') {
66
- if (returnValue.fps === undefined && hasInfo.fps) {
72
+ if (returnValue.fps === undefined && hasInfo.fps && parseResult) {
67
73
  const fps = (0, get_fps_1.getFps)(parseResult.segments);
68
74
  (_f = moreFields.onFps) === null || _f === void 0 ? void 0 : _f.call(moreFields, fps);
69
75
  returnValue.fps = fps;
@@ -71,7 +77,9 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
71
77
  continue;
72
78
  }
73
79
  if (key === 'videoCodec') {
74
- if (returnValue.videoCodec === undefined && hasInfo.videoCodec) {
80
+ if (returnValue.videoCodec === undefined &&
81
+ hasInfo.videoCodec &&
82
+ parseResult) {
75
83
  const videoCodec = (0, get_video_codec_1.getVideoCodec)(parseResult.segments);
76
84
  (_g = moreFields.onVideoCodec) === null || _g === void 0 ? void 0 : _g.call(moreFields, videoCodec);
77
85
  returnValue.videoCodec = videoCodec;
@@ -79,7 +87,9 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
79
87
  continue;
80
88
  }
81
89
  if (key === 'audioCodec') {
82
- if (returnValue.audioCodec === undefined && hasInfo.audioCodec) {
90
+ if (returnValue.audioCodec === undefined &&
91
+ hasInfo.audioCodec &&
92
+ parseResult) {
83
93
  const audioCodec = (0, get_audio_codec_1.getAudioCodec)(parseResult.segments, state);
84
94
  (_h = moreFields.onAudioCodec) === null || _h === void 0 ? void 0 : _h.call(moreFields, audioCodec);
85
95
  returnValue.audioCodec = audioCodec;
@@ -89,7 +99,8 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
89
99
  if (key === 'tracks') {
90
100
  if (hasInfo.tracks &&
91
101
  returnValue.videoTracks === undefined &&
92
- returnValue.audioTracks === undefined) {
102
+ returnValue.audioTracks === undefined &&
103
+ parseResult) {
93
104
  const { videoTracks, audioTracks } = (0, get_tracks_1.getTracks)(parseResult.segments, state);
94
105
  (_j = moreFields.onTracks) === null || _j === void 0 ? void 0 : _j.call(moreFields, { videoTracks, audioTracks });
95
106
  returnValue.videoTracks = videoTracks;
@@ -120,7 +131,9 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
120
131
  continue;
121
132
  }
122
133
  if (key === 'container') {
123
- if (returnValue.container === undefined && hasInfo.container) {
134
+ if (returnValue.container === undefined &&
135
+ hasInfo.container &&
136
+ parseResult) {
124
137
  const container = (0, get_container_1.getContainer)(parseResult.segments);
125
138
  (_o = moreFields.onContainer) === null || _o === void 0 ? void 0 : _o.call(moreFields, container);
126
139
  returnValue.container = container;
@@ -1,7 +1,7 @@
1
1
  // src/writers/buffer-implementation/writer.ts
2
- var createContent = () => {
2
+ var createContent = ({ filename, mimeType }) => {
3
3
  const buf = new ArrayBuffer(0, {
4
- maxByteLength: 200000000
4
+ maxByteLength: 2000000000
5
5
  });
6
6
  if (!buf.resize) {
7
7
  throw new Error("Could not create buffer writer");
@@ -29,7 +29,7 @@ var createContent = () => {
29
29
  return Promise.reject(new Error("Already called .remove() on the result"));
30
30
  }
31
31
  const arr = new Uint8Array(buf);
32
- return Promise.resolve(new File([arr.slice()], "hi", { type: "video/webm" }));
32
+ return Promise.resolve(new File([arr.slice()], filename, { type: mimeType }));
33
33
  },
34
34
  remove() {
35
35
  removed = true;