pstream is dead; long live pstream taciturnaxolotl.github.io/pstream-ng/
at main 102 lines 2.6 kB view raw
1import { MediaPlaylist } from "hls.js"; 2 3import { MWMediaType } from "@/backend/metadata/types/mw"; 4import { AudioTrack, CaptionListItem } from "@/stores/player/slices/source"; 5import { LoadableSource, SourceQuality } from "@/stores/player/utils/qualities"; 6import { Listener } from "@/utils/events"; 7 8export type DisplayErrorType = "hls" | "htmlvideo" | "global"; 9export type DisplayError = { 10 stackTrace?: string; 11 message?: string; 12 key?: string; 13 errorName: string; 14 type: DisplayErrorType; 15 hls?: { 16 details: string; 17 fatal: boolean; 18 level?: number; 19 levelDetails?: { 20 url: string; 21 width: number; 22 height: number; 23 bitrate: number; 24 }; 25 frag?: { 26 url: string; 27 baseurl: string; 28 duration: number; 29 start: number; 30 sn: number | string; 31 }; 32 type: string; 33 url?: string; 34 }; 35}; 36 37export type DisplayInterfaceEvents = { 38 play: void; 39 pause: void; 40 fullscreen: boolean; 41 volumechange: number; 42 time: number; 43 duration: number; 44 buffered: number; 45 loading: boolean; 46 qualities: SourceQuality[]; 47 changedquality: SourceQuality | null; 48 audiotracks: AudioTrack[]; 49 changedaudiotrack: AudioTrack | null; 50 needstrack: boolean; 51 canairplay: boolean; 52 playbackrate: number; 53 error: DisplayError; 54}; 55 56export interface qualityChangeOptions { 57 source: LoadableSource | null; 58 automaticQuality: boolean; 59 preferredQuality: SourceQuality | null; 60 startAt: number; 61} 62 63export interface DisplayMeta { 64 title: string; 65 type: MWMediaType; 66} 67 68export interface DisplayCaption { 69 id: string; 70 srtData: string; 71 language: string; 72 url?: string; 73} 74 75export type DisplayType = "web" | "casting"; 76 77export interface DisplayInterface extends Listener<DisplayInterfaceEvents> { 78 play(): void; 79 pause(): void; 80 load(ops: qualityChangeOptions): void; 81 changeQuality( 82 automaticQuality: boolean, 83 preferredQuality: SourceQuality | null, 84 ): void; 85 changeAudioTrack(audioTrack: AudioTrack): void; 86 processVideoElement(video: HTMLVideoElement): void; 87 processContainerElement(container: HTMLElement): void; 88 toggleFullscreen(): void; 89 togglePictureInPicture(): void; 90 setSeeking(active: boolean): void; 91 setVolume(vol: number): void; 92 setTime(t: number): void; 93 destroy(): void; 94 startAirplay(): void; 95 setPlaybackRate(rate: number): void; 96 setMeta(meta: DisplayMeta): void; 97 setCaption(caption: DisplayCaption | null): void; 98 getType(): DisplayType; 99 getCaptionList(): CaptionListItem[]; 100 getSubtitleTracks(): MediaPlaylist[]; 101 setSubtitlePreference(lang: string): Promise<void>; 102}