Add MPEG-TS muxer, fix a demuxer bug, remove Infinity from output format track counts

This commit is contained in:
Vanilagy
2026-01-16 16:33:28 +01:00
parent ae37973878
commit e8b27768a9
13 changed files with 1705 additions and 64 deletions
+18
View File
@@ -12,6 +12,11 @@ import { MpegTsTrackBacking } from '../../src/mpeg-ts/mpeg-ts-demuxer.js';
const __dirname = new URL('.', import.meta.url).pathname;
test('MPEG-TS input format', async () => {
expect(MPEG_TS.mimeType).toBe('video/MP2T');
expect(MPEG_TS.name).toBe('MPEG Transport Stream');
});
test('MPEG-TS metadata reading', async () => {
using input = new Input({
source: new FilePathSource(path.join(__dirname, '../public/0.ts')),
@@ -356,6 +361,11 @@ test('MPEG-TS video key packets', async () => {
expect(firstKeyPacket.type).toBe('key');
expect(firstKeyPacket.sequenceNumber).toBe(firstPacket.sequenceNumber);
const afterKeyPacket = await sink.getNextPacket(firstKeyPacket);
expect(afterKeyPacket).not.toBe(null);
expect(afterKeyPacket!.type).toBe('delta');
expect(afterKeyPacket!.sequenceNumber).toBe(secondPacket.sequenceNumber);
const secondKeyPacket = await sink.getKeyPacket(15);
assert(secondKeyPacket);
expect(secondKeyPacket.type).toBe('key');
@@ -407,6 +417,14 @@ test('MPEG-TS audio key packets', async () => {
expect(nextKeyPacket.type).toBe('key');
expect(nextKeyPacket.sequenceNumber).toBe(secondPacket.sequenceNumber); // All audio packets are key packets
const middleKeyPacket = await sink.getKeyPacket(12.5);
assert(middleKeyPacket);
expect(middleKeyPacket.type).toBe('key');
const afterKeyPacket = await sink.getNextPacket(middleKeyPacket);
expect(afterKeyPacket).not.toBe(null);
expect(afterKeyPacket!.type).toBe('key');
const lastPacket = await sink.getPacket(Infinity);
assert(lastPacket);