@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
@@ -0,0 +1,67 @@
1
+ // src/writers/web-fs.ts
2
+ var createContent = async () => {
3
+ const directoryHandle = await navigator.storage.getDirectory();
4
+ const filename = `media-parser-${Math.random().toString().replace("0.", "")}.webm`;
5
+ const fileHandle = await directoryHandle.getFileHandle(filename, {
6
+ create: true
7
+ });
8
+ const writable = await fileHandle.createWritable();
9
+ let written = 0;
10
+ let writPromise = Promise.resolve();
11
+ const write = async (arr) => {
12
+ await writable.write(arr);
13
+ written += arr.byteLength;
14
+ };
15
+ const updateDataAt = async (position, data) => {
16
+ await writable.seek(position);
17
+ await writable.write(data);
18
+ await writable.seek(written);
19
+ };
20
+ const remove = async () => {
21
+ await directoryHandle.removeEntry(filename, {
22
+ recursive: true
23
+ });
24
+ };
25
+ const writer = {
26
+ write: (arr) => {
27
+ writPromise = writPromise.then(() => write(arr));
28
+ return writPromise;
29
+ },
30
+ save: async () => {
31
+ try {
32
+ await writable.close();
33
+ } catch (err) {
34
+ }
35
+ const newHandle = await directoryHandle.getFileHandle(filename, {
36
+ create: true
37
+ });
38
+ const newFile = await newHandle.getFile();
39
+ return newFile;
40
+ },
41
+ getWrittenByteCount: () => written,
42
+ updateDataAt: (position, data) => {
43
+ writPromise = writPromise.then(() => updateDataAt(position, data));
44
+ return writPromise;
45
+ },
46
+ waitForFinish: async () => {
47
+ await writPromise;
48
+ },
49
+ remove
50
+ };
51
+ return writer;
52
+ };
53
+ var webFsWriter = {
54
+ createContent
55
+ };
56
+ var canUseWebFsWriter = async () => {
57
+ const directoryHandle = await navigator.storage.getDirectory();
58
+ const fileHandle = await directoryHandle.getFileHandle("remotion-probe-web-fs-support", {
59
+ create: true
60
+ });
61
+ const canUse = fileHandle.createWritable !== undefined;
62
+ return canUse;
63
+ };
64
+ export {
65
+ webFsWriter,
66
+ canUseWebFsWriter
67
+ };
@@ -1,9 +1,9 @@
1
1
  import type { MoovBox } from './boxes/iso-base-media/moov/moov';
2
2
  import type { TrakBox } from './boxes/iso-base-media/trak/trak';
3
- import type { MainSegment } from './boxes/webm/segments/all-segments';
4
- import type { KnownAudioCodecs } from './options';
3
+ import { type MediaParserAudioCodec } from './get-tracks';
5
4
  import type { AnySegment } from './parse-result';
6
- export declare const hasAudioCodec: (boxes: AnySegment[]) => boolean;
5
+ import type { ParserState } from './parser-state';
6
+ export declare const hasAudioCodec: (boxes: AnySegment[], state: ParserState) => boolean;
7
7
  type AudioCodecInfo = {
8
8
  format: string;
9
9
  primarySpecificator: number | null;
@@ -14,10 +14,10 @@ export declare const getNumberOfChannelsFromTrak: (trak: TrakBox) => number | nu
14
14
  export declare const getSampleRate: (trak: TrakBox) => number | null;
15
15
  export declare const getAudioCodecFromTrak: (trak: TrakBox) => AudioCodecInfo | null;
16
16
  export declare const getAudioCodecFromIso: (moov: MoovBox) => AudioCodecInfo | null;
17
- export declare const getAudioCodecFromMatroska: (mainSegment: MainSegment) => "vorbis" | "opus" | "mp3" | "aac" | "pcm" | null;
18
17
  export declare const getAudioCodecStringFromTrak: (trak: TrakBox) => {
19
18
  codecString: string;
20
19
  description: Uint8Array | undefined;
21
20
  };
22
- export declare const getAudioCodec: (boxes: AnySegment[]) => KnownAudioCodecs | null;
21
+ export declare const getAudioCodecFromTrack: (track: TrakBox) => MediaParserAudioCodec;
22
+ export declare const getAudioCodec: (boxes: AnySegment[], parserState: ParserState) => MediaParserAudioCodec | null;
23
23
  export {};
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAudioCodec = exports.getAudioCodecStringFromTrak = exports.getAudioCodecFromMatroska = exports.getAudioCodecFromIso = exports.getAudioCodecFromTrak = exports.getSampleRate = exports.getNumberOfChannelsFromTrak = exports.hasAudioCodec = void 0;
3
+ exports.getAudioCodec = exports.getAudioCodecFromTrack = exports.getAudioCodecStringFromTrak = exports.getAudioCodecFromIso = exports.getAudioCodecFromTrak = exports.getSampleRate = exports.getNumberOfChannelsFromTrak = exports.hasAudioCodec = void 0;
4
+ const traversal_1 = require("./boxes/iso-base-media/traversal");
4
5
  const get_fps_1 = require("./get-fps");
5
- const traversal_1 = require("./traversal");
6
- const hasAudioCodec = (boxes) => {
6
+ const get_tracks_1 = require("./get-tracks");
7
+ const hasAudioCodec = (boxes, state) => {
7
8
  try {
8
- return (0, exports.getAudioCodec)(boxes) !== null;
9
+ return (0, exports.getAudioCodec)(boxes, state) !== null;
9
10
  }
10
11
  catch (e) {
11
12
  return false;
@@ -114,36 +115,6 @@ const getAudioCodecFromIso = (moov) => {
114
115
  return (0, exports.getAudioCodecFromTrak)(trakBox);
115
116
  };
116
117
  exports.getAudioCodecFromIso = getAudioCodecFromIso;
117
- const getAudioCodecFromMatroska = (mainSegment) => {
118
- const tracksSegment = mainSegment.value.find((b) => b.type === 'Tracks');
119
- if (!tracksSegment || tracksSegment.type !== 'Tracks') {
120
- return null;
121
- }
122
- for (const track of tracksSegment.value) {
123
- if (track.type === 'TrackEntry') {
124
- const trackType = track.value.find((b) => b.type === 'CodecID');
125
- if (trackType && trackType.type === 'CodecID') {
126
- if (trackType.value === 'A_OPUS') {
127
- return 'opus';
128
- }
129
- if (trackType.value === 'A_VORBIS') {
130
- return 'vorbis';
131
- }
132
- if (trackType.value === 'A_PCM/INT/LIT') {
133
- return 'pcm';
134
- }
135
- if (trackType.value === 'A_AAC') {
136
- return 'aac';
137
- }
138
- if (trackType.value === 'A_MPEG/L3') {
139
- return 'mp3';
140
- }
141
- }
142
- }
143
- }
144
- return null;
145
- };
146
- exports.getAudioCodecFromMatroska = getAudioCodecFromMatroska;
147
118
  const getAudioCodecStringFromTrak = (trak) => {
148
119
  const codec = (0, exports.getAudioCodecFromTrak)(trak);
149
120
  if (!codec) {
@@ -166,34 +137,50 @@ const getAudioCodecStringFromTrak = (trak) => {
166
137
  };
167
138
  };
168
139
  exports.getAudioCodecStringFromTrak = getAudioCodecStringFromTrak;
169
- const getAudioCodec = (boxes) => {
170
- const moovBox = (0, traversal_1.getMoovBox)(boxes);
171
- if (moovBox) {
172
- const codec = (0, exports.getAudioCodecFromIso)(moovBox);
173
- if (!codec) {
174
- return null;
140
+ const getAudioCodecFromAudioCodecInfo = (codec) => {
141
+ if (codec.format === 'twos') {
142
+ return 'pcm-s16';
143
+ }
144
+ if (codec.format === 'sowt') {
145
+ return 'aiff';
146
+ }
147
+ if (codec.format === 'mp4a') {
148
+ if (codec.primarySpecificator === 0x40) {
149
+ return 'aac';
175
150
  }
176
- if (codec.format === 'sowt') {
177
- return 'aiff';
151
+ if (codec.primarySpecificator === 0x6b) {
152
+ return 'mp3';
178
153
  }
179
- if (codec.format === 'mp4a') {
180
- if (codec.primarySpecificator === 0x40) {
181
- return 'aac';
182
- }
183
- if (codec.primarySpecificator === 0x6b) {
184
- return 'mp3';
185
- }
186
- if (codec.primarySpecificator === null) {
187
- return 'aac';
188
- }
189
- throw new Error('Unknown mp4a codec: ' + codec.primarySpecificator);
154
+ if (codec.primarySpecificator === null) {
155
+ return 'aac';
190
156
  }
191
- throw new Error('Unknown audio format: ' + codec.format);
157
+ throw new Error('Unknown mp4a codec: ' + codec.primarySpecificator);
158
+ }
159
+ throw new Error(`Unknown audio format: ${codec.format}`);
160
+ };
161
+ const getAudioCodecFromTrack = (track) => {
162
+ const audioSample = (0, exports.getAudioCodecFromTrak)(track);
163
+ if (!audioSample) {
164
+ throw new Error('Could not find audio sample');
192
165
  }
193
- const mainSegment = boxes.find((b) => b.type === 'Segment');
194
- if (!mainSegment || mainSegment.type !== 'Segment') {
166
+ return getAudioCodecFromAudioCodecInfo(audioSample);
167
+ };
168
+ exports.getAudioCodecFromTrack = getAudioCodecFromTrack;
169
+ const getAudioCodec = (boxes, parserState) => {
170
+ const tracks = (0, get_tracks_1.getTracks)(boxes, parserState);
171
+ const allTracks = tracks.audioTracks.length +
172
+ tracks.otherTracks.length +
173
+ tracks.videoTracks.length;
174
+ if (allTracks === 0) {
175
+ throw new Error('No tracks yet');
176
+ }
177
+ const audioTrack = tracks.audioTracks[0];
178
+ if (!audioTrack) {
195
179
  return null;
196
180
  }
197
- return (0, exports.getAudioCodecFromMatroska)(mainSegment);
181
+ if (audioTrack.type === 'audio') {
182
+ return audioTrack.codecWithoutConfig;
183
+ }
184
+ return null;
198
185
  };
199
186
  exports.getAudioCodec = getAudioCodec;
@@ -0,0 +1,4 @@
1
+ import type { ParseMediaContainer } from './options';
2
+ import type { AnySegment } from './parse-result';
3
+ export declare const getContainer: (segments: AnySegment[]) => ParseMediaContainer | null;
4
+ export declare const hasContainer: (boxes: AnySegment[]) => boolean;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasContainer = exports.getContainer = void 0;
4
+ const traversal_1 = require("./boxes/iso-base-media/traversal");
5
+ const traversal_2 = require("./boxes/webm/traversal");
6
+ const getContainer = (segments) => {
7
+ const moovBox = (0, traversal_1.getMoovBox)(segments);
8
+ if (moovBox) {
9
+ return 'mp4';
10
+ }
11
+ const mainSegment = (0, traversal_2.getMainSegment)(segments);
12
+ if (mainSegment) {
13
+ return 'webm';
14
+ }
15
+ return null;
16
+ };
17
+ exports.getContainer = getContainer;
18
+ const hasContainer = (boxes) => {
19
+ try {
20
+ return (0, exports.getContainer)(boxes) !== null;
21
+ }
22
+ catch (e) {
23
+ return false;
24
+ }
25
+ };
26
+ exports.hasContainer = hasContainer;
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasDuration = exports.getDuration = void 0;
4
4
  const get_sample_positions_from_track_1 = require("./boxes/iso-base-media/get-sample-positions-from-track");
5
+ const traversal_1 = require("./boxes/iso-base-media/traversal");
5
6
  const get_tracks_1 = require("./get-tracks");
6
- const traversal_1 = require("./traversal");
7
7
  const getDurationFromMatroska = (segments) => {
8
8
  const mainSegment = segments.find((s) => s.type === 'Segment');
9
9
  if (!mainSegment || mainSegment.type !== 'Segment') {
package/dist/get-fps.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasFps = exports.getFps = exports.getTimescaleAndDuration = exports.trakBoxContainsVideo = exports.trakBoxContainsAudio = void 0;
4
- const traversal_1 = require("./traversal");
4
+ const traversal_1 = require("./boxes/iso-base-media/traversal");
5
5
  const calculateFps = ({ sttsBox, timeScale, durationInSamples, }) => {
6
6
  let totalSamples = 0;
7
7
  for (const sample of sttsBox.sampleDistribution) {
@@ -11,7 +11,7 @@ type AspectRatio = {
11
11
  numerator: number;
12
12
  denominator: number;
13
13
  };
14
- export declare const getVideoSample: (trakBox: TrakBox) => VideoSample | null;
14
+ export declare const getStsdVideoConfig: (trakBox: TrakBox) => VideoSample | null;
15
15
  export declare const getAvccBox: (trakBox: TrakBox) => AvccBox | null;
16
16
  export declare const getAv1CBox: (trakBox: TrakBox) => Av1CBox | null;
17
17
  export declare const getPaspBox: (trakBox: TrakBox) => PaspBox | null;
@@ -1,25 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDisplayAspectRatio = exports.applyAspectRatios = exports.applyTkhdBox = exports.getColrBox = exports.getSampleAspectRatio = exports.getHvccBox = exports.getPaspBox = exports.getAv1CBox = exports.getAvccBox = exports.getVideoSample = void 0;
4
- const traversal_1 = require("./traversal");
5
- const getVideoSample = (trakBox) => {
3
+ exports.getDisplayAspectRatio = exports.applyAspectRatios = exports.applyTkhdBox = exports.getColrBox = exports.getSampleAspectRatio = exports.getHvccBox = exports.getPaspBox = exports.getAv1CBox = exports.getAvccBox = exports.getStsdVideoConfig = void 0;
4
+ const traversal_1 = require("./boxes/iso-base-media/traversal");
5
+ const getStsdVideoConfig = (trakBox) => {
6
6
  const stsdBox = (0, traversal_1.getStsdBox)(trakBox);
7
7
  if (!stsdBox) {
8
8
  return null;
9
9
  }
10
- const videoSample = stsdBox.samples.find((s) => s.type === 'video');
11
- if (!videoSample || videoSample.type !== 'video') {
10
+ const videoConfig = stsdBox.samples.find((s) => s.type === 'video');
11
+ if (!videoConfig || videoConfig.type !== 'video') {
12
12
  return null;
13
13
  }
14
- return videoSample;
14
+ return videoConfig;
15
15
  };
16
- exports.getVideoSample = getVideoSample;
16
+ exports.getStsdVideoConfig = getStsdVideoConfig;
17
17
  const getAvccBox = (trakBox) => {
18
- const videoSample = (0, exports.getVideoSample)(trakBox);
19
- if (!videoSample) {
18
+ const videoConfig = (0, exports.getStsdVideoConfig)(trakBox);
19
+ if (!videoConfig) {
20
20
  return null;
21
21
  }
22
- const avccBox = videoSample.descriptors.find((c) => c.type === 'avcc-box');
22
+ const avccBox = videoConfig.descriptors.find((c) => c.type === 'avcc-box');
23
23
  if (!avccBox || avccBox.type !== 'avcc-box') {
24
24
  return null;
25
25
  }
@@ -27,11 +27,11 @@ const getAvccBox = (trakBox) => {
27
27
  };
28
28
  exports.getAvccBox = getAvccBox;
29
29
  const getAv1CBox = (trakBox) => {
30
- const videoSample = (0, exports.getVideoSample)(trakBox);
31
- if (!videoSample) {
30
+ const videoConfig = (0, exports.getStsdVideoConfig)(trakBox);
31
+ if (!videoConfig) {
32
32
  return null;
33
33
  }
34
- const av1cBox = videoSample.descriptors.find((c) => c.type === 'av1C-box');
34
+ const av1cBox = videoConfig.descriptors.find((c) => c.type === 'av1C-box');
35
35
  if (!av1cBox || av1cBox.type !== 'av1C-box') {
36
36
  return null;
37
37
  }
@@ -39,11 +39,11 @@ const getAv1CBox = (trakBox) => {
39
39
  };
40
40
  exports.getAv1CBox = getAv1CBox;
41
41
  const getPaspBox = (trakBox) => {
42
- const videoSample = (0, exports.getVideoSample)(trakBox);
43
- if (!videoSample) {
42
+ const videoConfig = (0, exports.getStsdVideoConfig)(trakBox);
43
+ if (!videoConfig) {
44
44
  return null;
45
45
  }
46
- const paspBox = videoSample.descriptors.find((c) => c.type === 'pasp-box');
46
+ const paspBox = videoConfig.descriptors.find((c) => c.type === 'pasp-box');
47
47
  if (!paspBox || paspBox.type !== 'pasp-box') {
48
48
  return null;
49
49
  }
@@ -51,11 +51,11 @@ const getPaspBox = (trakBox) => {
51
51
  };
52
52
  exports.getPaspBox = getPaspBox;
53
53
  const getHvccBox = (trakBox) => {
54
- const videoSample = (0, exports.getVideoSample)(trakBox);
55
- if (!videoSample) {
54
+ const videoConfig = (0, exports.getStsdVideoConfig)(trakBox);
55
+ if (!videoConfig) {
56
56
  return null;
57
57
  }
58
- const hvccBox = videoSample.descriptors.find((c) => c.type === 'hvcc-box');
58
+ const hvccBox = videoConfig.descriptors.find((c) => c.type === 'hvcc-box');
59
59
  if (!hvccBox || hvccBox.type !== 'hvcc-box') {
60
60
  return null;
61
61
  }
@@ -6,12 +6,21 @@ type SampleAspectRatio = {
6
6
  numerator: number;
7
7
  denominator: number;
8
8
  };
9
+ export type VideoTrackColorParams = {
10
+ transferCharacteristics: 'bt709' | 'smpte170m' | 'iec61966-2-1' | null;
11
+ matrixCoefficients: 'bt709' | 'bt470bg' | 'rgb' | 'smpte170m' | null;
12
+ primaries: 'bt709' | 'smpte170m' | 'bt470bg' | null;
13
+ fullRange: boolean | null;
14
+ };
15
+ export type MediaParserVideoCodec = 'vp8' | 'vp9' | 'h264' | 'av1' | 'h265' | 'prores';
16
+ export type MediaParserAudioCodec = 'opus' | 'aac' | 'mp3' | 'vorbis' | 'pcm-u8' | 'pcm-s16' | 'pcm-s24' | 'pcm-s32' | 'pcm-f32' | 'aiff';
9
17
  export type VideoTrack = {
10
18
  type: 'video';
11
19
  trackId: number;
12
20
  description: Uint8Array | undefined;
13
21
  timescale: number;
14
22
  codec: string;
23
+ codecWithoutConfig: MediaParserVideoCodec;
15
24
  sampleAspectRatio: SampleAspectRatio;
16
25
  width: number;
17
26
  height: number;
@@ -21,16 +30,20 @@ export type VideoTrack = {
21
30
  codedHeight: number;
22
31
  rotation: number;
23
32
  trakBox: TrakBox | null;
33
+ codecPrivate: Uint8Array | null;
34
+ color: VideoTrackColorParams;
24
35
  };
25
36
  export type AudioTrack = {
26
37
  type: 'audio';
27
38
  trackId: number;
28
39
  timescale: number;
29
40
  codec: string;
41
+ codecWithoutConfig: MediaParserAudioCodec;
30
42
  numberOfChannels: number;
31
43
  sampleRate: number;
32
44
  description: Uint8Array | undefined;
33
45
  trakBox: TrakBox | null;
46
+ codecPrivate: Uint8Array | null;
34
47
  };
35
48
  export type OtherTrack = {
36
49
  type: 'other';
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTracks = exports.hasTracks = exports.getNumberOfTracks = void 0;
4
4
  const make_track_1 = require("./boxes/iso-base-media/make-track");
5
+ const traversal_1 = require("./boxes/iso-base-media/traversal");
5
6
  const get_ready_tracks_1 = require("./boxes/webm/get-ready-tracks");
6
- const traversal_1 = require("./boxes/webm/traversal");
7
- const traversal_2 = require("./traversal");
7
+ const traversal_2 = require("./boxes/webm/traversal");
8
8
  const getNumberOfTracks = (moovBox) => {
9
- const mvHdBox = (0, traversal_2.getMvhdBox)(moovBox);
9
+ const mvHdBox = (0, traversal_1.getMvhdBox)(moovBox);
10
10
  if (!mvHdBox) {
11
11
  return 0;
12
12
  }
@@ -14,16 +14,16 @@ const getNumberOfTracks = (moovBox) => {
14
14
  };
15
15
  exports.getNumberOfTracks = getNumberOfTracks;
16
16
  const hasTracks = (segments) => {
17
- const mainSegment = (0, traversal_1.getMainSegment)(segments);
17
+ const mainSegment = (0, traversal_2.getMainSegment)(segments);
18
18
  if (mainSegment) {
19
19
  return (0, traversal_2.getTracksSegment)(mainSegment) !== null;
20
20
  }
21
- const moovBox = (0, traversal_2.getMoovBox)(segments);
21
+ const moovBox = (0, traversal_1.getMoovBox)(segments);
22
22
  if (!moovBox) {
23
23
  return false;
24
24
  }
25
25
  const numberOfTracks = (0, exports.getNumberOfTracks)(moovBox);
26
- const tracks = (0, traversal_2.getTraks)(moovBox);
26
+ const tracks = (0, traversal_1.getTraks)(moovBox);
27
27
  return tracks.length === numberOfTracks;
28
28
  };
29
29
  exports.hasTracks = hasTracks;
@@ -51,7 +51,7 @@ const getTracks = (segments, state) => {
51
51
  otherTracks,
52
52
  };
53
53
  }
54
- const moovBox = (0, traversal_2.getMoovBox)(segments);
54
+ const moovBox = (0, traversal_1.getMoovBox)(segments);
55
55
  if (!moovBox) {
56
56
  return {
57
57
  videoTracks,
@@ -59,7 +59,7 @@ const getTracks = (segments, state) => {
59
59
  otherTracks,
60
60
  };
61
61
  }
62
- const tracks = (0, traversal_2.getTraks)(moovBox);
62
+ const tracks = (0, traversal_1.getTraks)(moovBox);
63
63
  for (const trakBox of tracks) {
64
64
  const track = (0, make_track_1.makeBaseMediaTrack)(trakBox);
65
65
  if (!track) {
@@ -1,6 +1,9 @@
1
1
  import type { TrakBox } from './boxes/iso-base-media/trak/trak';
2
- import type { KnownVideoCodecs } from './options';
2
+ import type { MediaParserVideoCodec, VideoTrackColorParams } from './get-tracks';
3
3
  import type { AnySegment } from './parse-result';
4
4
  export declare const hasVideoCodec: (boxes: AnySegment[]) => boolean;
5
+ export declare const getVideoPrivateData: (trakBox: TrakBox) => Uint8Array | null;
6
+ export declare const getIsoBmColrConfig: (trakBox: TrakBox) => VideoTrackColorParams | null;
5
7
  export declare const getVideoCodecString: (trakBox: TrakBox) => string | null;
6
- export declare const getVideoCodec: (boxes: AnySegment[]) => KnownVideoCodecs | null;
8
+ export declare const getVideoCodecFromIsoTrak: (trakBox: TrakBox) => "h264" | "av1" | "h265" | "prores";
9
+ export declare const getVideoCodec: (boxes: AnySegment[]) => MediaParserVideoCodec | null;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getVideoCodec = exports.getVideoCodecString = exports.hasVideoCodec = void 0;
3
+ exports.getVideoCodec = exports.getVideoCodecFromIsoTrak = exports.getVideoCodecString = exports.getIsoBmColrConfig = exports.getVideoPrivateData = exports.hasVideoCodec = void 0;
4
+ const traversal_1 = require("./boxes/iso-base-media/traversal");
4
5
  const av1_codec_private_1 = require("./boxes/webm/av1-codec-private");
5
6
  const get_fps_1 = require("./get-fps");
6
7
  const get_sample_aspect_ratio_1 = require("./get-sample-aspect-ratio");
7
- const traversal_1 = require("./traversal");
8
8
  const hasVideoCodec = (boxes) => {
9
9
  try {
10
10
  return (0, exports.getVideoCodec)(boxes) !== null;
@@ -14,8 +14,64 @@ const hasVideoCodec = (boxes) => {
14
14
  }
15
15
  };
16
16
  exports.hasVideoCodec = hasVideoCodec;
17
+ const getVideoPrivateData = (trakBox) => {
18
+ const videoSample = (0, get_sample_aspect_ratio_1.getStsdVideoConfig)(trakBox);
19
+ const avccBox = (0, get_sample_aspect_ratio_1.getAvccBox)(trakBox);
20
+ const hvccBox = (0, get_sample_aspect_ratio_1.getHvccBox)(trakBox);
21
+ const av1cBox = (0, get_sample_aspect_ratio_1.getAv1CBox)(trakBox);
22
+ if (!videoSample) {
23
+ return null;
24
+ }
25
+ if (avccBox) {
26
+ return avccBox.privateData;
27
+ }
28
+ if (hvccBox) {
29
+ return hvccBox.privateData;
30
+ }
31
+ if (av1cBox) {
32
+ return av1cBox.privateData;
33
+ }
34
+ return null;
35
+ };
36
+ exports.getVideoPrivateData = getVideoPrivateData;
37
+ const getIsoBmColrConfig = (trakBox) => {
38
+ const videoSample = (0, get_sample_aspect_ratio_1.getStsdVideoConfig)(trakBox);
39
+ if (!videoSample) {
40
+ return null;
41
+ }
42
+ const colrAtom = (0, get_sample_aspect_ratio_1.getColrBox)(videoSample);
43
+ if (!colrAtom) {
44
+ return null;
45
+ }
46
+ // https://github.com/bbc/qtff-parameter-editor
47
+ return {
48
+ fullRange: colrAtom.fullRangeFlag,
49
+ matrixCoefficients: colrAtom.matrixIndex === 1
50
+ ? 'bt709'
51
+ : colrAtom.matrixIndex === 5
52
+ ? 'bt470bg'
53
+ : colrAtom.matrixIndex === 6
54
+ ? 'smpte170m'
55
+ : null,
56
+ primaries: colrAtom.primaries === 1
57
+ ? 'bt709'
58
+ : colrAtom.primaries === 5
59
+ ? 'bt470bg'
60
+ : colrAtom.primaries === 6
61
+ ? 'smpte170m'
62
+ : null,
63
+ transferCharacteristics: colrAtom.transfer === 1
64
+ ? 'bt709'
65
+ : colrAtom.transfer === 6
66
+ ? 'smpte170m'
67
+ : colrAtom.transfer === 13
68
+ ? 'iec61966-2-1'
69
+ : null,
70
+ };
71
+ };
72
+ exports.getIsoBmColrConfig = getIsoBmColrConfig;
17
73
  const getVideoCodecString = (trakBox) => {
18
- const videoSample = (0, get_sample_aspect_ratio_1.getVideoSample)(trakBox);
74
+ const videoSample = (0, get_sample_aspect_ratio_1.getStsdVideoConfig)(trakBox);
19
75
  const avccBox = (0, get_sample_aspect_ratio_1.getAvccBox)(trakBox);
20
76
  const hvccBox = (0, get_sample_aspect_ratio_1.getHvccBox)(trakBox);
21
77
  const av1cBox = (0, get_sample_aspect_ratio_1.getAv1CBox)(trakBox);
@@ -35,29 +91,63 @@ const getVideoCodecString = (trakBox) => {
35
91
  return videoSample.format;
36
92
  };
37
93
  exports.getVideoCodecString = getVideoCodecString;
94
+ const getVideoCodecFromIsoTrak = (trakBox) => {
95
+ const stsdBox = (0, traversal_1.getStsdBox)(trakBox);
96
+ if (stsdBox && stsdBox.type === 'stsd-box') {
97
+ const videoSample = stsdBox.samples.find((s) => s.type === 'video');
98
+ if (videoSample && videoSample.type === 'video') {
99
+ if (videoSample.format === 'hvc1') {
100
+ return 'h265';
101
+ }
102
+ if (videoSample.format === 'avc1') {
103
+ return 'h264';
104
+ }
105
+ if (videoSample.format === 'av01') {
106
+ return 'av1';
107
+ }
108
+ // ap4h: ProRes 4444
109
+ if (videoSample.format === 'ap4h') {
110
+ return 'prores';
111
+ }
112
+ // ap4x: ap4x: ProRes 4444 XQ
113
+ if (videoSample.format === 'ap4x') {
114
+ return 'prores';
115
+ }
116
+ // apch: ProRes 422 High Quality
117
+ if (videoSample.format === 'apch') {
118
+ return 'prores';
119
+ }
120
+ // apcn: ProRes 422 Standard Definition
121
+ if (videoSample.format === 'apcn') {
122
+ return 'prores';
123
+ }
124
+ // apcs: ProRes 422 LT
125
+ if (videoSample.format === 'apcs') {
126
+ return 'prores';
127
+ }
128
+ // apco: ProRes 422 Proxy
129
+ if (videoSample.format === 'apco') {
130
+ return 'prores';
131
+ }
132
+ // aprh: ProRes RAW High Quality
133
+ if (videoSample.format === 'aprh') {
134
+ return 'prores';
135
+ }
136
+ // aprn: ProRes RAW Standard Definition
137
+ if (videoSample.format === 'aprn') {
138
+ return 'prores';
139
+ }
140
+ }
141
+ }
142
+ throw new Error('Could not find video codec');
143
+ };
144
+ exports.getVideoCodecFromIsoTrak = getVideoCodecFromIsoTrak;
38
145
  const getVideoCodec = (boxes) => {
39
146
  const moovBox = (0, traversal_1.getMoovBox)(boxes);
40
147
  if (moovBox) {
41
148
  const trakBox = (0, traversal_1.getTraks)(moovBox).filter((t) => (0, get_fps_1.trakBoxContainsVideo)(t))[0];
42
149
  if (trakBox) {
43
- const stsdBox = (0, traversal_1.getStsdBox)(trakBox);
44
- if (stsdBox && stsdBox.type === 'stsd-box') {
45
- const videoSample = stsdBox.samples.find((s) => s.type === 'video');
46
- if (videoSample && videoSample.type === 'video') {
47
- if (videoSample.format === 'hvc1') {
48
- return 'h265';
49
- }
50
- if (videoSample.format === 'avc1') {
51
- return 'h264';
52
- }
53
- if (videoSample.format === 'av01') {
54
- return 'av1';
55
- }
56
- if (videoSample.format === 'ap4h') {
57
- return 'prores';
58
- }
59
- }
60
- }
150
+ return (0, exports.getVideoCodecFromIsoTrak)(trakBox);
61
151
  }
62
152
  }
63
153
  const mainSegment = boxes.find((b) => b.type === 'Segment');
@@ -1,4 +1,4 @@
1
- import type { Options } from './options';
1
+ import type { Options, ParseMediaFields } from './options';
2
2
  import type { ParseResult } from './parse-result';
3
3
  import type { ParserState } from './parser-state';
4
- export declare const hasAllInfo: (options: Options<boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean>, parseResult: ParseResult, state: ParserState) => boolean;
4
+ export declare const getAvailableInfo: (options: Options<ParseMediaFields>, parseResult: ParseResult, state: ParserState) => Record<keyof Options<ParseMediaFields>, boolean>;