import { default as Logger } from '../../tools/log/logger'; import { IRotationInfoTotalItem, XYVideoState, XYLayoutState, ILayout, XYLayoutStateResult, XYMuteState } from '../../type/index'; declare class VideoManager { private logger; private key; private wrapEleId; videoEle: HTMLVideoElement | null; videoState: XYVideoState; private loadState; private streamState; private layoutState; private stream; private streamId; private streamTimerCountDown; private isContent; private isMatch; private cacheLayout; private isNormalPlay; private streamStatusTimer; private videoStateChangeCallBack; private videoPlayErrorCallBack; constructor(logger?: Logger, isContent?: boolean); /** * 获取当前Layout状态 * * @returns { XYLayoutState } - 当前Layout状态 */ getLayoutState(): XYLayoutState; /** * 获取是否匹配 * * @returns { boolean } - 是否匹配 */ getIsMatch(): boolean; /** * 获取当前正在播放的StreamId,异步更新此数据 * * @returns { string } - 当前StreamId */ getStreamId(): string; /** * 获取当前配置的StreamId * * @returns { string } - 当前StreamId */ getCurrentStreamId(): string; /** * 获取当前Video状态 * * @returns { XYVideoState } - 当前Video状态 */ getVideoState(): XYVideoState; /** * 切换是否处理当前数据 * * @param { boolean } is - 真假值 * @returns { boolean } - 结果 */ setIsMatch(is: boolean): boolean; /** * 设置视频是否静音 * * @param { XYMuteState } state - 视频静音状态 */ setMuteState(state: XYMuteState): void; /** * 设置当前Video对应的MediaStream流 * * @param { string } key - 参会者唯一ID,由layout中的id得到 * @param { MediaStream | null } stream - MediaStream or null */ setVideoMediaStream(key: string, stream: MediaStream | null): void; /** * 【副流渲染】绑定Stream数据 * * @param { MediaStream | null } stream - MediaStream or null */ setSlaveVideoStream(stream: MediaStream | null): Promise; /** * 获取MediaStream流上的所有Track数据 * * @returns { MediaStreamTrack[] } - 轨道数据 */ getVideoTracks(): MediaStreamTrack[]; /** * 重新绑定Track Event事件监听,发送最新的视频状态 */ updateLocalTrack(): void; /** * 【副流渲染】计算新容器Video的旋转角度和宽高信息 * * @param { IRotationInfoTotalItem | undefined } rotateInfo - RotationInfo信息 * @param { boolean } isLocal - 是否是Local设备 * @param { boolean | undefined } localMirror - 是否是本地镜像设置 */ setVideoRotationStyle(rotateInfo: IRotationInfoTotalItem | undefined, isLocal: boolean, localMirror: boolean | undefined): void; /** * 绑定视频渲染容器,增加事件监听,并通过Video元素播放最新的MediaStream数据 * * @param { string } viewId 包裹video组件的元素id,此元素一定要提供宽高信息,内部会基于此宽高信息计算video的旋转信息 * @param { boolean } isVideoMute - 是否需要播放视频声音 */ private initVideoSource; /** * 创建Video元素 * * @param { HTMLElement } container - 容器节点信息 * @param { boolean } isVideoMute - 是否需要播放视频声音 * @returns { HTMLVideoElement } */ private createVideoElement; /** * 绑定Video元素的视频流数据,并播放 * * @param { string } streamId - MediaStream Id数据 */ private setSrcObject; /** * 初始化Video元素播放事件 * * @param { HTMLVideoElement } videoEle - video元素 */ private initEventListener; /** * 移除绑定Video事件 * * @param { HTMLVideoElement } videoEle - Video元素 */ private removeEventListener; /** * 绑定Track事件 * * @param { MediaStream | null } stream - 流数据 */ private initStreamTrackEventListener; /** * 移除绑定Track事件 */ private removeStreamTrackEventListener; /** * Video元素是否绑定Stream数据 * * @returns { boolean } */ private isHaveSrcObject; /** * * 设置用户信息和渲染画面的视图信息,创建Video元素用于渲染画面 * * @param { string } id - 用户唯一ID,通过layout事件获取 * @param { string } wrapEleId - 渲染画面的视图容器ID * @param { boolean } isVideoMute - 是否需要播放视频声音,默认是true,代表mute video元素 */ setSource(id: string, wrapEleId: string, isVideoMute?: boolean): void; /** * 【副流渲染】设置用户信息和渲染画面的视图信息,创建Video元素用于渲染画面 * * @param { string } id - 用户唯一ID,通过layout事件获取 * @param { string } viewId - 渲染画面的视图容器ID * @param { boolean } isVideoMute - 是否需要播放视频声音 */ setSlaveSource(id: string, viewId: string, isVideoMute?: boolean): void; /** * 销毁当前实例数据 */ destroy(): void; /** * 设置Video状态变更回调函数 * * @param { function } cb - 事件回调函数 */ setVideoStatusChange(cb: (key: string) => void): void; /** * 设置Video播放失败回调函数 * * @param { function } cb - 事件回调函数 */ setVideoPlayError(cb: (key: string, data: T) => void): void; /** * MediaStreamTrack结束事件 */ private onEnded; /** * MediaStreamTrack无流事件 * mute到unmute的变换可能会很迅速,所以3s以内的变换可以使用freeze替代 */ private onMute; /** * MediaStreamTrack有流事件 */ private onUnmute; /** * video元素加载流事件 */ private onWaiting; /** * video元素可以播放事件 */ private onCanPlay; /** * 清理定时器 */ private clearTrackStatusTimer; /** * 发送Video状态变更事件 */ private sendVideoStatus; /** * 合并计算最新的Layout显示状态 * * @param { ILayout } layout - 当前Layout Item数据 * @returns { XYLayoutState } - 最新的Layout状态 */ calculateLayoutState(layout?: ILayout): XYLayoutStateResult; /** * 推送VM事件消息 * * @param { string } key - 事件Key */ private emit; } export default VideoManager;