@remotion/media-parser 4.0.209 → 4.0.210

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 (213) hide show
  1. package/buffer.js +2 -0
  2. package/dist/boxes/iso-base-media/get-sample-positions-from-track.js +1 -1
  3. package/dist/boxes/iso-base-media/make-track.js +14 -2
  4. package/dist/boxes/iso-base-media/mdat/mdat.d.ts +2 -1
  5. package/dist/boxes/iso-base-media/mdat/mdat.js +8 -3
  6. package/dist/boxes/iso-base-media/moov/moov.d.ts +2 -1
  7. package/dist/boxes/iso-base-media/moov/moov.js +2 -1
  8. package/dist/boxes/iso-base-media/process-box.d.ts +6 -3
  9. package/dist/boxes/iso-base-media/process-box.js +20 -5
  10. package/dist/boxes/iso-base-media/stsd/avcc.d.ts +1 -1
  11. package/dist/boxes/iso-base-media/stsd/avcc.js +2 -2
  12. package/dist/boxes/iso-base-media/stsd/ctts.js +2 -5
  13. package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +1 -1
  14. package/dist/boxes/iso-base-media/stsd/hvcc.js +2 -2
  15. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +2 -1
  16. package/dist/boxes/iso-base-media/stsd/mebx.js +2 -1
  17. package/dist/boxes/iso-base-media/stsd/samples.d.ts +4 -2
  18. package/dist/boxes/iso-base-media/stsd/samples.js +69 -11
  19. package/dist/boxes/iso-base-media/stsd/stsd.d.ts +2 -1
  20. package/dist/boxes/iso-base-media/stsd/stsd.js +2 -1
  21. package/dist/boxes/iso-base-media/trak/trak.d.ts +2 -1
  22. package/dist/boxes/iso-base-media/trak/trak.js +2 -1
  23. package/dist/boxes/iso-base-media/traversal.d.ts +44 -0
  24. package/dist/boxes/iso-base-media/traversal.js +211 -0
  25. package/dist/boxes/webm/color.d.ts +4 -0
  26. package/dist/boxes/webm/color.js +120 -0
  27. package/dist/boxes/webm/description.js +1 -1
  28. package/dist/boxes/webm/get-ready-tracks.js +3 -3
  29. package/dist/boxes/webm/get-sample-from-block.js +1 -1
  30. package/dist/boxes/webm/get-track.js +16 -1
  31. package/dist/boxes/webm/make-track.d.ts +9 -0
  32. package/dist/boxes/webm/make-track.js +260 -0
  33. package/dist/boxes/webm/parse-ebml.js +2 -2
  34. package/dist/boxes/webm/segments/all-segments.d.ts +36 -3
  35. package/dist/boxes/webm/segments/all-segments.js +34 -6
  36. package/dist/boxes/webm/traversal.d.ts +26 -1
  37. package/dist/boxes/webm/traversal.js +214 -1
  38. package/dist/create/cluster-segment.js +0 -2
  39. package/dist/create/cluster.d.ts +10 -2
  40. package/dist/create/cluster.js +16 -10
  41. package/dist/create/create-media.d.ts +4 -2
  42. package/dist/create/create-media.js +76 -14
  43. package/dist/create/cues.d.ts +0 -0
  44. package/dist/create/cues.js +1 -0
  45. package/dist/create/make-duration-with-padding.d.ts +1 -1
  46. package/dist/create/make-duration-with-padding.js +3 -3
  47. package/dist/create/matroska-cues.d.ts +6 -0
  48. package/dist/create/matroska-cues.js +50 -0
  49. package/dist/create/matroska-info.js +1 -1
  50. package/dist/create/matroska-seek.d.ts +6 -0
  51. package/dist/create/matroska-seek.js +32 -0
  52. package/dist/create/matroska-segment.d.ts +1 -0
  53. package/dist/create/matroska-segment.js +3 -2
  54. package/dist/create/matroska-trackentry.d.ts +9 -14
  55. package/dist/create/matroska-trackentry.js +79 -94
  56. package/dist/emit-available-info.d.ts +12 -0
  57. package/dist/emit-available-info.js +133 -0
  58. package/dist/esm/buffer.mjs +57 -0
  59. package/dist/esm/from-fetch.mjs +72 -0
  60. package/dist/esm/from-node.mjs +48 -0
  61. package/dist/esm/from-web-file.mjs +48 -0
  62. package/dist/esm/index.mjs +6689 -0
  63. package/dist/esm/web-fs.mjs +67 -0
  64. package/dist/get-audio-codec.d.ts +5 -5
  65. package/dist/get-audio-codec.js +41 -57
  66. package/dist/get-container.d.ts +4 -0
  67. package/dist/get-container.js +26 -0
  68. package/dist/get-duration.js +1 -1
  69. package/dist/get-fps.js +1 -1
  70. package/dist/get-sample-aspect-ratio.d.ts +1 -1
  71. package/dist/get-sample-aspect-ratio.js +19 -19
  72. package/dist/get-tracks.d.ts +13 -0
  73. package/dist/get-tracks.js +8 -8
  74. package/dist/get-video-codec.d.ts +5 -2
  75. package/dist/get-video-codec.js +111 -21
  76. package/dist/has-all-info.d.ts +2 -2
  77. package/dist/has-all-info.js +23 -9
  78. package/dist/index.d.ts +3 -1
  79. package/dist/options.d.ts +97 -30
  80. package/dist/parse-media.js +43 -62
  81. package/dist/parse-video.d.ts +2 -1
  82. package/dist/parse-video.js +3 -1
  83. package/dist/parser-state.js +1 -2
  84. package/dist/readers/from-fetch.js +24 -4
  85. package/dist/readers/from-node.js +13 -3
  86. package/dist/readers/from-web-file.js +14 -2
  87. package/dist/readers/reader.d.ts +6 -1
  88. package/dist/samples-from-moof.js +1 -1
  89. package/dist/traversal.d.ts +0 -21
  90. package/dist/traversal.js +1 -158
  91. package/dist/truthy.d.ts +3 -0
  92. package/dist/truthy.js +7 -0
  93. package/dist/writers/buffer.d.ts +2 -0
  94. package/dist/writers/buffer.js +58 -0
  95. package/dist/writers/web-fs.d.ts +1 -0
  96. package/dist/writers/web-fs.js +42 -18
  97. package/dist/writers/writer.d.ts +4 -2
  98. package/fetch.js +2 -0
  99. package/node.js +2 -0
  100. package/package.json +43 -8
  101. package/web-file.js +2 -0
  102. package/web-fs.js +2 -0
  103. package/.eslintrc +0 -8
  104. package/input.webm +0 -0
  105. package/src/add-new-matroska-tracks.ts +0 -23
  106. package/src/boxes/iso-base-media/base-type.ts +0 -4
  107. package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +0 -68
  108. package/src/boxes/iso-base-media/esds/esds-descriptors.ts +0 -135
  109. package/src/boxes/iso-base-media/esds/esds.ts +0 -49
  110. package/src/boxes/iso-base-media/ftyp.ts +0 -39
  111. package/src/boxes/iso-base-media/get-sample-positions-from-track.ts +0 -69
  112. package/src/boxes/iso-base-media/make-track.ts +0 -116
  113. package/src/boxes/iso-base-media/mdat/mdat.ts +0 -140
  114. package/src/boxes/iso-base-media/mdhd.ts +0 -59
  115. package/src/boxes/iso-base-media/moov/moov.ts +0 -43
  116. package/src/boxes/iso-base-media/mvhd.ts +0 -114
  117. package/src/boxes/iso-base-media/process-box.ts +0 -748
  118. package/src/boxes/iso-base-media/stsd/av1c.ts +0 -19
  119. package/src/boxes/iso-base-media/stsd/avcc.ts +0 -36
  120. package/src/boxes/iso-base-media/stsd/colr.ts +0 -49
  121. package/src/boxes/iso-base-media/stsd/ctts.ts +0 -64
  122. package/src/boxes/iso-base-media/stsd/hvcc.ts +0 -32
  123. package/src/boxes/iso-base-media/stsd/keys.ts +0 -27
  124. package/src/boxes/iso-base-media/stsd/mebx.ts +0 -54
  125. package/src/boxes/iso-base-media/stsd/pasp.ts +0 -32
  126. package/src/boxes/iso-base-media/stsd/samples.ts +0 -359
  127. package/src/boxes/iso-base-media/stsd/stco.ts +0 -52
  128. package/src/boxes/iso-base-media/stsd/stsc.ts +0 -61
  129. package/src/boxes/iso-base-media/stsd/stsd.ts +0 -55
  130. package/src/boxes/iso-base-media/stsd/stss.ts +0 -47
  131. package/src/boxes/iso-base-media/stsd/stsz.ts +0 -75
  132. package/src/boxes/iso-base-media/stsd/stts.ts +0 -62
  133. package/src/boxes/iso-base-media/tfdt.ts +0 -37
  134. package/src/boxes/iso-base-media/tfhd.ts +0 -66
  135. package/src/boxes/iso-base-media/tkhd.ts +0 -150
  136. package/src/boxes/iso-base-media/to-date.ts +0 -9
  137. package/src/boxes/iso-base-media/trak/trak.ts +0 -43
  138. package/src/boxes/iso-base-media/trun.ts +0 -74
  139. package/src/boxes/iso-base-media/void-box.ts +0 -4
  140. package/src/boxes/webm/allowed-partial-segments.ts +0 -1
  141. package/src/boxes/webm/av1-codec-private.ts +0 -113
  142. package/src/boxes/webm/description.ts +0 -104
  143. package/src/boxes/webm/ebml.ts +0 -98
  144. package/src/boxes/webm/get-ready-tracks.ts +0 -36
  145. package/src/boxes/webm/get-sample-from-block.ts +0 -125
  146. package/src/boxes/webm/get-track.ts +0 -257
  147. package/src/boxes/webm/make-header.ts +0 -253
  148. package/src/boxes/webm/parse-ebml.ts +0 -259
  149. package/src/boxes/webm/parse-webm-header.ts +0 -18
  150. package/src/boxes/webm/segments/all-segments.ts +0 -888
  151. package/src/boxes/webm/segments/block-simple-block-flags.ts +0 -52
  152. package/src/boxes/webm/segments/parse-children.ts +0 -144
  153. package/src/boxes/webm/segments/track-entry.ts +0 -38
  154. package/src/boxes/webm/segments.ts +0 -147
  155. package/src/boxes/webm/traversal.ts +0 -45
  156. package/src/buffer-iterator.ts +0 -555
  157. package/src/create/cluster-segment.ts +0 -62
  158. package/src/create/cluster.ts +0 -64
  159. package/src/create/create-media.ts +0 -136
  160. package/src/create/make-duration-with-padding.ts +0 -15
  161. package/src/create/matroska-header.ts +0 -63
  162. package/src/create/matroska-info.ts +0 -30
  163. package/src/create/matroska-segment.ts +0 -10
  164. package/src/create/matroska-trackentry.ts +0 -325
  165. package/src/create/timescale.ts +0 -1
  166. package/src/get-audio-codec.ts +0 -270
  167. package/src/get-dimensions.ts +0 -47
  168. package/src/get-duration.ts +0 -103
  169. package/src/get-fps.ts +0 -113
  170. package/src/get-sample-aspect-ratio.ts +0 -204
  171. package/src/get-sample-positions.ts +0 -93
  172. package/src/get-tracks.ts +0 -147
  173. package/src/get-video-codec.ts +0 -117
  174. package/src/has-all-info.ts +0 -81
  175. package/src/index.ts +0 -18
  176. package/src/make-hvc1-codec-strings.ts +0 -55
  177. package/src/options.ts +0 -118
  178. package/src/parse-media.ts +0 -183
  179. package/src/parse-result.ts +0 -79
  180. package/src/parse-video.ts +0 -83
  181. package/src/parser-context.ts +0 -10
  182. package/src/parser-state.ts +0 -178
  183. package/src/readers/from-fetch.ts +0 -90
  184. package/src/readers/from-node.ts +0 -51
  185. package/src/readers/from-web-file.ts +0 -49
  186. package/src/readers/reader.ts +0 -15
  187. package/src/samples-from-moof.ts +0 -102
  188. package/src/test/aspect-ratio.test.ts +0 -42
  189. package/src/test/av1.test.ts +0 -108
  190. package/src/test/create-matroska.test.ts +0 -287
  191. package/src/test/duration.test.ts +0 -18
  192. package/src/test/keys.test.ts +0 -47
  193. package/src/test/matroska.test.ts +0 -463
  194. package/src/test/mvhd.test.ts +0 -94
  195. package/src/test/parse-esds.test.ts +0 -98
  196. package/src/test/parse-stco.test.ts +0 -61
  197. package/src/test/parse-stsc.test.ts +0 -104
  198. package/src/test/parse-stsz.test.ts +0 -57
  199. package/src/test/parse-stts.test.ts +0 -38
  200. package/src/test/parse-video.test.ts +0 -101
  201. package/src/test/parse-webm.test.ts +0 -17
  202. package/src/test/samples-from-moof.test.ts +0 -2496
  203. package/src/test/stream-local.test.ts +0 -743
  204. package/src/test/stream-remote.test.ts +0 -59
  205. package/src/test/stream-samples.test.ts +0 -181
  206. package/src/test/stsd.test.ts +0 -265
  207. package/src/test/tkhd.test.ts +0 -87
  208. package/src/traversal.ts +0 -528
  209. package/src/webcodec-sample-types.ts +0 -29
  210. package/src/writers/web-fs.ts +0 -50
  211. package/src/writers/writer.ts +0 -12
  212. package/tsconfig.json +0 -14
  213. package/tsconfig.tsbuildinfo +0 -1
@@ -1,59 +0,0 @@
1
- import {expect, test} from 'bun:test';
2
- import {parseMedia} from '../parse-media';
3
-
4
- test('Should stream', async () => {
5
- const result = await parseMedia({
6
- src: 'https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/1080/Big_Buck_Bunny_1080_10s_1MB.mp4',
7
- fields: {
8
- durationInSeconds: true,
9
- fps: true,
10
- dimensions: true,
11
- videoCodec: true,
12
- },
13
- });
14
- expect(result.durationInSeconds).toBe(10);
15
- expect(result.fps).toBe(60);
16
- expect(result.dimensions).toEqual({
17
- width: 1920,
18
- height: 1080,
19
- });
20
- expect(result.videoCodec).toEqual('h264');
21
- });
22
-
23
- test(
24
- 'Should stream from Wikipedia',
25
- async () => {
26
- const result = await parseMedia({
27
- src: 'https://upload.wikimedia.org/wikipedia/commons/transcoded/c/c0/Big_Buck_Bunny_4K.webm/Big_Buck_Bunny_4K.webm.720p.vp9.webm',
28
- fields: {
29
- durationInSeconds: true,
30
- fps: true,
31
- dimensions: true,
32
- videoCodec: true,
33
- },
34
- });
35
- expect(result.durationInSeconds).toBe(634.571);
36
- // TODO: Not yet implemented
37
- expect(result.fps).toBe(null);
38
- expect(result.dimensions).toEqual({
39
- width: 1280,
40
- height: 720,
41
- });
42
- expect(result.videoCodec).toEqual('vp9');
43
- },
44
- {timeout: 10000},
45
- );
46
-
47
- test('Should handle redirect', async () => {
48
- const result = await parseMedia({
49
- src: 'https://remotion.dev/bbb.mp4',
50
- fields: {
51
- fps: true,
52
- videoCodec: true,
53
- durationInSeconds: true,
54
- },
55
- });
56
- expect(result.videoCodec).toEqual('h264');
57
- expect(result.fps).toEqual(24);
58
- expect(result.durationInSeconds).toEqual(596.4733333333334);
59
- });
@@ -1,181 +0,0 @@
1
- import {RenderInternals} from '@remotion/renderer';
2
- import {expect, test} from 'bun:test';
3
- import {getSamplePositionsFromTrack} from '../boxes/iso-base-media/get-sample-positions-from-track';
4
- import type {TrakBox} from '../boxes/iso-base-media/trak/trak';
5
- import {parseMedia} from '../parse-media';
6
- import {nodeReader} from '../readers/from-node';
7
-
8
- test('Stream samples', async () => {
9
- const {videoTracks, audioTracks} = await parseMedia({
10
- src: RenderInternals.exampleVideos.mp4withmp3,
11
- fields: {
12
- tracks: true,
13
- videoCodec: true,
14
- audioCodec: true,
15
- },
16
- reader: nodeReader,
17
- });
18
-
19
- const description = new Uint8Array([
20
- 1, 100, 0, 32, 255, 225, 0, 32, 103, 100, 0, 32, 172, 217, 64, 68, 2, 39,
21
- 150, 92, 5, 168, 16, 16, 45, 40, 0, 0, 3, 0, 8, 0, 0, 3, 1, 224, 120, 193,
22
- 140, 176, 1, 0, 6, 104, 235, 224, 140, 178, 44, 253, 248, 248, 0,
23
- ]);
24
-
25
- const {trakBox, ...trackInfo} = videoTracks[0];
26
- expect(trackInfo).toEqual({
27
- type: 'video',
28
- trackId: 1,
29
- description,
30
- timescale: 15360,
31
- codec: 'avc1.640020',
32
- sampleAspectRatio: {
33
- numerator: 1,
34
- denominator: 1,
35
- },
36
- width: 1080,
37
- height: 1080,
38
- codedWidth: 1080,
39
- codedHeight: 1080,
40
- displayAspectHeight: 1080,
41
- displayAspectWidth: 1080,
42
- rotation: 0,
43
- });
44
-
45
- expect(getSamplePositionsFromTrack(trakBox as TrakBox, null));
46
-
47
- const [firstAudioTrack] = audioTracks;
48
- const {trakBox: trakBox2, ...audioTrack} = firstAudioTrack;
49
-
50
- expect(audioTrack).toEqual({
51
- type: 'audio',
52
- trackId: 2,
53
- timescale: 48000,
54
- numberOfChannels: 2,
55
- codec: 'mp3',
56
- sampleRate: 48000,
57
- description: undefined,
58
- });
59
- expect(getSamplePositionsFromTrack(trakBox2 as TrakBox, null)).toEqual([
60
- {
61
- offset: 6908,
62
- size: 960,
63
- isKeyframe: true,
64
- dts: 0,
65
- duration: 1152,
66
- cts: 0,
67
- },
68
- {
69
- offset: 8566,
70
- size: 960,
71
- isKeyframe: true,
72
- dts: 1152,
73
- duration: 1152,
74
- cts: 1152,
75
- },
76
- {
77
- offset: 9526,
78
- size: 960,
79
- isKeyframe: true,
80
- dts: 2304,
81
- duration: 1152,
82
- cts: 2304,
83
- },
84
- {
85
- offset: 11081,
86
- size: 960,
87
- isKeyframe: true,
88
- dts: 3456,
89
- duration: 1152,
90
- cts: 3456,
91
- },
92
- {
93
- offset: 12589,
94
- size: 960,
95
- isKeyframe: true,
96
- dts: 4608,
97
- duration: 1152,
98
- cts: 4608,
99
- },
100
- {
101
- offset: 13549,
102
- size: 960,
103
- isKeyframe: true,
104
- dts: 5760,
105
- duration: 1152,
106
- cts: 5760,
107
- },
108
- {
109
- offset: 15120,
110
- size: 960,
111
- isKeyframe: true,
112
- dts: 6912,
113
- duration: 1152,
114
- cts: 6912,
115
- },
116
- {
117
- offset: 16781,
118
- size: 960,
119
- isKeyframe: true,
120
- dts: 8064,
121
- duration: 1152,
122
- cts: 8064,
123
- },
124
- {
125
- offset: 18276,
126
- size: 960,
127
- isKeyframe: true,
128
- dts: 9216,
129
- duration: 1152,
130
- cts: 9216,
131
- },
132
- {
133
- offset: 19236,
134
- size: 960,
135
- isKeyframe: true,
136
- dts: 10368,
137
- duration: 1152,
138
- cts: 10368,
139
- },
140
- {
141
- offset: 20972,
142
- size: 960,
143
- isKeyframe: true,
144
- dts: 11520,
145
- duration: 1152,
146
- cts: 11520,
147
- },
148
- {
149
- offset: 22518,
150
- size: 960,
151
- isKeyframe: true,
152
- dts: 12672,
153
- duration: 1152,
154
- cts: 12672,
155
- },
156
- {
157
- offset: 23478,
158
- size: 960,
159
- isKeyframe: true,
160
- dts: 13824,
161
- duration: 1152,
162
- cts: 13824,
163
- },
164
- {
165
- offset: 24438,
166
- size: 960,
167
- isKeyframe: true,
168
- dts: 14976,
169
- duration: 1152,
170
- cts: 14976,
171
- },
172
- {
173
- offset: 25398,
174
- size: 960,
175
- isKeyframe: true,
176
- dts: 16128,
177
- duration: 1152,
178
- cts: 16128,
179
- },
180
- ]);
181
- });
@@ -1,265 +0,0 @@
1
- import {expect, test} from 'bun:test';
2
- import {processSample} from '../boxes/iso-base-media/stsd/samples';
3
- import {parseStsd} from '../boxes/iso-base-media/stsd/stsd';
4
- import {getArrayBufferIterator} from '../buffer-iterator';
5
- import {makeParserState} from '../parser-state';
6
-
7
- test('Should be able to parse a STSD audio box correctly', async () => {
8
- const buffer = Uint8Array.from([
9
- // box size
10
- 0, 0, 0, 159,
11
- // data format "stsd"
12
- 115, 116, 115, 100,
13
- // reserved
14
- 0, 0, 0, 0, 0, 0,
15
- // number of entries
16
- 0, 1,
17
- // size
18
- 0, 0, 0, 143,
19
- // "mp4a"
20
- 109, 112, 52, 97,
21
- // reserved
22
- 0, 0, 0, 0, 0, 0,
23
- // data reference index
24
- 0, 1,
25
- // version
26
- 0, 1,
27
- // revision level
28
- 0, 0, 0, 0, 0, 0,
29
- // revision level
30
- 0, 2, 0, 16, 255, 254, 0, 0, 172, 68, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 0,
31
- 2, 0, 0, 0, 2, 0, 0, 0, 91, 119, 97, 118, 101, 0, 0, 0, 12, 102, 114, 109,
32
- 97, 109, 112, 52, 97, 0, 0, 0, 12, 109, 112, 52, 97, 0, 0, 0, 0, 0, 0, 0,
33
- 51, 101, 115, 100, 115, 0, 0, 0, 0, 3, 128, 128, 128, 34, 0, 0, 0, 4, 128,
34
- 128, 128, 20, 64, 20, 0, 24, 0, 0, 2, 238, 0, 0, 0, 0, 0, 5, 128, 128, 128,
35
- 2, 18, 16, 6, 128, 128, 128, 1, 2, 0, 0, 0, 8, 0, 0, 0, 0,
36
- ]);
37
-
38
- const iterator = getArrayBufferIterator(buffer, null);
39
- iterator.discard(8);
40
-
41
- const parsed = await parseStsd({
42
- iterator,
43
- offset: 0,
44
- size: 159,
45
- options: {
46
- canSkipVideoData: true,
47
- onAudioTrack: null,
48
- onVideoTrack: null,
49
- parserState: makeParserState({
50
- hasAudioCallbacks: false,
51
- hasVideoCallbacks: false,
52
- signal: undefined,
53
- }),
54
- nullifySamples: false,
55
- },
56
- });
57
-
58
- expect(parsed).toEqual({
59
- offset: 0,
60
- boxSize: 159,
61
- type: 'stsd-box',
62
- numberOfEntries: 1,
63
- samples: [
64
- {
65
- size: 143,
66
- offset: 16,
67
- format: 'mp4a',
68
- dataReferenceIndex: 1,
69
- version: 1,
70
- revisionLevel: 0,
71
- vendor: [0, 0, 0, 0],
72
- numberOfChannels: 2,
73
- type: 'audio',
74
- sampleSize: 16,
75
- compressionId: -2,
76
- packetSize: 0,
77
- samplesPerPacket: 1024,
78
- bitsPerSample: 2,
79
- bytesPerFrame: 2,
80
- bytesPerPacket: 1,
81
- sampleRate: 44100,
82
- children: [
83
- {
84
- boxSize: 91,
85
- boxType: 'wave',
86
- children: [
87
- {
88
- boxSize: 12,
89
- boxType: 'frma',
90
- children: [],
91
- offset: 76,
92
- type: 'regular-box',
93
- },
94
- {
95
- boxSize: 12,
96
- boxType: 'mp4a',
97
- children: [],
98
- offset: 88,
99
- type: 'regular-box',
100
- },
101
- {
102
- descriptors: [
103
- {
104
- objectTypeIndication: 'aac',
105
- type: 'decoder-config-descriptor',
106
- asNumber: 64,
107
- avgBitrate: 0,
108
- bufferSizeDB: 6144,
109
- maxBitrate: 192000,
110
- streamType: 5,
111
- decoderSpecificConfigs: [
112
- {
113
- audioObjectType: 2,
114
- channelConfiguration: 2,
115
- samplingFrequencyIndex: 4,
116
- type: 'audio-specific-config',
117
- asBytes: new Uint8Array([18, 16]),
118
- },
119
- {
120
- type: 'unknown-decoder-specific-config',
121
- },
122
- ],
123
- upStream: 0,
124
- },
125
- ],
126
- esId: 0,
127
- sizeOfInstance: 34,
128
- tag: 3,
129
- type: 'esds-box',
130
- version: 0,
131
- },
132
- {
133
- boxSize: 8,
134
- boxType: '\u0000\u0000\u0000\u0000',
135
- children: [],
136
- offset: 151,
137
- type: 'regular-box',
138
- },
139
- ],
140
- offset: 68,
141
- type: 'regular-box',
142
- },
143
- ],
144
- },
145
- ],
146
- });
147
- });
148
-
149
- test('Should be able to parse a STSD video box correctly', async () => {
150
- const buffer = Uint8Array.from([
151
- // box size
152
- 0, 0, 0, 158,
153
- // data format "avc1"
154
- 97, 118, 99, 49,
155
- // padding
156
- 0, 0, 0, 0, 0, 0,
157
- // data reference index
158
- 0, 1,
159
- // version
160
- 0, 0,
161
- // revision level
162
- 0, 0,
163
- // vendor
164
- 0, 0, 0, 0,
165
- // temporal quality
166
- 0, 0, 0, 0,
167
- // spatial quality
168
- 0, 0, 0, 0,
169
- // width
170
- 4, 56,
171
- // height
172
- 4, 56,
173
- // horiz resolution
174
- 0, 72, 0, 0,
175
- // vert resolution
176
- 0, 72, 0, 0,
177
- // frame count
178
- 0, 0,
179
- // compressor name
180
- // 0
181
- 0, 0, 0, 1,
182
- // 1
183
- 0, 0, 0, 0,
184
- // 2
185
- 0, 0, 0, 0,
186
- // 3
187
- 0, 0, 0, 0,
188
- // 4
189
- 0, 0, 0, 0,
190
- // 5
191
- 0, 0, 0, 0,
192
- // 6
193
- 0, 0, 0, 0,
194
- // 7
195
- 0, 0, 0, 0,
196
- // 8
197
- 0, 0, 0, 0,
198
- // depth
199
- 0, 24,
200
- // color space
201
- 255, 255,
202
- // avcC info (not parsed)
203
- 0, 0, 0, 56, 97, 118, 99, 67, 1, 100, 0, 32, 255, 225, 0, 27, 103, 100, 0,
204
- 32, 172, 217, 64, 68, 2, 39, 150, 92, 4, 64, 0, 0, 3, 0, 64, 0, 0, 12, 3,
205
- 198, 12, 101, 128, 1, 0, 6, 104, 235, 224, 140, 178, 44, 253, 248, 248, 0,
206
- 0, 0, 0, 16, 112, 97, 115, 112, 0, 0, 0, 1, 0, 0, 0, 1,
207
- ]);
208
-
209
- const parsed = await processSample({
210
- iterator: getArrayBufferIterator(buffer, null),
211
- options: {
212
- canSkipVideoData: true,
213
- onAudioTrack: null,
214
- onVideoTrack: null,
215
- parserState: makeParserState({
216
- hasAudioCallbacks: false,
217
- hasVideoCallbacks: false,
218
- signal: undefined,
219
- }),
220
- nullifySamples: false,
221
- },
222
- });
223
- expect(parsed.sample).toEqual({
224
- size: 158,
225
- format: 'avc1',
226
- dataReferenceIndex: 1,
227
- version: 0,
228
- revisionLevel: 0,
229
- vendor: [0, 0, 0, 0],
230
- type: 'video',
231
- temporalQuality: 0,
232
- spacialQuality: 0,
233
- width: 1080,
234
- height: 1080,
235
- horizontalResolutionPpi: 72,
236
- verticalResolutionPpi: 72,
237
- dataSize: 0,
238
- frameCountPerSample: 1,
239
- compressorName: [
240
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
241
- 0, 0, 0, 0, 0, 0, 0,
242
- ],
243
- offset: 0,
244
- depth: 24,
245
- colorTableId: -1,
246
- descriptors: [
247
- {
248
- description: new Uint8Array([
249
- 1, 100, 0, 32, 255, 225, 0, 27, 103, 100, 0, 32, 172, 217, 64, 68, 2,
250
- 39, 150, 92, 4, 64, 0, 0, 3, 0, 64, 0, 0, 12, 3, 198, 12, 101, 128, 1,
251
- 0, 6, 104, 235, 224, 140, 178, 44, 253, 248, 248, 0,
252
- ]),
253
- type: 'avcc-box',
254
- configurationString: '640020',
255
- },
256
- {
257
- boxSize: 16,
258
- offset: 142,
259
- type: 'pasp-box',
260
- hSpacing: 1,
261
- vSpacing: 1,
262
- },
263
- ],
264
- });
265
- });
@@ -1,87 +0,0 @@
1
- import {expect, test} from 'bun:test';
2
- import {parseTkhd} from '../boxes/iso-base-media/tkhd';
3
- import {getArrayBufferIterator} from '../buffer-iterator';
4
-
5
- test('Should be able to parse a TKHD box', () => {
6
- const buffer = Uint8Array.from([
7
- // size, 32 bit
8
- 0, 0, 0, 92,
9
- // mvhd atom, 32 bit
10
- 116, 107, 104, 100,
11
- // version, 8 unsigned bit
12
- 0,
13
- // flags, 24 bit
14
- 0, 0, 15,
15
- // creation time, 32 bit
16
- 226, 94, 106, 178,
17
- // modification time, 32 bit
18
- 226, 94, 106, 182,
19
- // track id, 32 bit
20
- 0, 0, 0, 5,
21
- // reserved, 32 bit
22
- 0, 0, 0, 0,
23
- // duration, 32 bit
24
- 0, 0, 7, 248,
25
- // reserved, 32 bit
26
- 0, 0, 0, 0,
27
- // reserved, 32 bit
28
- 0, 0, 0, 0,
29
- // layer, 16 bit
30
- 0, 0,
31
- // alternate group, 16 bit
32
- 0, 0,
33
- // volume, 16 bit
34
- 0, 0,
35
- // reserved, 16 bit
36
- 0, 0,
37
- // matrix[0], 32 bit
38
- 0, 1, 0, 0,
39
- // matrix[1], 32 bit
40
- 0, 0, 0, 0,
41
- // matrix[2], 32 bit
42
- 0, 0, 0, 0,
43
- // matrix[3], 32 bit
44
- 0, 0, 0, 0,
45
- // matrix[4], 32 bit
46
- 0, 1, 0, 0,
47
- // matrix[5], 32 bit
48
- 0, 0, 0, 0,
49
- // matrix[6], 32 bit
50
- 0, 0, 0, 0,
51
- // matrix[7], 32 bit
52
- 0, 0, 0, 0,
53
- // matrix[8], 32 bit
54
- 64, 0, 0, 0,
55
- // width, 32 bit
56
- 0, 0, 0, 0,
57
- // height, 32 bit
58
- 0, 0, 0, 0,
59
- ]);
60
-
61
- const iterator = getArrayBufferIterator(buffer, null);
62
- iterator.discard(8);
63
- const mvhd = parseTkhd({
64
- iterator,
65
- offset: 0,
66
- size: 92,
67
- });
68
- expect(mvhd).toEqual({
69
- type: 'tkhd-box',
70
- boxSize: 92,
71
- offset: 0,
72
- alternateGroup: 0,
73
- creationTime: 1714993714000,
74
- duration: 2040,
75
- modificationTime: 1714993718000,
76
- trackId: 5,
77
- version: 0,
78
- layer: 0,
79
- volume: 0,
80
- matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1],
81
- width: 0,
82
- height: 0,
83
- rotation: 0,
84
- unrotatedWidth: 0,
85
- unrotatedHeight: 0,
86
- });
87
- });