@remotion/media-parser 4.0.202 → 4.0.204
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.
- package/dist/av1-codec-string.d.ts +0 -5
- package/dist/av1-codec-string.js +1 -18
- package/dist/boxes/iso-base-media/ftype.d.ts +9 -0
- package/dist/boxes/iso-base-media/ftype.js +31 -0
- package/dist/boxes/iso-base-media/get-sample-positions-from-track.d.ts +4 -0
- package/dist/boxes/iso-base-media/get-sample-positions-from-track.js +48 -0
- package/dist/boxes/iso-base-media/tfdt.d.ts +12 -0
- package/dist/boxes/iso-base-media/tfdt.js +20 -0
- package/dist/boxes/iso-base-media/tfhd.d.ts +16 -0
- package/dist/boxes/iso-base-media/tfhd.js +41 -0
- package/dist/boxes/iso-base-media/trun.d.ts +21 -0
- package/dist/boxes/iso-base-media/trun.js +44 -0
- package/dist/boxes/webm/bitstream/av1.js +1 -10
- package/dist/boxes/webm/ebml.d.ts +1 -1
- package/dist/boxes/webm/segments/seek-position.js +1 -1
- package/dist/boxes/webm/segments/seek.d.ts +1 -1
- package/dist/boxes/webm/segments/seek.js +8 -2
- package/dist/boxes/webm/segments/timestamp-scale.js +1 -1
- package/dist/boxes/webm/tracks.d.ts +8 -0
- package/dist/boxes/webm/tracks.js +21 -0
- package/dist/from-web.js +6 -15
- package/dist/get-video-metadata.d.ts +2 -0
- package/dist/get-video-metadata.js +44 -0
- package/dist/read-and-increment-offset.d.ts +28 -0
- package/dist/read-and-increment-offset.js +177 -0
- package/dist/samples-from-moof.d.ts +6 -0
- package/dist/samples-from-moof.js +74 -0
- package/dist/understand-vorbis.d.ts +1 -0
- package/dist/understand-vorbis.js +12 -0
- package/package.json +2 -2
- package/src/boxes/iso-base-media/get-sample-positions-from-track.ts +69 -0
- package/src/boxes/iso-base-media/make-track.ts +4 -45
- package/src/boxes/iso-base-media/mdat/mdat.ts +33 -24
- package/src/boxes/iso-base-media/mdhd.ts +10 -7
- package/src/boxes/iso-base-media/mvhd.ts +15 -14
- package/src/boxes/iso-base-media/process-box.ts +42 -0
- package/src/boxes/iso-base-media/tfdt.ts +37 -0
- package/src/boxes/iso-base-media/tfhd.ts +66 -0
- package/src/boxes/iso-base-media/tkhd.ts +11 -13
- package/src/boxes/iso-base-media/trun.ts +74 -0
- package/src/boxes/webm/get-track.ts +2 -2
- package/src/buffer-iterator.ts +3 -2
- package/src/get-duration.ts +40 -5
- package/src/get-tracks.ts +4 -4
- package/src/has-all-info.ts +1 -1
- package/src/parse-media.ts +1 -1
- package/src/parse-result.ts +7 -1
- package/src/samples-from-moof.ts +101 -0
- package/src/test/samples-from-moof.test.ts +2496 -0
- package/src/test/stream-local.test.ts +28 -30
- package/src/test/stream-samples.test.ts +153 -231
- package/src/traversal.ts +56 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/bitstream/av1.d.ts +0 -2
- package/dist/bitstream/av1.js +0 -12
- package/dist/boxes/iso-base-media/avcc-hvcc.d.ts +0 -20
- package/dist/boxes/iso-base-media/avcc-hvcc.js +0 -73
- package/dist/boxes/iso-base-media/avcc.d.ts +0 -18
- package/dist/boxes/iso-base-media/avcc.js +0 -27
- package/dist/boxes/iso-base-media/esds-descriptors.d.ts +0 -21
- package/dist/boxes/iso-base-media/esds-descriptors.js +0 -62
- package/dist/boxes/iso-base-media/esds.d.ts +0 -15
- package/dist/boxes/iso-base-media/esds.js +0 -27
- package/dist/create/create-media.d.ts +0 -2
- package/dist/create/create-media.js +0 -36
- package/dist/create/matroska-header.d.ts +0 -1
- package/dist/create/matroska-header.js +0 -66
- package/dist/create/matroska-info.d.ts +0 -4
- package/dist/create/matroska-info.js +0 -39
- package/dist/create/matroska-segment.d.ts +0 -1
- package/dist/create/matroska-segment.js +0 -12
- package/dist/create/matroska-trackentry.d.ts +0 -21
- package/dist/create/matroska-trackentry.js +0 -191
- package/dist/create-media.d.ts +0 -1
- package/dist/create-media.js +0 -78
- package/dist/from-input-type-file.d.ts +0 -2
- package/dist/from-input-type-file.js +0 -37
- package/dist/get-codec.d.ts +0 -4
- package/dist/get-codec.js +0 -22
- package/dist/readers/from-fetch.d.ts +0 -2
- package/dist/readers/from-fetch.js +0 -64
- package/dist/readers/from-node.d.ts +0 -2
- package/dist/readers/from-node.js +0 -40
- package/dist/readers/from-web-file.d.ts +0 -2
- package/dist/readers/from-web-file.js +0 -39
- package/dist/readers/reader.d.ts +0 -11
- package/dist/readers/reader.js +0 -2
- package/dist/web-file.d.ts +0 -2
- package/dist/web-file.js +0 -37
- package/dist/writers/web-fs.d.ts +0 -2
- package/dist/writers/web-fs.js +0 -28
- package/dist/writers/writer.d.ts +0 -9
- package/dist/writers/writer.js +0 -2
- /package/dist/{get-samples.d.ts → boxes/webm/bitstream/av1/frame.d.ts} +0 -0
- /package/dist/{get-samples.js → boxes/webm/bitstream/av1/frame.js} +0 -0
- /package/dist/{sample-aspect-ratio.d.ts → boxes/webm/bitstream/h264/get-h264-descriptor.d.ts} +0 -0
- /package/dist/{sample-aspect-ratio.js → boxes/webm/bitstream/h264/get-h264-descriptor.js} +0 -0
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
|
-
export interface AvccBox {
|
|
3
|
-
type: 'avcc-box';
|
|
4
|
-
data: Uint8Array;
|
|
5
|
-
configurationString: string;
|
|
6
|
-
}
|
|
7
|
-
export declare const parseAvcc: ({ data, size, }: {
|
|
8
|
-
data: BufferIterator;
|
|
9
|
-
size: number;
|
|
10
|
-
}) => AvccBox;
|
|
11
|
-
export interface HvccBox {
|
|
12
|
-
type: 'hvcc-box';
|
|
13
|
-
data: Uint8Array;
|
|
14
|
-
}
|
|
15
|
-
export declare const parseHvcc: ({ data, size, }: {
|
|
16
|
-
data: BufferIterator;
|
|
17
|
-
size: number;
|
|
18
|
-
}) => HvccBox;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseHvcc = exports.parseAvcc = void 0;
|
|
4
|
-
const parseAvcc = ({ data, size, }) => {
|
|
5
|
-
const confVersion = data.getUint8();
|
|
6
|
-
if (confVersion !== 1) {
|
|
7
|
-
throw new Error(`Unsupported AVCC version ${confVersion}`);
|
|
8
|
-
}
|
|
9
|
-
const profile = data.getUint8();
|
|
10
|
-
const profileCompatibility = data.getUint8();
|
|
11
|
-
const level = data.getUint8();
|
|
12
|
-
const str = `${profile.toString(16).padStart(2, '0')}${profileCompatibility.toString(16).padStart(2, '0')}${level.toString(16).padStart(2, '0')}`;
|
|
13
|
-
data.counter.decrement(4);
|
|
14
|
-
return {
|
|
15
|
-
type: 'avcc-box',
|
|
16
|
-
data: data.getSlice(size - 8),
|
|
17
|
-
configurationString: str,
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
exports.parseAvcc = parseAvcc;
|
|
21
|
-
const parseHvcc = ({ data, size, }) => {
|
|
22
|
-
return {
|
|
23
|
-
type: 'hvcc-box',
|
|
24
|
-
data: data.getSlice(size - 8),
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
exports.parseHvcc = parseHvcc;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
|
-
type AudioObjectType = 'aac' | 'mp3' | 'unknown';
|
|
3
|
-
type DecoderConfigDescriptor = {
|
|
4
|
-
type: 'decoder-config-descriptor';
|
|
5
|
-
objectTypeIndication: AudioObjectType;
|
|
6
|
-
};
|
|
7
|
-
type SlConfigDescriptor = {
|
|
8
|
-
type: 'sl-config-descriptor';
|
|
9
|
-
};
|
|
10
|
-
type UnknownDescriptor = {
|
|
11
|
-
type: 'unknown-descriptor';
|
|
12
|
-
};
|
|
13
|
-
export type Descriptor = DecoderConfigDescriptor | SlConfigDescriptor | UnknownDescriptor;
|
|
14
|
-
type DescriptorAndNext = {
|
|
15
|
-
descriptor: Descriptor | null;
|
|
16
|
-
};
|
|
17
|
-
export declare const processDescriptor: ({ iterator, }: {
|
|
18
|
-
iterator: BufferIterator;
|
|
19
|
-
}) => DescriptorAndNext;
|
|
20
|
-
export declare const parseDescriptors: (iterator: BufferIterator, maxBytes: number) => Descriptor[];
|
|
21
|
-
export {};
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseDescriptors = exports.processDescriptor = void 0;
|
|
4
|
-
const mapToObjectAudioIndicator = (num) => {
|
|
5
|
-
// https://chromium.googlesource.com/chromium/src/media/+/master/formats/mp4/es_descriptor.h
|
|
6
|
-
// http://netmedia.zju.edu.cn/multimedia2013/mpeg-4/ISO%20IEC%2014496-1%20MPEG-4%20System%20Standard.pdf
|
|
7
|
-
// Page 42, table 8
|
|
8
|
-
if (num === 0x40) {
|
|
9
|
-
return 'aac';
|
|
10
|
-
}
|
|
11
|
-
if (num === 0x6b) {
|
|
12
|
-
return 'mp3';
|
|
13
|
-
}
|
|
14
|
-
return 'unknown';
|
|
15
|
-
};
|
|
16
|
-
const processDescriptor = ({ iterator, }) => {
|
|
17
|
-
const tag = iterator.getUint8();
|
|
18
|
-
if (tag === 4) {
|
|
19
|
-
const size = iterator.getPaddedFourByteNumber();
|
|
20
|
-
const initialOffset = iterator.counter.getOffset();
|
|
21
|
-
const objectTypeIndication = iterator.getUint8();
|
|
22
|
-
const remaining = size - (iterator.counter.getOffset() - initialOffset);
|
|
23
|
-
iterator.discard(remaining);
|
|
24
|
-
return {
|
|
25
|
-
descriptor: {
|
|
26
|
-
type: 'decoder-config-descriptor',
|
|
27
|
-
objectTypeIndication: mapToObjectAudioIndicator(objectTypeIndication),
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
if (tag === 6) {
|
|
32
|
-
const size = iterator.getPaddedFourByteNumber();
|
|
33
|
-
iterator.discard(size);
|
|
34
|
-
return {
|
|
35
|
-
descriptor: {
|
|
36
|
-
type: 'sl-config-descriptor',
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
return {
|
|
41
|
-
descriptor: null,
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
exports.processDescriptor = processDescriptor;
|
|
45
|
-
const parseDescriptors = (iterator, maxBytes) => {
|
|
46
|
-
const descriptors = [];
|
|
47
|
-
const initialOffset = iterator.counter.getOffset();
|
|
48
|
-
while (iterator.bytesRemaining() > 0 &&
|
|
49
|
-
iterator.counter.getOffset() - initialOffset < maxBytes) {
|
|
50
|
-
const { descriptor } = (0, exports.processDescriptor)({
|
|
51
|
-
iterator,
|
|
52
|
-
});
|
|
53
|
-
if (descriptor) {
|
|
54
|
-
descriptors.push(descriptor);
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return descriptors;
|
|
61
|
-
};
|
|
62
|
-
exports.parseDescriptors = parseDescriptors;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { BufferIterator } from '../../buffer-iterator';
|
|
2
|
-
import type { Descriptor } from './esds-descriptors';
|
|
3
|
-
export interface EsdsBox {
|
|
4
|
-
type: 'esds-box';
|
|
5
|
-
version: number;
|
|
6
|
-
tag: number;
|
|
7
|
-
sizeOfInstance: number;
|
|
8
|
-
esId: number;
|
|
9
|
-
descriptors: Descriptor[];
|
|
10
|
-
}
|
|
11
|
-
export declare const parseEsds: ({ data, size, fileOffset, }: {
|
|
12
|
-
data: BufferIterator;
|
|
13
|
-
size: number;
|
|
14
|
-
fileOffset: number;
|
|
15
|
-
}) => EsdsBox;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseEsds = void 0;
|
|
4
|
-
const esds_descriptors_1 = require("./esds-descriptors");
|
|
5
|
-
const parseEsds = ({ data, size, fileOffset, }) => {
|
|
6
|
-
const version = data.getUint8();
|
|
7
|
-
// Flags, we discard them
|
|
8
|
-
data.discard(3);
|
|
9
|
-
const tag = data.getUint8();
|
|
10
|
-
const sizeOfInstance = data.getPaddedFourByteNumber();
|
|
11
|
-
const esId = data.getUint16();
|
|
12
|
-
// disard 1 byte, currently unknown
|
|
13
|
-
data.discard(1);
|
|
14
|
-
const remaining = size - (data.counter.getOffset() - fileOffset);
|
|
15
|
-
const descriptors = (0, esds_descriptors_1.parseDescriptors)(data, remaining);
|
|
16
|
-
const remainingNow = size - (data.counter.getOffset() - fileOffset);
|
|
17
|
-
data.discard(remainingNow);
|
|
18
|
-
return {
|
|
19
|
-
type: 'esds-box',
|
|
20
|
-
version,
|
|
21
|
-
tag,
|
|
22
|
-
sizeOfInstance,
|
|
23
|
-
esId,
|
|
24
|
-
descriptors,
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
exports.parseEsds = parseEsds;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createMedia = void 0;
|
|
4
|
-
const matroska_header_1 = require("./matroska-header");
|
|
5
|
-
const matroska_info_1 = require("./matroska-info");
|
|
6
|
-
const matroska_segment_1 = require("./matroska-segment");
|
|
7
|
-
const matroska_trackentry_1 = require("./matroska-trackentry");
|
|
8
|
-
const createMedia = async (writer) => {
|
|
9
|
-
const header = (0, matroska_header_1.makeMatroskaHeader)();
|
|
10
|
-
const w = await writer.createContent();
|
|
11
|
-
await w.write(header);
|
|
12
|
-
const matroskaInfo = (0, matroska_info_1.makeMatroskaInfo)({
|
|
13
|
-
timescale: 1000000,
|
|
14
|
-
duration: 2658,
|
|
15
|
-
});
|
|
16
|
-
const matroskaTrackEntry = (0, matroska_trackentry_1.makeMatroskaVideoTrackEntryBytes)({
|
|
17
|
-
color: {
|
|
18
|
-
transferChracteristics: 'bt709',
|
|
19
|
-
matrixCoefficients: 'bt709',
|
|
20
|
-
primaries: 'bt709',
|
|
21
|
-
fullRange: true,
|
|
22
|
-
},
|
|
23
|
-
width: 1920,
|
|
24
|
-
height: 1080,
|
|
25
|
-
defaultDuration: 2658,
|
|
26
|
-
trackNumber: 1,
|
|
27
|
-
codecId: 'V_VP8',
|
|
28
|
-
});
|
|
29
|
-
const matroskaTracks = (0, matroska_trackentry_1.makeMatroskaTracks)([matroskaTrackEntry]);
|
|
30
|
-
const matroskaSegment = (0, matroska_segment_1.createMatroskaSegment)([matroskaInfo, matroskaTracks]);
|
|
31
|
-
await w.write(matroskaSegment);
|
|
32
|
-
return async () => {
|
|
33
|
-
await w.save();
|
|
34
|
-
};
|
|
35
|
-
};
|
|
36
|
-
exports.createMedia = createMedia;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const makeMatroskaHeader: () => Uint8Array;
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.makeMatroskaHeader = void 0;
|
|
4
|
-
const make_header_1 = require("../boxes/webm/make-header");
|
|
5
|
-
const makeMatroskaHeader = () => {
|
|
6
|
-
return (0, make_header_1.makeMatroskaBytes)({
|
|
7
|
-
type: 'Header',
|
|
8
|
-
value: [
|
|
9
|
-
{
|
|
10
|
-
minVintWidth: null,
|
|
11
|
-
type: 'EBMLVersion',
|
|
12
|
-
value: {
|
|
13
|
-
value: 1,
|
|
14
|
-
byteLength: null,
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
minVintWidth: null,
|
|
19
|
-
type: 'EBMLReadVersion',
|
|
20
|
-
value: {
|
|
21
|
-
value: 1,
|
|
22
|
-
byteLength: null,
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
type: 'EBMLMaxIDLength',
|
|
27
|
-
value: {
|
|
28
|
-
byteLength: null,
|
|
29
|
-
value: 4,
|
|
30
|
-
},
|
|
31
|
-
minVintWidth: null,
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
type: 'EBMLMaxSizeLength',
|
|
35
|
-
value: {
|
|
36
|
-
byteLength: null,
|
|
37
|
-
value: 8,
|
|
38
|
-
},
|
|
39
|
-
minVintWidth: null,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
type: 'DocType',
|
|
43
|
-
value: 'webm',
|
|
44
|
-
minVintWidth: null,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
type: 'DocTypeVersion',
|
|
48
|
-
value: {
|
|
49
|
-
byteLength: null,
|
|
50
|
-
value: 4,
|
|
51
|
-
},
|
|
52
|
-
minVintWidth: null,
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
type: 'DocTypeReadVersion',
|
|
56
|
-
value: {
|
|
57
|
-
byteLength: null,
|
|
58
|
-
value: 2,
|
|
59
|
-
},
|
|
60
|
-
minVintWidth: null,
|
|
61
|
-
},
|
|
62
|
-
],
|
|
63
|
-
minVintWidth: null,
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
|
-
exports.makeMatroskaHeader = makeMatroskaHeader;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.makeMatroskaInfo = void 0;
|
|
4
|
-
const make_header_1 = require("../boxes/webm/make-header");
|
|
5
|
-
const makeMatroskaInfo = ({ timescale, duration, }) => {
|
|
6
|
-
return (0, make_header_1.makeMatroskaBytes)({
|
|
7
|
-
type: 'Info',
|
|
8
|
-
value: [
|
|
9
|
-
{
|
|
10
|
-
type: 'TimestampScale',
|
|
11
|
-
value: {
|
|
12
|
-
value: timescale,
|
|
13
|
-
byteLength: null,
|
|
14
|
-
},
|
|
15
|
-
minVintWidth: null,
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
type: 'MuxingApp',
|
|
19
|
-
value: '@remotion/media-parser',
|
|
20
|
-
minVintWidth: null,
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
type: 'WritingApp',
|
|
24
|
-
value: '@remotion/media-parser',
|
|
25
|
-
minVintWidth: null,
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
type: 'Duration',
|
|
29
|
-
value: {
|
|
30
|
-
value: duration,
|
|
31
|
-
size: '64',
|
|
32
|
-
},
|
|
33
|
-
minVintWidth: null,
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
minVintWidth: null,
|
|
37
|
-
});
|
|
38
|
-
};
|
|
39
|
-
exports.makeMatroskaInfo = makeMatroskaInfo;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const createMatroskaSegment: (children: Uint8Array[]) => Uint8Array;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createMatroskaSegment = void 0;
|
|
4
|
-
const make_header_1 = require("../boxes/webm/make-header");
|
|
5
|
-
const createMatroskaSegment = (children) => {
|
|
6
|
-
return (0, make_header_1.makeMatroskaBytes)({
|
|
7
|
-
type: 'Segment',
|
|
8
|
-
value: children,
|
|
9
|
-
minVintWidth: 8,
|
|
10
|
-
});
|
|
11
|
-
};
|
|
12
|
-
exports.createMatroskaSegment = createMatroskaSegment;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export type MatroskaColorParams = {
|
|
2
|
-
transferChracteristics: 'bt709' | 'smpte170m' | 'iec61966-2-1' | null;
|
|
3
|
-
matrixCoefficients: 'bt709' | 'bt470bg' | 'rgb' | 'smpte170m' | null;
|
|
4
|
-
primaries: 'bt709' | 'smpte170m' | 'bt470bg' | null;
|
|
5
|
-
fullRange: boolean | null;
|
|
6
|
-
};
|
|
7
|
-
export declare const makeMatroskaColorBytes: ({ transferChracteristics, matrixCoefficients, primaries, fullRange, }: MatroskaColorParams) => Uint8Array;
|
|
8
|
-
export declare const makeMatroskaVideoBytes: ({ color, width, height, }: {
|
|
9
|
-
color: MatroskaColorParams;
|
|
10
|
-
width: number;
|
|
11
|
-
height: number;
|
|
12
|
-
}) => Uint8Array;
|
|
13
|
-
export declare const makeMatroskaVideoTrackEntryBytes: ({ color, width, height, defaultDuration, trackNumber, codecId, }: {
|
|
14
|
-
color: MatroskaColorParams;
|
|
15
|
-
width: number;
|
|
16
|
-
height: number;
|
|
17
|
-
defaultDuration: number;
|
|
18
|
-
trackNumber: number;
|
|
19
|
-
codecId: string;
|
|
20
|
-
}) => Uint8Array;
|
|
21
|
-
export declare const makeMatroskaTracks: (tracks: Uint8Array[]) => Uint8Array;
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.makeMatroskaTracks = exports.makeMatroskaVideoTrackEntryBytes = exports.makeMatroskaVideoBytes = exports.makeMatroskaColorBytes = void 0;
|
|
4
|
-
const make_header_1 = require("../boxes/webm/make-header");
|
|
5
|
-
const makeMatroskaColorBytes = ({ transferChracteristics, matrixCoefficients, primaries, fullRange, }) => {
|
|
6
|
-
const rangeValue = transferChracteristics && matrixCoefficients
|
|
7
|
-
? 3
|
|
8
|
-
: fullRange === true
|
|
9
|
-
? 2
|
|
10
|
-
: fullRange === false
|
|
11
|
-
? 1
|
|
12
|
-
: 0;
|
|
13
|
-
// https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
|
|
14
|
-
// 5.1.4.1.28.27
|
|
15
|
-
const primariesValue = primaries === 'bt709'
|
|
16
|
-
? 1
|
|
17
|
-
: primaries === 'smpte170m'
|
|
18
|
-
? 6
|
|
19
|
-
: primaries === 'bt470bg'
|
|
20
|
-
? 5
|
|
21
|
-
: 2;
|
|
22
|
-
const transferChracteristicsValue = transferChracteristics === 'bt709'
|
|
23
|
-
? 1
|
|
24
|
-
: transferChracteristics === 'smpte170m'
|
|
25
|
-
? 6
|
|
26
|
-
: transferChracteristics === 'iec61966-2-1'
|
|
27
|
-
? 13
|
|
28
|
-
: 2;
|
|
29
|
-
if (matrixCoefficients === 'rgb') {
|
|
30
|
-
throw new Error('Cannot encode Matroska in RGB');
|
|
31
|
-
}
|
|
32
|
-
const matrixCoefficientsValue = matrixCoefficients === 'bt709'
|
|
33
|
-
? 1
|
|
34
|
-
: matrixCoefficients === 'bt470bg'
|
|
35
|
-
? 5
|
|
36
|
-
: matrixCoefficients === 'smpte170m'
|
|
37
|
-
? 6
|
|
38
|
-
: 2;
|
|
39
|
-
return (0, make_header_1.makeMatroskaBytes)({
|
|
40
|
-
type: 'Colour',
|
|
41
|
-
minVintWidth: null,
|
|
42
|
-
value: [
|
|
43
|
-
{
|
|
44
|
-
type: 'TransferCharacteristics',
|
|
45
|
-
value: {
|
|
46
|
-
value: transferChracteristicsValue,
|
|
47
|
-
byteLength: null,
|
|
48
|
-
},
|
|
49
|
-
minVintWidth: null,
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
type: 'MatrixCoefficients',
|
|
53
|
-
value: {
|
|
54
|
-
value: matrixCoefficientsValue,
|
|
55
|
-
byteLength: null,
|
|
56
|
-
},
|
|
57
|
-
minVintWidth: null,
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
type: 'Primaries',
|
|
61
|
-
value: {
|
|
62
|
-
value: primariesValue,
|
|
63
|
-
byteLength: null,
|
|
64
|
-
},
|
|
65
|
-
minVintWidth: null,
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
type: 'Range',
|
|
69
|
-
value: {
|
|
70
|
-
value: rangeValue,
|
|
71
|
-
byteLength: null,
|
|
72
|
-
},
|
|
73
|
-
minVintWidth: null,
|
|
74
|
-
},
|
|
75
|
-
],
|
|
76
|
-
});
|
|
77
|
-
};
|
|
78
|
-
exports.makeMatroskaColorBytes = makeMatroskaColorBytes;
|
|
79
|
-
const makeMatroskaVideoBytes = ({ color, width, height, }) => {
|
|
80
|
-
return (0, make_header_1.makeMatroskaBytes)({
|
|
81
|
-
type: 'Video',
|
|
82
|
-
value: [
|
|
83
|
-
{
|
|
84
|
-
type: 'PixelWidth',
|
|
85
|
-
value: {
|
|
86
|
-
value: width,
|
|
87
|
-
byteLength: null,
|
|
88
|
-
},
|
|
89
|
-
minVintWidth: null,
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
type: 'PixelHeight',
|
|
93
|
-
value: {
|
|
94
|
-
value: height,
|
|
95
|
-
byteLength: null,
|
|
96
|
-
},
|
|
97
|
-
minVintWidth: null,
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
type: 'FlagInterlaced',
|
|
101
|
-
value: {
|
|
102
|
-
// https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
|
|
103
|
-
// 5.1.4.1.28.1.
|
|
104
|
-
value: 2, // 2 - progressive, no interlaced
|
|
105
|
-
byteLength: null,
|
|
106
|
-
},
|
|
107
|
-
minVintWidth: null,
|
|
108
|
-
},
|
|
109
|
-
(0, exports.makeMatroskaColorBytes)(color),
|
|
110
|
-
],
|
|
111
|
-
minVintWidth: null,
|
|
112
|
-
});
|
|
113
|
-
};
|
|
114
|
-
exports.makeMatroskaVideoBytes = makeMatroskaVideoBytes;
|
|
115
|
-
const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, defaultDuration, trackNumber, codecId, }) => {
|
|
116
|
-
return (0, make_header_1.makeMatroskaBytes)({
|
|
117
|
-
type: 'TrackEntry',
|
|
118
|
-
minVintWidth: null,
|
|
119
|
-
value: [
|
|
120
|
-
{
|
|
121
|
-
type: 'TrackNumber',
|
|
122
|
-
value: {
|
|
123
|
-
value: trackNumber,
|
|
124
|
-
byteLength: null,
|
|
125
|
-
},
|
|
126
|
-
minVintWidth: null,
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
type: 'TrackUID',
|
|
130
|
-
value: '0xab2171012bb9020a',
|
|
131
|
-
minVintWidth: null,
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
type: 'FlagLacing',
|
|
135
|
-
value: {
|
|
136
|
-
value: 0,
|
|
137
|
-
byteLength: null,
|
|
138
|
-
},
|
|
139
|
-
minVintWidth: null,
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
type: 'Language',
|
|
143
|
-
value: 'und',
|
|
144
|
-
minVintWidth: null,
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
type: 'FlagDefault',
|
|
148
|
-
value: {
|
|
149
|
-
value: 0,
|
|
150
|
-
byteLength: null,
|
|
151
|
-
},
|
|
152
|
-
minVintWidth: null,
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
type: 'CodecID',
|
|
156
|
-
value: codecId,
|
|
157
|
-
minVintWidth: null,
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
type: 'TrackType',
|
|
161
|
-
value: {
|
|
162
|
-
value: 1, // 'video'
|
|
163
|
-
byteLength: null,
|
|
164
|
-
},
|
|
165
|
-
minVintWidth: null,
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
type: 'DefaultDuration',
|
|
169
|
-
value: {
|
|
170
|
-
value: defaultDuration,
|
|
171
|
-
byteLength: null,
|
|
172
|
-
},
|
|
173
|
-
minVintWidth: null,
|
|
174
|
-
},
|
|
175
|
-
(0, exports.makeMatroskaVideoBytes)({
|
|
176
|
-
color,
|
|
177
|
-
width,
|
|
178
|
-
height,
|
|
179
|
-
}),
|
|
180
|
-
],
|
|
181
|
-
});
|
|
182
|
-
};
|
|
183
|
-
exports.makeMatroskaVideoTrackEntryBytes = makeMatroskaVideoTrackEntryBytes;
|
|
184
|
-
const makeMatroskaTracks = (tracks) => {
|
|
185
|
-
return (0, make_header_1.makeMatroskaBytes)({
|
|
186
|
-
type: 'Tracks',
|
|
187
|
-
value: tracks,
|
|
188
|
-
minVintWidth: null,
|
|
189
|
-
});
|
|
190
|
-
};
|
|
191
|
-
exports.makeMatroskaTracks = makeMatroskaTracks;
|
package/dist/create-media.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const createMedia: () => Promise<void>;
|
package/dist/create-media.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createMedia = void 0;
|
|
4
|
-
const make_header_1 = require("./boxes/webm/make-header");
|
|
5
|
-
const createMedia = async () => {
|
|
6
|
-
const header = (0, make_header_1.makeMatroskaBytes)({
|
|
7
|
-
type: 'Header',
|
|
8
|
-
value: [
|
|
9
|
-
{
|
|
10
|
-
minVintWidth: null,
|
|
11
|
-
type: 'EBMLVersion',
|
|
12
|
-
value: {
|
|
13
|
-
value: 1,
|
|
14
|
-
byteLength: null,
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
minVintWidth: null,
|
|
19
|
-
type: 'EBMLReadVersion',
|
|
20
|
-
value: {
|
|
21
|
-
value: 1,
|
|
22
|
-
byteLength: null,
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
type: 'EBMLMaxIDLength',
|
|
27
|
-
value: {
|
|
28
|
-
byteLength: null,
|
|
29
|
-
value: 4,
|
|
30
|
-
},
|
|
31
|
-
minVintWidth: null,
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
type: 'EBMLMaxSizeLength',
|
|
35
|
-
value: {
|
|
36
|
-
byteLength: null,
|
|
37
|
-
value: 8,
|
|
38
|
-
},
|
|
39
|
-
minVintWidth: null,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
type: 'DocType',
|
|
43
|
-
value: 'webm',
|
|
44
|
-
minVintWidth: null,
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
type: 'DocTypeVersion',
|
|
48
|
-
value: {
|
|
49
|
-
byteLength: null,
|
|
50
|
-
value: 4,
|
|
51
|
-
},
|
|
52
|
-
minVintWidth: null,
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
type: 'DocTypeReadVersion',
|
|
56
|
-
value: {
|
|
57
|
-
byteLength: null,
|
|
58
|
-
value: 2,
|
|
59
|
-
},
|
|
60
|
-
minVintWidth: null,
|
|
61
|
-
},
|
|
62
|
-
],
|
|
63
|
-
minVintWidth: null,
|
|
64
|
-
});
|
|
65
|
-
const handle = await window.showSaveFilePicker({
|
|
66
|
-
suggestedName: 'out.webm',
|
|
67
|
-
types: [
|
|
68
|
-
{
|
|
69
|
-
description: 'WebM video',
|
|
70
|
-
accept: { 'video/webm': ['.webm'] },
|
|
71
|
-
},
|
|
72
|
-
],
|
|
73
|
-
});
|
|
74
|
-
const writable = await handle.createWritable();
|
|
75
|
-
await writable.write(header);
|
|
76
|
-
writable.close();
|
|
77
|
-
};
|
|
78
|
-
exports.createMedia = createMedia;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.inputTypeFileReader = void 0;
|
|
4
|
-
exports.inputTypeFileReader = {
|
|
5
|
-
read: (file, range) => {
|
|
6
|
-
if (typeof file === 'string') {
|
|
7
|
-
throw new Error('`inputTypeFileReader` only supports `File` objects');
|
|
8
|
-
}
|
|
9
|
-
if (range !== null) {
|
|
10
|
-
throw new Error('`inputTypeFileReader` does not support `range`');
|
|
11
|
-
}
|
|
12
|
-
const part = range === null
|
|
13
|
-
? file
|
|
14
|
-
: typeof range === 'number'
|
|
15
|
-
? file.slice(range)
|
|
16
|
-
: file.slice(range[0], range[1]);
|
|
17
|
-
const reader = new FileReader();
|
|
18
|
-
reader.readAsArrayBuffer(file);
|
|
19
|
-
return new Promise((resolve, reject) => {
|
|
20
|
-
reader.onload = () => {
|
|
21
|
-
resolve({
|
|
22
|
-
reader: part.stream().getReader(),
|
|
23
|
-
contentLength: file.size,
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
reader.onerror = (error) => {
|
|
27
|
-
reject(error);
|
|
28
|
-
};
|
|
29
|
-
});
|
|
30
|
-
},
|
|
31
|
-
getLength: (src) => {
|
|
32
|
-
if (typeof src === 'string') {
|
|
33
|
-
throw new Error('`inputTypeFileReader` only supports `File` objects');
|
|
34
|
-
}
|
|
35
|
-
return Promise.resolve(src.size);
|
|
36
|
-
},
|
|
37
|
-
};
|