npaw-plugin-nwf
Version:
NPAW's Plugin
96 lines (95 loc) • 3.19 kB
TypeScript
export declare enum ManifestProtocol {
HLS = "HLS",
DASH = "DASH"
}
export declare enum TrackType {
VIDEO = "VIDEO",
AUDIO = "AUDIO",
TEXT = "TEXT"
}
export declare enum UrlType {
MASTER_MANIFEST = "MASTER_MANIFEST",
SUB_MANIFEST = "SUB_MANIFEST",
INIT_SEGMENT = "INIT_SEGMENT",
MEDIA_SEGMENT = "MEDIA_SEGMENT"
}
export interface SegmentMatchInfo {
segmentNumber: number;
estimatedTimeSecs: number;
estimatedDurationSecs: number;
}
export interface SegmentIndex {
readonly segmentCount: number;
readonly startNumber: number;
readonly targetDurationSecs: number;
readonly totalDurationSecs: number;
readonly isLive: boolean;
readonly hasUniqueSegmentUris: boolean;
getSegmentUri(segmentNumber: number): string | undefined;
getSegmentInfoForUri(chunkUri: string, byteRangeOffset?: number): SegmentMatchInfo | undefined;
matchesInitUri(chunkUri: string): boolean;
getSegmentInfoByNumber(segmentNumber: number): SegmentMatchInfo | undefined;
}
export interface UrlMatch {
urlType: UrlType;
manifest: Manifest;
track: Manifest | undefined;
segmentNumber: number | undefined;
segmentTimeSecs: number | undefined;
segmentDurationSecs: number | undefined;
}
export interface ManifestData {
uri: string;
id?: string;
protocol: ManifestProtocol;
isMasterManifest: boolean;
isLive?: boolean;
durationMs?: number;
trackType?: TrackType;
bitrate?: number;
videoCodecs?: string;
audioCodecs?: string;
width?: number;
height?: number;
language?: string;
containerMimeType?: string;
frameRate?: number;
tracks?: Map<string, Manifest[]>;
segmentIndex?: SegmentIndex;
sourceUrl?: string;
}
export declare class Manifest {
readonly uri: string;
readonly id: string | undefined;
readonly protocol: ManifestProtocol;
readonly isMasterManifest: boolean;
readonly isLive: boolean;
readonly durationMs: number;
readonly trackType: TrackType | undefined;
readonly bitrate: number;
readonly videoCodecs: string | undefined;
readonly audioCodecs: string | undefined;
readonly width: number;
readonly height: number;
readonly language: string | undefined;
readonly containerMimeType: string | undefined;
readonly frameRate: number;
readonly tracks: Map<string, Manifest[]>;
readonly segmentIndex: SegmentIndex | undefined;
readonly sourceUrl: string | undefined;
constructor(data: ManifestData);
copy(overrides: Partial<ManifestData>): Manifest;
/**
* Multi-level URL resolution aligned with Android Manifest.resolveUrl().
* Level 1: O(1) directory key lookup
* Level 2: reverse-contains on track keys
* Level 2b: flattened sub-manifest filenames
* Own segmentIndex check
* Level 3: brute-force (if force=true)
*/
resolveUrl(dirPathOrFullPath: string, filenameOrUndefined?: string, skipPathChecks?: boolean, force?: boolean, byteRangeOffset?: number, preferredTrackUri?: string): UrlMatch | undefined;
private matchTrackList;
private isStrongMatch;
private matchTrack;
private matchSegmentIndex;
}