import HlsPlayer, { HlsConfig } from 'hls.js'; export { default as Hls, HlsConfig } from 'hls.js'; declare enum SourceEvent { ERROR = "error", READY_FOR_PLAY = "ready_for_play", UNRECOVERABLE_ERROR = "unrecoverable_error", AUTOPLAY_PREVENTED = "autoplay_was_prevented", FALLBACK_TO_HLS = "fallback-to-hls", CONFIG_DISTRIBUTED = "config_distributed" } /** * @enum {string} RtcSourceEvent * @description Enum representing various RTC source events. * @public */ /** @en * Enum representing various RTC source events. */ declare enum RtcSourceEvent { /** 网络质量变化事件 */ /** @en * Event for network quality changes. */ NETWORK_QUALITY = "network_quality", /** 状态变化事件 */ /** @en * Event for state changes. */ STATE_CHANGED = "state_changed", /** 视频状态变化事件 */ /** @en * Event for video state changes. */ VIDEO_STATE_CHANGED = "video_state_changed", /** 音频状态变化事件 */ /** @en * Event for audio state changes. */ AUDIO_STATE_CHANGED = "audio_state_changed", /** 主持人变化事件 */ /** @en * Event for host changes. */ HOST_CHANGED = "host_changed", /** 用户状态变化事件 */ /** @en * Event for user state changes. */ USER_STATE_CHANGED = "user_state_changed", /** 流消息事件 */ /** @en * Event for stream message. */ STREAM_MESSAGE = "stream_message", /** av1 解码失败事件 */ /** @en * Event for av1 decode failed. */ AV1_DECODE_FAILED = "av1_decode_failed" } /** * 媒体源类型 * @public */ /** @en * The type of media */ declare enum MediaSource { HLS = "hls", RTC = "rtc", FILE = "file", /** * @ignore */ FLV = "flv", UNKNOWN = "unknown" } declare enum PlayerKey { SessionStartTime = "session_start_time", SessionId = "session_id", SourceInit = "source_init", SourcePlaySuccess = "source_play_success", SessionUid = "session_user_id" } /** * Store 用于在 Player 和 Source 之间共享数据 * @public */ declare class PlayerStore { private data; private listeners; /** * 设置 store 中的值 * @param key - 键名 * @param value - 值 */ set(key: string, value: T): void; /** * 获取 store 中的值 * @param key - 键名 * @returns 对应的值,如果不存在则返回 undefined */ get(key: string): T | undefined; /** * 获取 store 中的值,如果不存在则返回默认值 * @param key - 键名 * @param defaultValue - 默认值 * @returns 对应的值或默认值 */ getOrDefault(key: string, defaultValue: T): T; /** * 检查 store 中是否存在某个键 * @param key - 键名 * @returns 是否存在 */ has(key: string): boolean; /** * 删除 store 中的值 * @param key - 键名 * @returns 是否删除成功 */ delete(key: string): boolean; /** * 清空 store */ clear(): void; /** * 监听某个键的变化 * @param key - 键名 * @param listener - 监听器函数 * @returns 取消监听的函数 */ watch(key: string, listener: (value: T) => void): () => void; /** * 取消监听某个键的变化 * @param key - 键名 * @param listener - 监听器函数(可选,如果不传则取消该键的所有监听) */ unwatch(key: string, listener?: (value: any) => void): void; /** * 通知监听器 * @param key - 键名 * @param value - 新值 */ private notify; /** * 获取所有键 * @returns 所有键的数组 */ keys(): string[]; /** * 获取所有值 * @returns 所有值的数组 */ values(): any[]; /** * 获取所有键值对 * @returns 所有键值对的数组 */ entries(): [string, any][]; /** * 获取 store 的大小 * @returns store 中键值对的数量 */ get size(): number; } type TModuleName = "HLS"; interface IModuel { name: TModuleName; create: (...args: any[]) => T; } /** * `EventEmitter` 类提供了定义、触发和处理事件的方式。 */ /** @en * The `EventEmitter` class provides a way to define, emit, and handle events. */ declare class EventEmitter { private _events; /** * 指定一个事件名,获取当前所有监听这个事件的回调函数。 * * @param event - 事件名称。 */ /** @en * Gets all the listeners for a specified event. * * @param event The event name. */ getListeners(event: E): Function[]; /** * 监听一个指定的事件,当事件触发时会调用传入的回调函数。 * * @param event - 指定事件的名称。 * @param listener - 传入的回调函数。 */ /** @en * Listens for a specified event. * * When the specified event happens, the SDK triggers the callback that you pass. * @param event The event name. * @param listener The callback to trigger. */ on(event: E, listener: Function): void; /** * 监听一个指定的事件,当事件触发时会调用传入的回调函数。 * * 当监听后事件第一次触发时,该监听和回调函数就会被立刻移除,也就是只监听一次指定事件。 * * @param event - 指定事件的名称。 * @param listener - 传入的回调函数。 */ /** @en * Listens for a specified event once. * * When the specified event happens, the SDK triggers the callback that you pass and then removes the listener. * @param event The event name. * @param listener The callback to trigger. */ once(event: E, listener: Function): void; /** * 取消一个指定事件的监听。 * * @param event - 指定事件的名称。 * @param listener - 监听事件时传入的回调函数。 */ /** @en * Removes the listener for a specified event. * * @param event The event name. * @param listener The callback that corresponds to the event listener. */ off(event: E, listener?: Function): void; /** * 指定一个事件,取消其所有的监听。 * * @param event - 指定事件的名称,如果没有指定事件,则取消所有事件的所有监听。 */ /** @en * Removes all listeners for a specified event. * * @param event The event name. If left empty, all listeners for all events are removed. */ removeAllListeners(event?: E): void; private _indexOfListener; } declare class BaseMediaSource extends EventEmitter { mode: MediaSource; url: string; lastRequestUrl: string; constructor(store: PlayerStore, mode: MediaSource); } declare class HlsMediaSource extends BaseMediaSource { url: string; lastRequestUrl: string; element: HTMLVideoElement; hls?: HlsPlayer; hlsSid: string; private recoverTimes; private isTriggeredReadyForPlay; private cancelRVFId?; private videoQualityObserver?; private statsCollectTimer?; private stats; private tracks; private startTime; private relativeStartTime; private sessionId; private freezeCount; private store; private noAudioCount; private networkRetryCount; private softRetryCount; private softRetryTimer?; private lastBufferHealthSeekTime; private freezeRecoverTimes; private lastFragStats; private useVFC; private simpleFreezeDetector?; private isDestroyed; private hiddenStartTime?; private totalHiddenDuration; private lastHiddenDurationSnapshot; private lastObservationResetTime; private _volume; constructor(url: string, element: HTMLVideoElement, sessionId: string, store: PlayerStore, hlsConfig?: Partial); private startStatsCollectTimer; private reportStats; private tryRecover; /** * 柔和重试:针对临时性、可恢复的网络错误码(408/429/5xx), * 使用指数退避延迟重试 startLoad,避免立即触发域名切换或 destroy。 * 超过最大重试次数后降级到原有逻辑(域名切换)。 * * 注意:400/401/403/404 等客户端错误不走柔和重试,在调用方已拦截。 */ /** * 从 ErrorData 中提取 HTTP 状态码 */ private extractHttpCode; /** * 判断是否为不可重试的客户端错误码(400/401/403/404), * 这类错误只上报,不做任何重试。 */ private isNonRetryableHttpCode; private trySoftRetry; private checkBufferHealth; private startFreezeDetection; private startVideoFrameCallback; private bindElementEvents; private unBindElementEvents; private bindEvents; private unBindEvents; private resetObservationWindow; private getObservationGracePeriod; private getHiddenDuration; private hasLikelyAudioTrack; private canCountFreeze; private canCountNoAudio; private canAutoRecoverObservation; private handleVisibilityChange; play(): Promise; pause(stop?: boolean): Promise; retry(): Promise; switch(url: string): Promise; setVolume(volume: number): void; getVolume(): number; destroy(): Promise; } declare const HlsModule: IModuel; declare function domLoadedPromise(): Promise; export { HlsMediaSource, HlsModule, domLoadedPromise };