@remotion/media-parser 4.0.194 → 4.0.196
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.
- package/dist/add-new-matroska-tracks.d.ts +8 -0
- package/dist/add-new-matroska-tracks.js +14 -0
- package/dist/av1-codec-string.d.ts +3 -0
- package/dist/av1-codec-string.js +91 -0
- package/dist/boxes/iso-base-media/esds/decoder-specific-config.d.ts +14 -0
- package/dist/boxes/iso-base-media/esds/decoder-specific-config.js +38 -0
- package/dist/boxes/iso-base-media/esds/esds-descriptors.d.ts +8 -0
- package/dist/boxes/iso-base-media/esds/esds-descriptors.js +22 -2
- package/dist/boxes/iso-base-media/ftype.d.ts +9 -0
- package/dist/boxes/iso-base-media/ftype.js +31 -0
- package/dist/boxes/iso-base-media/make-track.d.ts +3 -0
- package/dist/boxes/iso-base-media/make-track.js +112 -0
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +6 -2
- package/dist/boxes/iso-base-media/mdat/mdat.js +90 -6
- package/dist/boxes/iso-base-media/moov/moov.d.ts +4 -2
- package/dist/boxes/iso-base-media/moov/moov.js +4 -2
- package/dist/boxes/iso-base-media/mvhd.js +7 -1
- package/dist/boxes/iso-base-media/process-box.d.ts +20 -3
- package/dist/boxes/iso-base-media/process-box.js +322 -34
- package/dist/boxes/iso-base-media/stsd/av1c.d.ts +9 -0
- package/dist/boxes/iso-base-media/stsd/av1c.js +10 -0
- package/dist/boxes/iso-base-media/stsd/avcc-hvcc.d.ts +20 -0
- package/dist/boxes/iso-base-media/stsd/avcc-hvcc.js +73 -0
- package/dist/boxes/iso-base-media/stsd/avcc.d.ts +10 -0
- package/dist/boxes/iso-base-media/stsd/avcc.js +21 -0
- package/dist/boxes/iso-base-media/stsd/colr.d.ts +11 -0
- package/dist/boxes/iso-base-media/stsd/colr.js +35 -0
- package/dist/boxes/iso-base-media/stsd/ctts.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/ctts.js +30 -0
- package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +11 -0
- package/dist/boxes/iso-base-media/stsd/hvcc.js +17 -0
- package/dist/boxes/iso-base-media/stsd/keys.js +1 -0
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +4 -2
- package/dist/boxes/iso-base-media/stsd/mebx.js +4 -2
- package/dist/boxes/iso-base-media/stsd/pasp.d.ts +12 -0
- package/dist/boxes/iso-base-media/stsd/pasp.js +17 -0
- package/dist/boxes/iso-base-media/stsd/samples.d.ts +12 -5
- package/dist/boxes/iso-base-media/stsd/samples.js +27 -10
- package/dist/boxes/iso-base-media/stsd/stsd.d.ts +4 -2
- package/dist/boxes/iso-base-media/stsd/stsd.js +6 -2
- package/dist/boxes/iso-base-media/stsd/stss.d.ts +13 -0
- package/dist/boxes/iso-base-media/stsd/stss.js +28 -0
- package/dist/boxes/iso-base-media/stsd/stsz.d.ts +9 -3
- package/dist/boxes/iso-base-media/stsd/stsz.js +14 -2
- package/dist/boxes/iso-base-media/stsd/stts.d.ts +15 -0
- package/dist/boxes/iso-base-media/stsd/stts.js +35 -0
- package/dist/boxes/iso-base-media/tkhd.d.ts +3 -0
- package/dist/boxes/iso-base-media/tkhd.js +41 -14
- package/dist/boxes/iso-base-media/trak/trak.d.ts +4 -2
- package/dist/boxes/iso-base-media/trak/trak.js +4 -2
- package/dist/boxes/iso-base-media/void-box.d.ts +4 -0
- package/dist/boxes/iso-base-media/void-box.js +2 -0
- package/dist/boxes/webm/allowed-partial-segments.d.ts +1 -0
- package/dist/boxes/webm/allowed-partial-segments.js +4 -0
- package/dist/boxes/webm/av1-codec-private.d.ts +2 -0
- package/dist/boxes/webm/av1-codec-private.js +95 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.d.ts +14 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.js +67 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame.d.ts +11 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame.js +14 -0
- package/dist/boxes/webm/bitstream/av1/chroma-sample-position.d.ts +6 -0
- package/dist/boxes/webm/bitstream/av1/chroma-sample-position.js +9 -0
- package/dist/boxes/webm/bitstream/av1/color-config.d.ts +16 -0
- package/dist/boxes/webm/bitstream/av1/color-config.js +103 -0
- package/dist/boxes/webm/bitstream/av1/color-primaries.d.ts +14 -0
- package/dist/boxes/webm/bitstream/av1/color-primaries.js +17 -0
- package/dist/boxes/webm/bitstream/av1/decoder-model-info.d.ts +9 -0
- package/dist/boxes/webm/bitstream/av1/decoder-model-info.js +17 -0
- package/dist/boxes/webm/bitstream/av1/header-segment.d.ts +51 -0
- package/dist/boxes/webm/bitstream/av1/header-segment.js +183 -0
- package/dist/boxes/webm/bitstream/av1/matrix-coefficients.d.ts +17 -0
- package/dist/boxes/webm/bitstream/av1/matrix-coefficients.js +20 -0
- package/dist/boxes/webm/bitstream/av1/operating-parameters-info.d.ts +10 -0
- package/dist/boxes/webm/bitstream/av1/operating-parameters-info.js +15 -0
- package/dist/boxes/webm/bitstream/av1/temporal-point-info.d.ts +5 -0
- package/dist/boxes/webm/bitstream/av1/temporal-point-info.js +8 -0
- package/dist/boxes/webm/bitstream/av1/timing-info.d.ts +8 -0
- package/dist/boxes/webm/bitstream/av1/timing-info.js +20 -0
- package/dist/boxes/webm/bitstream/av1/transfer-characteristics.d.ts +21 -0
- package/dist/boxes/webm/bitstream/av1/transfer-characteristics.js +24 -0
- package/dist/boxes/webm/bitstream/av1/uvlc.d.ts +2 -0
- package/dist/boxes/webm/bitstream/av1/uvlc.js +20 -0
- package/dist/boxes/webm/bitstream/av1.d.ts +20 -0
- package/dist/boxes/webm/bitstream/av1.js +118 -0
- package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.d.ts +0 -0
- package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.js +1 -0
- package/dist/boxes/webm/description.d.ts +2 -0
- package/dist/boxes/webm/description.js +83 -0
- package/dist/boxes/webm/get-ready-tracks.d.ts +3 -0
- package/dist/boxes/webm/get-ready-tracks.js +29 -0
- package/dist/boxes/webm/get-track.d.ts +6 -0
- package/dist/boxes/webm/get-track.js +183 -0
- package/dist/boxes/webm/parse-webm-header.d.ts +2 -1
- package/dist/boxes/webm/parse-webm-header.js +2 -2
- package/dist/boxes/webm/segments/all-segments.d.ts +269 -0
- package/dist/boxes/webm/segments/all-segments.js +277 -0
- package/dist/boxes/webm/segments/duration.d.ts +1 -1
- package/dist/boxes/webm/segments/duration.js +13 -9
- package/dist/boxes/webm/segments/info.d.ts +2 -1
- package/dist/boxes/webm/segments/info.js +12 -4
- package/dist/boxes/webm/segments/main.d.ts +0 -2
- package/dist/boxes/webm/segments/main.js +0 -11
- package/dist/boxes/webm/segments/muxing.d.ts +1 -1
- package/dist/boxes/webm/segments/muxing.js +1 -2
- package/dist/boxes/webm/segments/parse-children.d.ts +11 -1
- package/dist/boxes/webm/segments/parse-children.js +82 -6
- package/dist/boxes/webm/segments/seek-head.d.ts +2 -1
- package/dist/boxes/webm/segments/seek-head.js +12 -3
- package/dist/boxes/webm/segments/seek-position.d.ts +1 -1
- package/dist/boxes/webm/segments/seek-position.js +1 -2
- package/dist/boxes/webm/segments/seek.d.ts +7 -2
- package/dist/boxes/webm/segments/seek.js +22 -9
- package/dist/boxes/webm/segments/track-entry.d.ts +102 -22
- package/dist/boxes/webm/segments/track-entry.js +269 -57
- package/dist/boxes/webm/segments/tracks.d.ts +2 -1
- package/dist/boxes/webm/segments/tracks.js +12 -4
- package/dist/boxes/webm/segments/void.d.ts +1 -1
- package/dist/boxes/webm/segments/void.js +1 -2
- package/dist/boxes/webm/segments/writing.d.ts +1 -1
- package/dist/boxes/webm/segments/writing.js +1 -2
- package/dist/boxes/webm/segments.d.ts +8 -4
- package/dist/boxes/webm/segments.js +176 -40
- package/dist/boxes/webm/traversal.d.ts +7 -0
- package/dist/boxes/webm/traversal.js +25 -0
- package/dist/buffer-iterator.d.ts +15 -1
- package/dist/buffer-iterator.js +115 -46
- package/dist/combine-uint8array.d.ts +1 -0
- package/dist/combine-uint8array.js +13 -0
- package/dist/from-fetch.d.ts +2 -0
- package/dist/from-fetch.js +54 -0
- package/dist/from-node.js +6 -0
- package/dist/from-web-file.d.ts +2 -0
- package/dist/from-web-file.js +34 -0
- package/dist/from-web.js +6 -9
- package/dist/get-audio-codec.d.ts +19 -0
- package/dist/get-audio-codec.js +153 -60
- package/dist/get-dimensions.d.ts +8 -2
- package/dist/get-dimensions.js +13 -91
- package/dist/get-duration.js +4 -7
- package/dist/get-fps.d.ts +4 -3
- package/dist/get-fps.js +17 -116
- package/dist/get-sample-aspect-ratio.d.ts +37 -0
- package/dist/get-sample-aspect-ratio.js +137 -0
- package/dist/get-sample-positions.d.ts +11 -1
- package/dist/get-sample-positions.js +31 -2
- package/dist/get-tracks.d.ts +44 -5
- package/dist/get-tracks.js +66 -48
- package/dist/get-video-codec.d.ts +2 -0
- package/dist/get-video-codec.js +47 -31
- package/dist/get-video-metadata.d.ts +2 -0
- package/dist/get-video-metadata.js +44 -0
- package/dist/has-all-info.d.ts +2 -1
- package/dist/has-all-info.js +14 -5
- package/dist/index.d.ts +1 -0
- package/dist/make-hvc1-codec-strings.d.ts +2 -0
- package/dist/make-hvc1-codec-strings.js +47 -0
- package/dist/options.d.ts +26 -4
- package/dist/parse-media.js +62 -17
- package/dist/parse-result.d.ts +16 -5
- package/dist/parse-video.d.ts +11 -2
- package/dist/parse-video.js +14 -6
- package/dist/parser-context.d.ts +8 -0
- package/dist/parser-context.js +2 -0
- package/dist/parser-state.d.ts +23 -0
- package/dist/parser-state.js +112 -0
- package/dist/read-and-increment-offset.d.ts +28 -0
- package/dist/read-and-increment-offset.js +177 -0
- package/dist/reader.d.ts +2 -2
- package/dist/traversal.d.ts +37 -0
- package/dist/traversal.js +244 -1
- package/dist/understand-vorbis.d.ts +1 -0
- package/dist/understand-vorbis.js +12 -0
- package/dist/webcodec-sample-types.d.ts +21 -0
- package/dist/webcodec-sample-types.js +2 -0
- package/package.json +10 -2
- package/src/add-new-matroska-tracks.ts +23 -0
- package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +61 -0
- package/src/boxes/iso-base-media/esds/esds-descriptors.ts +33 -2
- package/src/boxes/iso-base-media/make-track.ts +157 -0
- package/src/boxes/iso-base-media/mdat/mdat.ts +131 -0
- package/src/boxes/iso-base-media/moov/moov.ts +8 -3
- package/src/boxes/iso-base-media/mvhd.ts +7 -1
- package/src/boxes/iso-base-media/process-box.ts +388 -38
- package/src/boxes/iso-base-media/stsd/av1c.ts +19 -0
- package/src/boxes/iso-base-media/stsd/avcc.ts +36 -0
- package/src/boxes/iso-base-media/stsd/colr.ts +49 -0
- package/src/boxes/iso-base-media/stsd/ctts.ts +55 -0
- package/src/boxes/iso-base-media/stsd/hvcc.ts +32 -0
- package/src/boxes/iso-base-media/stsd/keys.ts +2 -0
- package/src/boxes/iso-base-media/stsd/mebx.ts +8 -3
- package/src/boxes/iso-base-media/stsd/pasp.ts +32 -0
- package/src/boxes/iso-base-media/stsd/samples.ts +43 -16
- package/src/boxes/iso-base-media/stsd/stco.ts +50 -0
- package/src/boxes/iso-base-media/stsd/stsc.ts +61 -0
- package/src/boxes/iso-base-media/stsd/stsd.ts +10 -3
- package/src/boxes/iso-base-media/stsd/stss.ts +47 -0
- package/src/boxes/iso-base-media/stsd/stsz.ts +75 -0
- package/src/boxes/iso-base-media/tkhd.ts +63 -16
- package/src/boxes/iso-base-media/trak/trak.ts +8 -3
- package/src/boxes/iso-base-media/void-box.ts +4 -0
- package/src/boxes/webm/allowed-partial-segments.ts +1 -0
- package/src/boxes/webm/av1-codec-private.ts +113 -0
- package/src/boxes/webm/description.ts +101 -0
- package/src/boxes/webm/get-ready-tracks.ts +36 -0
- package/src/boxes/webm/get-track.ts +250 -0
- package/src/boxes/webm/parse-webm-header.ts +6 -2
- package/src/boxes/webm/segments/all-segments.ts +285 -0
- package/src/boxes/webm/segments/duration.ts +15 -8
- package/src/boxes/webm/segments/info.ts +18 -4
- package/src/boxes/webm/segments/main.ts +0 -13
- package/src/boxes/webm/segments/muxing.ts +1 -1
- package/src/boxes/webm/segments/parse-children.ts +132 -9
- package/src/boxes/webm/segments/seek-head.ts +17 -4
- package/src/boxes/webm/segments/seek-position.ts +1 -2
- package/src/boxes/webm/segments/seek.ts +31 -9
- package/src/boxes/webm/segments/track-entry.ts +475 -65
- package/src/boxes/webm/segments/tracks.ts +17 -7
- package/src/boxes/webm/segments/void.ts +4 -2
- package/src/boxes/webm/segments/writing.ts +1 -1
- package/src/boxes/webm/segments.ts +266 -42
- package/src/boxes/webm/traversal.ts +32 -0
- package/src/buffer-iterator.ts +140 -45
- package/src/combine-uint8array.ts +13 -0
- package/src/{from-web.ts → from-fetch.ts} +9 -1
- package/src/from-node.ts +8 -0
- package/src/from-web-file.ts +39 -0
- package/src/get-audio-codec.ts +213 -84
- package/src/get-dimensions.ts +25 -132
- package/src/get-duration.ts +4 -8
- package/src/get-fps.ts +27 -172
- package/src/get-sample-aspect-ratio.ts +204 -0
- package/src/get-sample-positions.ts +93 -0
- package/src/get-tracks.ts +147 -0
- package/src/get-video-codec.ts +62 -47
- package/src/has-all-info.ts +35 -5
- package/src/index.ts +8 -0
- package/src/make-hvc1-codec-strings.ts +55 -0
- package/src/options.ts +48 -9
- package/src/parse-media.ts +90 -21
- package/src/parse-result.ts +28 -4
- package/src/parse-video.ts +30 -7
- package/src/parser-context.ts +9 -0
- package/src/parser-state.ts +151 -0
- package/src/reader.ts +2 -2
- package/src/test/aspect-ratio.test.ts +42 -0
- package/src/test/av1.test.ts +108 -0
- package/src/test/duration.test.ts +5 -21
- package/src/test/matroska.test.ts +350 -31
- package/src/test/mvhd.test.ts +6 -1
- package/src/test/parse-esds.test.ts +29 -6
- package/src/test/parse-stco.test.ts +59 -0
- package/src/test/parse-stsc.test.ts +104 -0
- package/src/test/parse-stsz.test.ts +57 -0
- package/src/test/parse-stts.test.ts +1 -1
- package/src/test/parse-video.test.ts +23 -35
- package/src/test/parse-webm.test.ts +5 -5
- package/src/test/stream-local.test.ts +542 -46
- package/src/test/stream-remote.test.ts +15 -13
- package/src/test/stream-samples.test.ts +259 -0
- package/src/test/stsd.test.ts +60 -8
- package/src/test/tkhd.test.ts +4 -1
- package/src/traversal.ts +496 -0
- package/src/webcodec-sample-types.ts +30 -0
- package/tsconfig.json +5 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/boxes.json +0 -1
- package/dist/boxes/iso-base-media/esds-descriptors.d.ts +0 -21
- package/dist/boxes/iso-base-media/esds-descriptors.js +0 -62
- package/dist/boxes/iso-base-media/esds.d.ts +0 -15
- package/dist/boxes/iso-base-media/esds.js +0 -27
- package/dist/get-codec.d.ts +0 -4
- package/dist/get-codec.js +0 -22
- /package/dist/{get-samples.d.ts → boxes/webm/bitstream/av1/frame.d.ts} +0 -0
- /package/dist/{get-samples.js → boxes/webm/bitstream/av1/frame.js} +0 -0
- /package/src/boxes/iso-base-media/{stts → stsd}/stts.ts +0 -0
package/src/buffer-iterator.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
knownIdsWithOneLength,
|
|
3
|
+
knownIdsWithThreeLength,
|
|
4
|
+
knownIdsWithTwoLength,
|
|
5
|
+
} from './boxes/webm/segments/all-segments';
|
|
6
|
+
|
|
1
7
|
export class OffsetCounter {
|
|
2
8
|
#offset: number;
|
|
3
9
|
#discardedBytes: number;
|
|
@@ -22,6 +28,10 @@ export class OffsetCounter {
|
|
|
22
28
|
return this.#offset - this.#discardedBytes;
|
|
23
29
|
}
|
|
24
30
|
|
|
31
|
+
setDiscardedOffset(offset: number) {
|
|
32
|
+
this.#discardedBytes = offset;
|
|
33
|
+
}
|
|
34
|
+
|
|
25
35
|
discardBytes(amount: number) {
|
|
26
36
|
this.#discardedBytes += amount;
|
|
27
37
|
}
|
|
@@ -37,6 +47,7 @@ export class OffsetCounter {
|
|
|
37
47
|
|
|
38
48
|
const isoBaseMediaMp4Pattern = new TextEncoder().encode('ftyp');
|
|
39
49
|
const webmPattern = new Uint8Array([0x1a, 0x45, 0xdf, 0xa3]);
|
|
50
|
+
const mpegPattern = new Uint8Array([0xff, 0xf3, 0xe4, 0x64]);
|
|
40
51
|
|
|
41
52
|
const matchesPattern = (pattern: Uint8Array) => {
|
|
42
53
|
return (data: Uint8Array) => {
|
|
@@ -57,7 +68,7 @@ export const getArrayBufferIterator = (
|
|
|
57
68
|
});
|
|
58
69
|
if (!buf.resize) {
|
|
59
70
|
throw new Error(
|
|
60
|
-
'`ArrayBuffer.resize` is not supported in this Runtime. Use at least Node.js 20 or Bun.',
|
|
71
|
+
'`ArrayBuffer.resize` is not supported in this Runtime. On the server: Use at least Node.js 20 or Bun. In the browser: Chrome 111, Edge 111, Safari 16.4, Firefox 128, Opera 111',
|
|
61
72
|
);
|
|
62
73
|
}
|
|
63
74
|
|
|
@@ -105,6 +116,24 @@ export const getArrayBufferIterator = (
|
|
|
105
116
|
return val;
|
|
106
117
|
};
|
|
107
118
|
|
|
119
|
+
const getUint32Le = () => {
|
|
120
|
+
const val = view.getUint32(counter.getDiscardedOffset(), true);
|
|
121
|
+
counter.increment(4);
|
|
122
|
+
return val;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const getInt32Le = () => {
|
|
126
|
+
const val = view.getInt32(counter.getDiscardedOffset(), true);
|
|
127
|
+
counter.increment(4);
|
|
128
|
+
return val;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
const getInt32 = () => {
|
|
132
|
+
const val = view.getInt32(counter.getDiscardedOffset());
|
|
133
|
+
counter.increment(4);
|
|
134
|
+
return val;
|
|
135
|
+
};
|
|
136
|
+
|
|
108
137
|
const addData = (newData: Uint8Array) => {
|
|
109
138
|
const oldLength = buf.byteLength;
|
|
110
139
|
const newLength = oldLength + newData.byteLength;
|
|
@@ -131,6 +160,10 @@ export const getArrayBufferIterator = (
|
|
|
131
160
|
return matchesPattern(webmPattern)(data.subarray(0, 4));
|
|
132
161
|
};
|
|
133
162
|
|
|
163
|
+
const isMp3 = () => {
|
|
164
|
+
return matchesPattern(mpegPattern)(data.subarray(0, 4));
|
|
165
|
+
};
|
|
166
|
+
|
|
134
167
|
const removeBytesRead = () => {
|
|
135
168
|
const bytesToRemove = counter.getDiscardedOffset();
|
|
136
169
|
|
|
@@ -147,19 +180,102 @@ export const getArrayBufferIterator = (
|
|
|
147
180
|
};
|
|
148
181
|
|
|
149
182
|
const skipTo = (offset: number) => {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
183
|
+
const becomesSmaller = offset < counter.getOffset();
|
|
184
|
+
if (becomesSmaller) {
|
|
185
|
+
buf.resize(0);
|
|
186
|
+
counter.decrement(counter.getOffset() - offset);
|
|
187
|
+
counter.setDiscardedOffset(offset);
|
|
188
|
+
} else {
|
|
189
|
+
buf.resize(offset);
|
|
190
|
+
const currentOffset = counter.getOffset();
|
|
191
|
+
counter.increment(offset - currentOffset);
|
|
192
|
+
removeBytesRead();
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
const peekB = (length: number) => {
|
|
197
|
+
// eslint-disable-next-line no-console
|
|
198
|
+
console.log(
|
|
199
|
+
[...getSlice(length)].map((b) => b.toString(16).padStart(2, '0')),
|
|
200
|
+
);
|
|
201
|
+
counter.decrement(length);
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
const peekD = (length: number) => {
|
|
205
|
+
// eslint-disable-next-line no-console
|
|
206
|
+
console.log([...getSlice(length)].map((b) => b));
|
|
207
|
+
counter.decrement(length);
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
const leb128 = () => {
|
|
211
|
+
let result = 0;
|
|
212
|
+
let shift = 0;
|
|
213
|
+
let byte;
|
|
214
|
+
|
|
215
|
+
do {
|
|
216
|
+
byte = getBits(8);
|
|
217
|
+
result |= (byte & 0x7f) << shift;
|
|
218
|
+
shift += 7;
|
|
219
|
+
} while (byte >= 0x80); // Continue if the high bit is set
|
|
220
|
+
|
|
221
|
+
return result;
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
let bitIndex = 0;
|
|
225
|
+
|
|
226
|
+
const stopReadingBits = () => {
|
|
227
|
+
bitIndex = 0;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
let byteToShift = 0;
|
|
231
|
+
|
|
232
|
+
const startReadingBits = () => {
|
|
233
|
+
byteToShift = getUint8();
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
const getBits = (bits: number) => {
|
|
237
|
+
let result = 0;
|
|
238
|
+
let bitsCollected = 0;
|
|
239
|
+
|
|
240
|
+
while (bitsCollected < bits) {
|
|
241
|
+
if (bitIndex >= 8) {
|
|
242
|
+
bitIndex = 0;
|
|
243
|
+
byteToShift = getUint8();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const remainingBitsInByte = 8 - bitIndex;
|
|
247
|
+
const bitsToReadNow = Math.min(bits - bitsCollected, remainingBitsInByte);
|
|
248
|
+
const mask = (1 << bitsToReadNow) - 1;
|
|
249
|
+
const shift = remainingBitsInByte - bitsToReadNow;
|
|
250
|
+
|
|
251
|
+
result <<= bitsToReadNow;
|
|
252
|
+
result |= (byteToShift >> shift) & mask;
|
|
253
|
+
|
|
254
|
+
bitsCollected += bitsToReadNow;
|
|
255
|
+
bitIndex += bitsToReadNow;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return result;
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
const destroy = () => {
|
|
262
|
+
data = new Uint8Array(0);
|
|
263
|
+
buf.resize(0);
|
|
154
264
|
};
|
|
155
265
|
|
|
156
266
|
return {
|
|
267
|
+
startReadingBits,
|
|
268
|
+
stopReadingBits,
|
|
157
269
|
skipTo,
|
|
158
270
|
addData,
|
|
159
271
|
counter,
|
|
272
|
+
peekB,
|
|
273
|
+
peekD,
|
|
274
|
+
getBits,
|
|
160
275
|
byteLength,
|
|
161
276
|
bytesRemaining,
|
|
162
277
|
isIsoBaseMedia,
|
|
278
|
+
leb128,
|
|
163
279
|
discardFirstBytes: removeBytesRead,
|
|
164
280
|
isWebm,
|
|
165
281
|
discard: (length: number) => {
|
|
@@ -182,43 +298,13 @@ export const getArrayBufferIterator = (
|
|
|
182
298
|
|
|
183
299
|
// Catch void block
|
|
184
300
|
// https://www.matroska.org/technical/elements.html
|
|
185
|
-
|
|
186
|
-
'0xec',
|
|
187
|
-
'0xae',
|
|
188
|
-
'0xd7',
|
|
189
|
-
'0x9c',
|
|
190
|
-
'0x86',
|
|
191
|
-
'0x83',
|
|
192
|
-
'0xe0',
|
|
193
|
-
'0xb0',
|
|
194
|
-
'0xba',
|
|
195
|
-
'0x9a',
|
|
196
|
-
'0xe1',
|
|
197
|
-
'0xbf',
|
|
198
|
-
'0x88',
|
|
199
|
-
];
|
|
301
|
+
|
|
200
302
|
if (knownIdsWithOneLength.includes(firstOneString)) {
|
|
201
303
|
return firstOneString;
|
|
202
304
|
}
|
|
203
305
|
|
|
204
306
|
const firstTwo = getSlice(1);
|
|
205
307
|
|
|
206
|
-
const knownIdsWithTwoLength = [
|
|
207
|
-
'0x4dbb',
|
|
208
|
-
'0x53ac',
|
|
209
|
-
'0xec01',
|
|
210
|
-
'0x73c5',
|
|
211
|
-
'0x53c0',
|
|
212
|
-
'0x4d80',
|
|
213
|
-
'0x5741',
|
|
214
|
-
'0x4489',
|
|
215
|
-
'0x55ee',
|
|
216
|
-
'0x55b0',
|
|
217
|
-
'0x7ba9',
|
|
218
|
-
'0x63a2',
|
|
219
|
-
'0x73a4',
|
|
220
|
-
];
|
|
221
|
-
|
|
222
308
|
const firstTwoString = `${firstOneString}${Array.from(
|
|
223
309
|
new Uint8Array(firstTwo),
|
|
224
310
|
)
|
|
@@ -231,14 +317,6 @@ export const getArrayBufferIterator = (
|
|
|
231
317
|
return firstTwoString;
|
|
232
318
|
}
|
|
233
319
|
|
|
234
|
-
const knownIdsWithThreeLength = [
|
|
235
|
-
'0x4d808c',
|
|
236
|
-
'0x57418c',
|
|
237
|
-
'0x448988',
|
|
238
|
-
'0x22b59c',
|
|
239
|
-
'0x23e383',
|
|
240
|
-
];
|
|
241
|
-
|
|
242
320
|
const firstThree = getSlice(1);
|
|
243
321
|
|
|
244
322
|
const firstThreeString = `${firstTwoString}${Array.from(
|
|
@@ -319,10 +397,18 @@ export const getArrayBufferIterator = (
|
|
|
319
397
|
getUint32,
|
|
320
398
|
// https://developer.apple.com/documentation/quicktime-file-format/sound_sample_description_version_1
|
|
321
399
|
// A 32-bit unsigned fixed-point number (16.16) that indicates the rate at which the sound samples were obtained.
|
|
322
|
-
|
|
400
|
+
getFixedPointUnsigned1616Number: () => {
|
|
323
401
|
const val = getUint32();
|
|
324
402
|
return val / 2 ** 16;
|
|
325
403
|
},
|
|
404
|
+
getFixedPointSigned1616Number: () => {
|
|
405
|
+
const val = getInt32();
|
|
406
|
+
return val / 2 ** 16;
|
|
407
|
+
},
|
|
408
|
+
getFixedPointSigned230Number: () => {
|
|
409
|
+
const val = getInt32();
|
|
410
|
+
return val / 2 ** 30;
|
|
411
|
+
},
|
|
326
412
|
getPascalString: () => {
|
|
327
413
|
const val = getSlice(32);
|
|
328
414
|
return [...Array.from(new Uint8Array(val))];
|
|
@@ -345,6 +431,15 @@ export const getArrayBufferIterator = (
|
|
|
345
431
|
counter.increment(8);
|
|
346
432
|
return val;
|
|
347
433
|
},
|
|
434
|
+
getFloat32: () => {
|
|
435
|
+
const val = view.getFloat32(counter.getDiscardedOffset());
|
|
436
|
+
counter.increment(4);
|
|
437
|
+
return val;
|
|
438
|
+
},
|
|
439
|
+
getUint32Le,
|
|
440
|
+
getInt32Le,
|
|
441
|
+
destroy,
|
|
442
|
+
isMp3,
|
|
348
443
|
};
|
|
349
444
|
};
|
|
350
445
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const combineUint8Arrays = (
|
|
2
|
+
array1: Uint8Array | null,
|
|
3
|
+
array2: Uint8Array,
|
|
4
|
+
) => {
|
|
5
|
+
if (!array1) {
|
|
6
|
+
return array2;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const combined = new Uint8Array(array1.length + array2.length);
|
|
10
|
+
combined.set(array1);
|
|
11
|
+
combined.set(array2, array1.length);
|
|
12
|
+
return combined;
|
|
13
|
+
};
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type {ReaderInterface} from './reader';
|
|
2
2
|
|
|
3
|
-
export const
|
|
3
|
+
export const fetchReader: ReaderInterface = {
|
|
4
4
|
read: async (src, range) => {
|
|
5
|
+
if (typeof src !== 'string') {
|
|
6
|
+
throw new Error('src must be a string when using `webReader`');
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
const resolvedUrl =
|
|
6
10
|
typeof window !== 'undefined' && typeof window.location !== 'undefined'
|
|
7
11
|
? new URL(src, window.location.origin).toString()
|
|
@@ -46,6 +50,10 @@ export const webReader: ReaderInterface = {
|
|
|
46
50
|
return {reader, contentLength};
|
|
47
51
|
},
|
|
48
52
|
getLength: async (src) => {
|
|
53
|
+
if (typeof src !== 'string') {
|
|
54
|
+
throw new Error('src must be a string when using `webReader`');
|
|
55
|
+
}
|
|
56
|
+
|
|
49
57
|
const res = await fetch(src, {
|
|
50
58
|
method: 'HEAD',
|
|
51
59
|
});
|
package/src/from-node.ts
CHANGED
|
@@ -5,6 +5,10 @@ import type {ReaderInterface} from './reader';
|
|
|
5
5
|
|
|
6
6
|
export const nodeReader: ReaderInterface = {
|
|
7
7
|
read: async (src, range) => {
|
|
8
|
+
if (typeof src !== 'string') {
|
|
9
|
+
throw new Error('src must be a string when using `nodeReader`');
|
|
10
|
+
}
|
|
11
|
+
|
|
8
12
|
const stream = createReadStream(src, {
|
|
9
13
|
start: range === null ? 0 : typeof range === 'number' ? range : range[0],
|
|
10
14
|
end:
|
|
@@ -23,6 +27,10 @@ export const nodeReader: ReaderInterface = {
|
|
|
23
27
|
};
|
|
24
28
|
},
|
|
25
29
|
getLength: async (src) => {
|
|
30
|
+
if (typeof src !== 'string') {
|
|
31
|
+
throw new Error('src must be a string when using `nodeReader`');
|
|
32
|
+
}
|
|
33
|
+
|
|
26
34
|
const stats = await stat(src);
|
|
27
35
|
return stats.size;
|
|
28
36
|
},
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type {ReaderInterface} from './reader';
|
|
2
|
+
|
|
3
|
+
export const webFileReader: ReaderInterface = {
|
|
4
|
+
read: (file, range) => {
|
|
5
|
+
if (typeof file === 'string') {
|
|
6
|
+
throw new Error('`inputTypeFileReader` only supports `File` objects');
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const part =
|
|
10
|
+
range === null
|
|
11
|
+
? file
|
|
12
|
+
: typeof range === 'number'
|
|
13
|
+
? file.slice(range)
|
|
14
|
+
: file.slice(range[0], range[1]);
|
|
15
|
+
|
|
16
|
+
const reader = new FileReader();
|
|
17
|
+
reader.readAsArrayBuffer(file);
|
|
18
|
+
|
|
19
|
+
return new Promise((resolve, reject) => {
|
|
20
|
+
reader.onload = () => {
|
|
21
|
+
resolve({
|
|
22
|
+
reader: part.stream().getReader(),
|
|
23
|
+
contentLength: file.size,
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
reader.onerror = (error) => {
|
|
28
|
+
reject(error);
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
getLength: (src) => {
|
|
33
|
+
if (typeof src === 'string') {
|
|
34
|
+
throw new Error('`inputTypeFileReader` only supports `File` objects');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return Promise.resolve(src.size);
|
|
38
|
+
},
|
|
39
|
+
};
|