import { CaptureStatus, DEVICE_KIND, FacingMode, IFacingMode, IStreamChangeType, IStreamConfig, OperateType, StreamKind, SwitchDeviceConfig, TrackLibType, AnalyserNode, PeopleTrackConfig, IReturnResult, XYVideoAudioTrackIF } from '../../type/index'; import { default as Stream } from '../stream'; import { default as BaseTrack } from './baseTrack'; import { default as Peer } from '../peer/index'; import { default as DeviceManager } from '../device/index'; import { XYProcessorIF } from '../../interface/processor.type'; declare class VideoAudioTrack extends BaseTrack implements XYVideoAudioTrackIF { deviceManager: DeviceManager; private audioMediaStream; private analyserNode; private facingMode; private trackType; private processorMap; private processorCountMap; private retryPublishStream; private captureStream; private meetingState; private baseTrackConfig; private currentVideoTracks; private currentAudioTracks; constructor(streamInstance: Stream); getLocalStream(): IStreamConfig[]; getTrackType(): TrackLibType; getStreamInstance(): Stream; /** * 获取摄像头方向 * * @returns { FacingMode } - 摄像头方向 */ getFacingMode(): FacingMode; /** * Get device manager */ getDeviceManager(): DeviceManager; /** * 获取音量Analyser分析器 * * @returns { AnalyserNode } - 分析器实例 */ getLocalAudioAnalyser(): AnalyserNode | null; getEnableCapture(): import('../../type/index').IEnabledCapture; /** * 采集麦克风和摄像头流,支持分别采集 * 调用此方法后,SDK开始执行采集麦克风和摄像头流操作,采集完成后,即可推送到远端; * 使用场景:多人会议分享摄像头麦克风流、设置-设备管理、会前画面预览等功能可调用此接口; * 调用时机:createVideoAudioTrack()完成之后 * 相关事件:permission、device、track-error * 注意事项:此函数是Promise函数,请同步等待执行完成后再继续后续的步骤;执行过程中,会进行麦克风和摄像头授权操作,请同意浏览器授权行为,否则会导致采集视频和音频流失败; * * @since 4.0.0 * @property { PeopleTrackConfig } config - 创建自定义Track配置参数 * @returns { Promise } - 返回采集结果 */ capture(config?: PeopleTrackConfig): Promise; /** * Created base media stream wrapper */ createStreamWrap(): Promise; /** * AI插件-连接插件处理器 * 将插件处理器注入到视频流轨道中,执行视频流的定制处理,并返回处理过后的视频流; * 使用场景:多人音视频通话时,需要针对视频流做定制处理,例如接入虚拟背景、美颜、水印等功能,可通过注入插件机制处理视频流 * 调用时机:createVideoAudioTrack()完成之后 * 关联内容:N/A * * @param { XYProcessorIF } processor - plugin processor * @returns { VideoAudioTrack } - current instance, support chain invoke */ connect(processor: XYProcessorIF): this; /** * AI插件-连接最终视频插件处理器 * 将插件处理器注入到视频流轨道中,执行视频流的定制处理,并返回处理过后的视频流; * 使用场景:多人音视频通话时,需要针对视频流做定制处理,例如接入虚拟背景、美颜、水印等功能,可通过注入插件机制处理视频流 * 调用时机:createVideoAudioTrack()完成之后 * 关联内容:N/A * * @since 4.0.4 * @param { Function } processor - 视频处理器 * @returns { VideoAudioTrack } - current instance, support chain invoke */ connectToVideo(processor: Function): this; /** * AI插件-连接最终音频插件处理器 * 将音频处理器注入到音频流轨道中,执行音频流的定制处理,并返回处理过后的音频流; * 使用场景:多人音视频通话时,需要针对音频流做定制处理,例如接入语音识别、语音合成等功能,可通过注入插件机制处理音频流 * 调用时机:createVideoAudioTrack()完成之后 * 关联内容:N/A * * @since 4.0.4 * @param { Function } processor - 音频处理器 * @returns { VideoAudioTrack } - current instance, support chain invoke */ connectToAudio(processor: Function): this; /** * 获取处理器队列头部任务 * * @returns */ private popProcessor; /** * 判断处理器队列是否是最后一个 * * @returns { boolean } - true or false */ private isProcessorEnd; /** * 设置处理器列表 * * @param { PluginType } processorType - 插件类型 * @param { Function } processor - 处理器 */ private setProcessorList; /** * 设置处理器数量 * * @param { PluginType } pluginType - 插件类型 */ private setProcessorCount; /** * 执行处理器队列任务 * * @param { PluginProcessor } processTrack - 插件处理器 */ private executeProcessor; /** * 获取Local音频PCM处理器 * * @returns { XYAudioPCMProcessor } - audio pcm processor */ private getAudioPCMProcessor; /** * 初始化音频处理器 */ initAudioTrackProcessor(): void; /** * AI插件-摄像头和麦克风轨道处理器链路的最终节点 * * @param { T } processTrack - transform track * @returns { Promise } - return track */ processorDestination(processTrack: T): Promise; /** * 采集最大分辨率视频流或音频流 * * @returns { Promise } */ createUserMediaStream(): Promise; /** * 处理视频流或音频流 * @param { MediaStreamTrack[] | null } tracks - 视频流或音频流 * @param { PluginType } type - 视频流或音频流类型 * @returns { Promise } - 处理后的视频流或音频流 */ private processTracks; /** * 合并视频流或音频流 * * @param { MediaStreamTrack[] | null } videoTracks - 视频流 * @param { MediaStreamTrack[] | null } audioTracks - 音频流 * @returns { MediaStream } - 合并后的视频流或音频流 */ private mergeAndPublishTracks; /** * 获取本地音频StreamConfig配置 * * @returns { IStreamConfig } - 音频StreamConfig */ getAudioStreamConfig(): IStreamConfig | undefined; /** * 媒体网关发给WEB JS的视频流的分辨率、带宽信息、帧率 * WEB收到消息后推送相应视频流/调整带宽 * * @param { IStreamChangeType } body StreamChange消息内容 * @param { Peer } peer Peer模块 */ handleChangeStream(body: IStreamChangeType, peer: Peer): Promise; /** * 切换麦克风/摄像头/扬声器设备 * ​会议中切换设备使用,切换规则如下: * 指定deviceId设备,则会切换至手动指定模式,在指定设备未移除前,无法系统设备是否变动,都强制使用此设备,如果指定设备被移除,则自动切换至系统默认的设备,当设备再次接入后,自动切换至指定的设备上; * 指定config是isDefault设备,则无论是否配置deviceId设备,都自动切换至系统默认模式,当系统有新的设备接入时,会自动切换到最新的设备上,当设备被移除时,自动切换至其他系统默认设备上; * 摄像头设备特殊处理,不存在默认设备选项,如果需要切换至默认设备,则需要指定deviceId为空值即可; * 需要注意一下事项: * 切换扬声器时,如果指定的deviceId不存在,则系统默认切换至系统扬声器设备; * 指定错误的摄像头deviceId设备,会导致采集摄像头画面异常,转为无流入会; * 使用场景:会中切换设备时调用 * 相关内容:​​基础功能-设备管理 * * @since 4.0.0 * @param { DEVICE_KIND } type - 设备类型,可选:麦克风、摄像头、扬声器设备 * @param { string } deviceId - 设备ID,如果是默认设备,则配置为空值 * @param { SwitchDeviceConfig } config - 配置是否是系统默认设备:isDefault * @returns { Promise } */ switchDevice(type: DEVICE_KIND, deviceId: string, config?: SwitchDeviceConfig): Promise; /** * 切换麦克风设备 * * @param { string } deviceId - 设备Id,如果是系统默认设备,配置此参数为空,通过config参数指定isDefault即可 * @param { SwitchDeviceConfig } config - 切换设备配置,例如是否是默认设备,通过isDefault指定 */ private switchAudioInputDevice; /** * 切换摄像头设备 * * @param { string } deviceId - 设备Id * @param { SwitchDeviceConfig } config - 切换设备配置 */ private switchVideoInputDevice; /** * 切换扬声器设备 * * @param { string } deviceId - 设备Id,如果是系统默认设备,配置此参数为空,通过config参数指定isDefault即可 * @param { SwitchDeviceConfig } config - 切换设备配置,例如是否是默认设备,通过isDefault指定 */ private switchAudioOutputDevice; /** * 麦克风/摄像头开启/关闭操作 * * @param { OperateType } type - 操作类型 */ videoAudioProcess(type: OperateType): Promise; /** * 处理关闭摄像头 */ private muteVideoProcess; /** * 清理基础的采集视频流 */ private closeBaseMediaStream; /** * 处理关闭麦克风 */ private muteAudioProcess; /** * 处理开启摄像头 */ private unmuteVideoProcess; /** * 处理开启麦克风 */ private unmuteAudioProcess; /** * 针对自定义流对应的Track进行启用/停止操作 * * @param { OperateType } type - 操作类型 * @param { boolean? } stopAudioTrack - 是否需要停止audioTrack */ private setStreamStatus; /** * 启用/停止MediaStreamTrack * * @param { MediaStream } stream - MediaStream流 * @param { OperateType } type - 操作类型 * @param { boolean } stopAudioTrack - 是否强制停止audioTrack */ setStreamTracksStatus(stream: MediaStream, type: OperateType, stopAudioTrack?: boolean): void; /** * 获取对应类型的StreamConfig * * @param { StreamKind } streamKind - stream类型 * @returns { IStreamConfig } - 对应类型的StreamConfig */ getNormalStreamConfig(streamKind: StreamKind): IStreamConfig | undefined; /** * 切换前后置摄像头 * 移动端浏览器下,使用WebSDK入会,可以通过此方法切换前/后置摄像头 * 使用场景:移动端浏览器切换摄像头 * 相关内容:​​设备管理 * * @since 4.0.0 * @param { IFacingMode } position 可选,相机方向 * @returns { Promise } 最终切换的相机方向 */ switchCamera(facingMode?: IFacingMode): Promise; /** * 通过采集得到的Stream缓存AudioStream,用于音量计算 */ private bindAudioMediaStream; /** * 获取本地麦克风实时音量大小,范围:0-100 * 使用场景:本地麦克风实时音量展示或者实现震动效果 * 调用时机:加入会议之后 * * @since 4.0.0 */ getAudioLevel(): Promise; /** * Clear audio level */ private clearAudioLevel; /** * 恢复音频PCM处理器 */ enableAudioPCMProcessor(enable?: boolean): void; /** * 清除音频PCM处理器 */ disableAudioPCMProcessor(): void; /** * 销毁音频PCM处理器 */ clearAudioPCMProcessor(): void; /** * 切换低性能模式,重新采集&发送People和Content的能力 */ processLowPerformance(): Promise; /** * 根据MediaConfig动态调整StreamConfig能力 */ private processStreamsLowPerformance; /** * 流畅模式切换,重新采集 * * TODO:此方案暂时存在问题,重新采集后,媒体网关未通知远端设备Web得发送能力变动,导致未重新请流,可能会出现远端画面Freeze问题 * 需要后续通过自驱需求修复此问题,Web会议暂时隐藏动态切换地性能模式 */ private processPeopleLowPerformance; /** * 更新设备授权状态 * * @param { CaptureStatus } video - 视频采集配置 * @param { CaptureStatus } audio - 音频采集配置 */ updateDevicePermission(video: CaptureStatus, audio: CaptureStatus): void; /** * 通过采集到的stream更新对应的设备信息 */ updateDeviceIdByStream(mediaStream: MediaStream | null): Promise; /** * 初始化DeviceManager事件 * * @private */ private initDeviceManagerEvent; /** * 将初始化的设备信息同步给DM模块,并做缓存 */ private setSpecifiedDeviceId; /** * 销毁当前Track资源 * 默认情况下,不需要单独执行此方法销毁资源,在 XYRTCClient 模块销毁时自动会销毁此模块 */ close(): void; } export default VideoAudioTrack;