hls.js
Version:
JavaScript HLS client using MediaSourceExtension
209 lines (187 loc) • 4.63 kB
text/typescript
import type { RationalTimestamp } from '../utils/timescale-conversion';
export interface Demuxer {
demux(
data: Uint8Array,
timeOffset: number,
isSampleAes?: boolean,
flush?: boolean,
): DemuxerResult;
demuxSampleAes(
data: Uint8Array,
keyData: KeyData,
timeOffset: number,
): Promise<DemuxerResult>;
flush(timeOffset?: number): DemuxerResult | Promise<DemuxerResult>;
destroy(): void;
resetInitSegment(
initSegment: Uint8Array | undefined,
audioCodec: string | undefined,
videoCodec: string | undefined,
trackDuration: number,
);
resetTimeStamp(defaultInitPTS?: RationalTimestamp | null): void;
resetContiguity(): void;
}
export interface DemuxerResult {
audioTrack: DemuxedAudioTrack;
videoTrack: DemuxedVideoTrackBase;
id3Track: DemuxedMetadataTrack;
textTrack: DemuxedUserdataTrack;
}
export interface DemuxedTrack {
type: string;
id: number;
pid: number;
inputTimeScale: number;
sequenceNumber: number;
samples:
| AudioSample[]
| VideoSample[]
| MetadataSample[]
| UserdataSample[]
| Uint8Array;
timescale?: number;
container?: string;
dropped: number;
duration?: number;
pesData?: ElementaryStreamData | null;
codec?: string;
}
export interface PassthroughTrack extends DemuxedTrack {
sampleDuration: number;
samples: Uint8Array;
timescale: number;
duration: number;
codec: string;
supplemental: string | undefined;
}
export interface DemuxedAudioTrack extends DemuxedTrack {
type: 'audio';
segmentCodec: 'aac' | 'ac3' | 'mp3';
config?: number[] | Uint8Array;
samplerate?: number;
channelCount?: number;
manifestCodec?: string;
parsedCodec?: string;
samples: AudioSample[];
}
export type DemuxedAAC = DemuxedAudioTrack & {
segmentCodec: 'aac';
samples: AACAudioSample[];
};
export type DemuxedAC3 = DemuxedAudioTrack & {
segmentCodec: 'ac3';
config: Uint8Array;
};
export interface DemuxedVideoTrackBase extends DemuxedTrack {
width?: number;
height?: number;
pixelRatio?: [number, number];
audFound?: boolean;
vps?: Uint8Array[];
pps?: Uint8Array[];
sps?: Uint8Array[];
naluState?: number;
segmentCodec?: string;
manifestCodec?: string;
samples: VideoSample[] | Uint8Array;
params?: object;
}
export interface DemuxedVideoTrack extends DemuxedVideoTrackBase {
type: 'video';
segmentCodec: 'avc' | 'hevc';
samples: VideoSample[];
pixelRatio: [number, number];
width: number;
height: number;
}
export type DemuxedAVC1 = DemuxedVideoTrack & {
segmentCodec: 'avc';
pps: Uint8Array[];
sps: Uint8Array[];
};
export type DemuxedHEVC = DemuxedVideoTrack & {
segmentCodec: 'hevc';
params: {
general_profile_space: number;
general_tier_flag: number;
general_profile_idc: number;
general_profile_compatibility_flags: number[];
general_constraint_indicator_flags: number[];
general_level_idc: number;
min_spatial_segmentation_idc: number;
parallelismType: number;
chroma_format_idc: number;
bit_depth_luma_minus8: number;
bit_depth_chroma_minus8: number;
frame_rate: { fps: string; fixed: boolean };
temporal_id_nested: number;
num_temporal_layers: number;
};
pps: Uint8Array[];
sps: Uint8Array[];
vps: Uint8Array;
};
export interface DemuxedMetadataTrack extends DemuxedTrack {
samples: MetadataSample[];
}
export interface DemuxedUserdataTrack extends DemuxedTrack {
samples: UserdataSample[];
}
export enum MetadataSchema {
audioId3 = 'org.id3',
dateRange = 'com.apple.quicktime.HLS',
emsg = 'https://aomedia.org/emsg/ID3',
misbklv = 'urn:misb:KLV:bin:1910.1',
}
export interface MetadataSample {
pts: number;
dts: number;
duration: number;
len?: number;
data: Uint8Array;
type: MetadataSchema;
}
export interface UserdataSample {
pts: number;
bytes?: Uint8Array;
type?: number;
payloadType?: number;
uuid?: string;
userData?: string;
userDataBytes?: Uint8Array;
}
export interface VideoSample {
dts: number;
pts: number;
key: boolean;
frame: boolean;
units: VideoSampleUnit[];
length: number;
}
export interface VideoSampleUnit {
data: Uint8Array;
type: number;
state?: number;
}
export type AudioSample = {
unit: Uint8Array;
pts: number;
};
export type AACAudioSample = {
unit: Uint8Array<ArrayBuffer>;
};
export type AudioFrame = {
sample: AudioSample;
length: number;
missing: number;
};
export interface ElementaryStreamData {
data: Uint8Array[];
size: number;
}
export interface KeyData {
method: string;
key: Uint8Array<ArrayBuffer>;
iv: Uint8Array<ArrayBuffer>;
}