@remotion/media-parser 4.0.244 → 4.0.246

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 (169) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/boxes/avc/create-sps-pps-data.js +10 -4
  3. package/dist/boxes/iso-base-media/mdat/mdat.js +17 -5
  4. package/dist/boxes/iso-base-media/process-box.js +0 -3
  5. package/dist/boxes/iso-base-media/to-date.d.ts +0 -1
  6. package/dist/boxes/iso-base-media/to-date.js +1 -9
  7. package/dist/boxes/transport-stream/adts-header.d.ts +1 -1
  8. package/dist/boxes/transport-stream/discard-rest-of-packet.d.ts +1 -1
  9. package/dist/boxes/transport-stream/parse-stream-packet.js +4 -4
  10. package/dist/boxes/webm/color.d.ts +0 -1
  11. package/dist/boxes/webm/color.js +1 -83
  12. package/dist/boxes/webm/parse-ebml.js +8 -10
  13. package/dist/boxes/webm/segments/all-segments.d.ts +24 -21
  14. package/dist/boxes/webm/segments/all-segments.js +17 -19
  15. package/dist/combine-uint8-arrays.d.ts +1 -0
  16. package/dist/combine-uint8-arrays.js +23 -0
  17. package/dist/emit-available-info.js +1 -11
  18. package/dist/esm/index.mjs +7470 -9782
  19. package/dist/file-types/detect-file-type.js +2 -2
  20. package/dist/index.d.ts +787 -27
  21. package/dist/index.js +19 -13
  22. package/dist/parse-media.js +0 -3
  23. package/dist/state/parser-state.d.ts +1 -3
  24. package/dist/state/parser-state.js +1 -2
  25. package/dist/version.d.ts +1 -1
  26. package/dist/version.js +1 -1
  27. package/package.json +3 -15
  28. package/buffer.js +0 -2
  29. package/dist/boxes/avc/codec-private.d.ts +0 -2
  30. package/dist/boxes/avc/codec-private.js +0 -28
  31. package/dist/boxes/webm/ebml.d.ts +0 -2
  32. package/dist/boxes/webm/ebml.js +0 -94
  33. package/dist/boxes/webm/make-header.d.ts +0 -8
  34. package/dist/boxes/webm/make-header.js +0 -187
  35. package/dist/create/event-emitter.d.ts +0 -31
  36. package/dist/create/event-emitter.js +0 -25
  37. package/dist/create/iso-base-media/codec-specific/avc1.d.ts +0 -2
  38. package/dist/create/iso-base-media/codec-specific/avc1.js +0 -48
  39. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +0 -22
  40. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +0 -36
  41. package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +0 -2
  42. package/dist/create/iso-base-media/codec-specific/mp4a.js +0 -74
  43. package/dist/create/iso-base-media/create-colr.d.ts +0 -6
  44. package/dist/create/iso-base-media/create-colr.js +0 -26
  45. package/dist/create/iso-base-media/create-ftyp.d.ts +0 -10
  46. package/dist/create/iso-base-media/create-ftyp.js +0 -22
  47. package/dist/create/iso-base-media/create-ilst.d.ts +0 -1
  48. package/dist/create/iso-base-media/create-ilst.js +0 -14
  49. package/dist/create/iso-base-media/create-iso-base-media.d.ts +0 -2
  50. package/dist/create/iso-base-media/create-iso-base-media.js +0 -184
  51. package/dist/create/iso-base-media/create-mdia.d.ts +0 -5
  52. package/dist/create/iso-base-media/create-mdia.js +0 -18
  53. package/dist/create/iso-base-media/create-moov.d.ts +0 -5
  54. package/dist/create/iso-base-media/create-moov.js +0 -18
  55. package/dist/create/iso-base-media/create-mvhd.d.ts +0 -10
  56. package/dist/create/iso-base-media/create-mvhd.js +0 -48
  57. package/dist/create/iso-base-media/create-trak.d.ts +0 -4
  58. package/dist/create/iso-base-media/create-trak.js +0 -17
  59. package/dist/create/iso-base-media/create-udta.d.ts +0 -1
  60. package/dist/create/iso-base-media/create-udta.js +0 -14
  61. package/dist/create/iso-base-media/create-url.d.ts +0 -1
  62. package/dist/create/iso-base-media/create-url.js +0 -16
  63. package/dist/create/iso-base-media/example-stts.d.ts +0 -3
  64. package/dist/create/iso-base-media/example-stts.js +0 -2797
  65. package/dist/create/iso-base-media/ilst/create-cmt.d.ts +0 -1
  66. package/dist/create/iso-base-media/ilst/create-cmt.js +0 -26
  67. package/dist/create/iso-base-media/ilst/create-too.d.ts +0 -1
  68. package/dist/create/iso-base-media/ilst/create-too.js +0 -27
  69. package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +0 -6
  70. package/dist/create/iso-base-media/mdia/create-mdhd.js +0 -33
  71. package/dist/create/iso-base-media/mp4-header.d.ts +0 -6
  72. package/dist/create/iso-base-media/mp4-header.js +0 -48
  73. package/dist/create/iso-base-media/primitives.d.ts +0 -15
  74. package/dist/create/iso-base-media/primitives.js +0 -133
  75. package/dist/create/iso-base-media/serialize-track.d.ts +0 -9
  76. package/dist/create/iso-base-media/serialize-track.js +0 -63
  77. package/dist/create/iso-base-media/trak/create-tkhd.d.ts +0 -27
  78. package/dist/create/iso-base-media/trak/create-tkhd.js +0 -97
  79. package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +0 -4
  80. package/dist/create/iso-base-media/trak/mdia/create-minf.js +0 -19
  81. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +0 -1
  82. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +0 -22
  83. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +0 -1
  84. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +0 -20
  85. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +0 -6
  86. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +0 -41
  87. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +0 -1
  88. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +0 -20
  89. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +0 -2
  90. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +0 -45
  91. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +0 -2
  92. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +0 -28
  93. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +0 -2
  94. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +0 -56
  95. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +0 -2
  96. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +0 -23
  97. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +0 -2
  98. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +0 -25
  99. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +0 -2
  100. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +0 -51
  101. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +0 -1
  102. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +0 -20
  103. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +0 -1
  104. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +0 -16
  105. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +0 -1
  106. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +0 -13
  107. package/dist/create/iso-base-media/udta/create-meta.d.ts +0 -4
  108. package/dist/create/iso-base-media/udta/create-meta.js +0 -20
  109. package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +0 -1
  110. package/dist/create/iso-base-media/udta/meta/create-hdlr.js +0 -32
  111. package/dist/create/make-track-info.d.ts +0 -20
  112. package/dist/create/make-track-info.js +0 -2
  113. package/dist/create/matroska/cluster-segment.d.ts +0 -10
  114. package/dist/create/matroska/cluster-segment.js +0 -39
  115. package/dist/create/matroska/cluster.d.ts +0 -25
  116. package/dist/create/matroska/cluster.js +0 -77
  117. package/dist/create/matroska/create-matroska-media.d.ts +0 -2
  118. package/dist/create/matroska/create-matroska-media.js +0 -189
  119. package/dist/create/matroska/make-duration-with-padding.d.ts +0 -1
  120. package/dist/create/matroska/make-duration-with-padding.js +0 -15
  121. package/dist/create/matroska/matroska-cues.d.ts +0 -6
  122. package/dist/create/matroska/matroska-cues.js +0 -49
  123. package/dist/create/matroska/matroska-header.d.ts +0 -1
  124. package/dist/create/matroska/matroska-header.js +0 -66
  125. package/dist/create/matroska/matroska-info.d.ts +0 -3
  126. package/dist/create/matroska/matroska-info.js +0 -33
  127. package/dist/create/matroska/matroska-seek.d.ts +0 -6
  128. package/dist/create/matroska/matroska-seek.js +0 -32
  129. package/dist/create/matroska/matroska-segment.d.ts +0 -3
  130. package/dist/create/matroska/matroska-segment.js +0 -13
  131. package/dist/create/matroska/matroska-trackentry.d.ts +0 -10
  132. package/dist/create/matroska/matroska-trackentry.js +0 -249
  133. package/dist/create/media-fn.d.ts +0 -32
  134. package/dist/create/media-fn.js +0 -2
  135. package/dist/create/progress-tracker.d.ts +0 -9
  136. package/dist/create/progress-tracker.js +0 -67
  137. package/dist/create/timescale.d.ts +0 -1
  138. package/dist/create/timescale.js +0 -4
  139. package/dist/create/wav/create-wav.d.ts +0 -2
  140. package/dist/create/wav/create-wav.js +0 -110
  141. package/dist/create/with-resolvers.d.ts +0 -10
  142. package/dist/create/with-resolvers.js +0 -28
  143. package/dist/errors/detect-file-type.d.ts +0 -1
  144. package/dist/errors/detect-file-type.js +0 -88
  145. package/dist/errors/file-types.d.ts +0 -1
  146. package/dist/errors/file-types.js +0 -88
  147. package/dist/esm/buffer.mjs +0 -56
  148. package/dist/esm/web-fs.mjs +0 -73
  149. package/dist/file-types/get-jpeg-dimensions.d.ts +0 -4
  150. package/dist/file-types/get-jpeg-dimensions.js +0 -32
  151. package/dist/file-types.d.ts +0 -1
  152. package/dist/file-types.js +0 -88
  153. package/dist/parser-context.d.ts +0 -10
  154. package/dist/parser-context.js +0 -2
  155. package/dist/probing/detect-file-type.d.ts +0 -1
  156. package/dist/probing/detect-file-type.js +0 -88
  157. package/dist/probing/get-jpeg-dimensions.d.ts +0 -4
  158. package/dist/probing/get-jpeg-dimensions.js +0 -32
  159. package/dist/state/tracks-and-samples.d.ts +0 -0
  160. package/dist/state/tracks-and-samples.js +0 -1
  161. package/dist/writers/buffer-implementation/writer.d.ts +0 -2
  162. package/dist/writers/buffer-implementation/writer.js +0 -54
  163. package/dist/writers/buffer.d.ts +0 -2
  164. package/dist/writers/buffer.js +0 -7
  165. package/dist/writers/web-fs.d.ts +0 -3
  166. package/dist/writers/web-fs.js +0 -74
  167. package/dist/writers/writer.d.ts +0 -15
  168. package/dist/writers/writer.js +0 -2
  169. package/web-fs.js +0 -2
@@ -1,249 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
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");
6
- const makeMatroskaVideoBytes = ({ color, width, height, }) => {
7
- return (0, make_header_1.makeMatroskaBytes)({
8
- type: 'Video',
9
- value: [
10
- {
11
- type: 'PixelWidth',
12
- value: {
13
- value: width,
14
- byteLength: null,
15
- },
16
- minVintWidth: null,
17
- },
18
- {
19
- type: 'PixelHeight',
20
- value: {
21
- value: height,
22
- byteLength: null,
23
- },
24
- minVintWidth: null,
25
- },
26
- {
27
- type: 'FlagInterlaced',
28
- value: {
29
- // https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
30
- // 5.1.4.1.28.1.
31
- value: 2, // 2 - progressive, no interlaced
32
- byteLength: null,
33
- },
34
- minVintWidth: null,
35
- },
36
- (0, color_1.makeMatroskaColorBytes)(color),
37
- ],
38
- minVintWidth: null,
39
- });
40
- };
41
- exports.makeMatroskaVideoBytes = makeMatroskaVideoBytes;
42
- const makeVideoCodecId = (codecId) => {
43
- if (codecId === 'vp8') {
44
- return 'V_VP8';
45
- }
46
- if (codecId === 'vp9') {
47
- return 'V_VP9';
48
- }
49
- if (codecId === 'h264') {
50
- return 'V_MPEG4/ISO/AVC';
51
- }
52
- if (codecId === 'av1') {
53
- return 'V_AV1';
54
- }
55
- if (codecId === 'h265') {
56
- return 'V_MPEGH/ISO/HEVC';
57
- }
58
- if (codecId === 'prores') {
59
- return 'V_PRORES';
60
- }
61
- throw new Error(`Unknown codec: ${codecId}`);
62
- };
63
- const makeAudioCodecId = (codecId) => {
64
- if (codecId === 'opus') {
65
- return 'A_OPUS';
66
- }
67
- if (codecId === 'aac') {
68
- return 'A_AAC';
69
- }
70
- if (codecId === 'mp3') {
71
- return 'A_MPEG/L3';
72
- }
73
- if (codecId === 'vorbis') {
74
- return 'A_VORBIS';
75
- }
76
- if (codecId === 'pcm-u8') {
77
- return 'A_PCM/INT/LIT';
78
- }
79
- if (codecId === 'pcm-s16') {
80
- return 'A_PCM/INT/LIT';
81
- }
82
- if (codecId === 'pcm-s24') {
83
- return 'A_PCM/INT/LIT';
84
- }
85
- if (codecId === 'pcm-s32') {
86
- return 'A_PCM/INT/LIT';
87
- }
88
- if (codecId === 'pcm-f32') {
89
- return 'A_PCM/INT/LIT';
90
- }
91
- if (codecId === 'aiff') {
92
- throw new Error('aiff is not supported in Matroska');
93
- }
94
- throw new Error(`Unknown codec: ${codecId}`);
95
- };
96
- const makeMatroskaAudioTrackEntryBytes = ({ trackNumber, codec, numberOfChannels, sampleRate, codecPrivate, }) => {
97
- return (0, make_header_1.makeMatroskaBytes)({
98
- type: 'TrackEntry',
99
- minVintWidth: null,
100
- value: [
101
- {
102
- type: 'TrackNumber',
103
- value: {
104
- value: trackNumber,
105
- byteLength: null,
106
- },
107
- minVintWidth: null,
108
- },
109
- {
110
- type: 'TrackUID',
111
- value: '0x188FEB95C8EFABA',
112
- minVintWidth: null,
113
- },
114
- {
115
- type: 'TrackType',
116
- value: {
117
- value: 2,
118
- byteLength: null,
119
- },
120
- minVintWidth: null,
121
- },
122
- {
123
- type: 'CodecID',
124
- value: makeAudioCodecId(codec),
125
- minVintWidth: null,
126
- },
127
- {
128
- type: 'Audio',
129
- value: [
130
- {
131
- type: 'Channels',
132
- minVintWidth: null,
133
- value: {
134
- value: numberOfChannels,
135
- byteLength: null,
136
- },
137
- },
138
- {
139
- type: 'SamplingFrequency',
140
- minVintWidth: null,
141
- value: {
142
- value: sampleRate,
143
- size: '64',
144
- },
145
- },
146
- {
147
- type: 'BitDepth',
148
- minVintWidth: null,
149
- value: {
150
- value: 32,
151
- byteLength: null,
152
- },
153
- },
154
- ],
155
- minVintWidth: null,
156
- },
157
- codecPrivate
158
- ? {
159
- type: 'CodecPrivate',
160
- minVintWidth: null,
161
- value: codecPrivate,
162
- }
163
- : null,
164
- ].filter(Boolean),
165
- });
166
- };
167
- exports.makeMatroskaAudioTrackEntryBytes = makeMatroskaAudioTrackEntryBytes;
168
- const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, trackNumber, codec, codecPrivate, }) => {
169
- return (0, make_header_1.makeMatroskaBytes)({
170
- type: 'TrackEntry',
171
- minVintWidth: null,
172
- value: [
173
- {
174
- type: 'TrackNumber',
175
- value: {
176
- value: trackNumber,
177
- byteLength: null,
178
- },
179
- minVintWidth: null,
180
- },
181
- {
182
- type: 'TrackUID',
183
- value: '0xab2171012bb9020a',
184
- minVintWidth: null,
185
- },
186
- {
187
- type: 'FlagLacing',
188
- value: {
189
- value: 0,
190
- byteLength: null,
191
- },
192
- minVintWidth: null,
193
- },
194
- {
195
- type: 'Language',
196
- value: 'und',
197
- minVintWidth: null,
198
- },
199
- {
200
- type: 'FlagDefault',
201
- value: {
202
- value: 0,
203
- byteLength: null,
204
- },
205
- minVintWidth: null,
206
- },
207
- {
208
- type: 'CodecID',
209
- value: makeVideoCodecId(codec),
210
- minVintWidth: null,
211
- },
212
- {
213
- type: 'TrackType',
214
- value: {
215
- value: 1, // 'video'
216
- byteLength: null,
217
- },
218
- minVintWidth: null,
219
- },
220
- (0, exports.makeMatroskaVideoBytes)({
221
- color,
222
- width,
223
- height,
224
- }),
225
- codecPrivate
226
- ? {
227
- type: 'CodecPrivate',
228
- minVintWidth: null,
229
- value: codecPrivate,
230
- }
231
- : null,
232
- ].filter(Boolean),
233
- });
234
- };
235
- exports.makeMatroskaVideoTrackEntryBytes = makeMatroskaVideoTrackEntryBytes;
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
- });
243
- return (0, make_header_1.padMatroskaBytes)((0, make_header_1.makeMatroskaBytes)({
244
- type: 'Tracks',
245
- value: bytesArr,
246
- minVintWidth: null,
247
- }), 500);
248
- };
249
- exports.makeMatroskaTracks = makeMatroskaTracks;
@@ -1,32 +0,0 @@
1
- import type { LogLevel } from '../log';
2
- import type { AudioOrVideoSample } from '../webcodec-sample-types';
3
- import type { WriterInterface } from '../writers/writer';
4
- import type { MakeTrackAudio, MakeTrackVideo } from './make-track-info';
5
- import type { ProgressTracker } from './progress-tracker';
6
- export type MediaFn = {
7
- save: () => Promise<Blob>;
8
- remove: () => Promise<void>;
9
- addSample: (options: {
10
- chunk: AudioOrVideoSample;
11
- trackNumber: number;
12
- isVideo: boolean;
13
- codecPrivate: Uint8Array | null;
14
- }) => Promise<void>;
15
- addTrack: (track: Omit<MakeTrackAudio, 'trackNumber'> | Omit<MakeTrackVideo, 'trackNumber'>) => Promise<{
16
- trackNumber: number;
17
- }>;
18
- addWaitForFinishPromise: (promise: () => Promise<void>) => void;
19
- waitForFinish: () => Promise<void>;
20
- updateTrackSampleRate: (options: {
21
- trackNumber: number;
22
- sampleRate: number;
23
- }) => void;
24
- };
25
- export type MediaFnGeneratorInput = {
26
- writer: WriterInterface;
27
- onBytesProgress: (totalBytes: number) => void;
28
- onMillisecondsProgress: (totalMilliseconds: number) => void;
29
- logLevel: LogLevel;
30
- filename: string;
31
- progressTracker: ProgressTracker;
32
- };
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,9 +0,0 @@
1
- export declare const makeProgressTracker: () => {
2
- registerTrack: (trackNumber: number) => void;
3
- getSmallestProgress: () => number;
4
- updateTrackProgress: (trackNumber: number, progress: number) => void;
5
- waitForProgress: () => Promise<void>;
6
- getStartingTimestamp: () => number;
7
- setPossibleLowestTimestamp: (timestamp: number) => void;
8
- };
9
- export type ProgressTracker = ReturnType<typeof makeProgressTracker>;
@@ -1,67 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeProgressTracker = void 0;
4
- const event_emitter_1 = require("./event-emitter");
5
- const with_resolvers_1 = require("./with-resolvers");
6
- // Make sure to distinguish null and undefined here
7
- const makeProgressTracker = () => {
8
- const trackNumberProgresses = {};
9
- const eventEmitter = new event_emitter_1.IoEventEmitter();
10
- let startingTimestamp = null;
11
- const setPossibleLowestTimestamp = (timestamp) => {
12
- if (startingTimestamp === null) {
13
- startingTimestamp = timestamp;
14
- }
15
- else {
16
- startingTimestamp = Math.min(startingTimestamp, timestamp);
17
- }
18
- };
19
- const getStartingTimestamp = () => {
20
- if (startingTimestamp === null) {
21
- throw new Error('No starting timestamp');
22
- }
23
- return startingTimestamp;
24
- };
25
- const calculateSmallestProgress = () => {
26
- const progressValues = Object.values(trackNumberProgresses).map((p) => {
27
- if (p !== null) {
28
- return p;
29
- }
30
- // The starting timestamp might not be 0, it might be very huge
31
- // If no sample has arrived yet, we should assume the smallest value
32
- // we know as the progress
33
- if (startingTimestamp === null) {
34
- throw new Error('No progress values to calculate smallest progress from');
35
- }
36
- return startingTimestamp;
37
- });
38
- return Math.min(...progressValues);
39
- };
40
- return {
41
- registerTrack: (trackNumber) => {
42
- trackNumberProgresses[trackNumber] = null;
43
- },
44
- getSmallestProgress: calculateSmallestProgress,
45
- updateTrackProgress: (trackNumber, progress) => {
46
- if (trackNumberProgresses[trackNumber] === undefined) {
47
- throw new Error(`Tried to update progress for a track that was not registered: ${trackNumber}`);
48
- }
49
- trackNumberProgresses[trackNumber] = progress;
50
- eventEmitter.dispatchEvent('progress', {
51
- smallestProgress: calculateSmallestProgress(),
52
- });
53
- },
54
- waitForProgress: () => {
55
- const { promise, resolve } = (0, with_resolvers_1.withResolvers)();
56
- const on = () => {
57
- eventEmitter.removeEventListener('progress', on);
58
- resolve();
59
- };
60
- eventEmitter.addEventListener('progress', on);
61
- return promise;
62
- },
63
- getStartingTimestamp,
64
- setPossibleLowestTimestamp,
65
- };
66
- };
67
- exports.makeProgressTracker = makeProgressTracker;
@@ -1 +0,0 @@
1
- export declare const CREATE_WEBM_TIME_SCALE = 1000000;
@@ -1,4 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CREATE_WEBM_TIME_SCALE = void 0;
4
- exports.CREATE_WEBM_TIME_SCALE = 1000000;
@@ -1,2 +0,0 @@
1
- import type { MediaFn, MediaFnGeneratorInput } from '../media-fn';
2
- export declare const createWav: ({ filename, logLevel, onBytesProgress, onMillisecondsProgress, writer, progressTracker, }: MediaFnGeneratorInput) => Promise<MediaFn>;
@@ -1,110 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createWav = void 0;
4
- const log_1 = require("../../log");
5
- const numberTo32BiIntLittleEndian = (num) => {
6
- return new Uint8Array([
7
- num & 0xff,
8
- (num >> 8) & 0xff,
9
- (num >> 16) & 0xff,
10
- (num >> 24) & 0xff,
11
- ]);
12
- };
13
- const numberTo16BitLittleEndian = (num) => {
14
- return new Uint8Array([num & 0xff, (num >> 8) & 0xff]);
15
- };
16
- const BIT_DEPTH = 16;
17
- const BYTES_PER_SAMPLE = BIT_DEPTH / 8;
18
- const createWav = async ({ filename, logLevel, onBytesProgress, onMillisecondsProgress, writer, progressTracker, }) => {
19
- const w = await writer.createContent({ filename, mimeType: 'audio/wav' });
20
- await w.write(new Uint8Array([0x52, 0x49, 0x46, 0x46])); // "RIFF"
21
- const sizePosition = w.getWrittenByteCount();
22
- await w.write(new Uint8Array([0x00, 0x00, 0x00, 0x00])); // Remaining size
23
- await w.write(new Uint8Array([0x57, 0x41, 0x56, 0x45])); // "WAVE"
24
- await w.write(new Uint8Array([0x66, 0x6d, 0x74, 0x20])); // "fmt "
25
- await w.write(new Uint8Array([0x10, 0x00, 0x00, 0x00])); // fmt chunk size = 16
26
- await w.write(new Uint8Array([0x01, 0x00])); // Audio format (PCM) = 1, set 3 if float32 would be true
27
- const channelNumPosition = w.getWrittenByteCount();
28
- await w.write(new Uint8Array([0x01, 0x00])); // Number of channels = 1
29
- const sampleRatePosition = w.getWrittenByteCount();
30
- await w.write(new Uint8Array([0x0, 0x0, 0x00, 0x00])); // Sample rate
31
- const byteRatePosition = w.getWrittenByteCount();
32
- await w.write(new Uint8Array([0x0, 0x0, 0x00, 0x00])); // Byte rate
33
- const blockAlignPosition = w.getWrittenByteCount();
34
- await w.write(new Uint8Array([0x00, 0x00])); // Block align
35
- await w.write(numberTo16BitLittleEndian(BIT_DEPTH)); // Bits per sample
36
- await w.write(new Uint8Array([0x64, 0x61, 0x74, 0x61])); // "data"
37
- const dataSizePosition = w.getWrittenByteCount();
38
- await w.write(new Uint8Array([0x00, 0x00, 0x00, 0x00])); // Remaining size
39
- const operationProm = { current: Promise.resolve() };
40
- const updateSize = async () => {
41
- const size = w.getWrittenByteCount() - sizePosition - 4;
42
- await w.updateDataAt(sizePosition, numberTo32BiIntLittleEndian(size));
43
- const dataSize = w.getWrittenByteCount() - dataSizePosition - 4;
44
- await w.updateDataAt(dataSizePosition, numberTo32BiIntLittleEndian(dataSize));
45
- };
46
- const updateChannelNum = async (numberOfChannels) => {
47
- await w.updateDataAt(channelNumPosition, new Uint8Array([numberOfChannels, 0x00]));
48
- };
49
- const updateSampleRate = async (sampleRate) => {
50
- await w.updateDataAt(sampleRatePosition, numberTo32BiIntLittleEndian(sampleRate));
51
- };
52
- const updateByteRate = async ({ sampleRate, numberOfChannels, }) => {
53
- await w.updateDataAt(byteRatePosition, numberTo32BiIntLittleEndian(sampleRate * numberOfChannels + BYTES_PER_SAMPLE));
54
- };
55
- const updateBlockAlign = async (numberOfChannels) => {
56
- await w.updateDataAt(blockAlignPosition, new Uint8Array(numberTo16BitLittleEndian(numberOfChannels * BYTES_PER_SAMPLE)));
57
- };
58
- const addSample = async (chunk) => {
59
- var _a;
60
- log_1.Log.verbose(logLevel, 'Adding sample', chunk);
61
- await w.write(chunk.data);
62
- onMillisecondsProgress((chunk.timestamp + ((_a = chunk.duration) !== null && _a !== void 0 ? _a : 0)) / 1000);
63
- onBytesProgress(w.getWrittenByteCount());
64
- };
65
- const waitForFinishPromises = [];
66
- return {
67
- save: () => {
68
- return w.save();
69
- },
70
- remove: () => {
71
- return w.remove();
72
- },
73
- addSample: ({ chunk, trackNumber }) => {
74
- if (trackNumber !== 1) {
75
- throw new Error('Only one track supported for WAV');
76
- }
77
- operationProm.current = operationProm.current.then(() => addSample(chunk));
78
- progressTracker.updateTrackProgress(trackNumber, chunk.timestamp);
79
- return operationProm.current;
80
- },
81
- updateTrackSampleRate: () => {
82
- throw new Error('updateTrackSampleRate() not implemented for WAV encoder');
83
- },
84
- addWaitForFinishPromise: (promise) => {
85
- waitForFinishPromises.push(promise);
86
- },
87
- async waitForFinish() {
88
- log_1.Log.verbose(logLevel, 'All write operations queued. Waiting for finish...');
89
- await Promise.all(waitForFinishPromises.map((p) => p()));
90
- await operationProm.current;
91
- await updateSize();
92
- await w.waitForFinish();
93
- },
94
- addTrack: async (track) => {
95
- if (track.type !== 'audio') {
96
- throw new Error('Only audio tracks supported for WAV');
97
- }
98
- await updateChannelNum(track.numberOfChannels);
99
- await updateSampleRate(track.sampleRate);
100
- await updateByteRate({
101
- sampleRate: track.sampleRate,
102
- numberOfChannels: track.numberOfChannels,
103
- });
104
- await updateBlockAlign(track.numberOfChannels);
105
- progressTracker.registerTrack(1);
106
- return Promise.resolve({ trackNumber: 1 });
107
- },
108
- };
109
- };
110
- exports.createWav = createWav;
@@ -1,10 +0,0 @@
1
- export declare const withResolvers: <T>() => {
2
- promise: Promise<T>;
3
- resolve: (value: T | PromiseLike<T>) => void;
4
- reject: (reason?: any) => void;
5
- };
6
- export declare const withResolversAndWaitForReturn: <T>() => {
7
- getPromiseToImmediatelyReturn: () => Promise<T>;
8
- reject: (reason: unknown) => void;
9
- resolve: (value: T | PromiseLike<T>) => void;
10
- };
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.withResolversAndWaitForReturn = exports.withResolvers = void 0;
4
- const withResolvers = function () {
5
- let resolve;
6
- let reject;
7
- const promise = new Promise((res, rej) => {
8
- resolve = res;
9
- reject = rej;
10
- });
11
- return { promise, resolve: resolve, reject: reject };
12
- };
13
- exports.withResolvers = withResolvers;
14
- const withResolversAndWaitForReturn = () => {
15
- const { promise, reject, resolve } = (0, exports.withResolvers)();
16
- const { promise: returnPromise, resolve: resolveReturn } = (0, exports.withResolvers)();
17
- return {
18
- getPromiseToImmediatelyReturn: () => {
19
- resolveReturn(undefined);
20
- return promise;
21
- },
22
- reject: (reason) => {
23
- returnPromise.then(() => reject(reason));
24
- },
25
- resolve,
26
- };
27
- };
28
- exports.withResolversAndWaitForReturn = withResolversAndWaitForReturn;
@@ -1 +0,0 @@
1
- export declare const detectFileType: (data: Uint8Array) => "webp" | "riff" | "webm" | "iso-base-media" | "transport-stream" | "mp3" | "gif" | "png" | "bmp" | "jpeg" | "unknown";
@@ -1,88 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.detectFileType = void 0;
4
- const make_header_1 = require("../boxes/webm/make-header");
5
- const matchesPattern = (pattern) => {
6
- return (data) => {
7
- return pattern.every((value, index) => data[index] === value);
8
- };
9
- };
10
- const isRiff = (data) => {
11
- const riffPattern = new Uint8Array([0x52, 0x49, 0x46, 0x46]);
12
- return matchesPattern(riffPattern)(data.subarray(0, 4));
13
- };
14
- const isWebm = (data) => {
15
- return matchesPattern(make_header_1.webmPattern)(data.subarray(0, 4));
16
- };
17
- const isIsoBaseMedia = (data) => {
18
- const isoBaseMediaMp4Pattern = new TextEncoder().encode('ftyp');
19
- return matchesPattern(isoBaseMediaMp4Pattern)(data.subarray(4, 8));
20
- };
21
- const isTransportStream = (data) => {
22
- return data[0] === 0x47 && data[188] === 0x47;
23
- };
24
- const isMp3 = (data) => {
25
- const mpegPattern = new Uint8Array([0xff, 0xf3, 0xe4, 0x64]);
26
- return matchesPattern(mpegPattern)(data.subarray(0, 4));
27
- };
28
- const isGif = (data) => {
29
- const gifPattern = new Uint8Array([0x47, 0x49, 0x46, 0x38]);
30
- return matchesPattern(gifPattern)(data.subarray(0, 4));
31
- };
32
- const isPng = (data) => {
33
- const pngPattern = new Uint8Array([0x89, 0x50, 0x4e, 0x47]);
34
- return matchesPattern(pngPattern)(data.subarray(0, 4));
35
- };
36
- const isBmp = (data) => {
37
- const bmpPattern = new Uint8Array([0x42, 0x4d]);
38
- return matchesPattern(bmpPattern)(data.subarray(0, 2));
39
- };
40
- const isJpeg = (data) => {
41
- const jpegPattern = new Uint8Array([0xff, 0xd8]);
42
- const jpeg = matchesPattern(jpegPattern)(data.subarray(0, 2));
43
- if (!jpeg) {
44
- return false;
45
- }
46
- const width = data[6] * 256 + data[7];
47
- const height = data[8] * 256 + data[9];
48
- console.log(width, height);
49
- return true;
50
- };
51
- const isWebp = (data) => {
52
- const webpPattern = new Uint8Array([0x52, 0x49, 0x46, 0x46]);
53
- return matchesPattern(webpPattern)(data.subarray(0, 4));
54
- };
55
- const detectFileType = (data) => {
56
- if (isWebp(data)) {
57
- return 'webp';
58
- }
59
- if (isRiff(data)) {
60
- return 'riff';
61
- }
62
- if (isWebm(data)) {
63
- return 'webm';
64
- }
65
- if (isIsoBaseMedia(data)) {
66
- return 'iso-base-media';
67
- }
68
- if (isTransportStream(data)) {
69
- return 'transport-stream';
70
- }
71
- if (isMp3(data)) {
72
- return 'mp3';
73
- }
74
- if (isGif(data)) {
75
- return 'gif';
76
- }
77
- if (isPng(data)) {
78
- return 'png';
79
- }
80
- if (isBmp(data)) {
81
- return 'bmp';
82
- }
83
- if (isJpeg(data)) {
84
- return 'jpeg';
85
- }
86
- return 'unknown';
87
- };
88
- exports.detectFileType = detectFileType;
@@ -1 +0,0 @@
1
- export declare const detectFileType: (data: Uint8Array) => "mp3" | "unknown" | "webm" | "transport-stream" | "iso-base-media" | "riff" | "gif" | "bmp" | "jpeg" | "png" | "webp";