mpegts.js
Version:
HTML5 MPEG2-TS Stream Player
114 lines (97 loc) • 2.31 kB
text/typescript
interface ProgramToPMTPIDMap {
[program: number]: number;
}
export class PAT {
version_number: number;
network_pid: number;
// program_number -> pmt_pid
program_pmt_pid: ProgramToPMTPIDMap = {};
}
export enum StreamType {
kMPEG1Audio = 0x03,
kMPEG2Audio = 0x04,
kPESPrivateData = 0x06,
kADTSAAC = 0x0F,
kLOASAAC = 0x11,
kAC3 = 0x81,
kEAC3 = 0x87,
kMetadata = 0x15,
kSCTE35 = 0x86,
kH264 = 0x1b,
kH265 = 0x24
}
interface PIDToStreamTypeMap {
[pid: number]: StreamType;
}
export class PMT {
program_number: number;
version_number: number;
pcr_pid: number;
// pid -> stream_type
pid_stream_type: PIDToStreamTypeMap = {};
common_pids: {
h264: number | undefined,
h265: number | undefined,
av1: number | undefined,
adts_aac: number | undefined,
loas_aac: number | undefined,
opus: number | undefined,
ac3: number | undefined,
eac3: number | undefined,
mp3: number | undefined
} = {
h264: undefined,
h265: undefined,
av1: undefined,
adts_aac: undefined,
loas_aac: undefined,
opus: undefined,
ac3: undefined,
eac3: undefined,
mp3: undefined
};
pes_private_data_pids: {
[pid: number]: boolean
} = {};
timed_id3_pids: {
[pid: number]: boolean
} = {};
synchronous_klv_pids: {
[pid: number]: boolean
} = {};
asynchronous_klv_pids: {
[pid: number]: boolean
} = {};
scte_35_pids: {
[pid: number]: boolean
} = {};
smpte2038_pids: {
[oid: number]: boolean
} = {};
}
export interface ProgramToPMTMap {
[program: number]: PMT;
}
export class PESData {
pid: number;
data: Uint8Array;
stream_type: StreamType;
file_position: number;
random_access_indicator: number;
}
export class SectionData {
pid: number;
data: Uint8Array;
file_position: number;
random_access_indicator: number;
}
export class SliceQueue {
slices: Uint8Array[] = [];
total_length: number = 0;
expected_length: number = 0;
file_position: number = 0;
random_access_indicator: 0;
}
export interface PIDToSliceQueues {
[pid: number]: SliceQueue;
}