@remotion/media-parser 4.0.209 → 4.0.211

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 (290) 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 +13 -4
  5. package/dist/boxes/iso-base-media/mdat/mdat.js +20 -5
  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 +66 -12
  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 +39 -0
  24. package/dist/boxes/iso-base-media/traversal.js +201 -0
  25. package/dist/boxes/webm/color.d.ts +4 -0
  26. package/dist/boxes/webm/color.js +127 -0
  27. package/dist/boxes/webm/description.js +1 -1
  28. package/dist/boxes/webm/ebml.d.ts +1 -1
  29. package/dist/boxes/webm/get-ready-tracks.js +3 -3
  30. package/dist/boxes/webm/get-sample-from-block.js +1 -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/segments/parse-children.js +6 -0
  37. package/dist/boxes/webm/traversal.d.ts +26 -1
  38. package/dist/boxes/webm/traversal.js +214 -1
  39. package/dist/buffer-iterator.d.ts +4 -1
  40. package/dist/buffer-iterator.js +31 -5
  41. package/dist/create/cluster-segment.js +0 -2
  42. package/dist/create/cluster.d.ts +16 -2
  43. package/dist/create/cluster.js +17 -10
  44. package/dist/create/create-media.d.ts +4 -2
  45. package/dist/create/create-media.js +101 -22
  46. package/dist/create/make-duration-with-padding.d.ts +1 -1
  47. package/dist/create/make-duration-with-padding.js +3 -3
  48. package/dist/create/matroska-cues.d.ts +6 -0
  49. package/dist/create/matroska-cues.js +49 -0
  50. package/dist/create/matroska-info.js +1 -1
  51. package/dist/create/matroska-seek.d.ts +6 -0
  52. package/dist/create/matroska-seek.js +32 -0
  53. package/dist/create/matroska-segment.d.ts +1 -0
  54. package/dist/create/matroska-segment.js +3 -2
  55. package/dist/create/matroska-trackentry.d.ts +9 -14
  56. package/dist/create/matroska-trackentry.js +79 -102
  57. package/dist/emit-available-info.d.ts +12 -0
  58. package/dist/emit-available-info.js +133 -0
  59. package/dist/esm/buffer.mjs +57 -0
  60. package/dist/esm/from-fetch.mjs +107 -0
  61. package/dist/esm/from-node.mjs +49 -0
  62. package/dist/esm/from-web-file.mjs +49 -0
  63. package/dist/esm/index.mjs +6822 -0
  64. package/dist/esm/web-fs.mjs +67 -0
  65. package/dist/get-audio-codec.d.ts +5 -5
  66. package/dist/get-audio-codec.js +44 -57
  67. package/dist/get-container.d.ts +4 -0
  68. package/dist/get-container.js +26 -0
  69. package/dist/get-duration.js +1 -1
  70. package/dist/get-fps.js +1 -1
  71. package/dist/get-sample-aspect-ratio.d.ts +1 -1
  72. package/dist/get-sample-aspect-ratio.js +19 -19
  73. package/dist/get-tracks.d.ts +13 -0
  74. package/dist/get-tracks.js +8 -8
  75. package/dist/get-video-codec.d.ts +5 -2
  76. package/dist/get-video-codec.js +111 -21
  77. package/dist/has-all-info.d.ts +2 -2
  78. package/dist/has-all-info.js +23 -9
  79. package/dist/index.d.ts +4 -1
  80. package/dist/options.d.ts +97 -30
  81. package/dist/parse-media.js +59 -69
  82. package/dist/parse-video.d.ts +2 -1
  83. package/dist/parse-video.js +3 -1
  84. package/dist/parser-context.d.ts +1 -0
  85. package/dist/parser-state.js +1 -2
  86. package/dist/readers/from-fetch.d.ts +12 -0
  87. package/dist/readers/from-fetch.js +83 -17
  88. package/dist/readers/from-node.js +14 -3
  89. package/dist/readers/from-web-file.js +15 -2
  90. package/dist/readers/reader.d.ts +7 -1
  91. package/dist/samples-from-moof.js +1 -1
  92. package/dist/truthy.d.ts +3 -0
  93. package/dist/truthy.js +7 -0
  94. package/dist/writers/buffer.d.ts +2 -0
  95. package/dist/writers/buffer.js +58 -0
  96. package/dist/writers/web-fs.d.ts +1 -0
  97. package/dist/writers/web-fs.js +42 -18
  98. package/dist/writers/writer.d.ts +4 -2
  99. package/fetch.js +2 -0
  100. package/node.js +2 -0
  101. package/package.json +43 -8
  102. package/web-file.js +2 -0
  103. package/web-fs.js +2 -0
  104. package/.eslintrc +0 -8
  105. package/dist/av1-codec-string.d.ts +0 -3
  106. package/dist/av1-codec-string.js +0 -91
  107. package/dist/boxes/iso-base-media/ftype.d.ts +0 -9
  108. package/dist/boxes/iso-base-media/ftype.js +0 -31
  109. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.d.ts +0 -20
  110. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.js +0 -73
  111. package/dist/boxes/iso-base-media/stts/stts.d.ts +0 -15
  112. package/dist/boxes/iso-base-media/stts/stts.js +0 -35
  113. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.d.ts +0 -14
  114. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.js +0 -67
  115. package/dist/boxes/webm/bitstream/av1/bitstream-frame.d.ts +0 -11
  116. package/dist/boxes/webm/bitstream/av1/bitstream-frame.js +0 -14
  117. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.d.ts +0 -6
  118. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.js +0 -9
  119. package/dist/boxes/webm/bitstream/av1/color-config.d.ts +0 -16
  120. package/dist/boxes/webm/bitstream/av1/color-config.js +0 -103
  121. package/dist/boxes/webm/bitstream/av1/color-primaries.d.ts +0 -14
  122. package/dist/boxes/webm/bitstream/av1/color-primaries.js +0 -17
  123. package/dist/boxes/webm/bitstream/av1/decoder-model-info.d.ts +0 -9
  124. package/dist/boxes/webm/bitstream/av1/decoder-model-info.js +0 -17
  125. package/dist/boxes/webm/bitstream/av1/frame.d.ts +0 -0
  126. package/dist/boxes/webm/bitstream/av1/frame.js +0 -1
  127. package/dist/boxes/webm/bitstream/av1/header-segment.d.ts +0 -51
  128. package/dist/boxes/webm/bitstream/av1/header-segment.js +0 -183
  129. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.d.ts +0 -17
  130. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.js +0 -20
  131. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.d.ts +0 -10
  132. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.js +0 -15
  133. package/dist/boxes/webm/bitstream/av1/temporal-point-info.d.ts +0 -5
  134. package/dist/boxes/webm/bitstream/av1/temporal-point-info.js +0 -8
  135. package/dist/boxes/webm/bitstream/av1/timing-info.d.ts +0 -8
  136. package/dist/boxes/webm/bitstream/av1/timing-info.js +0 -20
  137. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.d.ts +0 -21
  138. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.js +0 -24
  139. package/dist/boxes/webm/bitstream/av1/uvlc.d.ts +0 -2
  140. package/dist/boxes/webm/bitstream/av1/uvlc.js +0 -20
  141. package/dist/boxes/webm/bitstream/av1.d.ts +0 -20
  142. package/dist/boxes/webm/bitstream/av1.js +0 -118
  143. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.d.ts +0 -0
  144. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.js +0 -1
  145. package/dist/boxes/webm/segments/duration.d.ts +0 -6
  146. package/dist/boxes/webm/segments/duration.js +0 -19
  147. package/dist/boxes/webm/segments/info.d.ts +0 -9
  148. package/dist/boxes/webm/segments/info.js +0 -22
  149. package/dist/boxes/webm/segments/main.d.ts +0 -5
  150. package/dist/boxes/webm/segments/main.js +0 -2
  151. package/dist/boxes/webm/segments/muxing.d.ts +0 -6
  152. package/dist/boxes/webm/segments/muxing.js +0 -11
  153. package/dist/boxes/webm/segments/seek-head.d.ts +0 -9
  154. package/dist/boxes/webm/segments/seek-head.js +0 -22
  155. package/dist/boxes/webm/segments/seek-position.d.ts +0 -6
  156. package/dist/boxes/webm/segments/seek-position.js +0 -11
  157. package/dist/boxes/webm/segments/seek.d.ts +0 -13
  158. package/dist/boxes/webm/segments/seek.js +0 -35
  159. package/dist/boxes/webm/segments/timestamp-scale.d.ts +0 -6
  160. package/dist/boxes/webm/segments/timestamp-scale.js +0 -11
  161. package/dist/boxes/webm/segments/tracks.d.ts +0 -8
  162. package/dist/boxes/webm/segments/tracks.js +0 -21
  163. package/dist/boxes/webm/segments/unknown.d.ts +0 -6
  164. package/dist/boxes/webm/segments/unknown.js +0 -11
  165. package/dist/boxes/webm/segments/void.d.ts +0 -6
  166. package/dist/boxes/webm/segments/void.js +0 -11
  167. package/dist/boxes/webm/segments/writing.d.ts +0 -6
  168. package/dist/boxes/webm/segments/writing.js +0 -11
  169. package/dist/boxes/webm/tracks.d.ts +0 -8
  170. package/dist/boxes/webm/tracks.js +0 -21
  171. package/dist/combine-uint8array.d.ts +0 -1
  172. package/dist/combine-uint8array.js +0 -13
  173. package/dist/from-web.d.ts +0 -2
  174. package/dist/from-web.js +0 -45
  175. package/dist/get-video-metadata.d.ts +0 -2
  176. package/dist/get-video-metadata.js +0 -44
  177. package/dist/read-and-increment-offset.d.ts +0 -28
  178. package/dist/read-and-increment-offset.js +0 -177
  179. package/dist/understand-vorbis.d.ts +0 -1
  180. package/dist/understand-vorbis.js +0 -12
  181. package/input.webm +0 -0
  182. package/src/add-new-matroska-tracks.ts +0 -23
  183. package/src/boxes/iso-base-media/base-type.ts +0 -4
  184. package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +0 -68
  185. package/src/boxes/iso-base-media/esds/esds-descriptors.ts +0 -135
  186. package/src/boxes/iso-base-media/esds/esds.ts +0 -49
  187. package/src/boxes/iso-base-media/ftyp.ts +0 -39
  188. package/src/boxes/iso-base-media/get-sample-positions-from-track.ts +0 -69
  189. package/src/boxes/iso-base-media/make-track.ts +0 -116
  190. package/src/boxes/iso-base-media/mdat/mdat.ts +0 -140
  191. package/src/boxes/iso-base-media/mdhd.ts +0 -59
  192. package/src/boxes/iso-base-media/moov/moov.ts +0 -43
  193. package/src/boxes/iso-base-media/mvhd.ts +0 -114
  194. package/src/boxes/iso-base-media/process-box.ts +0 -748
  195. package/src/boxes/iso-base-media/stsd/av1c.ts +0 -19
  196. package/src/boxes/iso-base-media/stsd/avcc.ts +0 -36
  197. package/src/boxes/iso-base-media/stsd/colr.ts +0 -49
  198. package/src/boxes/iso-base-media/stsd/ctts.ts +0 -64
  199. package/src/boxes/iso-base-media/stsd/hvcc.ts +0 -32
  200. package/src/boxes/iso-base-media/stsd/keys.ts +0 -27
  201. package/src/boxes/iso-base-media/stsd/mebx.ts +0 -54
  202. package/src/boxes/iso-base-media/stsd/pasp.ts +0 -32
  203. package/src/boxes/iso-base-media/stsd/samples.ts +0 -359
  204. package/src/boxes/iso-base-media/stsd/stco.ts +0 -52
  205. package/src/boxes/iso-base-media/stsd/stsc.ts +0 -61
  206. package/src/boxes/iso-base-media/stsd/stsd.ts +0 -55
  207. package/src/boxes/iso-base-media/stsd/stss.ts +0 -47
  208. package/src/boxes/iso-base-media/stsd/stsz.ts +0 -75
  209. package/src/boxes/iso-base-media/stsd/stts.ts +0 -62
  210. package/src/boxes/iso-base-media/tfdt.ts +0 -37
  211. package/src/boxes/iso-base-media/tfhd.ts +0 -66
  212. package/src/boxes/iso-base-media/tkhd.ts +0 -150
  213. package/src/boxes/iso-base-media/to-date.ts +0 -9
  214. package/src/boxes/iso-base-media/trak/trak.ts +0 -43
  215. package/src/boxes/iso-base-media/trun.ts +0 -74
  216. package/src/boxes/iso-base-media/void-box.ts +0 -4
  217. package/src/boxes/webm/allowed-partial-segments.ts +0 -1
  218. package/src/boxes/webm/av1-codec-private.ts +0 -113
  219. package/src/boxes/webm/description.ts +0 -104
  220. package/src/boxes/webm/ebml.ts +0 -98
  221. package/src/boxes/webm/get-ready-tracks.ts +0 -36
  222. package/src/boxes/webm/get-sample-from-block.ts +0 -125
  223. package/src/boxes/webm/get-track.ts +0 -257
  224. package/src/boxes/webm/make-header.ts +0 -253
  225. package/src/boxes/webm/parse-ebml.ts +0 -259
  226. package/src/boxes/webm/parse-webm-header.ts +0 -18
  227. package/src/boxes/webm/segments/all-segments.ts +0 -888
  228. package/src/boxes/webm/segments/block-simple-block-flags.ts +0 -52
  229. package/src/boxes/webm/segments/parse-children.ts +0 -144
  230. package/src/boxes/webm/segments/track-entry.ts +0 -38
  231. package/src/boxes/webm/segments.ts +0 -147
  232. package/src/boxes/webm/traversal.ts +0 -45
  233. package/src/buffer-iterator.ts +0 -555
  234. package/src/create/cluster-segment.ts +0 -62
  235. package/src/create/cluster.ts +0 -64
  236. package/src/create/create-media.ts +0 -136
  237. package/src/create/make-duration-with-padding.ts +0 -15
  238. package/src/create/matroska-header.ts +0 -63
  239. package/src/create/matroska-info.ts +0 -30
  240. package/src/create/matroska-segment.ts +0 -10
  241. package/src/create/matroska-trackentry.ts +0 -325
  242. package/src/create/timescale.ts +0 -1
  243. package/src/get-audio-codec.ts +0 -270
  244. package/src/get-dimensions.ts +0 -47
  245. package/src/get-duration.ts +0 -103
  246. package/src/get-fps.ts +0 -113
  247. package/src/get-sample-aspect-ratio.ts +0 -204
  248. package/src/get-sample-positions.ts +0 -93
  249. package/src/get-tracks.ts +0 -147
  250. package/src/get-video-codec.ts +0 -117
  251. package/src/has-all-info.ts +0 -81
  252. package/src/index.ts +0 -18
  253. package/src/make-hvc1-codec-strings.ts +0 -55
  254. package/src/options.ts +0 -118
  255. package/src/parse-media.ts +0 -183
  256. package/src/parse-result.ts +0 -79
  257. package/src/parse-video.ts +0 -83
  258. package/src/parser-context.ts +0 -10
  259. package/src/parser-state.ts +0 -178
  260. package/src/readers/from-fetch.ts +0 -90
  261. package/src/readers/from-node.ts +0 -51
  262. package/src/readers/from-web-file.ts +0 -49
  263. package/src/readers/reader.ts +0 -15
  264. package/src/samples-from-moof.ts +0 -102
  265. package/src/test/aspect-ratio.test.ts +0 -42
  266. package/src/test/av1.test.ts +0 -108
  267. package/src/test/create-matroska.test.ts +0 -287
  268. package/src/test/duration.test.ts +0 -18
  269. package/src/test/keys.test.ts +0 -47
  270. package/src/test/matroska.test.ts +0 -463
  271. package/src/test/mvhd.test.ts +0 -94
  272. package/src/test/parse-esds.test.ts +0 -98
  273. package/src/test/parse-stco.test.ts +0 -61
  274. package/src/test/parse-stsc.test.ts +0 -104
  275. package/src/test/parse-stsz.test.ts +0 -57
  276. package/src/test/parse-stts.test.ts +0 -38
  277. package/src/test/parse-video.test.ts +0 -101
  278. package/src/test/parse-webm.test.ts +0 -17
  279. package/src/test/samples-from-moof.test.ts +0 -2496
  280. package/src/test/stream-local.test.ts +0 -743
  281. package/src/test/stream-remote.test.ts +0 -59
  282. package/src/test/stream-samples.test.ts +0 -181
  283. package/src/test/stsd.test.ts +0 -265
  284. package/src/test/tkhd.test.ts +0 -87
  285. package/src/traversal.ts +0 -528
  286. package/src/webcodec-sample-types.ts +0 -29
  287. package/src/writers/web-fs.ts +0 -50
  288. package/src/writers/writer.ts +0 -12
  289. package/tsconfig.json +0 -14
  290. package/tsconfig.tsbuildinfo +0 -1
@@ -1,116 +0,0 @@
1
- import {
2
- getAudioCodecStringFromTrak,
3
- getNumberOfChannelsFromTrak,
4
- getSampleRate,
5
- } from '../../get-audio-codec';
6
- import {
7
- getTimescaleAndDuration,
8
- trakBoxContainsAudio,
9
- trakBoxContainsVideo,
10
- } from '../../get-fps';
11
- import {
12
- applyAspectRatios,
13
- applyTkhdBox,
14
- getDisplayAspectRatio,
15
- getSampleAspectRatio,
16
- getVideoSample,
17
- } from '../../get-sample-aspect-ratio';
18
- import type {AudioTrack, OtherTrack, VideoTrack} from '../../get-tracks';
19
- import {getVideoCodecString} from '../../get-video-codec';
20
- import {getTkhdBox, getVideoDescriptors} from '../../traversal';
21
- import type {TrakBox} from './trak/trak';
22
-
23
- export const makeBaseMediaTrack = (
24
- trakBox: TrakBox,
25
- ): VideoTrack | AudioTrack | OtherTrack | null => {
26
- const tkhdBox = getTkhdBox(trakBox);
27
-
28
- const videoDescriptors = getVideoDescriptors(trakBox);
29
- const timescaleAndDuration = getTimescaleAndDuration(trakBox);
30
-
31
- if (!tkhdBox) {
32
- throw new Error('Expected tkhd box in trak box');
33
- }
34
-
35
- if (!timescaleAndDuration) {
36
- throw new Error('Expected timescale and duration in trak box');
37
- }
38
-
39
- if (trakBoxContainsAudio(trakBox)) {
40
- const numberOfChannels = getNumberOfChannelsFromTrak(trakBox);
41
- if (numberOfChannels === null) {
42
- throw new Error('Could not find number of channels');
43
- }
44
-
45
- const sampleRate = getSampleRate(trakBox);
46
- if (sampleRate === null) {
47
- throw new Error('Could not find sample rate');
48
- }
49
-
50
- const {codecString, description} = getAudioCodecStringFromTrak(trakBox);
51
-
52
- return {
53
- type: 'audio',
54
- trackId: tkhdBox.trackId,
55
- timescale: timescaleAndDuration.timescale,
56
- codec: codecString,
57
- numberOfChannels,
58
- sampleRate,
59
- description,
60
- trakBox,
61
- };
62
- }
63
-
64
- if (!trakBoxContainsVideo(trakBox)) {
65
- return {
66
- type: 'other',
67
- trackId: tkhdBox.trackId,
68
- timescale: timescaleAndDuration.timescale,
69
- trakBox,
70
- };
71
- }
72
-
73
- const videoSample = getVideoSample(trakBox);
74
- if (!videoSample) {
75
- throw new Error('No video sample');
76
- }
77
-
78
- const sampleAspectRatio = getSampleAspectRatio(trakBox);
79
-
80
- const aspectRatioApplied = applyAspectRatios({
81
- dimensions: videoSample,
82
- sampleAspectRatio,
83
- displayAspectRatio: getDisplayAspectRatio({
84
- sampleAspectRatio,
85
- nativeDimensions: videoSample,
86
- }),
87
- });
88
-
89
- const {displayAspectHeight, displayAspectWidth, height, rotation, width} =
90
- applyTkhdBox(aspectRatioApplied, tkhdBox);
91
-
92
- const codec = getVideoCodecString(trakBox);
93
-
94
- if (!codec) {
95
- throw new Error('Could not find video codec');
96
- }
97
-
98
- const track: VideoTrack = {
99
- type: 'video',
100
- trackId: tkhdBox.trackId,
101
- description: videoDescriptors ?? undefined,
102
- timescale: timescaleAndDuration.timescale,
103
- codec,
104
- sampleAspectRatio: getSampleAspectRatio(trakBox),
105
- width,
106
- height,
107
- codedWidth: videoSample.width,
108
- codedHeight: videoSample.height,
109
- // Repeating those keys because they get picked up by VideoDecoder
110
- displayAspectWidth,
111
- displayAspectHeight,
112
- rotation,
113
- trakBox,
114
- };
115
- return track;
116
- };
@@ -1,140 +0,0 @@
1
- /* eslint-disable max-depth */
2
- import type {BufferIterator} from '../../../buffer-iterator';
3
- import {getTracks, hasTracks} from '../../../get-tracks';
4
- import type {AnySegment} from '../../../parse-result';
5
- import type {ParserContext} from '../../../parser-context';
6
- import {getMoofBox} from '../../../traversal';
7
- import {getSamplePositionsFromTrack} from '../get-sample-positions-from-track';
8
- import type {TrakBox} from '../trak/trak';
9
-
10
- export interface MdatBox {
11
- type: 'mdat-box';
12
- samplesProcessed: boolean;
13
- boxSize: number;
14
- fileOffset: number;
15
- }
16
-
17
- export const parseMdat = async ({
18
- data,
19
- size,
20
- fileOffset,
21
- existingBoxes,
22
- options,
23
- }: {
24
- data: BufferIterator;
25
- size: number;
26
- fileOffset: number;
27
- existingBoxes: AnySegment[];
28
- options: ParserContext;
29
- }): Promise<MdatBox> => {
30
- const alreadyHas = hasTracks(existingBoxes);
31
- if (!alreadyHas) {
32
- data.discard(size - (data.counter.getOffset() - fileOffset));
33
- return Promise.resolve({
34
- type: 'mdat-box',
35
- boxSize: size,
36
- samplesProcessed: false,
37
- fileOffset,
38
- });
39
- }
40
-
41
- const tracks = getTracks(existingBoxes, options.parserState);
42
- const allTracks = [
43
- ...tracks.videoTracks,
44
- ...tracks.audioTracks,
45
- ...tracks.otherTracks,
46
- ];
47
-
48
- const flatSamples = allTracks
49
- .map((track) => {
50
- const samplePositions = getSamplePositionsFromTrack(
51
- track.trakBox as TrakBox,
52
- getMoofBox(existingBoxes),
53
- );
54
- if (!samplePositions) {
55
- throw new Error('No sample positions');
56
- }
57
-
58
- return samplePositions.map((samplePosition) => {
59
- return {
60
- track: {...track},
61
- samplePosition,
62
- };
63
- });
64
- })
65
- .flat(1);
66
-
67
- // eslint-disable-next-line no-constant-condition
68
- while (true) {
69
- const samplesWithIndex = flatSamples.find((sample) => {
70
- return sample.samplePosition.offset === data.counter.getOffset();
71
- });
72
- if (!samplesWithIndex) {
73
- // There are various reasons why in mdat we find weird stuff:
74
- // - iphonevideo.hevc has a fake hoov atom which is not mapped
75
- // - corrupted.mp4 has a corrupt table
76
- const nextSample_ = flatSamples
77
- .filter((s) => s.samplePosition.offset > data.counter.getOffset())
78
- .sort((a, b) => a.samplePosition.offset - b.samplePosition.offset)[0];
79
- if (nextSample_) {
80
- data.discard(
81
- nextSample_.samplePosition.offset - data.counter.getOffset(),
82
- );
83
- continue;
84
- } else {
85
- const bytesRemaining = size + fileOffset - data.counter.getOffset();
86
- data.discard(bytesRemaining);
87
- break;
88
- }
89
- }
90
-
91
- if (data.bytesRemaining() < samplesWithIndex.samplePosition.size) {
92
- break;
93
- }
94
-
95
- const bytes = data.getSlice(samplesWithIndex.samplePosition.size);
96
-
97
- if (samplesWithIndex.track.type === 'audio') {
98
- await options.parserState.onAudioSample(samplesWithIndex.track.trackId, {
99
- data: bytes,
100
- timestamp: samplesWithIndex.samplePosition.offset,
101
- trackId: samplesWithIndex.track.trackId,
102
- type: samplesWithIndex.samplePosition.isKeyframe ? 'key' : 'delta',
103
- });
104
- }
105
-
106
- if (samplesWithIndex.track.type === 'video') {
107
- const timestamp = Math.floor(
108
- (samplesWithIndex.samplePosition.cts * 1_000_000) /
109
- samplesWithIndex.track.timescale,
110
- );
111
- const duration = Math.floor(
112
- (samplesWithIndex.samplePosition.duration * 1_000_000) /
113
- samplesWithIndex.track.timescale,
114
- );
115
-
116
- await options.parserState.onVideoSample(samplesWithIndex.track.trackId, {
117
- data: bytes,
118
- timestamp,
119
- duration,
120
- cts: samplesWithIndex.samplePosition.cts,
121
- dts: samplesWithIndex.samplePosition.dts,
122
- trackId: samplesWithIndex.track.trackId,
123
- type: samplesWithIndex.samplePosition.isKeyframe ? 'key' : 'delta',
124
- });
125
- }
126
-
127
- const remaining = size - (data.counter.getOffset() - fileOffset);
128
- data.removeBytesRead();
129
- if (remaining === 0) {
130
- break;
131
- }
132
- }
133
-
134
- return Promise.resolve({
135
- type: 'mdat-box',
136
- boxSize: size,
137
- samplesProcessed: true,
138
- fileOffset,
139
- });
140
- };
@@ -1,59 +0,0 @@
1
- import type {BufferIterator} from '../../buffer-iterator';
2
-
3
- export interface MdhdBox {
4
- type: 'mdhd-box';
5
- version: number;
6
- timescale: number;
7
- duration: number;
8
- language: number;
9
- quality: number;
10
- creationTime: number | null;
11
- modificationTime: number | null;
12
- }
13
-
14
- export const parseMdhd = ({
15
- data,
16
- size,
17
- fileOffset,
18
- }: {
19
- data: BufferIterator;
20
- size: number;
21
- fileOffset: number;
22
- }): MdhdBox => {
23
- const version = data.getUint8();
24
-
25
- // flags, we discard them
26
- data.discard(3);
27
-
28
- // creation time
29
- const creationTime =
30
- version === 1 ? Number(data.getUint64()) : data.getUint32();
31
-
32
- // modification time
33
- const modificationTime =
34
- version === 1 ? Number(data.getUint64()) : data.getUint32();
35
-
36
- const timescale = data.getUint32();
37
- const duration = version === 1 ? data.getUint64() : data.getUint32();
38
-
39
- const language = data.getUint16();
40
-
41
- // quality
42
- const quality = data.getUint16();
43
-
44
- const remaining = size - (data.counter.getOffset() - fileOffset);
45
- if (remaining !== 0) {
46
- throw new Error(`Expected remaining bytes to be 0, got ${remaining}`);
47
- }
48
-
49
- return {
50
- type: 'mdhd-box',
51
- duration: Number(duration),
52
- timescale,
53
- version,
54
- language,
55
- quality,
56
- creationTime,
57
- modificationTime,
58
- };
59
- };
@@ -1,43 +0,0 @@
1
- import type {BufferIterator} from '../../../buffer-iterator';
2
- import type {AnySegment} from '../../../parse-result';
3
- import type {ParserContext} from '../../../parser-context';
4
- import type {BaseBox} from '../base-type';
5
- import {parseBoxes} from '../process-box';
6
-
7
- export interface MoovBox extends BaseBox {
8
- type: 'moov-box';
9
- children: AnySegment[];
10
- }
11
-
12
- export const parseMoov = async ({
13
- iterator,
14
- offset,
15
- size,
16
- options,
17
- }: {
18
- iterator: BufferIterator;
19
- offset: number;
20
- size: number;
21
- options: ParserContext;
22
- }): Promise<MoovBox> => {
23
- const children = await parseBoxes({
24
- iterator,
25
- maxBytes: size - (iterator.counter.getOffset() - offset),
26
- allowIncompleteBoxes: false,
27
- initialBoxes: [],
28
- options,
29
- continueMdat: false,
30
- littleEndian: false,
31
- });
32
-
33
- if (children.status === 'incomplete') {
34
- throw new Error('Incomplete boxes are not allowed');
35
- }
36
-
37
- return {
38
- offset,
39
- boxSize: size,
40
- type: 'moov-box',
41
- children: children.segments,
42
- };
43
- };
@@ -1,114 +0,0 @@
1
- import type {BufferIterator} from '../../buffer-iterator';
2
- import {getArrayBufferIterator} from '../../buffer-iterator';
3
- import type {BaseBox} from './base-type';
4
- import {toUnixTimestamp} from './to-date';
5
-
6
- export type ThreeDMatrix = [
7
- number,
8
- number,
9
- number,
10
- number,
11
- number,
12
- number,
13
- number,
14
- number,
15
- number,
16
- ];
17
-
18
- export interface MvhdBox extends BaseBox {
19
- durationInUnits: number;
20
- durationInSeconds: number;
21
- creationTime: number | null;
22
- modificationTime: number | null;
23
- timeScale: number;
24
- rate: number;
25
- volume: number;
26
- matrix: ThreeDMatrix;
27
- nextTrackId: number;
28
- type: 'mvhd-box';
29
- }
30
-
31
- export const parseMvhd = ({
32
- iterator,
33
- offset,
34
- size,
35
- }: {
36
- iterator: BufferIterator;
37
- offset: number;
38
- size: number;
39
- }): MvhdBox => {
40
- const version = iterator.getUint8();
41
-
42
- // Flags, we discard them
43
- iterator.discard(3);
44
-
45
- const creationTime =
46
- version === 1 ? iterator.getUint64() : iterator.getUint32();
47
-
48
- const modificationTime =
49
- version === 1 ? iterator.getUint64() : iterator.getUint32();
50
-
51
- const timeScale = iterator.getUint32();
52
-
53
- const durationInUnits =
54
- version === 1 ? iterator.getUint64() : iterator.getUint32();
55
- const durationInSeconds = Number(durationInUnits) / timeScale;
56
-
57
- const rateArray = iterator.getSlice(4);
58
- const rateView = getArrayBufferIterator(rateArray, rateArray.length);
59
- const rate =
60
- rateView.getInt8() * 10 +
61
- rateView.getInt8() +
62
- rateView.getInt8() * 0.1 +
63
- rateView.getInt8() * 0.01;
64
-
65
- const volumeArray = iterator.getSlice(2);
66
- const volumeView = getArrayBufferIterator(volumeArray, volumeArray.length);
67
-
68
- const volume = volumeView.getInt8() + volumeView.getInt8() * 0.1;
69
-
70
- // reserved 16bit
71
- iterator.discard(2);
72
-
73
- // reserved 32bit x2
74
- iterator.discard(4);
75
- iterator.discard(4);
76
-
77
- // matrix
78
- const matrix: number[] = [];
79
- for (let i = 0; i < 9; i++) {
80
- if (i % 3 === 2) {
81
- matrix.push(iterator.getFixedPointSigned230Number());
82
- } else {
83
- matrix.push(iterator.getFixedPointSigned1616Number());
84
- }
85
- }
86
-
87
- // pre-defined
88
- iterator.discard(4 * 6);
89
-
90
- // next track id
91
- const nextTrackId = iterator.getUint32();
92
-
93
- volumeView.destroy();
94
-
95
- const bytesRemaining = size - (iterator.counter.getOffset() - offset);
96
- if (bytesRemaining !== 0) {
97
- throw new Error('expected 0 bytes ' + bytesRemaining);
98
- }
99
-
100
- return {
101
- creationTime: toUnixTimestamp(Number(creationTime)),
102
- modificationTime: toUnixTimestamp(Number(modificationTime)),
103
- timeScale,
104
- durationInUnits: Number(durationInUnits),
105
- durationInSeconds,
106
- rate,
107
- volume,
108
- matrix: matrix as ThreeDMatrix,
109
- nextTrackId,
110
- type: 'mvhd-box',
111
- boxSize: size,
112
- offset,
113
- };
114
- };