import type { BPLiveSource, BPLiveConfig } from '../bplive/types'; export type ProviderType = 'video' | 'nano' | 'livekit'; export type VideoSource = { type: 'video'; url: string; }; export type NanoSource = { type: 'nano'; /** Bintu group ID for simple config */ streamid?: string; /** Full NanoPlayer source config from API */ source?: NanoPlayerSourceConfig; }; /** NanoPlayer source configuration from API */ export interface NanoPlayerSourceConfig { h5live?: unknown; startIndex?: number; options?: { switch?: { method?: string; pauseOnError?: boolean; forcePlay?: boolean; fastStart?: boolean; timeout?: number; }; adaption?: { rule?: string; }; }; entries?: Array<{ h5live?: unknown; info?: { height?: number; width?: number; bitrate?: number; framerate?: number; }; }>; } export type LiveKitSource = { type: 'livekit'; url: string; token: string; room?: string; }; export type ResolvedPlayerSource = VideoSource | NanoSource | LiveKitSource; export type PlayerSource = ResolvedPlayerSource | BPLiveSource; export type PosterSource = { type: 'poster'; url: string; }; export type PlayerSourceItem = PlayerSource | PosterSource; export type PlayerSources = PlayerSourceItem[]; /** * Source description containing sources and optional metadata. */ export interface SourceDescription { /** Array of playable sources */ sources: PlayerSource[]; /** Poster image URL */ poster?: string; } export interface ProviderConfig { libraryLocation?: string; video?: VideoProviderConfig; nano?: NanoProviderConfig; livekit?: LiveKitProviderConfig; bpLive?: BPLiveConfig; } export interface VideoProviderConfig { enableWorker?: boolean; lowLatencyMode?: boolean; backBufferLength?: number; maxBufferLength?: number; maxMaxBufferLength?: number; fragLoadingTimeOut?: number; manifestLoadingTimeOut?: number; levelLoadingTimeOut?: number; abrEwmaDefaultEstimate?: number; startLevel?: number; capLevelToPlayerSize?: boolean; } export interface NanoProviderConfig { /** Direct URL to the NanoPlayer script. When set, bypasses libraryLocation construction. */ scriptUrl?: string; reconnect?: { minDelay: number; maxDelay: number; delaySteps: number; maxRetries: number; }; buffer?: { min: number; max: number; target: number; }; timeouts?: { loading: number; buffering: number; connecting: number; }; adaption?: { rule: string; }; } export interface LiveKitProviderConfig { peerConnectionTimeout?: number; iceTransportPolicy?: 'all' | 'relay'; adaptiveStream?: boolean; dynacast?: boolean; disconnectOnPageLeave?: boolean; } //# sourceMappingURL=contract.d.ts.map