@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.
Files changed (275) hide show
  1. package/dist/add-new-matroska-tracks.d.ts +8 -0
  2. package/dist/add-new-matroska-tracks.js +14 -0
  3. package/dist/av1-codec-string.d.ts +3 -0
  4. package/dist/av1-codec-string.js +91 -0
  5. package/dist/boxes/iso-base-media/esds/decoder-specific-config.d.ts +14 -0
  6. package/dist/boxes/iso-base-media/esds/decoder-specific-config.js +38 -0
  7. package/dist/boxes/iso-base-media/esds/esds-descriptors.d.ts +8 -0
  8. package/dist/boxes/iso-base-media/esds/esds-descriptors.js +22 -2
  9. package/dist/boxes/iso-base-media/ftype.d.ts +9 -0
  10. package/dist/boxes/iso-base-media/ftype.js +31 -0
  11. package/dist/boxes/iso-base-media/make-track.d.ts +3 -0
  12. package/dist/boxes/iso-base-media/make-track.js +112 -0
  13. package/dist/boxes/iso-base-media/mdat/mdat.d.ts +6 -2
  14. package/dist/boxes/iso-base-media/mdat/mdat.js +90 -6
  15. package/dist/boxes/iso-base-media/moov/moov.d.ts +4 -2
  16. package/dist/boxes/iso-base-media/moov/moov.js +4 -2
  17. package/dist/boxes/iso-base-media/mvhd.js +7 -1
  18. package/dist/boxes/iso-base-media/process-box.d.ts +20 -3
  19. package/dist/boxes/iso-base-media/process-box.js +322 -34
  20. package/dist/boxes/iso-base-media/stsd/av1c.d.ts +9 -0
  21. package/dist/boxes/iso-base-media/stsd/av1c.js +10 -0
  22. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.d.ts +20 -0
  23. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.js +73 -0
  24. package/dist/boxes/iso-base-media/stsd/avcc.d.ts +10 -0
  25. package/dist/boxes/iso-base-media/stsd/avcc.js +21 -0
  26. package/dist/boxes/iso-base-media/stsd/colr.d.ts +11 -0
  27. package/dist/boxes/iso-base-media/stsd/colr.js +35 -0
  28. package/dist/boxes/iso-base-media/stsd/ctts.d.ts +19 -0
  29. package/dist/boxes/iso-base-media/stsd/ctts.js +30 -0
  30. package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +11 -0
  31. package/dist/boxes/iso-base-media/stsd/hvcc.js +17 -0
  32. package/dist/boxes/iso-base-media/stsd/keys.js +1 -0
  33. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +4 -2
  34. package/dist/boxes/iso-base-media/stsd/mebx.js +4 -2
  35. package/dist/boxes/iso-base-media/stsd/pasp.d.ts +12 -0
  36. package/dist/boxes/iso-base-media/stsd/pasp.js +17 -0
  37. package/dist/boxes/iso-base-media/stsd/samples.d.ts +12 -5
  38. package/dist/boxes/iso-base-media/stsd/samples.js +27 -10
  39. package/dist/boxes/iso-base-media/stsd/stsd.d.ts +4 -2
  40. package/dist/boxes/iso-base-media/stsd/stsd.js +6 -2
  41. package/dist/boxes/iso-base-media/stsd/stss.d.ts +13 -0
  42. package/dist/boxes/iso-base-media/stsd/stss.js +28 -0
  43. package/dist/boxes/iso-base-media/stsd/stsz.d.ts +9 -3
  44. package/dist/boxes/iso-base-media/stsd/stsz.js +14 -2
  45. package/dist/boxes/iso-base-media/stsd/stts.d.ts +15 -0
  46. package/dist/boxes/iso-base-media/stsd/stts.js +35 -0
  47. package/dist/boxes/iso-base-media/tkhd.d.ts +3 -0
  48. package/dist/boxes/iso-base-media/tkhd.js +41 -14
  49. package/dist/boxes/iso-base-media/trak/trak.d.ts +4 -2
  50. package/dist/boxes/iso-base-media/trak/trak.js +4 -2
  51. package/dist/boxes/iso-base-media/void-box.d.ts +4 -0
  52. package/dist/boxes/iso-base-media/void-box.js +2 -0
  53. package/dist/boxes/webm/allowed-partial-segments.d.ts +1 -0
  54. package/dist/boxes/webm/allowed-partial-segments.js +4 -0
  55. package/dist/boxes/webm/av1-codec-private.d.ts +2 -0
  56. package/dist/boxes/webm/av1-codec-private.js +95 -0
  57. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.d.ts +14 -0
  58. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.js +67 -0
  59. package/dist/boxes/webm/bitstream/av1/bitstream-frame.d.ts +11 -0
  60. package/dist/boxes/webm/bitstream/av1/bitstream-frame.js +14 -0
  61. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.d.ts +6 -0
  62. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.js +9 -0
  63. package/dist/boxes/webm/bitstream/av1/color-config.d.ts +16 -0
  64. package/dist/boxes/webm/bitstream/av1/color-config.js +103 -0
  65. package/dist/boxes/webm/bitstream/av1/color-primaries.d.ts +14 -0
  66. package/dist/boxes/webm/bitstream/av1/color-primaries.js +17 -0
  67. package/dist/boxes/webm/bitstream/av1/decoder-model-info.d.ts +9 -0
  68. package/dist/boxes/webm/bitstream/av1/decoder-model-info.js +17 -0
  69. package/dist/boxes/webm/bitstream/av1/header-segment.d.ts +51 -0
  70. package/dist/boxes/webm/bitstream/av1/header-segment.js +183 -0
  71. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.d.ts +17 -0
  72. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.js +20 -0
  73. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.d.ts +10 -0
  74. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.js +15 -0
  75. package/dist/boxes/webm/bitstream/av1/temporal-point-info.d.ts +5 -0
  76. package/dist/boxes/webm/bitstream/av1/temporal-point-info.js +8 -0
  77. package/dist/boxes/webm/bitstream/av1/timing-info.d.ts +8 -0
  78. package/dist/boxes/webm/bitstream/av1/timing-info.js +20 -0
  79. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.d.ts +21 -0
  80. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.js +24 -0
  81. package/dist/boxes/webm/bitstream/av1/uvlc.d.ts +2 -0
  82. package/dist/boxes/webm/bitstream/av1/uvlc.js +20 -0
  83. package/dist/boxes/webm/bitstream/av1.d.ts +20 -0
  84. package/dist/boxes/webm/bitstream/av1.js +118 -0
  85. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.d.ts +0 -0
  86. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.js +1 -0
  87. package/dist/boxes/webm/description.d.ts +2 -0
  88. package/dist/boxes/webm/description.js +83 -0
  89. package/dist/boxes/webm/get-ready-tracks.d.ts +3 -0
  90. package/dist/boxes/webm/get-ready-tracks.js +29 -0
  91. package/dist/boxes/webm/get-track.d.ts +6 -0
  92. package/dist/boxes/webm/get-track.js +183 -0
  93. package/dist/boxes/webm/parse-webm-header.d.ts +2 -1
  94. package/dist/boxes/webm/parse-webm-header.js +2 -2
  95. package/dist/boxes/webm/segments/all-segments.d.ts +269 -0
  96. package/dist/boxes/webm/segments/all-segments.js +277 -0
  97. package/dist/boxes/webm/segments/duration.d.ts +1 -1
  98. package/dist/boxes/webm/segments/duration.js +13 -9
  99. package/dist/boxes/webm/segments/info.d.ts +2 -1
  100. package/dist/boxes/webm/segments/info.js +12 -4
  101. package/dist/boxes/webm/segments/main.d.ts +0 -2
  102. package/dist/boxes/webm/segments/main.js +0 -11
  103. package/dist/boxes/webm/segments/muxing.d.ts +1 -1
  104. package/dist/boxes/webm/segments/muxing.js +1 -2
  105. package/dist/boxes/webm/segments/parse-children.d.ts +11 -1
  106. package/dist/boxes/webm/segments/parse-children.js +82 -6
  107. package/dist/boxes/webm/segments/seek-head.d.ts +2 -1
  108. package/dist/boxes/webm/segments/seek-head.js +12 -3
  109. package/dist/boxes/webm/segments/seek-position.d.ts +1 -1
  110. package/dist/boxes/webm/segments/seek-position.js +1 -2
  111. package/dist/boxes/webm/segments/seek.d.ts +7 -2
  112. package/dist/boxes/webm/segments/seek.js +22 -9
  113. package/dist/boxes/webm/segments/track-entry.d.ts +102 -22
  114. package/dist/boxes/webm/segments/track-entry.js +269 -57
  115. package/dist/boxes/webm/segments/tracks.d.ts +2 -1
  116. package/dist/boxes/webm/segments/tracks.js +12 -4
  117. package/dist/boxes/webm/segments/void.d.ts +1 -1
  118. package/dist/boxes/webm/segments/void.js +1 -2
  119. package/dist/boxes/webm/segments/writing.d.ts +1 -1
  120. package/dist/boxes/webm/segments/writing.js +1 -2
  121. package/dist/boxes/webm/segments.d.ts +8 -4
  122. package/dist/boxes/webm/segments.js +176 -40
  123. package/dist/boxes/webm/traversal.d.ts +7 -0
  124. package/dist/boxes/webm/traversal.js +25 -0
  125. package/dist/buffer-iterator.d.ts +15 -1
  126. package/dist/buffer-iterator.js +115 -46
  127. package/dist/combine-uint8array.d.ts +1 -0
  128. package/dist/combine-uint8array.js +13 -0
  129. package/dist/from-fetch.d.ts +2 -0
  130. package/dist/from-fetch.js +54 -0
  131. package/dist/from-node.js +6 -0
  132. package/dist/from-web-file.d.ts +2 -0
  133. package/dist/from-web-file.js +34 -0
  134. package/dist/from-web.js +6 -9
  135. package/dist/get-audio-codec.d.ts +19 -0
  136. package/dist/get-audio-codec.js +153 -60
  137. package/dist/get-dimensions.d.ts +8 -2
  138. package/dist/get-dimensions.js +13 -91
  139. package/dist/get-duration.js +4 -7
  140. package/dist/get-fps.d.ts +4 -3
  141. package/dist/get-fps.js +17 -116
  142. package/dist/get-sample-aspect-ratio.d.ts +37 -0
  143. package/dist/get-sample-aspect-ratio.js +137 -0
  144. package/dist/get-sample-positions.d.ts +11 -1
  145. package/dist/get-sample-positions.js +31 -2
  146. package/dist/get-tracks.d.ts +44 -5
  147. package/dist/get-tracks.js +66 -48
  148. package/dist/get-video-codec.d.ts +2 -0
  149. package/dist/get-video-codec.js +47 -31
  150. package/dist/get-video-metadata.d.ts +2 -0
  151. package/dist/get-video-metadata.js +44 -0
  152. package/dist/has-all-info.d.ts +2 -1
  153. package/dist/has-all-info.js +14 -5
  154. package/dist/index.d.ts +1 -0
  155. package/dist/make-hvc1-codec-strings.d.ts +2 -0
  156. package/dist/make-hvc1-codec-strings.js +47 -0
  157. package/dist/options.d.ts +26 -4
  158. package/dist/parse-media.js +62 -17
  159. package/dist/parse-result.d.ts +16 -5
  160. package/dist/parse-video.d.ts +11 -2
  161. package/dist/parse-video.js +14 -6
  162. package/dist/parser-context.d.ts +8 -0
  163. package/dist/parser-context.js +2 -0
  164. package/dist/parser-state.d.ts +23 -0
  165. package/dist/parser-state.js +112 -0
  166. package/dist/read-and-increment-offset.d.ts +28 -0
  167. package/dist/read-and-increment-offset.js +177 -0
  168. package/dist/reader.d.ts +2 -2
  169. package/dist/traversal.d.ts +37 -0
  170. package/dist/traversal.js +244 -1
  171. package/dist/understand-vorbis.d.ts +1 -0
  172. package/dist/understand-vorbis.js +12 -0
  173. package/dist/webcodec-sample-types.d.ts +21 -0
  174. package/dist/webcodec-sample-types.js +2 -0
  175. package/package.json +10 -2
  176. package/src/add-new-matroska-tracks.ts +23 -0
  177. package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +61 -0
  178. package/src/boxes/iso-base-media/esds/esds-descriptors.ts +33 -2
  179. package/src/boxes/iso-base-media/make-track.ts +157 -0
  180. package/src/boxes/iso-base-media/mdat/mdat.ts +131 -0
  181. package/src/boxes/iso-base-media/moov/moov.ts +8 -3
  182. package/src/boxes/iso-base-media/mvhd.ts +7 -1
  183. package/src/boxes/iso-base-media/process-box.ts +388 -38
  184. package/src/boxes/iso-base-media/stsd/av1c.ts +19 -0
  185. package/src/boxes/iso-base-media/stsd/avcc.ts +36 -0
  186. package/src/boxes/iso-base-media/stsd/colr.ts +49 -0
  187. package/src/boxes/iso-base-media/stsd/ctts.ts +55 -0
  188. package/src/boxes/iso-base-media/stsd/hvcc.ts +32 -0
  189. package/src/boxes/iso-base-media/stsd/keys.ts +2 -0
  190. package/src/boxes/iso-base-media/stsd/mebx.ts +8 -3
  191. package/src/boxes/iso-base-media/stsd/pasp.ts +32 -0
  192. package/src/boxes/iso-base-media/stsd/samples.ts +43 -16
  193. package/src/boxes/iso-base-media/stsd/stco.ts +50 -0
  194. package/src/boxes/iso-base-media/stsd/stsc.ts +61 -0
  195. package/src/boxes/iso-base-media/stsd/stsd.ts +10 -3
  196. package/src/boxes/iso-base-media/stsd/stss.ts +47 -0
  197. package/src/boxes/iso-base-media/stsd/stsz.ts +75 -0
  198. package/src/boxes/iso-base-media/tkhd.ts +63 -16
  199. package/src/boxes/iso-base-media/trak/trak.ts +8 -3
  200. package/src/boxes/iso-base-media/void-box.ts +4 -0
  201. package/src/boxes/webm/allowed-partial-segments.ts +1 -0
  202. package/src/boxes/webm/av1-codec-private.ts +113 -0
  203. package/src/boxes/webm/description.ts +101 -0
  204. package/src/boxes/webm/get-ready-tracks.ts +36 -0
  205. package/src/boxes/webm/get-track.ts +250 -0
  206. package/src/boxes/webm/parse-webm-header.ts +6 -2
  207. package/src/boxes/webm/segments/all-segments.ts +285 -0
  208. package/src/boxes/webm/segments/duration.ts +15 -8
  209. package/src/boxes/webm/segments/info.ts +18 -4
  210. package/src/boxes/webm/segments/main.ts +0 -13
  211. package/src/boxes/webm/segments/muxing.ts +1 -1
  212. package/src/boxes/webm/segments/parse-children.ts +132 -9
  213. package/src/boxes/webm/segments/seek-head.ts +17 -4
  214. package/src/boxes/webm/segments/seek-position.ts +1 -2
  215. package/src/boxes/webm/segments/seek.ts +31 -9
  216. package/src/boxes/webm/segments/track-entry.ts +475 -65
  217. package/src/boxes/webm/segments/tracks.ts +17 -7
  218. package/src/boxes/webm/segments/void.ts +4 -2
  219. package/src/boxes/webm/segments/writing.ts +1 -1
  220. package/src/boxes/webm/segments.ts +266 -42
  221. package/src/boxes/webm/traversal.ts +32 -0
  222. package/src/buffer-iterator.ts +140 -45
  223. package/src/combine-uint8array.ts +13 -0
  224. package/src/{from-web.ts → from-fetch.ts} +9 -1
  225. package/src/from-node.ts +8 -0
  226. package/src/from-web-file.ts +39 -0
  227. package/src/get-audio-codec.ts +213 -84
  228. package/src/get-dimensions.ts +25 -132
  229. package/src/get-duration.ts +4 -8
  230. package/src/get-fps.ts +27 -172
  231. package/src/get-sample-aspect-ratio.ts +204 -0
  232. package/src/get-sample-positions.ts +93 -0
  233. package/src/get-tracks.ts +147 -0
  234. package/src/get-video-codec.ts +62 -47
  235. package/src/has-all-info.ts +35 -5
  236. package/src/index.ts +8 -0
  237. package/src/make-hvc1-codec-strings.ts +55 -0
  238. package/src/options.ts +48 -9
  239. package/src/parse-media.ts +90 -21
  240. package/src/parse-result.ts +28 -4
  241. package/src/parse-video.ts +30 -7
  242. package/src/parser-context.ts +9 -0
  243. package/src/parser-state.ts +151 -0
  244. package/src/reader.ts +2 -2
  245. package/src/test/aspect-ratio.test.ts +42 -0
  246. package/src/test/av1.test.ts +108 -0
  247. package/src/test/duration.test.ts +5 -21
  248. package/src/test/matroska.test.ts +350 -31
  249. package/src/test/mvhd.test.ts +6 -1
  250. package/src/test/parse-esds.test.ts +29 -6
  251. package/src/test/parse-stco.test.ts +59 -0
  252. package/src/test/parse-stsc.test.ts +104 -0
  253. package/src/test/parse-stsz.test.ts +57 -0
  254. package/src/test/parse-stts.test.ts +1 -1
  255. package/src/test/parse-video.test.ts +23 -35
  256. package/src/test/parse-webm.test.ts +5 -5
  257. package/src/test/stream-local.test.ts +542 -46
  258. package/src/test/stream-remote.test.ts +15 -13
  259. package/src/test/stream-samples.test.ts +259 -0
  260. package/src/test/stsd.test.ts +60 -8
  261. package/src/test/tkhd.test.ts +4 -1
  262. package/src/traversal.ts +496 -0
  263. package/src/webcodec-sample-types.ts +30 -0
  264. package/tsconfig.json +5 -1
  265. package/tsconfig.tsbuildinfo +1 -1
  266. package/boxes.json +0 -1
  267. package/dist/boxes/iso-base-media/esds-descriptors.d.ts +0 -21
  268. package/dist/boxes/iso-base-media/esds-descriptors.js +0 -62
  269. package/dist/boxes/iso-base-media/esds.d.ts +0 -15
  270. package/dist/boxes/iso-base-media/esds.js +0 -27
  271. package/dist/get-codec.d.ts +0 -4
  272. package/dist/get-codec.js +0 -22
  273. /package/dist/{get-samples.d.ts → boxes/webm/bitstream/av1/frame.d.ts} +0 -0
  274. /package/dist/{get-samples.js → boxes/webm/bitstream/av1/frame.js} +0 -0
  275. /package/src/boxes/iso-base-media/{stts → stsd}/stts.ts +0 -0
@@ -2,15 +2,15 @@ import {expect, test} from 'bun:test';
2
2
  import {parseMedia} from '../parse-media';
3
3
 
4
4
  test('Should stream', async () => {
5
- const result = await parseMedia(
6
- 'https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/1080/Big_Buck_Bunny_1080_10s_1MB.mp4',
7
- {
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
8
  durationInSeconds: true,
9
9
  fps: true,
10
10
  dimensions: true,
11
11
  videoCodec: true,
12
12
  },
13
- );
13
+ });
14
14
  expect(result.durationInSeconds).toBe(10);
15
15
  expect(result.fps).toBe(60);
16
16
  expect(result.dimensions).toEqual({
@@ -21,16 +21,15 @@ test('Should stream', async () => {
21
21
  });
22
22
 
23
23
  test('Should stream from Wikipedia', async () => {
24
- const result = await parseMedia(
25
- 'https://upload.wikimedia.org/wikipedia/commons/transcoded/c/c0/Big_Buck_Bunny_4K.webm/Big_Buck_Bunny_4K.webm.720p.vp9.webm',
26
- {
27
- boxes: true,
24
+ const result = await parseMedia({
25
+ src: 'https://upload.wikimedia.org/wikipedia/commons/transcoded/c/c0/Big_Buck_Bunny_4K.webm/Big_Buck_Bunny_4K.webm.720p.vp9.webm',
26
+ fields: {
28
27
  durationInSeconds: true,
29
28
  fps: true,
30
29
  dimensions: true,
31
30
  videoCodec: true,
32
31
  },
33
- );
32
+ });
34
33
  expect(result.durationInSeconds).toBe(634.571);
35
34
  // TODO: Not yet implemented
36
35
  expect(result.fps).toBe(null);
@@ -42,10 +41,13 @@ test('Should stream from Wikipedia', async () => {
42
41
  });
43
42
 
44
43
  test('Should handle redirect', async () => {
45
- const result = await parseMedia('https://remotion.dev/bbb.mp4', {
46
- fps: true,
47
- videoCodec: true,
48
- durationInSeconds: true,
44
+ const result = await parseMedia({
45
+ src: 'https://remotion.dev/bbb.mp4',
46
+ fields: {
47
+ fps: true,
48
+ videoCodec: true,
49
+ durationInSeconds: true,
50
+ },
49
51
  });
50
52
  expect(result.videoCodec).toEqual('h264');
51
53
  expect(result.fps).toEqual(24);
@@ -0,0 +1,259 @@
1
+ import {RenderInternals} from '@remotion/renderer';
2
+ import {expect, test} from 'bun:test';
3
+ import {nodeReader} from '../from-node';
4
+ import {parseMedia} from '../parse-media';
5
+
6
+ test('Stream samples', async () => {
7
+ const {videoTracks, audioTracks} = await parseMedia({
8
+ src: RenderInternals.exampleVideos.mp4withmp3,
9
+ fields: {
10
+ tracks: true,
11
+ videoCodec: true,
12
+ audioCodec: true,
13
+ },
14
+ reader: nodeReader,
15
+ });
16
+
17
+ const description = new Uint8Array([
18
+ 1, 100, 0, 32, 255, 225, 0, 32, 103, 100, 0, 32, 172, 217, 64, 68, 2, 39,
19
+ 150, 92, 5, 168, 16, 16, 45, 40, 0, 0, 3, 0, 8, 0, 0, 3, 1, 224, 120, 193,
20
+ 140, 176, 1, 0, 6, 104, 235, 224, 140, 178, 44, 253, 248, 248, 0,
21
+ ]);
22
+
23
+ expect(videoTracks).toEqual([
24
+ {
25
+ type: 'video',
26
+ trackId: 1,
27
+ samplePositions: [
28
+ {
29
+ offset: 1637,
30
+ size: 4834,
31
+ isKeyframe: true,
32
+ dts: 0,
33
+ duration: 512,
34
+ cts: 1024,
35
+ },
36
+ {
37
+ offset: 6471,
38
+ size: 437,
39
+ isKeyframe: false,
40
+ dts: 512,
41
+ duration: 512,
42
+ cts: 1536,
43
+ },
44
+ {
45
+ offset: 7868,
46
+ size: 698,
47
+ isKeyframe: false,
48
+ dts: 1024,
49
+ duration: 512,
50
+ cts: 2048,
51
+ },
52
+ {
53
+ offset: 10486,
54
+ size: 595,
55
+ isKeyframe: false,
56
+ dts: 1536,
57
+ duration: 512,
58
+ cts: 2560,
59
+ },
60
+ {
61
+ offset: 12041,
62
+ size: 548,
63
+ isKeyframe: false,
64
+ dts: 2048,
65
+ duration: 512,
66
+ cts: 3072,
67
+ },
68
+ {
69
+ offset: 14509,
70
+ size: 611,
71
+ isKeyframe: false,
72
+ dts: 2560,
73
+ duration: 512,
74
+ cts: 3584,
75
+ },
76
+ {
77
+ offset: 16080,
78
+ size: 701,
79
+ isKeyframe: false,
80
+ dts: 3072,
81
+ duration: 512,
82
+ cts: 4096,
83
+ },
84
+ {
85
+ offset: 17741,
86
+ size: 535,
87
+ isKeyframe: false,
88
+ dts: 3584,
89
+ duration: 512,
90
+ cts: 4608,
91
+ },
92
+ {
93
+ offset: 20196,
94
+ size: 776,
95
+ isKeyframe: false,
96
+ dts: 4096,
97
+ duration: 512,
98
+ cts: 5120,
99
+ },
100
+ {
101
+ offset: 21932,
102
+ size: 586,
103
+ isKeyframe: false,
104
+ dts: 4608,
105
+ duration: 512,
106
+ cts: 5632,
107
+ },
108
+ ],
109
+ description,
110
+ timescale: 15360,
111
+ codec: 'avc1.640020',
112
+ sampleAspectRatio: {
113
+ numerator: 1,
114
+ denominator: 1,
115
+ },
116
+ width: 1080,
117
+ height: 1080,
118
+ codedWidth: 1080,
119
+ codedHeight: 1080,
120
+ displayAspectHeight: 1080,
121
+ displayAspectWidth: 1080,
122
+ rotation: 0,
123
+ },
124
+ ]);
125
+
126
+ expect(audioTracks).toEqual([
127
+ {
128
+ type: 'audio',
129
+ trackId: 2,
130
+ samplePositions: [
131
+ {
132
+ offset: 6908,
133
+ size: 960,
134
+ isKeyframe: true,
135
+ dts: 0,
136
+ duration: 1152,
137
+ cts: 0,
138
+ },
139
+ {
140
+ offset: 8566,
141
+ size: 960,
142
+ isKeyframe: true,
143
+ dts: 1152,
144
+ duration: 1152,
145
+ cts: 1152,
146
+ },
147
+ {
148
+ offset: 9526,
149
+ size: 960,
150
+ isKeyframe: true,
151
+ dts: 2304,
152
+ duration: 1152,
153
+ cts: 2304,
154
+ },
155
+ {
156
+ offset: 11081,
157
+ size: 960,
158
+ isKeyframe: true,
159
+ dts: 3456,
160
+ duration: 1152,
161
+ cts: 3456,
162
+ },
163
+ {
164
+ offset: 12589,
165
+ size: 960,
166
+ isKeyframe: true,
167
+ dts: 4608,
168
+ duration: 1152,
169
+ cts: 4608,
170
+ },
171
+ {
172
+ offset: 13549,
173
+ size: 960,
174
+ isKeyframe: true,
175
+ dts: 5760,
176
+ duration: 1152,
177
+ cts: 5760,
178
+ },
179
+ {
180
+ offset: 15120,
181
+ size: 960,
182
+ isKeyframe: true,
183
+ dts: 6912,
184
+ duration: 1152,
185
+ cts: 6912,
186
+ },
187
+ {
188
+ offset: 16781,
189
+ size: 960,
190
+ isKeyframe: true,
191
+ dts: 8064,
192
+ duration: 1152,
193
+ cts: 8064,
194
+ },
195
+ {
196
+ offset: 18276,
197
+ size: 960,
198
+ isKeyframe: true,
199
+ dts: 9216,
200
+ duration: 1152,
201
+ cts: 9216,
202
+ },
203
+ {
204
+ offset: 19236,
205
+ size: 960,
206
+ isKeyframe: true,
207
+ dts: 10368,
208
+ duration: 1152,
209
+ cts: 10368,
210
+ },
211
+ {
212
+ offset: 20972,
213
+ size: 960,
214
+ isKeyframe: true,
215
+ dts: 11520,
216
+ duration: 1152,
217
+ cts: 11520,
218
+ },
219
+ {
220
+ offset: 22518,
221
+ size: 960,
222
+ isKeyframe: true,
223
+ dts: 12672,
224
+ duration: 1152,
225
+ cts: 12672,
226
+ },
227
+ {
228
+ offset: 23478,
229
+ size: 960,
230
+ isKeyframe: true,
231
+ dts: 13824,
232
+ duration: 1152,
233
+ cts: 13824,
234
+ },
235
+ {
236
+ offset: 24438,
237
+ size: 960,
238
+ isKeyframe: true,
239
+ dts: 14976,
240
+ duration: 1152,
241
+ cts: 14976,
242
+ },
243
+ {
244
+ offset: 25398,
245
+ size: 960,
246
+ isKeyframe: true,
247
+ dts: 16128,
248
+ duration: 1152,
249
+ cts: 16128,
250
+ },
251
+ ],
252
+ timescale: 48000,
253
+ numberOfChannels: 2,
254
+ codec: 'mp3',
255
+ sampleRate: 48000,
256
+ description: undefined,
257
+ },
258
+ ]);
259
+ });
@@ -2,8 +2,9 @@ import {expect, test} from 'bun:test';
2
2
  import {processSample} from '../boxes/iso-base-media/stsd/samples';
3
3
  import {parseStsd} from '../boxes/iso-base-media/stsd/stsd';
4
4
  import {getArrayBufferIterator} from '../buffer-iterator';
5
+ import {makeParserState} from '../parser-state';
5
6
 
6
- test('Should be able to parse a STSD audio box correctly', () => {
7
+ test('Should be able to parse a STSD audio box correctly', async () => {
7
8
  const buffer = Uint8Array.from([
8
9
  // box size
9
10
  0, 0, 0, 159,
@@ -23,7 +24,7 @@ test('Should be able to parse a STSD audio box correctly', () => {
23
24
  0, 1,
24
25
  // version
25
26
  0, 1,
26
- // revisioon level
27
+ // revision level
27
28
  0, 0, 0, 0, 0, 0,
28
29
  // revision level
29
30
  0, 2, 0, 16, 255, 254, 0, 0, 172, 68, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 0,
@@ -37,10 +38,19 @@ test('Should be able to parse a STSD audio box correctly', () => {
37
38
  const iterator = getArrayBufferIterator(buffer);
38
39
  iterator.discard(8);
39
40
 
40
- const parsed = parseStsd({
41
+ const parsed = await parseStsd({
41
42
  iterator,
42
43
  offset: 0,
43
44
  size: 159,
45
+ options: {
46
+ canSkipVideoData: true,
47
+ onAudioTrack: null,
48
+ onVideoTrack: null,
49
+ parserState: makeParserState({
50
+ hasAudioCallbacks: false,
51
+ hasVideoCallbacks: false,
52
+ }),
53
+ },
44
54
  });
45
55
 
46
56
  expect(parsed).toEqual({
@@ -91,9 +101,24 @@ test('Should be able to parse a STSD audio box correctly', () => {
91
101
  {
92
102
  objectTypeIndication: 'aac',
93
103
  type: 'decoder-config-descriptor',
94
- },
95
- {
96
- type: 'sl-config-descriptor',
104
+ asNumber: 64,
105
+ avgBitrate: 0,
106
+ bufferSizeDB: 6144,
107
+ maxBitrate: 192000,
108
+ streamType: 5,
109
+ decoderSpecificConfigs: [
110
+ {
111
+ audioObjectType: 2,
112
+ channelConfiguration: 2,
113
+ samplingFrequencyIndex: 4,
114
+ type: 'audio-specific-config',
115
+ asBytes: new Uint8Array([18, 16]),
116
+ },
117
+ {
118
+ type: 'unknown-decoder-specific-config',
119
+ },
120
+ ],
121
+ upStream: 0,
97
122
  },
98
123
  ],
99
124
  esId: 0,
@@ -119,7 +144,7 @@ test('Should be able to parse a STSD audio box correctly', () => {
119
144
  });
120
145
  });
121
146
 
122
- test('Should be able to parse a STSD video box correctly', () => {
147
+ test('Should be able to parse a STSD video box correctly', async () => {
123
148
  const buffer = Uint8Array.from([
124
149
  // box size
125
150
  0, 0, 0, 158,
@@ -179,8 +204,17 @@ test('Should be able to parse a STSD video box correctly', () => {
179
204
  0, 0, 0, 16, 112, 97, 115, 112, 0, 0, 0, 1, 0, 0, 0, 1,
180
205
  ]);
181
206
 
182
- const parsed = processSample({
207
+ const parsed = await processSample({
183
208
  iterator: getArrayBufferIterator(buffer),
209
+ options: {
210
+ canSkipVideoData: true,
211
+ onAudioTrack: null,
212
+ onVideoTrack: null,
213
+ parserState: makeParserState({
214
+ hasAudioCallbacks: false,
215
+ hasVideoCallbacks: false,
216
+ }),
217
+ },
184
218
  });
185
219
  expect(parsed.sample).toEqual({
186
220
  size: 158,
@@ -205,5 +239,23 @@ test('Should be able to parse a STSD video box correctly', () => {
205
239
  offset: 0,
206
240
  depth: 24,
207
241
  colorTableId: -1,
242
+ descriptors: [
243
+ {
244
+ description: new Uint8Array([
245
+ 1, 100, 0, 32, 255, 225, 0, 27, 103, 100, 0, 32, 172, 217, 64, 68, 2,
246
+ 39, 150, 92, 4, 64, 0, 0, 3, 0, 64, 0, 0, 12, 3, 198, 12, 101, 128, 1,
247
+ 0, 6, 104, 235, 224, 140, 178, 44, 253, 248, 248, 0,
248
+ ]),
249
+ type: 'avcc-box',
250
+ configurationString: '640020',
251
+ },
252
+ {
253
+ boxSize: 16,
254
+ offset: 142,
255
+ type: 'pasp-box',
256
+ hSpacing: 1,
257
+ vSpacing: 1,
258
+ },
259
+ ],
208
260
  });
209
261
  });
@@ -77,8 +77,11 @@ test('Should be able to parse a TKHD box', () => {
77
77
  version: 0,
78
78
  layer: 0,
79
79
  volume: 0,
80
- matrix: [65536, 0, 0, 0, 65536, 0, 0, 0, 1073741824],
80
+ matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1],
81
81
  width: 0,
82
82
  height: 0,
83
+ rotation: 0,
84
+ unrotatedWidth: 0,
85
+ unrotatedHeight: 0,
83
86
  });
84
87
  });