@remotion/media-parser 4.0.193 → 4.0.195

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 (266) 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/make-track.d.ts +3 -0
  10. package/dist/boxes/iso-base-media/make-track.js +112 -0
  11. package/dist/boxes/iso-base-media/mdat/mdat.d.ts +16 -0
  12. package/dist/boxes/iso-base-media/mdat/mdat.js +97 -0
  13. package/dist/boxes/iso-base-media/moov/moov.d.ts +4 -2
  14. package/dist/boxes/iso-base-media/moov/moov.js +4 -2
  15. package/dist/boxes/iso-base-media/mvhd.js +7 -1
  16. package/dist/boxes/iso-base-media/process-box.d.ts +20 -3
  17. package/dist/boxes/iso-base-media/process-box.js +356 -18
  18. package/dist/boxes/iso-base-media/stsd/av1c.d.ts +9 -0
  19. package/dist/boxes/iso-base-media/stsd/av1c.js +10 -0
  20. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.d.ts +20 -0
  21. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.js +73 -0
  22. package/dist/boxes/iso-base-media/stsd/avcc.d.ts +10 -0
  23. package/dist/boxes/iso-base-media/stsd/avcc.js +21 -0
  24. package/dist/boxes/iso-base-media/stsd/colr.d.ts +11 -0
  25. package/dist/boxes/iso-base-media/stsd/colr.js +35 -0
  26. package/dist/boxes/iso-base-media/stsd/ctts.d.ts +19 -0
  27. package/dist/boxes/iso-base-media/stsd/ctts.js +30 -0
  28. package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +11 -0
  29. package/dist/boxes/iso-base-media/stsd/hvcc.js +17 -0
  30. package/dist/boxes/iso-base-media/stsd/keys.js +1 -0
  31. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +4 -2
  32. package/dist/boxes/iso-base-media/stsd/mebx.js +4 -2
  33. package/dist/boxes/iso-base-media/stsd/pasp.d.ts +12 -0
  34. package/dist/boxes/iso-base-media/stsd/pasp.js +17 -0
  35. package/dist/boxes/iso-base-media/stsd/samples.d.ts +12 -5
  36. package/dist/boxes/iso-base-media/stsd/samples.js +27 -10
  37. package/dist/boxes/iso-base-media/stsd/stco.d.ts +14 -0
  38. package/dist/boxes/iso-base-media/stsd/stco.js +30 -0
  39. package/dist/boxes/iso-base-media/stsd/stsc.d.ts +19 -0
  40. package/dist/boxes/iso-base-media/stsd/stsc.js +34 -0
  41. package/dist/boxes/iso-base-media/stsd/stsd.d.ts +4 -2
  42. package/dist/boxes/iso-base-media/stsd/stsd.js +6 -2
  43. package/dist/boxes/iso-base-media/stsd/stss.d.ts +13 -0
  44. package/dist/boxes/iso-base-media/stsd/stss.js +28 -0
  45. package/dist/boxes/iso-base-media/stsd/stsz.d.ts +21 -0
  46. package/dist/boxes/iso-base-media/stsd/stsz.js +44 -0
  47. package/dist/boxes/iso-base-media/stsd/stts.d.ts +15 -0
  48. package/dist/boxes/iso-base-media/stsd/stts.js +35 -0
  49. package/dist/boxes/iso-base-media/tkhd.d.ts +3 -0
  50. package/dist/boxes/iso-base-media/tkhd.js +41 -14
  51. package/dist/boxes/iso-base-media/trak/trak.d.ts +4 -2
  52. package/dist/boxes/iso-base-media/trak/trak.js +4 -2
  53. package/dist/boxes/iso-base-media/void-box.d.ts +4 -0
  54. package/dist/boxes/iso-base-media/void-box.js +2 -0
  55. package/dist/boxes/webm/allowed-partial-segments.d.ts +1 -0
  56. package/dist/boxes/webm/allowed-partial-segments.js +4 -0
  57. package/dist/boxes/webm/av1-codec-private.d.ts +2 -0
  58. package/dist/boxes/webm/av1-codec-private.js +95 -0
  59. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.d.ts +14 -0
  60. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.js +67 -0
  61. package/dist/boxes/webm/bitstream/av1/bitstream-frame.d.ts +11 -0
  62. package/dist/boxes/webm/bitstream/av1/bitstream-frame.js +14 -0
  63. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.d.ts +6 -0
  64. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.js +9 -0
  65. package/dist/boxes/webm/bitstream/av1/color-config.d.ts +16 -0
  66. package/dist/boxes/webm/bitstream/av1/color-config.js +103 -0
  67. package/dist/boxes/webm/bitstream/av1/color-primaries.d.ts +14 -0
  68. package/dist/boxes/webm/bitstream/av1/color-primaries.js +17 -0
  69. package/dist/boxes/webm/bitstream/av1/decoder-model-info.d.ts +9 -0
  70. package/dist/boxes/webm/bitstream/av1/decoder-model-info.js +17 -0
  71. package/dist/boxes/webm/bitstream/av1/frame.d.ts +0 -0
  72. package/dist/boxes/webm/bitstream/av1/frame.js +1 -0
  73. package/dist/boxes/webm/bitstream/av1/header-segment.d.ts +51 -0
  74. package/dist/boxes/webm/bitstream/av1/header-segment.js +183 -0
  75. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.d.ts +17 -0
  76. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.js +20 -0
  77. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.d.ts +10 -0
  78. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.js +15 -0
  79. package/dist/boxes/webm/bitstream/av1/temporal-point-info.d.ts +5 -0
  80. package/dist/boxes/webm/bitstream/av1/temporal-point-info.js +8 -0
  81. package/dist/boxes/webm/bitstream/av1/timing-info.d.ts +8 -0
  82. package/dist/boxes/webm/bitstream/av1/timing-info.js +20 -0
  83. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.d.ts +21 -0
  84. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.js +24 -0
  85. package/dist/boxes/webm/bitstream/av1/uvlc.d.ts +2 -0
  86. package/dist/boxes/webm/bitstream/av1/uvlc.js +20 -0
  87. package/dist/boxes/webm/bitstream/av1.d.ts +20 -0
  88. package/dist/boxes/webm/bitstream/av1.js +118 -0
  89. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.d.ts +0 -0
  90. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.js +1 -0
  91. package/dist/boxes/webm/description.d.ts +2 -0
  92. package/dist/boxes/webm/description.js +83 -0
  93. package/dist/boxes/webm/get-ready-tracks.d.ts +3 -0
  94. package/dist/boxes/webm/get-ready-tracks.js +29 -0
  95. package/dist/boxes/webm/get-track.d.ts +6 -0
  96. package/dist/boxes/webm/get-track.js +183 -0
  97. package/dist/boxes/webm/parse-webm-header.d.ts +2 -1
  98. package/dist/boxes/webm/parse-webm-header.js +2 -2
  99. package/dist/boxes/webm/segments/all-segments.d.ts +269 -0
  100. package/dist/boxes/webm/segments/all-segments.js +277 -0
  101. package/dist/boxes/webm/segments/duration.d.ts +1 -1
  102. package/dist/boxes/webm/segments/duration.js +13 -9
  103. package/dist/boxes/webm/segments/info.d.ts +2 -1
  104. package/dist/boxes/webm/segments/info.js +12 -4
  105. package/dist/boxes/webm/segments/main.d.ts +0 -2
  106. package/dist/boxes/webm/segments/main.js +0 -11
  107. package/dist/boxes/webm/segments/muxing.d.ts +1 -1
  108. package/dist/boxes/webm/segments/muxing.js +1 -2
  109. package/dist/boxes/webm/segments/parse-children.d.ts +11 -1
  110. package/dist/boxes/webm/segments/parse-children.js +82 -6
  111. package/dist/boxes/webm/segments/seek-head.d.ts +2 -1
  112. package/dist/boxes/webm/segments/seek-head.js +12 -3
  113. package/dist/boxes/webm/segments/seek-position.d.ts +1 -1
  114. package/dist/boxes/webm/segments/seek-position.js +1 -2
  115. package/dist/boxes/webm/segments/seek.d.ts +7 -2
  116. package/dist/boxes/webm/segments/seek.js +22 -9
  117. package/dist/boxes/webm/segments/track-entry.d.ts +102 -22
  118. package/dist/boxes/webm/segments/track-entry.js +269 -57
  119. package/dist/boxes/webm/segments/tracks.d.ts +2 -1
  120. package/dist/boxes/webm/segments/tracks.js +12 -4
  121. package/dist/boxes/webm/segments/void.d.ts +1 -1
  122. package/dist/boxes/webm/segments/void.js +1 -2
  123. package/dist/boxes/webm/segments/writing.d.ts +1 -1
  124. package/dist/boxes/webm/segments/writing.js +1 -2
  125. package/dist/boxes/webm/segments.d.ts +8 -4
  126. package/dist/boxes/webm/segments.js +176 -40
  127. package/dist/boxes/webm/traversal.d.ts +7 -0
  128. package/dist/boxes/webm/traversal.js +25 -0
  129. package/dist/buffer-iterator.d.ts +16 -1
  130. package/dist/buffer-iterator.js +124 -41
  131. package/dist/combine-uint8array.d.ts +1 -0
  132. package/dist/combine-uint8array.js +13 -0
  133. package/dist/from-fetch.d.ts +2 -0
  134. package/dist/from-fetch.js +54 -0
  135. package/dist/from-node.js +12 -2
  136. package/dist/from-web-file.d.ts +2 -0
  137. package/dist/from-web-file.js +34 -0
  138. package/dist/get-audio-codec.d.ts +19 -0
  139. package/dist/get-audio-codec.js +153 -60
  140. package/dist/get-dimensions.d.ts +8 -2
  141. package/dist/get-dimensions.js +13 -91
  142. package/dist/get-duration.js +4 -7
  143. package/dist/get-fps.d.ts +4 -3
  144. package/dist/get-fps.js +17 -116
  145. package/dist/get-sample-aspect-ratio.d.ts +37 -0
  146. package/dist/get-sample-aspect-ratio.js +137 -0
  147. package/dist/get-sample-positions.d.ts +22 -0
  148. package/dist/get-sample-positions.js +54 -0
  149. package/dist/get-tracks.d.ts +49 -0
  150. package/dist/get-tracks.js +84 -0
  151. package/dist/get-video-codec.d.ts +2 -0
  152. package/dist/get-video-codec.js +47 -31
  153. package/dist/has-all-info.d.ts +2 -1
  154. package/dist/has-all-info.js +14 -5
  155. package/dist/index.d.ts +1 -0
  156. package/dist/make-hvc1-codec-strings.d.ts +2 -0
  157. package/dist/make-hvc1-codec-strings.js +47 -0
  158. package/dist/options.d.ts +26 -4
  159. package/dist/parse-media.js +76 -20
  160. package/dist/parse-result.d.ts +17 -5
  161. package/dist/parse-video.d.ts +12 -2
  162. package/dist/parse-video.js +15 -6
  163. package/dist/parser-context.d.ts +8 -0
  164. package/dist/parser-context.js +2 -0
  165. package/dist/parser-state.d.ts +23 -0
  166. package/dist/parser-state.js +112 -0
  167. package/dist/reader.d.ts +2 -2
  168. package/dist/traversal.d.ts +56 -0
  169. package/dist/traversal.js +331 -0
  170. package/dist/understand-vorbis.d.ts +1 -0
  171. package/dist/understand-vorbis.js +12 -0
  172. package/dist/webcodec-sample-types.d.ts +21 -0
  173. package/dist/webcodec-sample-types.js +2 -0
  174. package/package.json +10 -2
  175. package/src/add-new-matroska-tracks.ts +23 -0
  176. package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +61 -0
  177. package/src/boxes/iso-base-media/esds/esds-descriptors.ts +33 -2
  178. package/src/boxes/iso-base-media/make-track.ts +157 -0
  179. package/src/boxes/iso-base-media/mdat/mdat.ts +131 -0
  180. package/src/boxes/iso-base-media/moov/moov.ts +8 -3
  181. package/src/boxes/iso-base-media/mvhd.ts +7 -1
  182. package/src/boxes/iso-base-media/process-box.ts +426 -21
  183. package/src/boxes/iso-base-media/stsd/av1c.ts +19 -0
  184. package/src/boxes/iso-base-media/stsd/avcc.ts +36 -0
  185. package/src/boxes/iso-base-media/stsd/colr.ts +49 -0
  186. package/src/boxes/iso-base-media/stsd/ctts.ts +55 -0
  187. package/src/boxes/iso-base-media/stsd/hvcc.ts +32 -0
  188. package/src/boxes/iso-base-media/stsd/keys.ts +2 -0
  189. package/src/boxes/iso-base-media/stsd/mebx.ts +8 -3
  190. package/src/boxes/iso-base-media/stsd/pasp.ts +32 -0
  191. package/src/boxes/iso-base-media/stsd/samples.ts +43 -16
  192. package/src/boxes/iso-base-media/stsd/stco.ts +50 -0
  193. package/src/boxes/iso-base-media/stsd/stsc.ts +61 -0
  194. package/src/boxes/iso-base-media/stsd/stsd.ts +10 -3
  195. package/src/boxes/iso-base-media/stsd/stss.ts +47 -0
  196. package/src/boxes/iso-base-media/stsd/stsz.ts +75 -0
  197. package/src/boxes/iso-base-media/tkhd.ts +63 -16
  198. package/src/boxes/iso-base-media/trak/trak.ts +8 -3
  199. package/src/boxes/iso-base-media/void-box.ts +4 -0
  200. package/src/boxes/webm/allowed-partial-segments.ts +1 -0
  201. package/src/boxes/webm/av1-codec-private.ts +113 -0
  202. package/src/boxes/webm/description.ts +101 -0
  203. package/src/boxes/webm/get-ready-tracks.ts +36 -0
  204. package/src/boxes/webm/get-track.ts +250 -0
  205. package/src/boxes/webm/parse-webm-header.ts +6 -2
  206. package/src/boxes/webm/segments/all-segments.ts +285 -0
  207. package/src/boxes/webm/segments/duration.ts +15 -8
  208. package/src/boxes/webm/segments/info.ts +18 -4
  209. package/src/boxes/webm/segments/main.ts +0 -13
  210. package/src/boxes/webm/segments/muxing.ts +1 -1
  211. package/src/boxes/webm/segments/parse-children.ts +132 -9
  212. package/src/boxes/webm/segments/seek-head.ts +17 -4
  213. package/src/boxes/webm/segments/seek-position.ts +1 -2
  214. package/src/boxes/webm/segments/seek.ts +31 -9
  215. package/src/boxes/webm/segments/track-entry.ts +475 -65
  216. package/src/boxes/webm/segments/tracks.ts +17 -7
  217. package/src/boxes/webm/segments/void.ts +4 -2
  218. package/src/boxes/webm/segments/writing.ts +1 -1
  219. package/src/boxes/webm/segments.ts +266 -42
  220. package/src/boxes/webm/traversal.ts +32 -0
  221. package/src/buffer-iterator.ts +155 -40
  222. package/src/combine-uint8array.ts +13 -0
  223. package/src/{from-web.ts → from-fetch.ts} +18 -7
  224. package/src/from-node.ts +15 -2
  225. package/src/from-web-file.ts +39 -0
  226. package/src/get-audio-codec.ts +213 -84
  227. package/src/get-dimensions.ts +25 -132
  228. package/src/get-duration.ts +4 -8
  229. package/src/get-fps.ts +27 -172
  230. package/src/get-sample-aspect-ratio.ts +204 -0
  231. package/src/get-sample-positions.ts +93 -0
  232. package/src/get-tracks.ts +147 -0
  233. package/src/get-video-codec.ts +62 -47
  234. package/src/has-all-info.ts +35 -5
  235. package/src/index.ts +8 -0
  236. package/src/make-hvc1-codec-strings.ts +55 -0
  237. package/src/options.ts +48 -9
  238. package/src/parse-media.ts +112 -25
  239. package/src/parse-result.ts +29 -4
  240. package/src/parse-video.ts +32 -7
  241. package/src/parser-context.ts +9 -0
  242. package/src/parser-state.ts +151 -0
  243. package/src/reader.ts +3 -3
  244. package/src/test/aspect-ratio.test.ts +42 -0
  245. package/src/test/av1.test.ts +108 -0
  246. package/src/test/duration.test.ts +5 -21
  247. package/src/test/matroska.test.ts +350 -31
  248. package/src/test/mvhd.test.ts +6 -1
  249. package/src/test/parse-esds.test.ts +29 -6
  250. package/src/test/parse-stco.test.ts +59 -0
  251. package/src/test/parse-stsc.test.ts +104 -0
  252. package/src/test/parse-stsz.test.ts +57 -0
  253. package/src/test/parse-stts.test.ts +1 -1
  254. package/src/test/parse-video.test.ts +23 -35
  255. package/src/test/parse-webm.test.ts +5 -5
  256. package/src/test/stream-local.test.ts +543 -47
  257. package/src/test/stream-remote.test.ts +15 -13
  258. package/src/test/stream-samples.test.ts +259 -0
  259. package/src/test/stsd.test.ts +60 -8
  260. package/src/test/tkhd.test.ts +4 -1
  261. package/src/traversal.ts +496 -0
  262. package/src/webcodec-sample-types.ts +30 -0
  263. package/tsconfig.json +5 -1
  264. package/tsconfig.tsbuildinfo +1 -1
  265. package/boxes.json +0 -1
  266. /package/src/boxes/iso-base-media/{stts → stsd}/stts.ts +0 -0
@@ -4,16 +4,16 @@ import {nodeReader} from '../from-node';
4
4
  import {parseMedia} from '../parse-media';
5
5
 
6
6
  test('Should get duration of AV1 video', async () => {
7
- const parsed = await parseMedia(
8
- RenderInternals.exampleVideos.av1,
9
- {
7
+ const parsed = await parseMedia({
8
+ src: RenderInternals.exampleVideos.av1,
9
+ fields: {
10
10
  durationInSeconds: true,
11
11
  boxes: true,
12
12
  dimensions: true,
13
13
  fps: true,
14
14
  },
15
- nodeReader,
16
- );
15
+ reader: nodeReader,
16
+ });
17
17
 
18
18
  expect(parsed.durationInSeconds).toBe(1);
19
19
  expect(parsed.fps).toBe(null);
@@ -21,6 +21,7 @@ test('Should get duration of AV1 video', async () => {
21
21
  width: 1920,
22
22
  height: 1080,
23
23
  });
24
+
24
25
  expect(parsed.boxes).toEqual([
25
26
  {
26
27
  type: 'main-segment',
@@ -31,35 +32,55 @@ test('Should get duration of AV1 video', async () => {
31
32
  children: [
32
33
  {
33
34
  type: 'seek-segment',
34
- seekId: '0x1549a966',
35
- child: {
36
- type: 'seek-position-segment',
37
- seekPosition: 161,
38
- },
35
+ children: [
36
+ {
37
+ type: 'seek-id-segment',
38
+ seekId: '0x1549a966',
39
+ },
40
+ {
41
+ type: 'seek-position-segment',
42
+ seekPosition: 161,
43
+ },
44
+ ],
39
45
  },
40
46
  {
41
47
  type: 'seek-segment',
42
- seekId: '0x1654ae6b',
43
- child: {
44
- type: 'seek-position-segment',
45
- seekPosition: 214,
46
- },
48
+ children: [
49
+ {
50
+ type: 'seek-id-segment',
51
+ seekId: '0x1654ae6b',
52
+ },
53
+ {
54
+ type: 'seek-position-segment',
55
+ seekPosition: 214,
56
+ },
57
+ ],
47
58
  },
48
59
  {
49
60
  type: 'seek-segment',
50
- seekId: '0x1254c367',
51
- child: {
52
- type: 'seek-position-segment',
53
- seekPosition: 322,
54
- },
61
+ children: [
62
+ {
63
+ type: 'seek-id-segment',
64
+ seekId: '0x1254c367',
65
+ },
66
+ {
67
+ type: 'seek-position-segment',
68
+ seekPosition: 322,
69
+ },
70
+ ],
55
71
  },
56
72
  {
57
73
  type: 'seek-segment',
58
- seekId: '0x1c53bb6b',
59
- child: {
60
- type: 'seek-position-segment',
61
- seekPosition: 347329,
62
- },
74
+ children: [
75
+ {
76
+ type: 'seek-id-segment',
77
+ seekId: '0x1c53bb6b',
78
+ },
79
+ {
80
+ type: 'seek-position-segment',
81
+ seekPosition: 347329,
82
+ },
83
+ ],
63
84
  },
64
85
  ],
65
86
  },
@@ -117,7 +138,7 @@ test('Should get duration of AV1 video', async () => {
117
138
  },
118
139
  {
119
140
  type: 'track-type-segment',
120
- trackType: 1,
141
+ trackType: 'video',
121
142
  },
122
143
  {
123
144
  type: 'default-duration-segment',
@@ -131,27 +152,325 @@ test('Should get duration of AV1 video', async () => {
131
152
  width: 1920,
132
153
  },
133
154
  {
134
- height: 1080,
135
155
  type: 'height-segment',
156
+ height: 1080,
136
157
  },
137
158
  {
138
159
  type: 'color-segment',
160
+ length: 16,
139
161
  },
140
162
  ],
141
163
  },
142
164
  {
143
- codecPrivateData: [
165
+ type: 'codec-private-segment',
166
+ codecPrivateData: new Uint8Array([
144
167
  129, 8, 12, 0, 10, 14, 0, 0, 0, 66, 171, 191, 195, 118, 0,
145
168
  8, 8, 8, 8, 32,
146
- ],
147
- type: 'codec-private-segment',
169
+ ]),
148
170
  },
149
171
  ],
150
172
  },
151
173
  ],
152
174
  },
153
175
  {
154
- id: '0x1254c367',
176
+ type: 'tags-segment',
177
+ children: [
178
+ {
179
+ type: 'tag-segment',
180
+ length: 31,
181
+ },
182
+ {
183
+ type: 'tag-segment',
184
+ length: 51,
185
+ },
186
+ ],
187
+ },
188
+ {
189
+ type: 'cluster-segment',
190
+ children: [
191
+ {
192
+ type: 'timestamp-segment',
193
+ timestamp: 0,
194
+ },
195
+ {
196
+ type: 'simple-block-segment',
197
+ length: 279307,
198
+ trackNumber: 1,
199
+ timecode: 0,
200
+ headerFlags: 128,
201
+ keyframe: true,
202
+ lacing: [0, 0],
203
+ invisible: false,
204
+ children: [],
205
+ },
206
+ {
207
+ type: 'simple-block-segment',
208
+ length: 96,
209
+ trackNumber: 1,
210
+ timecode: 40,
211
+ headerFlags: 0,
212
+ keyframe: false,
213
+ lacing: [0, 0],
214
+ invisible: false,
215
+ children: [],
216
+ },
217
+ {
218
+ type: 'simple-block-segment',
219
+ length: 556,
220
+ trackNumber: 1,
221
+ timecode: 80,
222
+ headerFlags: 0,
223
+ keyframe: false,
224
+ lacing: [0, 0],
225
+ invisible: false,
226
+ children: [],
227
+ },
228
+ {
229
+ type: 'simple-block-segment',
230
+ length: 948,
231
+ trackNumber: 1,
232
+ timecode: 120,
233
+ headerFlags: 0,
234
+ keyframe: false,
235
+ lacing: [0, 0],
236
+ invisible: false,
237
+ children: [],
238
+ },
239
+ {
240
+ type: 'simple-block-segment',
241
+ length: 577,
242
+ trackNumber: 1,
243
+ timecode: 160,
244
+ headerFlags: 0,
245
+ keyframe: false,
246
+ lacing: [0, 0],
247
+ invisible: false,
248
+ children: [],
249
+ },
250
+ {
251
+ type: 'simple-block-segment',
252
+ length: 779,
253
+ trackNumber: 1,
254
+ timecode: 200,
255
+ headerFlags: 0,
256
+ keyframe: false,
257
+ lacing: [0, 0],
258
+ invisible: false,
259
+ children: [],
260
+ },
261
+ {
262
+ type: 'simple-block-segment',
263
+ length: 793,
264
+ trackNumber: 1,
265
+ timecode: 240,
266
+ headerFlags: 0,
267
+ keyframe: false,
268
+ lacing: [0, 0],
269
+ invisible: false,
270
+ children: [],
271
+ },
272
+ {
273
+ type: 'simple-block-segment',
274
+ length: 740,
275
+ trackNumber: 1,
276
+ timecode: 280,
277
+ headerFlags: 0,
278
+ keyframe: false,
279
+ lacing: [0, 0],
280
+ invisible: false,
281
+ children: [],
282
+ },
283
+ {
284
+ type: 'simple-block-segment',
285
+ length: 1095,
286
+ trackNumber: 1,
287
+ timecode: 320,
288
+ headerFlags: 0,
289
+ keyframe: false,
290
+ lacing: [0, 0],
291
+ invisible: false,
292
+ children: [],
293
+ },
294
+ {
295
+ type: 'simple-block-segment',
296
+ length: 1097,
297
+ trackNumber: 1,
298
+ timecode: 360,
299
+ headerFlags: 0,
300
+ keyframe: false,
301
+ lacing: [0, 0],
302
+ invisible: false,
303
+ children: [],
304
+ },
305
+ {
306
+ type: 'simple-block-segment',
307
+ length: 1155,
308
+ trackNumber: 1,
309
+ timecode: 400,
310
+ headerFlags: 0,
311
+ keyframe: false,
312
+ lacing: [0, 0],
313
+ invisible: false,
314
+ children: [],
315
+ },
316
+ {
317
+ type: 'simple-block-segment',
318
+ length: 1526,
319
+ trackNumber: 1,
320
+ timecode: 440,
321
+ headerFlags: 0,
322
+ keyframe: false,
323
+ lacing: [0, 0],
324
+ invisible: false,
325
+ children: [],
326
+ },
327
+ {
328
+ type: 'simple-block-segment',
329
+ length: 1487,
330
+ trackNumber: 1,
331
+ timecode: 480,
332
+ headerFlags: 0,
333
+ keyframe: false,
334
+ lacing: [0, 0],
335
+ invisible: false,
336
+ children: [],
337
+ },
338
+ {
339
+ type: 'simple-block-segment',
340
+ length: 2046,
341
+ trackNumber: 1,
342
+ timecode: 520,
343
+ headerFlags: 0,
344
+ keyframe: false,
345
+ lacing: [0, 0],
346
+ invisible: false,
347
+ children: [],
348
+ },
349
+ {
350
+ type: 'simple-block-segment',
351
+ length: 1372,
352
+ trackNumber: 1,
353
+ timecode: 560,
354
+ headerFlags: 0,
355
+ keyframe: false,
356
+ lacing: [0, 0],
357
+ invisible: false,
358
+ children: [],
359
+ },
360
+ {
361
+ type: 'simple-block-segment',
362
+ length: 1441,
363
+ trackNumber: 1,
364
+ timecode: 600,
365
+ headerFlags: 0,
366
+ keyframe: false,
367
+ lacing: [0, 0],
368
+ invisible: false,
369
+ children: [],
370
+ },
371
+ {
372
+ type: 'simple-block-segment',
373
+ length: 2947,
374
+ trackNumber: 1,
375
+ timecode: 640,
376
+ headerFlags: 0,
377
+ keyframe: false,
378
+ lacing: [0, 0],
379
+ invisible: false,
380
+ children: [],
381
+ },
382
+ {
383
+ type: 'simple-block-segment',
384
+ length: 2652,
385
+ trackNumber: 1,
386
+ timecode: 680,
387
+ headerFlags: 0,
388
+ keyframe: false,
389
+ lacing: [0, 0],
390
+ invisible: false,
391
+ children: [],
392
+ },
393
+ {
394
+ type: 'simple-block-segment',
395
+ length: 4199,
396
+ trackNumber: 1,
397
+ timecode: 720,
398
+ headerFlags: 0,
399
+ keyframe: false,
400
+ lacing: [0, 0],
401
+ invisible: false,
402
+ children: [],
403
+ },
404
+ {
405
+ type: 'simple-block-segment',
406
+ length: 3998,
407
+ trackNumber: 1,
408
+ timecode: 760,
409
+ headerFlags: 0,
410
+ keyframe: false,
411
+ lacing: [0, 0],
412
+ invisible: false,
413
+ children: [],
414
+ },
415
+ {
416
+ type: 'simple-block-segment',
417
+ length: 6373,
418
+ trackNumber: 1,
419
+ timecode: 800,
420
+ headerFlags: 0,
421
+ keyframe: false,
422
+ lacing: [0, 0],
423
+ invisible: false,
424
+ children: [],
425
+ },
426
+ {
427
+ type: 'simple-block-segment',
428
+ length: 5955,
429
+ trackNumber: 1,
430
+ timecode: 840,
431
+ headerFlags: 0,
432
+ keyframe: false,
433
+ lacing: [0, 0],
434
+ invisible: false,
435
+ children: [],
436
+ },
437
+ {
438
+ type: 'simple-block-segment',
439
+ length: 7943,
440
+ trackNumber: 1,
441
+ timecode: 880,
442
+ headerFlags: 0,
443
+ keyframe: false,
444
+ lacing: [0, 0],
445
+ invisible: false,
446
+ children: [],
447
+ },
448
+ {
449
+ type: 'simple-block-segment',
450
+ length: 8241,
451
+ trackNumber: 1,
452
+ timecode: 920,
453
+ headerFlags: 0,
454
+ keyframe: false,
455
+ lacing: [0, 0],
456
+ invisible: false,
457
+ children: [],
458
+ },
459
+ {
460
+ type: 'simple-block-segment',
461
+ length: 9506,
462
+ trackNumber: 1,
463
+ timecode: 960,
464
+ headerFlags: 0,
465
+ keyframe: false,
466
+ lacing: [0, 0],
467
+ invisible: false,
468
+ children: [],
469
+ },
470
+ ],
471
+ },
472
+ {
473
+ id: '0x1c53bb6b',
155
474
  type: 'unknown-segment',
156
475
  },
157
476
  ],
@@ -80,7 +80,12 @@ test('Should be able to parse a MVHD box correctly', () => {
80
80
  durationInSeconds: 4.167,
81
81
  rate: 1,
82
82
  volume: 1,
83
- matrix: [65536, 0, 0, 0, 65536, 0, 0, 0, 1073741824],
83
+ // prettier-ignore
84
+ matrix: [
85
+ 1, 0, 0,
86
+ 0, 1, 0,
87
+ 0, 0, 1
88
+ ],
84
89
  nextTrackId: 2,
85
90
  type: 'mvhd-box',
86
91
  boxSize: 108,
@@ -30,9 +30,17 @@ test('Parse ESDS box', () => {
30
30
  {
31
31
  type: 'decoder-config-descriptor',
32
32
  objectTypeIndication: 'mp3',
33
- },
34
- {
35
- type: 'sl-config-descriptor',
33
+ asNumber: 107,
34
+ bufferSizeDB: 0,
35
+ streamType: 5,
36
+ upStream: 0,
37
+ avgBitrate: 320000,
38
+ maxBitrate: 320000,
39
+ decoderSpecificConfigs: [
40
+ {
41
+ type: 'unknown-decoder-specific-config',
42
+ },
43
+ ],
36
44
  },
37
45
  ],
38
46
  });
@@ -66,9 +74,24 @@ test('Parse two ESDS', () => {
66
74
  {
67
75
  objectTypeIndication: 'aac',
68
76
  type: 'decoder-config-descriptor',
69
- },
70
- {
71
- type: 'sl-config-descriptor',
77
+ asNumber: 64,
78
+ bufferSizeDB: 6144,
79
+ streamType: 5,
80
+ upStream: 0,
81
+ avgBitrate: 320000,
82
+ maxBitrate: 320000,
83
+ decoderSpecificConfigs: [
84
+ {
85
+ audioObjectType: 2,
86
+ channelConfiguration: 2,
87
+ samplingFrequencyIndex: 3,
88
+ type: 'audio-specific-config',
89
+ asBytes: new Uint8Array([17, 144]),
90
+ },
91
+ {
92
+ type: 'unknown-decoder-specific-config',
93
+ },
94
+ ],
72
95
  },
73
96
  ],
74
97
  });
@@ -0,0 +1,59 @@
1
+ import {expect, test} from 'bun:test';
2
+ import {parseStco} from '../boxes/iso-base-media/stsd/stco';
3
+ import {getArrayBufferIterator} from '../buffer-iterator';
4
+
5
+ test('Parse stco box', () => {
6
+ const buf = new Uint8Array([
7
+ // mock header
8
+ 0, 0, 0, 0, 0, 0, 0, 0,
9
+ // actual box
10
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 26, 252, 0, 0, 33, 118, 0, 0, 43, 73, 0, 0,
11
+ 49, 45, 0, 0, 59, 16, 0, 0, 65, 141, 0, 0, 71, 100, 0, 0, 81, 236, 0, 0, 87,
12
+ 246,
13
+ ]);
14
+
15
+ const iterator = getArrayBufferIterator(buf);
16
+ iterator.counter.increment(8);
17
+ const result = parseStco({
18
+ iterator,
19
+ size: buf.length - 8,
20
+ offset: 0,
21
+ });
22
+ expect(result).toEqual({
23
+ type: 'stco-box',
24
+ boxSize: 44,
25
+ offset: 0,
26
+ version: 0,
27
+ flags: [0, 0, 0],
28
+ entryCount: 9,
29
+ entries: [6908, 8566, 11081, 12589, 15120, 16781, 18276],
30
+ });
31
+ });
32
+
33
+ test('Parse stco box with empty chunk', () => {
34
+ const buf = new Uint8Array([
35
+ // mock header
36
+ 0, 0, 0, 0, 0, 0, 0, 0,
37
+ // actual box
38
+ 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 6, 101, 0, 0, 30, 188, 0, 0, 40, 246, 0, 0,
39
+ 47, 9, 0, 0, 56, 173, 0, 0, 62, 208, 0, 0, 69, 77, 0, 0, 78, 228, 0, 0, 85,
40
+ 172,
41
+ ]);
42
+
43
+ const iterator = getArrayBufferIterator(buf);
44
+ iterator.counter.increment(8);
45
+ const result = parseStco({
46
+ iterator,
47
+ size: buf.length - 8,
48
+ offset: 0,
49
+ });
50
+ expect(result).toEqual({
51
+ type: 'stco-box',
52
+ boxSize: 44,
53
+ offset: 0,
54
+ version: 0,
55
+ flags: [0, 0, 0],
56
+ entryCount: 9,
57
+ entries: [1637, 7868, 10486, 12041, 14509, 16080, 17741],
58
+ });
59
+ });
@@ -0,0 +1,104 @@
1
+ import {expect, test} from 'bun:test';
2
+ import {parseStsc} from '../boxes/iso-base-media/stsd/stsc';
3
+ import {getArrayBufferIterator} from '../buffer-iterator';
4
+
5
+ test('Parse stsc box', () => {
6
+ const buffer = Uint8Array.from([
7
+ // mock header
8
+ 0, 0, 0, 0, 0, 0, 0, 0,
9
+ // actual box
10
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0,
11
+ 0, 0, 1, 0, 0, 0, 1,
12
+ ]);
13
+
14
+ const iterator = getArrayBufferIterator(buffer);
15
+ iterator.counter.increment(8);
16
+ const result = parseStsc({
17
+ iterator,
18
+ offset: 0,
19
+ size: buffer.length - 8,
20
+ });
21
+
22
+ expect(result).toEqual({
23
+ boxSize: 32,
24
+ flags: [0, 0, 0],
25
+ offset: 0,
26
+ type: 'stsc-box',
27
+ version: 0,
28
+ entryCount: 2,
29
+ entries: [
30
+ {
31
+ firstChunk: 1,
32
+ samplesPerChunk: 2,
33
+ },
34
+ {
35
+ firstChunk: 2,
36
+ samplesPerChunk: 1,
37
+ },
38
+ ],
39
+ });
40
+ });
41
+
42
+ test('Parse stsc box 2', () => {
43
+ const buffer = Uint8Array.from([
44
+ // mock header
45
+ 0, 0, 0, 0, 0, 0, 0, 0,
46
+ // actual box
47
+ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0,
48
+ 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0,
49
+ 0, 2, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0,
50
+ 2, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 9, 0, 0, 0, 4,
51
+ 0, 0, 0, 1,
52
+ ]);
53
+
54
+ const iterator = getArrayBufferIterator(buffer);
55
+ iterator.counter.increment(8);
56
+ const result = parseStsc({
57
+ iterator,
58
+ offset: 0,
59
+ size: buffer.length - 8,
60
+ });
61
+
62
+ expect(result).toEqual({
63
+ boxSize: 104,
64
+ flags: [0, 0, 0],
65
+ offset: 0,
66
+ type: 'stsc-box',
67
+ version: 0,
68
+ entryCount: 8,
69
+ entries: [
70
+ {
71
+ firstChunk: 1,
72
+ samplesPerChunk: 1,
73
+ },
74
+ {
75
+ firstChunk: 2,
76
+ samplesPerChunk: 2,
77
+ },
78
+ {
79
+ firstChunk: 3,
80
+ samplesPerChunk: 1,
81
+ },
82
+ {
83
+ firstChunk: 4,
84
+ samplesPerChunk: 2,
85
+ },
86
+ {
87
+ firstChunk: 5,
88
+ samplesPerChunk: 1,
89
+ },
90
+ {
91
+ firstChunk: 7,
92
+ samplesPerChunk: 2,
93
+ },
94
+ {
95
+ firstChunk: 8,
96
+ samplesPerChunk: 1,
97
+ },
98
+ {
99
+ firstChunk: 9,
100
+ samplesPerChunk: 4,
101
+ },
102
+ ],
103
+ });
104
+ });