@remotion/media-parser 4.0.209 → 4.0.210

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 (213) 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 +2 -1
  5. package/dist/boxes/iso-base-media/mdat/mdat.js +8 -3
  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 +20 -5
  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 +44 -0
  24. package/dist/boxes/iso-base-media/traversal.js +211 -0
  25. package/dist/boxes/webm/color.d.ts +4 -0
  26. package/dist/boxes/webm/color.js +120 -0
  27. package/dist/boxes/webm/description.js +1 -1
  28. package/dist/boxes/webm/get-ready-tracks.js +3 -3
  29. package/dist/boxes/webm/get-sample-from-block.js +1 -1
  30. package/dist/boxes/webm/get-track.js +16 -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/traversal.d.ts +26 -1
  37. package/dist/boxes/webm/traversal.js +214 -1
  38. package/dist/create/cluster-segment.js +0 -2
  39. package/dist/create/cluster.d.ts +10 -2
  40. package/dist/create/cluster.js +16 -10
  41. package/dist/create/create-media.d.ts +4 -2
  42. package/dist/create/create-media.js +76 -14
  43. package/dist/create/cues.d.ts +0 -0
  44. package/dist/create/cues.js +1 -0
  45. package/dist/create/make-duration-with-padding.d.ts +1 -1
  46. package/dist/create/make-duration-with-padding.js +3 -3
  47. package/dist/create/matroska-cues.d.ts +6 -0
  48. package/dist/create/matroska-cues.js +50 -0
  49. package/dist/create/matroska-info.js +1 -1
  50. package/dist/create/matroska-seek.d.ts +6 -0
  51. package/dist/create/matroska-seek.js +32 -0
  52. package/dist/create/matroska-segment.d.ts +1 -0
  53. package/dist/create/matroska-segment.js +3 -2
  54. package/dist/create/matroska-trackentry.d.ts +9 -14
  55. package/dist/create/matroska-trackentry.js +79 -94
  56. package/dist/emit-available-info.d.ts +12 -0
  57. package/dist/emit-available-info.js +133 -0
  58. package/dist/esm/buffer.mjs +57 -0
  59. package/dist/esm/from-fetch.mjs +72 -0
  60. package/dist/esm/from-node.mjs +48 -0
  61. package/dist/esm/from-web-file.mjs +48 -0
  62. package/dist/esm/index.mjs +6689 -0
  63. package/dist/esm/web-fs.mjs +67 -0
  64. package/dist/get-audio-codec.d.ts +5 -5
  65. package/dist/get-audio-codec.js +41 -57
  66. package/dist/get-container.d.ts +4 -0
  67. package/dist/get-container.js +26 -0
  68. package/dist/get-duration.js +1 -1
  69. package/dist/get-fps.js +1 -1
  70. package/dist/get-sample-aspect-ratio.d.ts +1 -1
  71. package/dist/get-sample-aspect-ratio.js +19 -19
  72. package/dist/get-tracks.d.ts +13 -0
  73. package/dist/get-tracks.js +8 -8
  74. package/dist/get-video-codec.d.ts +5 -2
  75. package/dist/get-video-codec.js +111 -21
  76. package/dist/has-all-info.d.ts +2 -2
  77. package/dist/has-all-info.js +23 -9
  78. package/dist/index.d.ts +3 -1
  79. package/dist/options.d.ts +97 -30
  80. package/dist/parse-media.js +43 -62
  81. package/dist/parse-video.d.ts +2 -1
  82. package/dist/parse-video.js +3 -1
  83. package/dist/parser-state.js +1 -2
  84. package/dist/readers/from-fetch.js +24 -4
  85. package/dist/readers/from-node.js +13 -3
  86. package/dist/readers/from-web-file.js +14 -2
  87. package/dist/readers/reader.d.ts +6 -1
  88. package/dist/samples-from-moof.js +1 -1
  89. package/dist/traversal.d.ts +0 -21
  90. package/dist/traversal.js +1 -158
  91. package/dist/truthy.d.ts +3 -0
  92. package/dist/truthy.js +7 -0
  93. package/dist/writers/buffer.d.ts +2 -0
  94. package/dist/writers/buffer.js +58 -0
  95. package/dist/writers/web-fs.d.ts +1 -0
  96. package/dist/writers/web-fs.js +42 -18
  97. package/dist/writers/writer.d.ts +4 -2
  98. package/fetch.js +2 -0
  99. package/node.js +2 -0
  100. package/package.json +43 -8
  101. package/web-file.js +2 -0
  102. package/web-fs.js +2 -0
  103. package/.eslintrc +0 -8
  104. package/input.webm +0 -0
  105. package/src/add-new-matroska-tracks.ts +0 -23
  106. package/src/boxes/iso-base-media/base-type.ts +0 -4
  107. package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +0 -68
  108. package/src/boxes/iso-base-media/esds/esds-descriptors.ts +0 -135
  109. package/src/boxes/iso-base-media/esds/esds.ts +0 -49
  110. package/src/boxes/iso-base-media/ftyp.ts +0 -39
  111. package/src/boxes/iso-base-media/get-sample-positions-from-track.ts +0 -69
  112. package/src/boxes/iso-base-media/make-track.ts +0 -116
  113. package/src/boxes/iso-base-media/mdat/mdat.ts +0 -140
  114. package/src/boxes/iso-base-media/mdhd.ts +0 -59
  115. package/src/boxes/iso-base-media/moov/moov.ts +0 -43
  116. package/src/boxes/iso-base-media/mvhd.ts +0 -114
  117. package/src/boxes/iso-base-media/process-box.ts +0 -748
  118. package/src/boxes/iso-base-media/stsd/av1c.ts +0 -19
  119. package/src/boxes/iso-base-media/stsd/avcc.ts +0 -36
  120. package/src/boxes/iso-base-media/stsd/colr.ts +0 -49
  121. package/src/boxes/iso-base-media/stsd/ctts.ts +0 -64
  122. package/src/boxes/iso-base-media/stsd/hvcc.ts +0 -32
  123. package/src/boxes/iso-base-media/stsd/keys.ts +0 -27
  124. package/src/boxes/iso-base-media/stsd/mebx.ts +0 -54
  125. package/src/boxes/iso-base-media/stsd/pasp.ts +0 -32
  126. package/src/boxes/iso-base-media/stsd/samples.ts +0 -359
  127. package/src/boxes/iso-base-media/stsd/stco.ts +0 -52
  128. package/src/boxes/iso-base-media/stsd/stsc.ts +0 -61
  129. package/src/boxes/iso-base-media/stsd/stsd.ts +0 -55
  130. package/src/boxes/iso-base-media/stsd/stss.ts +0 -47
  131. package/src/boxes/iso-base-media/stsd/stsz.ts +0 -75
  132. package/src/boxes/iso-base-media/stsd/stts.ts +0 -62
  133. package/src/boxes/iso-base-media/tfdt.ts +0 -37
  134. package/src/boxes/iso-base-media/tfhd.ts +0 -66
  135. package/src/boxes/iso-base-media/tkhd.ts +0 -150
  136. package/src/boxes/iso-base-media/to-date.ts +0 -9
  137. package/src/boxes/iso-base-media/trak/trak.ts +0 -43
  138. package/src/boxes/iso-base-media/trun.ts +0 -74
  139. package/src/boxes/iso-base-media/void-box.ts +0 -4
  140. package/src/boxes/webm/allowed-partial-segments.ts +0 -1
  141. package/src/boxes/webm/av1-codec-private.ts +0 -113
  142. package/src/boxes/webm/description.ts +0 -104
  143. package/src/boxes/webm/ebml.ts +0 -98
  144. package/src/boxes/webm/get-ready-tracks.ts +0 -36
  145. package/src/boxes/webm/get-sample-from-block.ts +0 -125
  146. package/src/boxes/webm/get-track.ts +0 -257
  147. package/src/boxes/webm/make-header.ts +0 -253
  148. package/src/boxes/webm/parse-ebml.ts +0 -259
  149. package/src/boxes/webm/parse-webm-header.ts +0 -18
  150. package/src/boxes/webm/segments/all-segments.ts +0 -888
  151. package/src/boxes/webm/segments/block-simple-block-flags.ts +0 -52
  152. package/src/boxes/webm/segments/parse-children.ts +0 -144
  153. package/src/boxes/webm/segments/track-entry.ts +0 -38
  154. package/src/boxes/webm/segments.ts +0 -147
  155. package/src/boxes/webm/traversal.ts +0 -45
  156. package/src/buffer-iterator.ts +0 -555
  157. package/src/create/cluster-segment.ts +0 -62
  158. package/src/create/cluster.ts +0 -64
  159. package/src/create/create-media.ts +0 -136
  160. package/src/create/make-duration-with-padding.ts +0 -15
  161. package/src/create/matroska-header.ts +0 -63
  162. package/src/create/matroska-info.ts +0 -30
  163. package/src/create/matroska-segment.ts +0 -10
  164. package/src/create/matroska-trackentry.ts +0 -325
  165. package/src/create/timescale.ts +0 -1
  166. package/src/get-audio-codec.ts +0 -270
  167. package/src/get-dimensions.ts +0 -47
  168. package/src/get-duration.ts +0 -103
  169. package/src/get-fps.ts +0 -113
  170. package/src/get-sample-aspect-ratio.ts +0 -204
  171. package/src/get-sample-positions.ts +0 -93
  172. package/src/get-tracks.ts +0 -147
  173. package/src/get-video-codec.ts +0 -117
  174. package/src/has-all-info.ts +0 -81
  175. package/src/index.ts +0 -18
  176. package/src/make-hvc1-codec-strings.ts +0 -55
  177. package/src/options.ts +0 -118
  178. package/src/parse-media.ts +0 -183
  179. package/src/parse-result.ts +0 -79
  180. package/src/parse-video.ts +0 -83
  181. package/src/parser-context.ts +0 -10
  182. package/src/parser-state.ts +0 -178
  183. package/src/readers/from-fetch.ts +0 -90
  184. package/src/readers/from-node.ts +0 -51
  185. package/src/readers/from-web-file.ts +0 -49
  186. package/src/readers/reader.ts +0 -15
  187. package/src/samples-from-moof.ts +0 -102
  188. package/src/test/aspect-ratio.test.ts +0 -42
  189. package/src/test/av1.test.ts +0 -108
  190. package/src/test/create-matroska.test.ts +0 -287
  191. package/src/test/duration.test.ts +0 -18
  192. package/src/test/keys.test.ts +0 -47
  193. package/src/test/matroska.test.ts +0 -463
  194. package/src/test/mvhd.test.ts +0 -94
  195. package/src/test/parse-esds.test.ts +0 -98
  196. package/src/test/parse-stco.test.ts +0 -61
  197. package/src/test/parse-stsc.test.ts +0 -104
  198. package/src/test/parse-stsz.test.ts +0 -57
  199. package/src/test/parse-stts.test.ts +0 -38
  200. package/src/test/parse-video.test.ts +0 -101
  201. package/src/test/parse-webm.test.ts +0 -17
  202. package/src/test/samples-from-moof.test.ts +0 -2496
  203. package/src/test/stream-local.test.ts +0 -743
  204. package/src/test/stream-remote.test.ts +0 -59
  205. package/src/test/stream-samples.test.ts +0 -181
  206. package/src/test/stsd.test.ts +0 -265
  207. package/src/test/tkhd.test.ts +0 -87
  208. package/src/traversal.ts +0 -528
  209. package/src/webcodec-sample-types.ts +0 -29
  210. package/src/writers/web-fs.ts +0 -50
  211. package/src/writers/writer.ts +0 -12
  212. package/tsconfig.json +0 -14
  213. package/tsconfig.tsbuildinfo +0 -1
@@ -1,136 +0,0 @@
1
- import {combineUint8Arrays} from '../boxes/webm/make-header';
2
- import type {BytesAndOffset} from '../boxes/webm/segments/all-segments';
3
- import type {WriterInterface} from '../writers/writer';
4
- import {makeCluster} from './cluster';
5
- import {makeDurationWithPadding} from './make-duration-with-padding';
6
- import {makeMatroskaHeader} from './matroska-header';
7
- import {makeMatroskaInfo} from './matroska-info';
8
- import {createMatroskaSegment} from './matroska-segment';
9
- import type {MakeTrackAudio, MakeTrackVideo} from './matroska-trackentry';
10
- import {
11
- makeMatroskaAudioTrackEntryBytes,
12
- makeMatroskaTracks,
13
- makeMatroskaVideoTrackEntryBytes,
14
- } from './matroska-trackentry';
15
- import {CREATE_TIME_SCALE} from './timescale';
16
-
17
- export type MediaFn = {
18
- save: () => Promise<void>;
19
- addSample: (chunk: EncodedVideoChunk, trackNumber: number) => Promise<void>;
20
- updateDuration: (duration: number) => Promise<void>;
21
- addTrack: (
22
- track:
23
- | Omit<MakeTrackAudio, 'trackNumber'>
24
- | Omit<MakeTrackVideo, 'trackNumber'>,
25
- ) => Promise<{trackNumber: number}>;
26
- addWaitForFinishPromise: (promise: () => Promise<void>) => void;
27
- waitForFinish: () => Promise<void>;
28
- };
29
-
30
- export const createMedia = async (
31
- writer: WriterInterface,
32
- ): Promise<MediaFn> => {
33
- const header = makeMatroskaHeader();
34
-
35
- const w = await writer.createContent();
36
- await w.write(header.bytes);
37
- const matroskaInfo = makeMatroskaInfo({
38
- timescale: CREATE_TIME_SCALE,
39
- });
40
-
41
- const currentTracks: BytesAndOffset[] = [];
42
-
43
- const matroskaTracks = makeMatroskaTracks(currentTracks);
44
- const matroskaSegment = createMatroskaSegment([
45
- matroskaInfo,
46
- ...matroskaTracks,
47
- ]);
48
-
49
- const durationOffset =
50
- (matroskaSegment.offsets.children[0].children.find(
51
- (c) => c.field === 'Duration',
52
- )?.offset ?? 0) + w.getWrittenByteCount();
53
- const tracksOffset =
54
- (matroskaSegment.offsets.children.find((o) => o.field === 'Tracks')
55
- ?.offset ?? 0) + w.getWrittenByteCount();
56
-
57
- if (!durationOffset) {
58
- throw new Error('could not get duration offset');
59
- }
60
-
61
- if (!tracksOffset) {
62
- throw new Error('could not get tracks offset');
63
- }
64
-
65
- await w.write(matroskaSegment.bytes);
66
-
67
- let currentCluster = await makeCluster(w, 0);
68
-
69
- const getClusterOrMakeNew = async (chunk: EncodedVideoChunk) => {
70
- if (!currentCluster.shouldMakeNewCluster(chunk)) {
71
- return currentCluster;
72
- }
73
-
74
- currentCluster = await makeCluster(w, chunk.timestamp);
75
- return currentCluster;
76
- };
77
-
78
- const addSample = async (chunk: EncodedVideoChunk, trackNumber: number) => {
79
- const cluster = await getClusterOrMakeNew(chunk);
80
- return cluster.addSample(chunk, trackNumber);
81
- };
82
-
83
- const updateDuration = async (newDuration: number) => {
84
- const blocks = makeDurationWithPadding(newDuration);
85
- await w.updateDataAt(
86
- durationOffset,
87
- combineUint8Arrays(blocks.map((b) => b.bytes)),
88
- );
89
- };
90
-
91
- const addTrack = async (track: BytesAndOffset) => {
92
- currentTracks.push(track);
93
- const newTracks = makeMatroskaTracks(currentTracks);
94
-
95
- await w.updateDataAt(
96
- tracksOffset,
97
- combineUint8Arrays(newTracks.map((b) => b.bytes)),
98
- );
99
- };
100
-
101
- let operationProm = Promise.resolve();
102
-
103
- const waitForFinishPromises: (() => Promise<void>)[] = [];
104
-
105
- return {
106
- save: async () => {
107
- await w.save();
108
- },
109
- addSample: (chunk, trackNumber) => {
110
- operationProm = operationProm.then(() => addSample(chunk, trackNumber));
111
- return operationProm;
112
- },
113
- updateDuration: (duration) => {
114
- operationProm = operationProm.then(() => updateDuration(duration));
115
- return operationProm;
116
- },
117
- addTrack: (track) => {
118
- const trackNumber = currentTracks.length + 1;
119
-
120
- const bytes =
121
- track.type === 'video'
122
- ? makeMatroskaVideoTrackEntryBytes({...track, trackNumber})
123
- : makeMatroskaAudioTrackEntryBytes({...track, trackNumber});
124
-
125
- operationProm = operationProm.then(() => addTrack(bytes));
126
-
127
- return operationProm.then(() => ({trackNumber}));
128
- },
129
- addWaitForFinishPromise: (promise) => {
130
- waitForFinishPromises.push(promise);
131
- },
132
- async waitForFinish() {
133
- await Promise.all(waitForFinishPromises.map((p) => p()));
134
- },
135
- };
136
- };
@@ -1,15 +0,0 @@
1
- import {padMatroskaBytes} from '../boxes/webm/make-header';
2
-
3
- export const makeDurationWithPadding = (newDuration: number) => {
4
- return padMatroskaBytes(
5
- {
6
- type: 'Duration',
7
- value: {
8
- value: newDuration,
9
- size: '64',
10
- },
11
- minVintWidth: null,
12
- },
13
- 100,
14
- );
15
- };
@@ -1,63 +0,0 @@
1
- import {makeMatroskaBytes} from '../boxes/webm/make-header';
2
-
3
- export const makeMatroskaHeader = () => {
4
- return makeMatroskaBytes({
5
- type: 'Header',
6
- value: [
7
- {
8
- minVintWidth: null,
9
- type: 'EBMLVersion',
10
- value: {
11
- value: 1,
12
- byteLength: null,
13
- },
14
- },
15
- {
16
- minVintWidth: null,
17
- type: 'EBMLReadVersion',
18
- value: {
19
- value: 1,
20
- byteLength: null,
21
- },
22
- },
23
- {
24
- type: 'EBMLMaxIDLength',
25
- value: {
26
- byteLength: null,
27
- value: 4,
28
- },
29
- minVintWidth: null,
30
- },
31
- {
32
- type: 'EBMLMaxSizeLength',
33
- value: {
34
- byteLength: null,
35
- value: 8,
36
- },
37
- minVintWidth: null,
38
- },
39
- {
40
- type: 'DocType',
41
- value: 'webm',
42
- minVintWidth: null,
43
- },
44
- {
45
- type: 'DocTypeVersion',
46
- value: {
47
- byteLength: null,
48
- value: 4,
49
- },
50
- minVintWidth: null,
51
- },
52
- {
53
- type: 'DocTypeReadVersion',
54
- value: {
55
- byteLength: null,
56
- value: 2,
57
- },
58
- minVintWidth: null,
59
- },
60
- ],
61
- minVintWidth: null,
62
- });
63
- };
@@ -1,30 +0,0 @@
1
- import {makeMatroskaBytes} from '../boxes/webm/make-header';
2
- import {makeDurationWithPadding} from './make-duration-with-padding';
3
-
4
- export const makeMatroskaInfo = ({timescale}: {timescale: number}) => {
5
- return makeMatroskaBytes({
6
- type: 'Info',
7
- value: [
8
- {
9
- type: 'TimestampScale',
10
- value: {
11
- value: timescale,
12
- byteLength: null,
13
- },
14
- minVintWidth: null,
15
- },
16
- {
17
- type: 'MuxingApp',
18
- value: '@remotion/media-parser',
19
- minVintWidth: null,
20
- },
21
- {
22
- type: 'WritingApp',
23
- value: '@remotion/media-parser',
24
- minVintWidth: null,
25
- },
26
- ...makeDurationWithPadding(0),
27
- ],
28
- minVintWidth: null,
29
- });
30
- };
@@ -1,10 +0,0 @@
1
- import {makeMatroskaBytes} from '../boxes/webm/make-header';
2
- import type {BytesAndOffset} from '../boxes/webm/segments/all-segments';
3
-
4
- export const createMatroskaSegment = (children: BytesAndOffset[]) => {
5
- return makeMatroskaBytes({
6
- type: 'Segment',
7
- value: children,
8
- minVintWidth: 8,
9
- });
10
- };
@@ -1,325 +0,0 @@
1
- import {makeMatroskaBytes, padMatroskaBytes} from '../boxes/webm/make-header';
2
- import type {BytesAndOffset} from '../boxes/webm/segments/all-segments';
3
-
4
- export type MatroskaColorParams = {
5
- transferChracteristics: 'bt709' | 'smpte170m' | 'iec61966-2-1' | null;
6
- matrixCoefficients: 'bt709' | 'bt470bg' | 'rgb' | 'smpte170m' | null;
7
- primaries: 'bt709' | 'smpte170m' | 'bt470bg' | null;
8
- fullRange: boolean | null;
9
- };
10
-
11
- export const makeMatroskaColorBytes = ({
12
- transferChracteristics,
13
- matrixCoefficients,
14
- primaries,
15
- fullRange,
16
- }: MatroskaColorParams) => {
17
- const rangeValue =
18
- transferChracteristics && matrixCoefficients
19
- ? 3
20
- : fullRange === true
21
- ? 2
22
- : fullRange === false
23
- ? 1
24
- : 0;
25
-
26
- // https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
27
- // 5.1.4.1.28.27
28
- const primariesValue =
29
- primaries === 'bt709'
30
- ? 1
31
- : primaries === 'smpte170m'
32
- ? 6
33
- : primaries === 'bt470bg'
34
- ? 5
35
- : 2;
36
-
37
- const transferChracteristicsValue =
38
- transferChracteristics === 'bt709'
39
- ? 1
40
- : transferChracteristics === 'smpte170m'
41
- ? 6
42
- : transferChracteristics === 'iec61966-2-1'
43
- ? 13
44
- : 2;
45
-
46
- if (matrixCoefficients === 'rgb') {
47
- throw new Error('Cannot encode Matroska in RGB');
48
- }
49
-
50
- const matrixCoefficientsValue =
51
- matrixCoefficients === 'bt709'
52
- ? 1
53
- : matrixCoefficients === 'bt470bg'
54
- ? 5
55
- : matrixCoefficients === 'smpte170m'
56
- ? 6
57
- : 2;
58
-
59
- return makeMatroskaBytes({
60
- type: 'Colour',
61
- minVintWidth: null,
62
- value: [
63
- {
64
- type: 'TransferCharacteristics',
65
- value: {
66
- value: transferChracteristicsValue,
67
- byteLength: null,
68
- },
69
- minVintWidth: null,
70
- },
71
- {
72
- type: 'MatrixCoefficients',
73
- value: {
74
- value: matrixCoefficientsValue,
75
- byteLength: null,
76
- },
77
- minVintWidth: null,
78
- },
79
- {
80
- type: 'Primaries',
81
- value: {
82
- value: primariesValue,
83
- byteLength: null,
84
- },
85
- minVintWidth: null,
86
- },
87
- {
88
- type: 'Range',
89
- value: {
90
- value: rangeValue,
91
- byteLength: null,
92
- },
93
- minVintWidth: null,
94
- },
95
- ],
96
- });
97
- };
98
-
99
- export const makeMatroskaVideoBytes = ({
100
- color,
101
- width,
102
- height,
103
- }: {
104
- color: MatroskaColorParams;
105
- width: number;
106
- height: number;
107
- }) => {
108
- return makeMatroskaBytes({
109
- type: 'Video',
110
- value: [
111
- {
112
- type: 'PixelWidth',
113
- value: {
114
- value: width,
115
- byteLength: null,
116
- },
117
- minVintWidth: null,
118
- },
119
- {
120
- type: 'PixelHeight',
121
- value: {
122
- value: height,
123
- byteLength: null,
124
- },
125
- minVintWidth: null,
126
- },
127
- {
128
- type: 'FlagInterlaced',
129
- value: {
130
- // https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
131
- // 5.1.4.1.28.1.
132
- value: 2, // 2 - progressive, no interlaced
133
- byteLength: null,
134
- },
135
- minVintWidth: null,
136
- },
137
- makeMatroskaColorBytes(color),
138
- ],
139
- minVintWidth: null,
140
- });
141
- };
142
-
143
- export type MakeTrackAudio = {
144
- trackNumber: number;
145
- codecId: string;
146
- numberOfChannels: number;
147
- sampleRate: number;
148
- type: 'audio';
149
- };
150
-
151
- export type MakeTrackVideo = {
152
- color: MatroskaColorParams;
153
- width: number;
154
- height: number;
155
- defaultDuration: number;
156
- trackNumber: number;
157
- codecId: string;
158
- type: 'video';
159
- };
160
-
161
- export const makeMatroskaAudioTrackEntryBytes = ({
162
- trackNumber,
163
- codecId,
164
- numberOfChannels: audioChannels,
165
- sampleRate,
166
- }: MakeTrackAudio) => {
167
- return makeMatroskaBytes({
168
- type: 'TrackEntry',
169
- minVintWidth: null,
170
- value: [
171
- {
172
- type: 'TrackNumber',
173
- value: {
174
- value: trackNumber,
175
- byteLength: null,
176
- },
177
- minVintWidth: null,
178
- },
179
- {
180
- type: 'TrackUID',
181
- value: '0x188FEB95C8EFABA',
182
- minVintWidth: null,
183
- },
184
- {
185
- type: 'TrackType',
186
- value: {
187
- value: 2,
188
- byteLength: null,
189
- },
190
- minVintWidth: null,
191
- },
192
- {
193
- type: 'TrackTimestampScale',
194
- value: {
195
- value: 1,
196
- size: '64',
197
- },
198
- minVintWidth: null,
199
- },
200
- {
201
- type: 'CodecID',
202
- value: codecId,
203
- minVintWidth: null,
204
- },
205
- {
206
- type: 'Audio',
207
- value: [
208
- {
209
- type: 'Channels',
210
- minVintWidth: null,
211
- value: {
212
- value: audioChannels,
213
- byteLength: null,
214
- },
215
- },
216
- {
217
- type: 'SamplingFrequency',
218
- minVintWidth: null,
219
- value: {
220
- value: sampleRate,
221
- size: '64',
222
- },
223
- },
224
- {
225
- type: 'BitDepth',
226
- minVintWidth: null,
227
- value: {
228
- value: 32,
229
- byteLength: null,
230
- },
231
- },
232
- ],
233
- minVintWidth: null,
234
- },
235
- ],
236
- });
237
- };
238
-
239
- export const makeMatroskaVideoTrackEntryBytes = ({
240
- color,
241
- width,
242
- height,
243
- defaultDuration,
244
- trackNumber,
245
- codecId,
246
- }: MakeTrackVideo) => {
247
- return makeMatroskaBytes({
248
- type: 'TrackEntry',
249
- minVintWidth: null,
250
- value: [
251
- {
252
- type: 'TrackNumber',
253
- value: {
254
- value: trackNumber,
255
- byteLength: null,
256
- },
257
- minVintWidth: null,
258
- },
259
- {
260
- type: 'TrackUID',
261
- value: '0xab2171012bb9020a',
262
- minVintWidth: null,
263
- },
264
- {
265
- type: 'FlagLacing',
266
- value: {
267
- value: 0,
268
- byteLength: null,
269
- },
270
- minVintWidth: null,
271
- },
272
- {
273
- type: 'Language',
274
- value: 'und',
275
- minVintWidth: null,
276
- },
277
- {
278
- type: 'FlagDefault',
279
- value: {
280
- value: 0,
281
- byteLength: null,
282
- },
283
- minVintWidth: null,
284
- },
285
- {
286
- type: 'CodecID',
287
- value: codecId,
288
- minVintWidth: null,
289
- },
290
- {
291
- type: 'TrackType',
292
- value: {
293
- value: 1, // 'video'
294
- byteLength: null,
295
- },
296
- minVintWidth: null,
297
- },
298
- {
299
- type: 'DefaultDuration',
300
- value: {
301
- value: defaultDuration,
302
- byteLength: null,
303
- },
304
- minVintWidth: null,
305
- },
306
- makeMatroskaVideoBytes({
307
- color,
308
- width,
309
- height,
310
- }),
311
- ],
312
- });
313
- };
314
-
315
- export const makeMatroskaTracks = (tracks: BytesAndOffset[]) => {
316
- return padMatroskaBytes(
317
- makeMatroskaBytes({
318
- type: 'Tracks',
319
- value: tracks,
320
- minVintWidth: null,
321
- }),
322
- // TODO: That's too much padding
323
- 1000,
324
- );
325
- };
@@ -1 +0,0 @@
1
- export const CREATE_TIME_SCALE = 1_000_000;