@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,90 +0,0 @@
1
- import type {ReaderInterface} from './reader';
2
-
3
- export const fetchReader: ReaderInterface = {
4
- read: async (src, range, signal) => {
5
- if (typeof src !== 'string') {
6
- throw new Error('src must be a string when using `fetchReader`');
7
- }
8
-
9
- const resolvedUrl =
10
- typeof window !== 'undefined' && typeof window.location !== 'undefined'
11
- ? new URL(src, window.location.origin).toString()
12
- : src;
13
-
14
- if (
15
- !resolvedUrl.startsWith('https://') &&
16
- !resolvedUrl.startsWith('http://')
17
- ) {
18
- return Promise.reject(
19
- new Error(
20
- resolvedUrl +
21
- ' is not a URL - needs to start with http:// or https://. If you want to read a local file, pass `reader: nodeReader` to parseMedia().',
22
- ),
23
- );
24
- }
25
-
26
- const res = await fetch(resolvedUrl, {
27
- headers:
28
- range === null
29
- ? {}
30
- : typeof range === 'number'
31
- ? {
32
- Range: `bytes=${range}`,
33
- }
34
- : {
35
- Range: `bytes=${`${range[0]}-${range[1]}`}`,
36
- },
37
- signal,
38
- // Disable Next.js caching
39
- cache: 'no-store',
40
- });
41
-
42
- if (
43
- res.status.toString().startsWith('4') ||
44
- res.status.toString().startsWith('5')
45
- ) {
46
- throw new Error(`Server returned status code ${res.status} for ${src}`);
47
- }
48
-
49
- if (!res.body) {
50
- throw new Error('No body');
51
- }
52
-
53
- const length = res.headers.get('content-length');
54
-
55
- const contentLength = length === null ? null : parseInt(length, 10);
56
-
57
- const reader = res.body.getReader();
58
-
59
- if (signal) {
60
- signal.addEventListener(
61
- 'abort',
62
- () => {
63
- reader.cancel();
64
- },
65
- {once: true},
66
- );
67
- }
68
-
69
- return {reader, contentLength};
70
- },
71
- getLength: async (src) => {
72
- if (typeof src !== 'string') {
73
- throw new Error('src must be a string when using `fetchReader`');
74
- }
75
-
76
- const res = await fetch(src, {
77
- method: 'HEAD',
78
- });
79
- if (!res.body) {
80
- throw new Error('No body');
81
- }
82
-
83
- const length = res.headers.get('content-length');
84
- if (!length) {
85
- throw new Error('No content-length');
86
- }
87
-
88
- return parseInt(length, 10);
89
- },
90
- };
@@ -1,51 +0,0 @@
1
- import {createReadStream} from 'fs';
2
- import {stat} from 'node:fs/promises';
3
- import {Readable} from 'stream';
4
- import type {ReaderInterface} from './reader';
5
-
6
- export const nodeReader: ReaderInterface = {
7
- read: async (src, range, signal) => {
8
- if (typeof src !== 'string') {
9
- throw new Error('src must be a string when using `nodeReader`');
10
- }
11
-
12
- const stream = createReadStream(src, {
13
- start: range === null ? 0 : typeof range === 'number' ? range : range[0],
14
- end:
15
- range === null
16
- ? Infinity
17
- : typeof range === 'number'
18
- ? Infinity
19
- : range[1],
20
- signal,
21
- });
22
- const stats = await stat(src);
23
-
24
- const reader = Readable.toWeb(
25
- stream,
26
- ).getReader() as ReadableStreamDefaultReader<Uint8Array>;
27
-
28
- if (signal) {
29
- signal.addEventListener(
30
- 'abort',
31
- () => {
32
- reader.cancel();
33
- },
34
- {once: true},
35
- );
36
- }
37
-
38
- return {
39
- reader,
40
- contentLength: stats.size,
41
- };
42
- },
43
- getLength: async (src) => {
44
- if (typeof src !== 'string') {
45
- throw new Error('src must be a string when using `nodeReader`');
46
- }
47
-
48
- const stats = await stat(src);
49
- return stats.size;
50
- },
51
- };
@@ -1,49 +0,0 @@
1
- import type {ReaderInterface} from './reader';
2
-
3
- export const webFileReader: ReaderInterface = {
4
- read: (file, range, signal) => {
5
- if (typeof file === 'string') {
6
- throw new Error('`inputTypeFileReader` only supports `File` objects');
7
- }
8
-
9
- const part =
10
- range === null
11
- ? file
12
- : typeof range === 'number'
13
- ? file.slice(range)
14
- : file.slice(range[0], range[1]);
15
-
16
- const reader = new FileReader();
17
- reader.readAsArrayBuffer(file);
18
-
19
- if (signal) {
20
- signal.addEventListener(
21
- 'abort',
22
- () => {
23
- reader.abort();
24
- },
25
- {once: true},
26
- );
27
- }
28
-
29
- return new Promise((resolve, reject) => {
30
- reader.onload = () => {
31
- resolve({
32
- reader: part.stream().getReader(),
33
- contentLength: file.size,
34
- });
35
- };
36
-
37
- reader.onerror = (error) => {
38
- reject(error);
39
- };
40
- });
41
- },
42
- getLength: (src) => {
43
- if (typeof src === 'string') {
44
- throw new Error('`inputTypeFileReader` only supports `File` objects');
45
- }
46
-
47
- return Promise.resolve(src.size);
48
- },
49
- };
@@ -1,15 +0,0 @@
1
- type ReadResult = {
2
- reader: ReadableStreamDefaultReader<Uint8Array>;
3
- contentLength: number | null;
4
- };
5
- type ReadContent = (
6
- src: string | File,
7
- range: [number, number] | number | null,
8
- signal: AbortSignal | undefined,
9
- ) => Promise<ReadResult>;
10
- type GetLength = (src: string | File) => Promise<number>;
11
-
12
- export type ReaderInterface = {
13
- read: ReadContent;
14
- getLength: GetLength;
15
- };
@@ -1,102 +0,0 @@
1
- import type {SamplePosition} from './get-sample-positions';
2
- import type {AnySegment, IsoBaseMediaBox} from './parse-result';
3
- import {getTfdtBox, getTfhdBox, getTrunBoxes} from './traversal';
4
-
5
- const getSamplesFromTraf = (
6
- trafSegment: IsoBaseMediaBox,
7
- moofOffset: number,
8
- ): SamplePosition[] => {
9
- if (trafSegment.type !== 'regular-box' || trafSegment.boxType !== 'traf') {
10
- throw new Error('Expected traf-box');
11
- }
12
-
13
- const tfhdBox = getTfhdBox(trafSegment);
14
- const defaultSampleDuration = tfhdBox?.defaultSampleDuration ?? null;
15
- const defaultSampleSize = tfhdBox?.defaultSampleSize ?? null;
16
- const defaultSampleFlags = tfhdBox?.defaultSampleFlags ?? null;
17
-
18
- const tfdtBox = getTfdtBox(trafSegment);
19
- const trunBoxes = getTrunBoxes(trafSegment);
20
-
21
- let time = 0;
22
- let offset = 0;
23
-
24
- let dataOffset = 0;
25
-
26
- const samples: SamplePosition[] = [];
27
-
28
- for (const trunBox of trunBoxes) {
29
- let i = -1;
30
-
31
- if (trunBox.dataOffset) {
32
- dataOffset = trunBox.dataOffset;
33
- offset = 0;
34
- }
35
-
36
- for (const sample of trunBox.samples) {
37
- i++;
38
- const duration = sample.sampleDuration ?? defaultSampleDuration;
39
- if (duration === null) {
40
- throw new Error('Expected duration');
41
- }
42
-
43
- const size = sample.sampleSize ?? defaultSampleSize;
44
- if (size === null) {
45
- throw new Error('Expected size');
46
- }
47
-
48
- const isFirstSample = i === 0;
49
- const sampleFlags = sample.sampleFlags
50
- ? sample.sampleFlags
51
- : isFirstSample && trunBox.firstSampleFlags !== null
52
- ? trunBox.firstSampleFlags
53
- : defaultSampleFlags;
54
- if (sampleFlags === null) {
55
- throw new Error('Expected sample flags');
56
- }
57
-
58
- const keyframe = !((sampleFlags >> 16) & 0x1);
59
-
60
- const dts = time + (tfdtBox?.baseMediaDecodeTime ?? 0);
61
-
62
- const samplePosition: SamplePosition = {
63
- offset: offset + (moofOffset ?? 0) + (dataOffset ?? 0),
64
- dts,
65
- cts: dts,
66
- duration,
67
- isKeyframe: keyframe,
68
- size,
69
- };
70
- samples.push(samplePosition);
71
- offset += size;
72
- time += duration;
73
- }
74
- }
75
-
76
- return samples;
77
- };
78
-
79
- export const getSamplesFromMoof = ({
80
- moofBox,
81
- trackId,
82
- }: {
83
- moofBox: AnySegment;
84
- trackId: number;
85
- }) => {
86
- if (moofBox.type !== 'regular-box') {
87
- throw new Error('Expected moof-box');
88
- }
89
-
90
- const trafs = moofBox.children.filter(
91
- (c) => c.type === 'regular-box' && c.boxType === 'traf',
92
- ) as IsoBaseMediaBox[];
93
-
94
- const mapped = trafs.map((traf) => {
95
- const tfhdBox = getTfhdBox(traf);
96
-
97
- return tfhdBox?.trackId === trackId
98
- ? getSamplesFromTraf(traf, moofBox.offset)
99
- : [];
100
- });
101
- return mapped.flat(1);
102
- };
@@ -1,42 +0,0 @@
1
- import {expect, test} from 'bun:test';
2
- import {
3
- applyAspectRatios,
4
- getDisplayAspectRatio,
5
- } from '../get-sample-aspect-ratio';
6
-
7
- test('Should calculate sample aspect ratio', () => {
8
- const displayAspectRatio = getDisplayAspectRatio({
9
- sampleAspectRatio: {
10
- denominator: 177,
11
- numerator: 56,
12
- },
13
- nativeDimensions: {
14
- width: 1280,
15
- height: 720,
16
- },
17
- });
18
-
19
- expect(displayAspectRatio).toEqual({
20
- numerator: 896,
21
- denominator: 1593,
22
- });
23
-
24
- const applied = applyAspectRatios({
25
- dimensions: {
26
- width: 1280,
27
- height: 720,
28
- },
29
- sampleAspectRatio: {
30
- numerator: 56,
31
- denominator: 177,
32
- },
33
- displayAspectRatio: {
34
- numerator: 896,
35
- denominator: 1593,
36
- },
37
- });
38
- expect(applied).toEqual({
39
- width: 405,
40
- height: 720,
41
- });
42
- });
@@ -1,108 +0,0 @@
1
- import {RenderInternals} from '@remotion/renderer';
2
- import {expect, test} from 'bun:test';
3
- import {trakBoxContainsVideo} from '../get-fps';
4
- import {getAv1CBox} from '../get-sample-aspect-ratio';
5
- import {parseMedia} from '../parse-media';
6
- import {nodeReader} from '../readers/from-node';
7
- import {getMoovBox, getTraks} from '../traversal';
8
-
9
- test('AV1 in MP4', async () => {
10
- const parsed = await parseMedia({
11
- src: RenderInternals.exampleVideos.av1mp4,
12
- fields: {
13
- durationInSeconds: true,
14
- fps: true,
15
- videoCodec: true,
16
- tracks: true,
17
- audioCodec: true,
18
- dimensions: true,
19
- rotation: true,
20
- boxes: true,
21
- },
22
- reader: nodeReader,
23
- });
24
-
25
- const moovBox = getMoovBox(parsed.boxes);
26
- if (!moovBox) {
27
- throw new Error('No moov box');
28
- }
29
-
30
- const traks = getTraks(moovBox).filter((t) => trakBoxContainsVideo(t))[0];
31
- const avc1Box = getAv1CBox(traks);
32
- expect(avc1Box).toEqual({
33
- type: 'av1C-box',
34
- privateData: new Uint8Array([
35
- 129, 8, 12, 0, 10, 11, 0, 0, 0, 66, 171, 191, 195, 119, 111, 228, 1,
36
- ]),
37
- });
38
- expect(avc1Box).toBeTruthy();
39
-
40
- expect(parsed.durationInSeconds).toBe(10);
41
- expect(parsed.fps).toBe(30);
42
- expect(parsed.videoCodec).toBe('av1');
43
- expect(parsed.videoTracks[0].codec).toEqual('av01.0.08M.08');
44
- // This is true, there are no audio tracks
45
- expect(parsed.audioTracks).toEqual([]);
46
- expect(parsed.audioCodec).toEqual(null);
47
- expect(parsed.dimensions).toEqual({
48
- width: 1920,
49
- height: 1080,
50
- });
51
- expect(parsed.rotation).toBe(0);
52
- });
53
-
54
- test('AV1 in MP4 with colr atom', async () => {
55
- let tracks = 0;
56
- let samples = 0;
57
-
58
- const parsed = await parseMedia({
59
- src: RenderInternals.exampleVideos.av1mp4WithColr,
60
- fields: {
61
- durationInSeconds: true,
62
- fps: true,
63
- videoCodec: true,
64
- tracks: true,
65
- audioCodec: true,
66
- dimensions: true,
67
- rotation: true,
68
- boxes: true,
69
- },
70
- reader: nodeReader,
71
- onVideoTrack: () => {
72
- tracks++;
73
- return () => {
74
- samples++;
75
- };
76
- },
77
- });
78
-
79
- const moovBox = getMoovBox(parsed.boxes);
80
- if (!moovBox) {
81
- throw new Error('No moov box');
82
- }
83
-
84
- const traks = getTraks(moovBox).filter((t) => trakBoxContainsVideo(t))[0];
85
- const avc1Box = getAv1CBox(traks);
86
- expect(avc1Box).toEqual({
87
- type: 'av1C-box',
88
- privateData: new Uint8Array([
89
- 129, 8, 12, 0, 10, 14, 0, 0, 0, 66, 171, 191, 195, 118, 0, 8, 8, 8, 8, 32,
90
- ]),
91
- });
92
- expect(avc1Box).toBeTruthy();
93
-
94
- expect(parsed.durationInSeconds).toBe(1);
95
- expect(parsed.fps).toBe(25);
96
- expect(parsed.videoCodec).toBe('av1');
97
- expect(parsed.videoTracks[0].codec).toEqual('av01.0.08M.08');
98
- // This is true, there are no audio tracks
99
- expect(parsed.audioTracks).toEqual([]);
100
- expect(parsed.audioCodec).toEqual(null);
101
- expect(parsed.dimensions).toEqual({
102
- width: 1920,
103
- height: 1080,
104
- });
105
- expect(parsed.rotation).toBe(0);
106
- expect(tracks).toBe(1);
107
- expect(samples).toBe(25);
108
- });