import { ContentTrackConfig, IReturnResult, IStreamChangeType, ShareContentStatus, TrackLibType, XYContentTrackIF, IVideoProcessTrack, XYDesktopCapturerOptions, XYDesktopCapturerSource, XYCacheStreamSetting } from '../../type/index'; import { default as Stream } from '../stream'; import { default as BaseTrack } from './baseTrack'; import { default as Peer } from '../peer/index'; import { XYProcessorIF } from '../../interface/processor.type'; declare class ContentTrack extends BaseTrack implements XYContentTrackIF { private trackType; private baseTrackConfig; private shareContentTimer; shareContentStatus: ShareContentStatus; private processorList; private mediaStream; private processorMediaStream; private processorCount; private electronSources; private contentCapture; private cacheStreamTrackSetting; constructor(streamInstance: Stream); getTrackType(): TrackLibType; getBaseTrackConfig(): ContentTrackConfig; getCacheStreamTrackSetting(): XYCacheStreamSetting | null; /** * 是否正在共享Content内容 */ get isSharingContent(): boolean; /** * 是否暂停共享 */ get isShareContentPaused(): boolean; /** * 初始化Content内部处理器 */ private initContentInternalProcessor; /** * 采集屏幕/应用/网页标签视频流、支持在共享过程中,采集新的视频流 * 调用此方法后,SDK开始执行采集桌面屏幕/应用/网页标签流,采集完成后,即可推送到远端; * v4.0.0+版本开始,支持非常丰富的共享配置,例如:displaySurface、preferCurrentTab、controller等; * v4.0.0+版本开始,支持本地分享过程中,调用此方法切换新的分享源; * 使用场景:多人音视频通话时,需要分享共享内容时调用 * 调用时机:createContentTrack()完成之后 * 相关内容:​​基础功能-内容共享 * 注意事项:此方法是Promise函数,需异步同步执行;执行过程中,可能需要授权屏幕采集权限,请在系统设置中完成授权; * * @since v4.0.0 * @param { ContentTrackConfig } config - 分享内容配置 * @property { boolean } config.screenAudio - 可选,是否开启共享屏幕声音,默认是true,共享声音,设置为false代表不共享声音 * @property { XYDisplaySurface } config.displaySurface - 可选,分享内容的类型,选择:browser(浏览器标签)、monitor(屏幕)、window(应用),默认是monitor屏幕 * @property { boolean } config.preferCurrentTab - 可选,是否强制仅共享当前应用选项卡源,默认是false,不强制 * @property { XYDisplaySwitch } config.monitorTypeSurfaces - 可选,共享屏幕时,选择是否排除“屏幕”源,默认是include,不排除,设置为exclude代表排除屏幕选项 * @property { XYDisplaySwitch } config.selfBrowserSurface - 可选,共享屏幕时,选择是否排除当前应用选项卡,默认是include,不排除,设置为exclude代表排除当前应用选项卡 * @property { XYDisplaySwitch } config.surfaceSwitching - 可选,共享屏幕时,选择是否允许浏览器标签之间提供控制器进行动态切换,默认是include,允许切换,设置为exclude代表不允许切换 * @property { CaptureController } config.controller - 可选,共享屏幕时,指定CaptureController对象实例,可用于进一步操作捕获会话的行为,例如动态设置聚焦窗口行为 * @property { XYCaptureHandleConfig } config.handleConfig - 可选,共享屏幕时,设置共享屏幕处理器配置 * @property { string } config.electronSourceId - 可选,Electron应用下共享屏幕时,指定采集源ID,默认是null,不指定,表现为随机分配一个屏幕进行分享 * @property { XYDegradationPreference } config.preference - 可选,共享屏幕时,设置共享屏幕的编码优先级,支持:maintain-framerate、maintain-resolution、balanced,默认是maintain-resolution,代表优先保持分辨率;maintain-framerate代表优先保持帧率,balanced代表平衡模式,优先保持分辨率,当帧率过低时,会降低分辨率; * @property { StreamFrameRate } config.maxFrameRate - 可选,共享屏幕时,设置共享屏幕的最大帧率,默认是FR30,代表30帧,切换分享源时,沿用首次分享的配置,支持30/15/8帧率 */ capture(config?: ContentTrackConfig): Promise; /** * 分享中切换新内容 * * @returns { Promise } - 返回采集到的Stream流 */ private reselectStartCapture; /** * 更新Content音频轨道采集状态 * 使用场景:当视频共享切换时,检测是否需要采集音频,根据采集状态,更新音频轨道状态 */ private updateContentAudioTrackEnable; /** * 开始首次分享,采集共享画面 * * @returns { Promise } - 返回采集到的Stream流 */ private startCapture; /** * 更新缓存流设置 * @param { MediaStream } mediaStream - 基础Content流 */ private updateCacheStreamTrackSetting; /** * 处理基础Content流 * * @param { MediaStream } mediaStream - 基础Content流 * @returns { Promise } - 处理后的Content流 */ private handleBaseContentStreamByProcessor; /** * 采集配置变动后,更新Content的分享模式 */ private updateContentMode; /** * 暂停分享 * * @since v4.0.0 */ pause(): Promise; /** * 暂停分享 * * @since v4.0.0 */ resume(): Promise; /** * 创建下一个Content流 * * @param { IVideoProcessTrack } processTrack - 处理后的轨道 * @returns { MediaStream } - 下一个Content流 */ private createNextContentStream; /** * 获取Electron采集源列表信息,业务上可以基于此数据让用户选择采集源 * 使用场景:Electron环境下,获取Electron采集源列表 * 调用时机:createContentTrack()完成之后 * 关联内容:https://openapi.xylink.com/common/meeting/doc/electron_guide?platform=web#h4kgw8yp6-9s42qu6j0yc0 * * @since 4.0.5 * @param { options } options - 屏幕源配置项 * @returns { Promise } - 采集源列表数据 */ getElectronContentSources(options?: XYDesktopCapturerOptions): Promise; /** * 检查Electron屏幕采集权限 * * @param { any } desktopCapturer - 采集器,支持通过Electron preload定义的desktopCapturer或者是Electron自带的desktopCapturer * @returns { Promise } - 返回采集源列表数据 */ private checkElectronScreenAccess; /** * 更新&合并Electron采集源 * 合并规则: * 1. 当存在相同ID时,更新该源的数据内容(缩略图、名称等) * 2. 当不存在相同ID时,根据源类型添加到不同位置: * - screen类型: 添加到所有screen源的末尾 * - window类型: 添加到整个列表的末尾 * 3. 最后对比currentSources和sources,如果currentSources中存在sources中没有的源,则删除该源 * * @param { XYDesktopCapturerSource[] } sources - 采集源列表 */ private updateElectronSources; /** * 监听ContentStream终止事件 */ private handleCloseContentEvent; /** * 监听Content Stream Track结束事件 * * @param { (MediaStreamTrack | undefined)[] } enableTracks - video track list */ private onListenerStreamEnded; /** * 申请发送Content内容,并开始检测Content分享状态 */ private startShareContentAndDetectTimeout; /** * 上报当前分享Content的进度状态 */ emitStartShareContent(): void; /** * 上报停止分享Content的进度状态 * * @param { object } msg - 消息 */ emitStopShareContent(msg: object): void; /** * 停止分享content */ stopShareContent(): void; /** * 结束共享内容,释放资源 */ close(): void; /** * 清理分享Content检测状态的倒计时器 */ clearShareContentTimer: () => void; /** * 媒体网关发给WEB JS的视频流的分辨率、带宽信息、帧率 * WEB收到消息后推送相应视频流/调整带宽 * * @param { IStreamChangeType } body StreamChange消息内容 * @param { Peer } peer Peer模块 */ handleChangeStream(body: IStreamChangeType, peer: Peer): Promise; /** * AI插件-连接插件处理器 * 将插件处理器注入到视频流轨道中,执行视频流的定制处理; * 使用场景:多人音视频通话时,需要针对视频流做定制处理,例如接入虚拟背景、美颜、水印、Content快照等功能,可通过注入插件机制处理视频流 * 调用时机:createContentTrack()完成之后 * 关联内容:N/A * * @since 4.0.4 * @param { XYProcessorIF } processor - 处理器模块,由各个插件实现(例如:ContentSnapshotPlugin、VirtualBackgroundPlugin) * @returns { VideoAudioTrack } - 当前实力,支持链式调用,可链接多个流插件处理器 */ connect(processor: XYProcessorIF): this; /** * AI插件-连接最终视频插件处理器 * 将插件处理器注入到视频流轨道中,执行视频流的定制处理,并返回处理过后的视频流; * 使用场景:多人音视频通话时,需要针对视频流做定制处理,例如接入虚拟背景、美颜、水印等功能,可通过注入插件机制处理视频流 * 调用时机:createContentTrack()完成之后 * 关联内容:N/A * * @since 4.0.4 * @param { Function } processor - 视频处理器 * @returns { VideoAudioTrack } - current instance, support chain invoke */ connectToVideo(processor: Function): this; /** * 执行处理器队列任务 * * @param { PluginProcessor } processTrack - 插件处理器 */ private executeProcessor; /** * 获取处理器队列头部任务 * * @returns */ private popProcessor; /** * 判断处理器队列是否是最后一个 * * @returns { boolean } - true or false */ private isProcessorEnd; /** * AI插件-视频流轨道处理器链路的最终节点 * * @since 4.0.4 * @param { IVideoProcessTrack } processTrack - transform track * @returns { IVideoProcessTrack } - return IVideoProcessTrack */ processorDestination(processTrack: IVideoProcessTrack): Promise; /** * 清理基础的采集视频流 */ private closeBaseMediaStream; /** * 切换Content音频流是否开启 * * @param { boolean } enable - 是否开启 */ private switchContentAudioTrackEnable; } export default ContentTrack;