mediabunny
Version:
Pure TypeScript media toolkit for reading, writing, and converting media files, directly in the browser.
96 lines • 3.32 kB
TypeScript
/*!
* Copyright (c) 2026-present, Vanilagy and contributors
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
import { AacCodecInfo, AudioCodec, VideoCodec } from '../codec.js';
import { AvcDecoderConfigurationRecord, HevcDecoderConfigurationRecord } from '../codec-data.js';
import { Demuxer } from '../demuxer.js';
import { Input } from '../input.js';
import { InputTrackBacking } from '../input-track.js';
import { MetadataTags } from '../metadata.js';
import { Reader } from '../reader.js';
type ElementaryStream = {
demuxer: MpegTsDemuxer;
pid: number;
streamType: number;
initialized: boolean;
firstSection: Section | null;
/**
* Some muxers suck ass and don't correctly label key frames, meaning we'll need to use our skill to
* compensate for another programmer's skill issue.
*/
canBeTrustedWithKeyPackets: boolean;
info: {
type: 'video';
codec: VideoCodec;
decoderConfig: VideoDecoderConfig | null;
avcCodecInfo: AvcDecoderConfigurationRecord | null;
hevcCodecInfo: HevcDecoderConfigurationRecord | null;
colorSpace: VideoColorSpaceInit;
width: number;
height: number;
squarePixelWidth: number;
squarePixelHeight: number;
reorderSize: number;
} | {
type: 'audio';
codec: AudioCodec;
decoderConfig: AudioDecoderConfig | null;
aacCodecInfo: AacCodecInfo | null;
numberOfChannels: number;
sampleRate: number;
};
/**
* Reference PES packets, spread throughout the file, to be used to speed up repeated random access. Sorted by both
* byte offset and PTS.
*/
referencePesPackets: TimestampedPesPacketHeader[];
};
type TsPacketHeader = {
payloadUnitStartIndicator: number;
pid: number;
adaptationFieldControl: number;
};
type TsPacket = TsPacketHeader & {
body: Uint8Array<ArrayBufferLike>;
};
type Section = {
startPos: number;
endPos: number | null;
pid: number;
payload: Uint8Array<ArrayBufferLike>;
randomAccessIndicator: number;
};
export declare class MpegTsDemuxer extends Demuxer {
reader: Reader;
metadataPromise: Promise<void> | null;
elementaryStreams: ElementaryStream[];
trackBackingEntries: InputTrackBacking[];
packetOffset: number;
packetStride: number;
sectionEndPositions: number[];
seekChunkSize: number;
minReferencePointByteDistance: number;
constructor(input: Input);
readMetadata(): Promise<void>;
getTrackBackings(): Promise<InputTrackBacking[]>;
getMetadataTags(): Promise<MetadataTags>;
getMimeType(): Promise<string>;
readSection(startPos: number, full: boolean, contiguous?: boolean): Promise<Section | null>;
readPacketHeader(pos: number): Promise<TsPacketHeader | null>;
readPacket(pos: number): Promise<TsPacket | null>;
}
type PesPacketHeader = {
sectionStartPos: number;
sectionEndPos: number | null;
pts: number | null;
randomAccessIndicator: number;
};
type TimestampedPesPacketHeader = PesPacketHeader & {
pts: number;
};
export {};
//# sourceMappingURL=mpeg-ts-demuxer.d.ts.map