m3u8parse
Version:
Structural parsing of Apple HTTP Live Streaming .m3u8 format
158 lines (157 loc) • 4.29 kB
TypeScript
export interface Resolution {
width: number;
height: number;
}
export interface Byterange {
offset?: number | undefined;
length: number;
}
export declare enum Attr {
BigInt = "bigint",
Int = "int",
HexInt = "hexint",
HexNo = "hexno",
Enum = "enum",
List = "list",
String = "string",
Float = "float",
SignedFloat = "signed-float",
Resolution = "resolution",
Byterange = "byterange"
}
export type Start = {
'time-offset': Attr.SignedFloat;
precise?: Attr.Enum;
};
export type Define = {
name?: Attr.String;
value?: Attr.String;
import?: Attr.String;
queryparam?: Attr.String;
};
export type PartInf = {
'part-target': Attr.Float;
};
export type ServerControl = {
'can-skip-until'?: Attr.Float;
'can-skip-dateranges'?: Attr.Float;
'hold-back'?: Attr.Float;
'part-hold-back'?: Attr.Float;
'can-block-reload'?: Attr.Enum;
};
export type Key = {
method: Attr.Enum;
uri?: Attr.String;
iv?: Attr.HexInt;
keyformat?: Attr.String;
keyformatversions?: Attr.String;
};
export type Map = {
uri: Attr.String;
byterange?: Attr.Byterange | Attr.Enum;
};
export type Part = {
uri: Attr.String;
duration: Attr.Float;
independent?: Attr.Enum;
byterange?: Attr.Byterange | Attr.Enum;
gap?: Attr.Enum;
};
type SchemaValidate<T extends {
[key: string]: Attr;
}> = {
[Prop in keyof T]: Prop extends `x-${string}` ? T[Prop] : never;
};
export type Daterange<Schema extends SchemaValidate<{}> = {}> = {
id: Attr.String;
class?: Attr.String;
'start-date': Attr.String;
cue?: Attr.List;
'end-date'?: Attr.String;
duration?: Attr.Float;
'planned-duration'?: Attr.Float;
'scte35-cmd'?: Attr.HexInt | Attr.HexNo;
'scte-in'?: Attr.HexInt | Attr.HexNo;
'scte-out'?: Attr.HexInt | Attr.HexNo;
'end-on-next'?: Attr.Enum;
} & Schema;
export declare namespace Daterange {
type Interstitial = {
'x-asset-uri'?: Attr.String;
'x-asset-list'?: Attr.String;
'x-resume-offset'?: Attr.SignedFloat;
'x-playout-limit'?: Attr.Float;
'x-snap'?: Attr.List;
'x-restrict'?: Attr.List;
'x-content-may-vary'?: Attr.String;
'x-timeline-occupies'?: Attr.String;
'x-timeline-style'?: Attr.String;
};
}
export type Skip = {
'skipped-segments': Attr.BigInt | Attr.Int;
'recently-removed-dateranges'?: Attr.String;
};
export type PreloadHint = {
type: Attr.Enum;
uri: Attr.String;
'byterange-start'?: Attr.BigInt | Attr.Int;
'byterange-length'?: Attr.BigInt | Attr.Int;
};
export type RenditionReport = {
uri: Attr.String;
'last-msn': Attr.BigInt | Attr.Int;
'last-part': Attr.BigInt | Attr.Int;
};
export type Media = {
type: Attr.Enum;
uri?: Attr.String;
'group-id': Attr.String;
language?: Attr.String;
'assoc-language'?: Attr.String;
name: Attr.String;
'stable-rendition-id'?: Attr.String;
default?: Attr.Enum;
autoselect?: Attr.Enum;
forced?: Attr.Enum;
'instream-id'?: Attr.String;
'bit-depth'?: Attr.BigInt | Attr.Int;
'sample-rate'?: Attr.BigInt | Attr.Int;
characteristics?: Attr.String;
channels?: Attr.String;
};
export type StreamInf = {
bandwidth: Attr.Int | Attr.BigInt;
'average-bandwidth'?: Attr.Int | Attr.BigInt;
score?: Attr.Float;
codecs?: Attr.String;
'supplemental-codecs'?: Attr.String;
resolution?: Attr.Resolution;
'frame-rate'?: Attr.Float;
'hdcp-level'?: Attr.Enum;
'alloved-cpc'?: Attr.String;
'video-range'?: Attr.Enum;
'req-video-layout'?: Attr.String;
'stable-variant-id'?: Attr.String;
audio?: Attr.String;
video?: Attr.String;
subtitles?: Attr.String;
'closed-captions'?: Attr.String | Attr.Enum;
'pathway-id'?: Attr.String;
};
export type IFrameStreamInf = Omit<StreamInf, 'frame-rate' | 'audio' | 'subtitles' | 'closed-captions'> & {
uri: Attr.String;
};
export type SessionData = {
'data-id': Attr.String;
value?: Attr.String;
uri?: Attr.String;
format?: Attr.Enum;
language?: Attr.String;
};
export type SessionKey = Key;
export type ContentSteering = {
'server-uri': Attr.String;
'pathway-id'?: Attr.String;
};
export {};