import { IClientConfig, ICall, IMakeCall, IInvite, IRoster, ILoginExtAccount, IVideoAudioType, IMode, IReqInfo, TCommand, ContentMode, Key, IRecordPermission, TLocalLanguage, IFeatureConfig, IConfMgmtUrl, IVideoControlResult, ICustomMessageConfig, OperateType, PushType, LayoutMode, ILoginWidthAuthCode, LoginXYAccountParams, LoginExtTokenParams, IReturnResult, InviteInfo, LayoutOrientationType, AnalyserConfig, IFeatureConfigValue, IFeatureConfigKey, MEETING_DIRECTION, LocalViewParams, AbilityResult, IExportUserInfo, IVideoProfile, ReconnectEntry, LoginTokenInfo, LayoutConfig, IStateParams, IScreenInfo, IInternals, XYClientIF, IGetConferenceParams, XYCheckNumberParams, LoginThirdAuthTokenParams, LoginVerifyCodeParams, XYWebRxAudioStatus, ClientInfoConfig } from '../../type/index'; import { SnapshotParams, XYDevicePressure } from '@xylink/xy-toolkit'; import { default as Peer } from '../peer/index'; import { default as Stream } from '../stream'; import { default as Logger } from '../../tools/log/logger'; import { default as LayoutManager } from '../layout'; import { default as Meeting } from '../meeting'; import { default as VideoAudioTrack } from '../track/videoAudioTrack'; import { default as ContentTrack } from '../track/contentTrack'; import { default as Action } from '../../action/index'; import { default as Auth } from '../auth/index'; import { XYRTCClientBase } from './clientBase'; import { XYRTCClientState } from './clientState'; import { VOM } from '../vom'; import { XYPlugin } from '../plugin'; import { XYMeetingControl } from '../meeting/control'; import { XYRender } from '../render'; import { XYClientSocket } from '../socket'; import { SocketManager } from '../../tools/socket/socketManager'; import { XYMediaManager } from '../media'; import { XYSignal } from '../signal'; import { default as ServerManager } from '../server'; import { XYServerInfo } from '../server/index.type'; import { XYEDU } from '../../feature/edu'; import { XYElectron } from '../../feature/index'; import { default as RosterManager } from '../roster'; import { XYIMClient } from '../../feature/im'; import { XYMemberDepartment } from '../../feature/query/index.type'; import { CheckCaptchaImageParams, LoginOtherParams, XYResetPasswordParams } from '../auth/index.type'; import { XY_WHITEBOARD_DATA } from '../../feature/artboard/index.type'; import { XYVepManager } from '../../feature/vep'; import { XYReconnectionManager } from '../signal/reconnection'; export default class XYRTCClient extends XYRTCClientBase implements XYClientIF { logger: Logger; private action; private layoutManager; private rosterManager; private serverManager; private imClient; private auth; private stream; protected stateManager: XYRTCClientState; private meeting; private verify; invite: IInvite; private peer; private callInfo; private contentMode; private isSubscribeBulkRoster; private qualityReport; private featureConfig; private operateQueue; private audioStatus; private videoStatus; private ability; private makeCallParams; private resize; private reconnectEntry; protected vom: VOM; protected plugin: XYPlugin | null; protected render: XYRender; protected meetingControl: XYMeetingControl; protected clientSocket: XYClientSocket; protected mediaManager: XYMediaManager; protected edu: XYEDU; protected signal: XYSignal; protected devicePressure?: XYDevicePressure; private queryService; private artboard; private vepManager?; private translationManager; private socketManager; private reconnectionManager; private electron; private onDocumentChange; constructor(config: IClientConfig, logger: Logger); static instance: XYRTCClient; static getClientInstance(config: IClientConfig, logger: Logger): XYRTCClient; getLoginInfo(): import('../../type/index').ILoginInfo; getFeatureConfig(): IFeatureConfig; getCallInfo(): ICall; getClientConfig(): IClientConfig; getVideoManagerMap(): import('../../type/index').XYVideoRendererMap; getAudioManagerMap(): import('../../type/index').XYAudioRendererMap; getPreviewStreams(): import('../../type/index').IGetMediaStreams; getAudioStreamConfig(): import('../../type/index').IStreamConfig | undefined; getStreamInstance(): Stream; getInviteInfo(): IInvite; getLocalHide(): boolean | undefined; getAudioStatus(): OperateType; getVideoStatus(): OperateType; getMakeCallParams(): IMakeCall; getLayoutManager(): LayoutManager; getRosterManager(): RosterManager; getAnalyserManager(): import('../..').AnalyserManager; getUserInfo(): IExportUserInfo | null; getVOM(): VOM; getErrorCode(): import('../../type/index').ICodeList; getI18nCode(): import('../../type/index').ICodeList; getAuthManager(): Auth; getAction(): Action; getRender(): XYRender; getServerManager(): ServerManager; getClientSocket(): XYClientSocket; getSocketManager(): SocketManager; getMediaManager(): XYMediaManager; getMeeting(): Meeting; getPeer(): Peer | null; getState(): XYRTCClientState; getIsAutoLayoutMode(): boolean; getMeetingControl(): XYMeetingControl; getImClient(): XYIMClient | null; getVepManager(): XYVepManager | undefined; getElectron(): XYElectron | null; /** * 获取服务器地址 * * @returns { XYServerUrlInfo } - 服务器地址配置 */ getServerAddress(): import('../../type/index').XYServerUrlInfo; /** * 获取缓存的媒体网关下发speakers消息内容 * * @returns { SpeakersInfoObj[] } - speakers消息内容 */ getRemoteSpeakerList(): import('../../type/index').SpeakersInfoItem[]; /** * 获取缓存的媒体网关下发speakers消息内容 * * @returns { SpeakersInfoObj[] } - speakers消息内容 */ getRemoteSpeakerMap(): { [key: string]: import('../../type/index').SpeakersInfoItem; }; getLayoutMap(): Map; /** * 获取本地的参会者数据,包含用户基本信息、会议状态信息 * * @returns { IRoster} - 本地参会者信息 */ getSelfRoster(): IRoster; /** * 获取本地是否在分享content * * @returns { boolean } */ getLocalShareContent(): boolean | undefined; /** * 获取摄像头方向 * * @returns { FacingMode } - 摄像头方向 */ getFacingMode(): import('../../type/index').FacingMode | undefined; /** * 获取ws重连次数 */ getWsReConnectCount(): number; /** * 获取Layout头像配置类型 */ getLayoutAvatarType(): import('../../type/index').LayoutAvatarType; /** * 企业媒体相关配置信息 * * @returns { IMediaConfig } */ getEnterpriseMediaConfig(): import('../../type/index').IMediaConfig; /** * 会控消息 */ getMeetingControlInfo(): import('../../type/index').IMeetingControl | null; /** * 重呼管理模块 * * @returns { XYReconnectionManager } */ getReconnectionManager(): XYReconnectionManager; /** * 获取Electron桌面采集器 * * @since 4.0.5 * @returns { DesktopCapturer | null } - Electron桌面采集器 */ getDesktopCapturer(): any; /** * 设置Client相关信息 * * @since 4.0.2 * @param { ClientInfoConfig } info - Client相关信息 */ setClientInfo(info: ClientInfoConfig): void; /** * 设置呼叫的会议室信息 * * @param { ICall } callInfo - 呼叫的会议信息 */ setCallInfo(callInfo: ICall): void; /** * 获取所有已注册的插件 */ getPlugin(): any[]; /** * 设置服务器地址 * 使用场景:会前/会中设置服务器地址、混合云内外网呼叫动态设置服务器地址 * 注意事项:默认情况下,需要配置WebRTC网关的主服务器域名或者地址 * 使用限制:需要使用SSL协议,不支持Http协议调用 * * @since 4.0.0 * @param { XYServerInfo } serverInfo - 服务器地址配置,格式:IP/域名 + 端口(可选),如: cloudapi.xylink.com:443 * @property { string } httpServer - 可选,rest服务器地址 * @property { string } wssServer - 可选,websocket服务器地址 * @property { string } logServer - 可选,日志服务器地址 */ setServerAddress(serverInfo: XYServerInfo): Promise; /** * 创建摄像头和麦克风轨道实例 * 使用场景:1、多人音视频通话,执行创建麦克风和摄像头流,管控设备操作;2、接入AI视频流插件时使用;3、实现会前设置、会前画面预览时可单独多次创建此实例 * 调用时机:makeCall发起呼叫成功后调用 * 相关内容:VideoAudioTrack类;使用capture方法采集视频流 * @since 4.0.0 */ createVideoAudioTrack(): Promise; /** * 创建共享内容轨道实例 * 使用场景:会议中需要共享内容时,调用此方法创建轨道实例,通过此实例监听共享开始、停止状态和采集流异常信息,停止共享后,再次共享,可继续调用此方法创建实例; * 调用时机:共享内容时 * 相关内容:​​内容共享 * * @since 4.0.0 */ createContentTrack(): Promise; /** * 获取视频的流数据 * 使用场景:获取指定参会者的音频流MediaStream数据,进行自定义操作,当接收到新的layout事件后,需要及时同步更新对应参会者的流数据; * 调用时机:入会成功后 * 相关事件:layout * 注意事项:需要根据layout事件同步更新人员视频流数据 * * @since 4.0.0 * @param { string } rosterId - 用户id,通过layout事件列表获取,没有则获取自己的视频流 * @return { MediaStream || null } - 获取到的Stream */ getVideoStream(rosterId?: string): MediaStream | null; /** * 获取音频的流数据 * 使用场景:获取指定参会者的音频流MediaStream数据,进行自定义操作; * 调用时机:接收到​​speakers-info​​实时讲话人事件通知时获取,针对相同参会者可能在不同时刻会分配不同的MediaStream流,请注意需要同步基于事件更新对应的视频流数据; * 相关事件:​​speakers-info​​ * 注意事项:需要及时根据事件更新人员视频流数据 * * @since 4.0.0 * @param { string } rosterId - 用户id,通过layout事件列表获取,没有则获取自己的音频流 * @return { MediaStream || null } - 获取到的Stream */ getAudioStream(rosterId?: string): MediaStream | null; /** * 获取音频分析器,用于获取音频的音量大小 * 获取到分析器后,可以调用 getAudioLevel() 方法获取实时音量大小 * 使用场景:获取远端或本地音频音量大小 * 调用时机:会中接收到 ​​speakers-info​​ 实时讲话人事件通知时开始获取; * 注意事项:当参会者mute或者退会时,请及时调用 ​​destroy​​ 方法清理当前分析器资源 * * @since 4.0.0 * @param { string } id - 参会者Layout Id * @param { AnalyserConfig } config - Analyser分析器构造器配置 * @return { AudioAnalyser || null } - Analyser分析器 */ getAudioAnalyser(id?: string, config?: AnalyserConfig): IReturnResult | import('../..').AudioAnalyser | null; /** * 销毁音频分析器,释放资源 * 调用时机:业务组件销毁或者讲话人麦克风静音时 * * @since 4.0.0 * @param { string } id - 参会者Layout Id,通过layout或roster相关事件列表获取 */ removeAudioAnalyser(id?: string): void | IReturnResult; /** * 注册Web AI插件 * * @param { Array } plugins - 插件列表 */ registerPlugins(plugins: any[]): IReturnResult | Promise; /** * 自动布局-设置移动端布局方向 * 使用场景:移动端浏览器加入会议,控制屏幕横竖屏展示方式 * 调用时机:加入会议成功后,通过获取屏幕方向设置显示布局方向 * 关联内容:​​拉流和布局​​ * 使用限制:移动端浏览器入会 * 注意事项:业务层需要自行抉择判断屏幕方向,业务可灵活动态设置 * * @param { LayoutOrientationType } orientation - 布局方向: MOBILE_HORIZONTAL(横屏);MOBILE_VERTICAL(竖屏) * @returns { Promise } */ setLayoutOrientation(orientation: LayoutOrientationType): Promise; /** * 小鱼易连账号登录 * 调用时机:初始化SDK后,登录时调用 * * @deprecated 已废弃 但不影响历史调用,建议使用新登录方式:loginXYAccount * @param { string } userName - 必填,小鱼用户账号 * @param { string } password - 必填,小鱼用户账号密码 * @param { LoginOtherParams } params - 可选,其余配置参数 * @returns { Promise } - 登录结果 */ loginXYlinkAccount(userName: string, password: string, params?: LoginOtherParams): Promise; /** * 三方账号登录/授权码登录 * 调用时机:初始化SDK后,登录时调用 * * @param { ILoginExtAccount } params - 参数 * @property { string } params.displayName - 必填,用户名称 * @property { string } params.extId - 必填,企业ID * @property { string } params.extUserId - 可选,三方用户ID * @property { string } params.authCode - 可选,授权码 v3.8.2新增 * @property { string } params.tempUser - 可选,是否是临时账号 v3.8.2新增 * @return { Promise } - 登录结果 */ loginExternalAccount(params: ILoginExtAccount): Promise; /** * 三方账号统一认证登录 - 小鱼账号登录 * 调用时机:初始化SDK后,登录时调用 * * @param { LoginXYAccountParams } params 参数 * @property { string } params.account - 必填,用户账号 * @property { string } params.password - 必填,用户密码 * @property { string } params.extId - 必填,企业ID * @property { string } params.countryCode - 可选,国家码:默认+86 * @return { Promise } 登录结果 */ loginXYAccount(params: LoginXYAccountParams): Promise; /** * 三方账号统一认证登录 - Token登录 * 调用时机:初始化SDK后,登录时调用 * * @param { LoginExtTokenParams } params - 参数 * @property { string } params.authCode - 必填,登录码 * @property { string? } params.extId - 必填,企业ID * @return { Promise } - 登录结果 */ loginExtToken(params: LoginExtTokenParams): Promise; /** * 三方账号统一认证登录-授权码登录 * 调用时机:初始化SDK后,登录时调用 * * @param { ILoginWidthAuthCode } params 参数 * @property { string } params.extId - 必填,企业id * @property { string } params.extUserId - 必填,用户id * @property { string } params.displayName - 必填,用户名称 * @property { string } params.oauthCode - 必填,授权码 * @property { string } params.channelId - 必填,渠道id * @property { boolean } params.isTempUser - 可选,是否临时账户 * @return { Promise } 登录结果 */ loginWithAuthCode(params: ILoginWidthAuthCode): Promise; /** * 三方账号统一认证登录-单点登录 * 调用时机:初始化SDK后,登录时调用 * * @param { LoginThirdAuthTokenParams } params - 单点登录配置参数 * @property { string } params.token - 单点登录Token信息 * @property { string } params.thirdPlatform - 单点登录平台名 * @property { string } params.path - 单点登录接口地址 */ loginThirdAuthToken(params: LoginThirdAuthTokenParams): Promise; /** * 手机验证码登录 * 调用时机:初始化SDK后,登录时调用 * * @param { LoginVerifyCodeParams } params - 登录参数 * @property { string } params.account - 账号 * @property { string } params.verificationCode - 短信验证码 * @returns { Promise } - 登录结果 */ loginXYLinkByVerifyCode(params: LoginVerifyCodeParams): Promise; /** * 重置密码 * 调用时机:登录后,重置密码时调用 * 使用场景:仅适用于小鱼账号登录(loginXYlinkAccount),其他登录方式不支持此功能 * * @param { string } account - 用户账号 * @param { string } password - 旧密码 * @param { string } newPassword - 新密码 * @returns { Promise } - 修改密码结果 */ resetPassword(params: XYResetPasswordParams): Promise; /** * 获取图片验证码 * * @returns { Promise } - 图片验证码结果 */ getCaptchaImage(): Promise; /** * 校验图片验证码 * * @param { CheckCaptchaImageParams } params - 参数 * @returns { Promise<{success: boolean}> } - 校验结果 */ checkCaptchaImage(data: CheckCaptchaImageParams): Promise<{ success: boolean; }>; /** * 获取短信验证码 * * @param { string } phone - 手机号 * @returns { Promise } - 结果 */ getVerificationCode(phone: string): Promise; /** * 退出登录 * 使用场景:已登录情况下,需要退出当前账号,调用此方法退出登录操作; * 调用时机:登录后 * 相关事件:监听login-state事件消息,获取最终登录和登出状态; * 注意事项:登录完成后,可以多次发起makeCall呼叫会议操作,无需重复登录; * * @since 4.0.2 */ logout(): Promise; /** * 设置分享content类型 * * @param { ContentMode } mode - 分享content类型 */ setContentMode(mode: ContentMode): void; /** * 设置SDK功能开关 * 调用时机:初始化SDK后,登录之前注册 * * @param { IFeatureConfig } config - 功能配置项 * @property { boolean } config.enableMeetingShout - 是否启用会控喊话场景,会控喊话场景需要指定mediaGroupId分组通道信息才可以正常接收远端声音; * @property { boolean } config.enableV2States - 是否启用小鱼数据上报功能,默认启用,设置为true,支持会中动态切换; * @property { boolean } config.enableCheckRecordPermission - 是否启用录制权限查询功能,默认不启用,设置为false; * @since 4.0.7 enableBandwidthSetting默认值改为true * @property { boolean } config.enableBandwidthSetting - 是否启用管理平台带宽控制(双向),默认启用,设置为true; * @property { boolean } config.enableMeetingInvite - 是否启用查询小鱼会议邀请链接信息,默认不启用,设置为false; * @property { boolean } config.enableMeetingOwner - 是否启用查询会议Owner信息,默认不启用,设置为false; * @property { boolean } config.enableAutoResizeLayout - 是否启用自动布局下,当屏幕大小变化后计算最新的Layout数据,默认启用,设置为true; * @property { boolean } config.enableLowResolution - 是否启用低性能模式,降低发送和接收端的分辨率和质量,默认不启用,设置为false,支持会中动态切换; * @property { boolean } config.enableSpeakerInfo - 是否启用推送实时讲话人信息,每秒2条消息推送,默认不启用,设置为false; * @property { boolean } config.enableLayoutAvatar - 是否启用获取参会者头像,默认不启用,设置为false; * @property { boolean } config.enableMobileNotAuth - 是否启用移动端无授权入会,默认不启用,设置为false;此配置已经废弃,移动端已支持动态授权功能; * @property { boolean } config.enableWatermarkContent - 是否启用获取content水印内容, 默认启用, 设置为true * @property { boolean } config.enableHideLocalView - 是否启用隐藏本地画面模式,默认不启用,设置为false * @property { boolean } config.enableAudioPCM - 是否启用音频PCM,默认不启用,设置为false * @property { boolean } config.enableReCall - 是否支持重新呼叫, 默认启用, 设置为true * @property { boolean } config.enableMoreStreams - 是否支持更多画面流,默认不启用,设置为false,后续仅配置moreStreamsMaxCount即可;如配置为true,则自动转为18路画面流 * @property { XYMoreStreamsMaxCount } config.moreStreamsMaxCount - 配置更多画面流的最大数量,默认是9,支持9/18/32路画面流,如配置为其他枚举/数值,则自动转为9画面 * @returns { IReturnResult } */ setFeatureConfig(config: IFeatureConfig): Promise; /** * 动态切换功能开关 * 目前支持enableAutoResizeLayout和enableLowResolution * * @param { IFeatureConfigKey } key - 功能的Key值 * @param { IFeatureConfigValue } value - 设置的值 */ switchFeatureConfig(key: IFeatureConfigKey, value: IFeatureConfigValue): Promise; /** * Feature变动后,统一处理逻辑 * * @param { IFeatureConfigKey } key - Feature Config Key */ private processFeatureConfig; /** * 合并更多画面流配置 * 规则: * 1、如果配置了enableMoreStreams,则将moreStreamsMaxCount配置为EIGHTEEN 18路画面流 * 2、如果配置了moreStreamsMaxCount,且符合配置规则,则更新对应moreStreamsMaxCount配置; * 3、如果配置了moreStreamsMaxCount,且不符合配置规则,则重置moreStreamsMaxCount配置为NINE; */ private mergeMoreStreamsConfig; /** * 设置上下行视频的分辨率和帧率 * * @param { MEETING_DIRECTION } direction - 会议方向 * @param { IVideoProfile } profile - 视频配置 * @returns { Promise } */ setVideoProfile(direction: MEETING_DIRECTION, profile: IVideoProfile): Promise; /** * 动态切换上行模式的低性能功能 */ processUplinkLowPerformance(): Promise; /** * 动态切换下行模式的低性能功能 */ processDownlinkLowPerformance(): void; /** * 处理wss返回的数据 * * @param { any } data - Socket消息数据结构 * @param { any } resolve - MakeCall Resolve函数 */ handleSocketMessage(data: any, resolve: any): void; /** * 处理媒体消息 * * @param { object } data - 媒体消息 */ private onPassThroughMessage; /** * 获取参会者组织架构和职务信息 * 使用场景:参会者列表中获取参会者组织架构和职务 * * @param { string[] } endpointIds - 需要查询的endpointId列表数据 * @returns { Promise } - 部门和职位数据 */ getDepAndTitle(endpointIds: string[]): Promise; /** * 获取当前会议会控H5地址 * 使用场景:会议中使用主持会议功能 * 调用时机:监听​​notification​​事件,获取是否有主持权限,如果有主持权限,则可调用此方法 * 相关事件:​​notification * 使用限制:仅限会议主持人或会议Owner */ getConfMgmtUrl(): Promise; /** * 自动布局-会中动态切换显示/隐藏本地画面 * * @param { boolean } state - 显示/隐藏状态|Boolean值|true代表隐藏本地画面,false代表显示本地画面 * @returns { Promise<{ status: boolean }> } 是否隐藏本地画面成功 */ setHideLocalView(state: boolean): Promise<{ status: boolean; }>; /** * 隐身入会, 可调用此方法进行切换显示/隐藏状态 * 使用场景:隐身入会 * 调用时机:会中,需要隐身或者参与互动时调用 * * @param { string | number } hideId - 隐身ID * @returns { Promise } 是否隐身 */ toggleHideId(hideId: number | string): Promise; /** * 设置视频播放容器元素,SDK接管控制视频的播放和画面渲染 * 使用场景:业务上渲染参会者画面 * 调用时机:渲染layout list时,针对每个参会者调用一次此方法; * 相关事件:layout * 相关内容:​​​​视频通话​​ * 注意事项:如果是在框架中执行渲染,注意需要针对id进行副作用变化监听,在未变化的情况下,此方法只需执行一次即可 * * @param { string } id - 参会者Layout Id * @param { string } wrapEle 包裹video组件的元素id,此元素一定要提供宽高信息,内部会基于此宽高信息计算video的旋转信息 */ setVideoRenderer(id: string, wrapEleId: string): Promise; /** * 设置重复画面视频播放容器元素,SDK接管控制视频的重复播放和画面渲染 * 注意:当key所对应的状态发生变化后,需要重新调用此方法重新播放画面 * 使用场景:页面需要针对参会者画面重复显示、画中画场景、Content分享画面回显 * 调用时机:直接调用,在layout事件推送后,需要更新调用获取最新的播放流 * 关联内容:​​视频通话 * * @since 4.0.0 * @param { string } id - 参会者Layout Id * @param { string } wrapEleId 包裹video组件的元素id,此元素一定要提供宽高信息,内部会基于此宽高信息计算video的旋转信息 */ setSlaveVideoRenderer(id: string, wrapEleId: string): Promise; /** * 移除视频播放容器元素,释放资源 * * @param { string } id - 参会者Layout Id */ removeVideoRenderer(id: string): Promise; /** * 移除重复视画面频播放容器元素,释放资源 * 如果layoutId和viewId没有填写,则清空所有的Slave配置数据 * 使用场景:参会者画面重复多处渲染场景 * 调用时机:结束重复渲染画面时或结束会议时 * * @param { string } id - 可选,参会者Layout Id * @param { string } viewId - 可选,包裹video组件的元素id,此元素一定要提供宽高信息,内部会基于此宽高信息计算video的旋转信息 */ removeSlaveVideoRenderer(id?: string, viewId?: string): Promise; /** * 画面播放异常情况下,重新播放本地视频 */ playLocalVideo(): Promise; /** * 画面播放异常情况下,重新播放指定参会终端画面 * 使用场景:部分情况下浏览器存在播放限制行为,需要手动触发事件播放画面 * 调用时机:监听play-failed事件,收到画面播放异常的信息时,可调用此方法重新播放画面 * 相关事件:play-failed * * @param { string[]? } idList - Layout Id 列表,如果为空值,则播放所有画面 */ playVideo(idList?: string[]): Promise; /** * 音频播放异常情况下,重新播放会中声音 * 使用场景:浏览器在一定情况下会限制音频自动播放,此时,需要手动执行事件触发播放声音操作 * 调用时机:监听play-failed事件,收到音频播放异常的信息时,可调用此方法重新播放会中所有声音 * 相关事件:play-failed */ playAudio(): Promise; /** * 设置音频播放容器元素,SDK接管控制音频的播放 * 使用场景:会中播放远端音频 * 调用时机:收到​​audio-track​​消息时调用,会推送最多14路音频数据,需全部执行一次播放 * 相关事件:audio-track、play-failed * 注意事项:每一路流仅需播放一次即可,无需多次播放,播放失败会通过play-failed事件上报错误信息 * * @param { string } streamId - mediaStream流ID,可通过监听audio-track事件获取 * @param { HTMLAudioElement } ele - audio元素 */ setAudioRenderer(streamId: string, ele: HTMLAudioElement): Promise; /** * 移除音频播放容器元素,释放资源 * * @param { string } id - MediaStream的Id字段 */ removeAudioRenderer(key: string): Promise; /** * 指定画面屏幕截图 * 使用场景:针对参会者画面截图并上传服务器等操作 * 调用时机:加入成功之后 * * @since 4.0.0 * @param { SnapshotParams } params - 截图参数 * @property { string } params.id - 参会者Layout Id,通过layout事件列表获取 * @property { string } params.imageType - 图片格式, 默认'image/png' * @property { number } params.compressLevel - 图片质量,0-1,默认为0.92 * * @returns { Promise } - 截图信息 */ getSnapshot(params: SnapshotParams): Promise; /** * 设置本地画面渲染参数 * 使用场景:入会前预览本地画面、会中切换本地画面镜像显示 * 调用时机:入会前、会议中 * * @since 4.0.0 * @param { LocalViewParams } params - 本地视频渲染参数 * @property { boolean } params.isMirror - 是否镜像展示 */ setLocalViewParams(params: LocalViewParams): Promise; /** * 自动布局-设置布局配置 * 使用场景:需要控制自动布局下的一个强制交互行为 * 调用时机:加入会议成功后调用 * * @since 4.0.0 * @param { LayoutConfig } config - 配置参数 * @property { boolean? } config.isForceSharedLayout - 本地共享布局是否强制宫格布局,默认强制,设置为true; * @property { number? } config.localSharedMaxViewCount - 本地共享时显示的最大画面数量,默认4画面,最大8画面 */ setLayoutConfig(config: LayoutConfig): void; /** * 设置布局模式,支持自动布局和自定义布局两种类型 * * 使用场景:无销毁XYRTCClient进行多次加入会议时,需要在会前切换布局方式,可调用此方法 * 调用时机:加入会议前调用 * 相关内容:拉流和布局 * 注意事项:如果每次呼叫都走完整的创建XYRTCClient流程,则直接配置layout即可 * * @since 4.0.2 * @param { LayoutMode } mode - 布局模式 */ setLayoutMode(mode: LayoutMode): void; /** * 功能操作上报记录 * * @param { IStateParams | IStateParams[] } states * @property { TCategory } category - 事件类别 * @property { TEventName } eventName - 事件名称 * @property { Objet } params - 事件详细数据 */ sendV2States(states: IStateParams | IStateParams[]): void; /** * 自动布局-切换显示布局模式,默认是演讲者模式(SPEAKER) * 使用场景:需要切换会议中布局方式时,针对不同场景有不同的布局策略使用 * 调用时机:加入会议成功后即可调用,调用成功后,会推送template-mode事件获取最终的布局模式并进行UI提醒或展示 * 相关内容:​​拉流和布局​​ * 相关事件:template-mode、layout * 注意事项:仅适用于自动布局 * * @param { IMode? } templateMode - 指定要切换的布局模式 * @returns { Promise } - 切换后的布局模式 */ switchLayout(templateMode?: IMode): Promise; /** * 设置焦点画面 * 使用场景:全局指定参会者成为焦点画面 * 调用时机:加入会议成功后 * 使用限制:仅适用于主持人角色调用 * 相关事件:focus-view * * @since 4.0.0 * @param { string } id - 指定切换到焦点画面的Layout Id * @returns { Promise } - 结果 */ startMeetingFocusView(id: string): Promise; /** * 取消焦点画面 * 调用时机:开启焦点画面后调用 * 相关事件:focus-view * * @since 4.0.0 * @param { string } id - 取消指定终端为焦点画面的Layout Id * @returns { Promise } - 结果 */ stopMeetingFocusView(id: string): Promise; /** * 自动布局-本地切换主画面 * 使用场景:演讲者布局模型下,固定大画面窗口人员; * 调用时机:加入会议成功后 * 使用限制:1、仅适用于本地端画面设置;2、仅支持自动布局模式 * * @since 4.0.0 * @param { string } id - 主画面的Layout Id * @returns { Promise } - Roster Id */ setFocusView(id: string): Promise; /** * 自动布局-翻页查看更多参会者画面 * 使用场景:会议中翻页查看更多参会者画面 * 调用时机:加入会议成功后,由用户触发上下翻页操作 * 相关事件:page-info * 关联内容:​​​​视频通话​​ * 使用限制:1、自动布局模式下适用;2、仅支持最多120路画面展示;3、单页最多9画面显示; * * @param { number } currentPage - 请求某一页数据 */ setPageInfo(currentPage?: number): Promise; /** * 检查并获取会议室录制权限 * * @return { IRecordPermission } - 录制权限 */ checkPermissionWithMeetingNumber(): Promise; /** * 录制存储空间检查 * 默认情况下业务层不需要主动调用,信令层面会下发可用空间,通过监听:recording-state-changed 获取 * * @param { string } recordingUrl - 录制地址 * @return { IRecordPermission } - 录制权限 */ checkStorageSpaceWithRecordingUrl(recordingUrl: string): Promise; /** * 通知会控打开/关闭摄像头结果 * 使用场景:会控操作申请打开终端的摄像头 * 调用时机:接收到meeting-control-video事件后可调用 * 相关事件:meeting-control-video * * @param { 'muteVideo' | 'unMuteVideo' } type - 结果类型 * @param { IVideoControlResult } data - 数据详情 * @returns { Promise } */ sendVideoControlResult(type: 'muteVideo' | 'unMuteVideo', data: IVideoControlResult): Promise; /** * 处理呼叫异常消息 * * @private * @param { Object } data 远端数据 */ private onCallExceptionMessage; /** * 处理服务通知退会消息 * * @private * @param { Object } data 远端数据 */ private onDisConnectedMessage; /** * 重新连接PeerConnection连接 * * 重连场景:媒体迁会 | Peer连接异常 */ onMediaChangedMessage(entry?: ReconnectEntry): void; /** * 处理CallIndex消息 * * @private * @param { Object } data 远端数据 */ private onCallIndexMessage; /** * 处理Connected消息,入会成功消息 * * @param { Object } data 远端数据 */ private onConnectedMessage; /** * 更新本地Roster数据 * * @private */ private setLocalRosterStatus; /** * 无登录模式调用,需要在调用makeCall前配置已登录用户和网关信息 * 使用场景:三方通过其他方式登录,未使用SDK提供的登录方法,需要将已登录用户和网关信息设置给WebSDK,以便后续的加入会议操作 * 调用时机:初始化SDK后,调用​​makeCall​​前 * * @since 4.0.0 * @param { LoginTokenInfo } info - 登录token、clientId等相关信息 */ setLoginTokenInfo(info: LoginTokenInfo): Promise; /** * 校验会议室号和入会密码 * 调用时机:加入会议时调用检测会议号是否正常 * 使用限制:必须登录后触发 * * @since v4.0.0 * @param { XYCheckNumberParams } params - 呼叫的会议信息 * @property { string } params.confNumber - 会议号 * @property { string } params.password - 会议密码 * @returns { Promise } - 结果 */ checkMeetingNumber(params: XYCheckNumberParams): Promise; /** * 校验会议室入会密码 * 调用时机:加入会议时调用检测会议入会密码是否正确 * 使用限制:必须登录后触发 * * @since v4.0.0 * @param { XYCheckNumberParams } params - 呼叫的会议信息 * @property { string } params.confNumber - 会议号 * @property { string } params.password - 会议密码 * @returns { Promise } - 结果 */ checkMeetingPassword(params: XYCheckNumberParams): Promise; /** * 发起会议呼叫 * 使用场景:需要加入会议时,调用此方法执行入会操作 * 调用时机:登录完成后即可调用 * 相关内容:​​基础功能-参会​​ * 相关事件:​​call-status​​、​​disconnected​​ * 使用限制:单个XYRTCClient模块仅支持加入一场会议 * * @since 0.0.1 * @param { IMakeCall } params - 呼叫参数 * @property { string } params.confNumber - 必填,云会议号/终端号/手机号 * @property { string? } params.password - 可选,入会密码,没有则为空 * @property { string? } params.displayName - 可选,入会昵称,默认使用登录账号的用户名 * @property { boolean } params.muteAudio - 可选,是否开启/关闭麦克风入会,默认值是false,开启麦克风 * @property { boolean } params.muteVideo - 可选,是否开启/关闭摄像头入会,默认值是false,开启摄像头 * @property { number | string } params.__hideId - 可选,是否是隐身入会模式,默认值是空值,代表正常非隐身模式 * @property { string } params.__monitorMode - 可选,是否是巡课模式,默认值是空字符,MONITOR代表巡课模式 */ makeCall(params: IMakeCall): Promise; /** * 推送自定义Track轨道流 * 使用场景:1、推送参会者摄像头麦克风视频流;2、推送共享内容视频流 * 调用时机:执行轨道采集完成后调用 * 关联内容:​​视频通话​​ * 相关事件:call-status事件,获取加入会议连接状态 * * @since 4.0.0 * @param { VideoAudioTrack | ContentTrack } track - 创建的Track模块 */ publish(track: VideoAudioTrack | ContentTrack): void; /** * 开始分享Content内容 */ applyShareContent(): Promise; /** * 执行结束分享Content内容,重置状态 * */ applyStopShareContent(): void; /** * 发送结束Content的消息 */ sendStopShareContentMsg(): void; /** * 获取随机云会议室 * 使用场景:目前用于教育,需要授权才可调用此接口 * 使用限制:仅支持管理员调用 * * @param { IGetConferenceParams } param - 会议室参数 * @returns { Promise } 云会议室信息 */ getConference(params: IGetConferenceParams): Promise; /** * 添加音视频开启/关闭 同步任务 * * @param { OperateType } type 操作类型 * @param { boolean } isSendWs 是否向信令发送对应消息,默认:发送(true); 信令下发的音频mute/unmute,不再向信令发送此消息 * @returns { Promise } - 操作结果 */ private addOperateVideoAudioTask; /** * 音视频开启/关闭操作 * * @param { OperateType } type 操作类型 * @param { boolean } isSendWs 是否向信令发送对应消息,默认:发送(true); 信令下发的音频mute/unmute,不再向信令发送此消息 * @returns { Promise } - 操作结果 */ private operateVideoAudio; /** * 推流到PeerConnection上 * * @param { PushType } pushType - 推送类型,用来区分Content和People画面流 */ peerPublish(track: VideoAudioTrack | ContentTrack, pushType: PushType): void; /** * 关闭麦克风 * 调用时机:加入会议成功后调用 * 相关事件:audio-status * * @returns { Promise } 操作类型 */ muteAudio(): Promise; /** * 关闭摄像头 * 调用时机:加入会议成功后调用 * 相关事件:video-status * * @returns { Promise } 操作类型 */ muteVideo(): Promise; /** * 开启麦克风 * 调用时机:加入会议成功后调用 * 相关事件:audio-status * * @returns { Promise } 操作类型 */ unmuteAudio(): Promise; /** * 开启摄像头 * * @returns { Promise } 操作类型 */ unmuteVideo(): Promise; /** * 设置调度模式下设备的声音状态 * 使用场景:教育平台-巡课 * * @param { 'mute' | 'unmute' } type - mute: 静音;unmute: 取消静音; * @param { string | string[] } callUriList - 操作的设备的 callUri 或者 callUri 列表 * @returns { IReturnResult } - 操作结果 */ setPollingAudioStatus(type: 'mute' | 'unmute', callUriList: string | string[]): Promise; /** * 举手发言 * * @returns { Promise } 是否举手 */ onHandUp(): Promise; /** * 取消举手 * * @returns { Promise } 是否举手 */ onHandDown(): Promise; /** * 结束发言 操作 * * @returns { Promise } 是否举手 */ onMute(): Promise; /** * peerConnection 创建成功后,从缓存中读取会控消息开始处理 * 状态码:950518 * * @param { boolean } status peer连接状态 */ setPeerConnectionStatus(status: boolean): void; /** * 处理会议室静音状态 * * @param { string } automute - "" | "mute" | "forcemute" 会议室静音属性 */ handleAutoMute(automute: string): void; /** * 通过媒体通道发送自定义消息,支持广播和指定参会者消息 * 使用场景:需要小范围进行自定义消息传递业务 * 调用时机:加入会议成功之后 * 相关事件:custom-message-recv * 使用限制:最大单条消息只支持1MB大小,使用字符串格式传递 * 注意事项:由于使用媒体通道传递自定义消息,如果会议中频繁发量传递消息,可能会导致音视频稳定性下降 * * @param { object } config - 配置参数 * @param { number } config.toPid - 消息的接收方pid,0表示广播消息、非0表示单点消息; * @param { string } config.data - 消息内容,JSON字符串;因业务数据可能会传输图片,需要对二进制数据进行base64编码,消息长度限制最大:1030KB * @return { IReturnResult } - 返回结果 */ sendCustomMessage(config: ICustomMessageConfig): IReturnResult; /** * 轮询手动切换到下一页 * 使用场景:会控轮询多画面 * 调用时机:会控针对WebRTC设备开启了轮询多画面功能 * 注意事项:此方法会自动无限循环执行 * 相关事件:layout */ nextPollingPage(): void; /** * 是否开启自动调整带宽 * * @returns { boolean } 是否开启带宽调整 */ switchAutoBandwidth(): boolean; /** * 切换调试模式,控制发送和接收路所有流质量数据上报,通过监听 meeting-stats 事件获取数据 * 相关事件:meeting-stats * * @param { boolean } status - 是否开启debug模式 * @returns { Promise } - 是否开启了debug模式 */ switchDebug(status: boolean): Promise; /** * 自定义布局-请求参会者的视频流,可以配置分辨率和帧率数据 * 使用场景:自定义布局分页或者固定请求参会者画面数据 * 调用时机:监听conf-change-info事件,当会中人员数量、状态变化时立即调用此方法进行请流操作,可频繁多次请求,请求完成后,通过layout事件响应结果数据 * 关联内容:​​拉流和布局​​ * 相关事件:conf-change-info、layout * 使用限制:暂时可以查看最多 120 个参会者画面数据 * 注意事项: * 1、从请流到展示画面,存在一定的延迟,需要考虑处理视频请求中状态 * 2、如果是指定终端模式请流,则pageIndex固定是0 * 3、如果自动请流机制,无需填写calluri字段,则pageIndex从1开始 * * @param { ICustomLayout[] } reqList - 必填,请流列表数据 * @param { number } maxViewCountPerPage - 必填,每页最大显示条数,最多 9 条 * @param { number } pageIndex - 必填,当前页数 * @param { IReqInfo[] } extReqList - 可选,固定列表数据 * @param { object? } extParams - 可选,控制额外的参数 * @returns { Promise } - 是否请求成功 */ requestNewLayout(reqList: any, maxViewCountPerPage: number | undefined, pageIndex: number, extReqList?: IReqInfo[], extParams?: {}): Promise; /** * 自定义布局-自动轮询请求参会者的视频流 * 使用场景:教育平台调用全部画面数据 * 相关事件:layout * 使用限制:暂时外部用户无法调用 * * @param { TCommand } command - 轮询状态,0-开始 1-停止 2-暂停 3-恢复 * @param { number } interval - 轮询间隔时长,单位毫秒 * @param { IReqInfo[] } reqList - 请求 Layout 画面流内容,轮询几画面,就配置几个数据,例如每次显示2画面,那么此处配置两个reqObj数据 * @returns { Promise } - 是否请求成功 */ requestAutoPollingLayout(command: TCommand, interval: number | undefined, reqList: IReqInfo[]): Promise; /** * 推送本地Audio状态 * * @param { boolean | string } status */ emitAudioStatus(type: OperateType): void; /** * 推送本地Video状态 * * @param { OperateType } type - 操作类型 */ emitVideoStatus(type: OperateType): void; /** * 入会成功后,再上报焦点画面 * * @param { IRoster | null } focusRoster - 焦点画面 */ emitFocusView(focusRoster: IRoster | null): void; /** * 发布Layout Container的容器信息 * * @param { IScreenInfo } screenInfo - Layout Container的容器信息 */ sendScreenInfoMessage(screenInfo: IScreenInfo): void; /** * 发布当前正在分享 content 的用户详细信息 * * @param { IRoster | null } next - content详细信息 */ sendContentRosterMessage(next: IRoster | null): void; /** * 发布AUTO布局当前布局模式 * * @param { IMode } templateMode - 布局模式 */ sendTemplateMode(templateMode: IMode): void; /** * 上报会议质量数据 * * @param { IInternals } internals - Internals统计数据 */ reportQualityData(internals: IInternals): void; /** * 上报给业务层Internals统计数据 * * @param { IInternals } internals - Internals统计数据 */ sendInternals(internals: IInternals): void; /** * 取消指定事件的监听 * * @param { string } key - 事件的唯一标识符(监听器的key值) * @since 4.0.2 新增 * @param { Function } listener - 可选的事件回调函数,如果提供,则仅取消该特定回调的监听;如果未提供,则取消该事件的所有监听器 */ off(key: string, listener?: Function): void; /** * 屏幕 Resize */ private onScreenChangeEvent; /** * 注册resize事件 */ private initWindowResizeEvent; /** * 移除resize事件 */ private removeWindowResizeEvent; /** * 自动布局-设置指定参会者全屏显示画面 * 使用场景:全屏聚焦显示指定参会者画面 * 调用时机:加入会议成功后可调用 * * @param { string } id - 参会者Layout Id,如果为空,则退出全屏显示 * @returns { Promise } - Roster Id */ forceFullScreen(id?: string): Promise; /** * 获取用户、会议室基本信息、上报终端能力 * * @param { ICall } params - 呼叫参数 */ private getBasicInfo; /** * 刷新Token */ refreshToken(refresh_token: string): Promise; /** * 开始调度设备 * 使用场景:教育平台-巡课模式 * 调用时机:加入会议成功之后调用 * * @param { string[] } uriList - 需要巡课的终端ID(callUri) */ startMonitor(uriList?: string[]): void; /** * 停止调度设备 * * @param { string[] } uriList - 需要停止巡课的终端ID(callUri) */ stopMonitor(uriList?: string[]): void; /** * 订阅参会者信息,通过​​bulkRoster​​事件监听详细内容 * 使用场景:1、会中显示所有参会者信息;2、全量按需请流; * 调用时机:加入会议成功后调用 * 相关事件:bulkRoster * 使用限制:最多只支持上报500路参会者数据 */ subscribeBulkRoster(): Promise; /** * 开启通话字幕 */ startTranslation(): Promise; /** * 停止通话字幕 */ stopTranslation(): Promise; /** * 通话字幕,设置本地说话的语言 * 调用时机:​​startTranslation​​开启字幕功能后调用 * 相关内容:​​通话字幕 * * @param { TLocalLanguage } language - 设置的语言 * @returns { Promise } - 返回结果 */ setTranslationLanguage(language: TLocalLanguage): Promise; /** * 开启云端录制 * 使用场景:需要云端录制功能,录制整个会议的画面和声音数据 * 调用时机:加入会议成功之后调用 * 相关内容:高级功能-录制 * 相关事件:record-permission、meeting-control、record-status-notification * 使用限制:需要关注权限开关和会控禁用设置,在开启状态下即可开始录制操作 */ startCloudRecord(): Promise; /** * 停止云端录制 */ stopCloudRecord(): Promise; /** * 自动布局-手动触发更新布局列表中的位置和尺寸信息 * 使用场景:业务监听页面布局容器局部Dom发生变化时,需要更新Layout列表的数据,可调用此方法 * 相关事件:container-resize * 注意事项:默认情况下,SDK内部会自动监听布局容器Dom的大小变化,并同步更新Layout数据,如需手动监听屏幕或者元素变化,建议通过​​setFeatureConfig​​方法​配置​​autoResizeLayout​​为false,以关闭内部的事件处理; * * 触发机制:当页面窗口变化/Container Dom大小变化时,可主动调用同时SDK更新Layout信息 * 建议:如果业务上自行监听窗口变化和Dom大小变化,建议通过featureConfig配置autoResizeLayout为false关闭内部的事件,避免重复计算; */ updateLayoutSize(): void; /** * 关联audio track与mediaGroupId通道,从而向特定通道发送音频数据 * 增加时间:2022-10-21 * 使用场景:会控喊话 * 调用时机:开启会控喊话配置,收到connected消息后调用 * 使用限制:暂时仅适用于音频数据 * 注意事项:1、调用此方法后,如果设置了非0/1的mediaGroupId通道信息,那么媒体网关仅会转发给相应的通道音视频数据,其他通道接收不到音频数据;2、如果开启会控喊话配置,则在收到connected消息后,需要发送一条bindTrackGroup消息,并标记meidagroupId为-1,代表本地初始入会时,不再向其他通道转发声音数据; * * @param { 'audio' | 'video' } trackType - 控制发送通道类型,audio控制音频通道,video控制视频通道,暂时只支持audio通道 * @param { number } mediagroupId - 分组id,也称sessionId或者mediaGroupId,代表只向此分组通道发送音频数据 * @returns { boolean } */ bindTrackGroup(trackType: 'audio' | 'video', mediagroupId: number): IReturnResult; /** * 启用多分组通道,进行多分组请流和资源创建 * 使用场景:会控喊话 * 调用时机:加入会议成功后调用 * * @param { Key[] } mediagroupIds - 多分组sessionId,可以配置多个或一个值 * @returns { boolean } */ startMonitorGroup(mediagroupIds: Key[]): IReturnResult; /** * 停止多分组通道,销毁资源 * * @param { Key[] } mediagroupIds - 多分组sessionId,可以配置多个或一个值 * @returns { boolean } */ stopMonitorGroup(mediagroupIds: Key[]): IReturnResult; /** * 获取会议分享详情信息 * * @returns {Promise} */ getMeetingInviteInfo(): Promise; /** * 修改本地参会者名称 * * @param { string } newName - 新名称 */ rename(newName: string): Promise; /** * 签到 * * @property { string } questionnaireId - 业务ID,必须是1-50位的字母、数字、下划线或连字符 * @returns { Promise } - 签到结果 */ signIn(questionnaireId: string): Promise; /** * 校验会控主持密码 * * @param { string } pwd - 入会密码 * @returns { Promise } - 校验结果 */ verifyControlPassword(pwd: string): Promise; /** * 获取能力集 * * @returns { AbilityResult} - 能力结果集 */ getAbility(): AbilityResult; /** * 结束全体会议 * 使用场景:结束全体会议,方便整个会议结束 * 调用时机:会议主持人在会中可调用 * 相关事件:​​notification * 使用限制:仅限会议主持人,非主持人会收到响应错误码 * * @since 4.0.0 */ endAllMeeting(): Promise; /** * 创建IM聊天模块 */ createIMWidget(): XYIMClient; /** * 校验入会名称 * * @param { string } displayName - 入会名称 * @returns */ checkSensitiveWord(displayName: string): Promise; /** * 获取个人云会议室信息 */ getCloudMeetingRooms(): Promise; /** * 获取企业信息,包含企业信息配置title/icon、企业名称等 * * @returns { Promise } - 企业信息 */ getEnterpriseInfo(): Promise; /** * 获取管理平台角色相关权限,包含录制权限 * * @returns { Promise } - 权限信息 */ getUicustomization(): Promise; /** * 开始白板分享 * * @since 4.0.1 */ startWhiteboard(): Promise; /** * 结束白板分享 * * @since 4.0.1 */ stopWhiteboard(): Promise; /** * 发送画板数据 * * @since 4.0.1 */ sendWhiteboardData(data: XY_WHITEBOARD_DATA): Promise; /** * 开始批注分享 * * @since 4.0.1 */ startAnnotation(): Promise; /** * 结束批注分享 * * @since 4.0.1 */ stopAnnotation(): Promise; /** * 发送批注数据 * * @since 4.0.1 */ sendAnnotationData(data: string): Promise; /** * 设置是否接收会议中的远端音频 * * 使用场景:用于在会议中根据需求动态设置是否接收远端参会者的声音、共享内容的声音 * 调用时机:入会成功后 * * @since 4.0.2 * @param { XYWebRxAudioStatus } params - 设置是否接收会议中的远端音频 * @property { boolean } params.contentAudioMute - 可选,是否禁止接收共享内容的声音,默认false * @property { boolean } params.peopleAudioMute - 可选,是否禁止接收远端参会者的声音,默认false */ setWebRxAudioStatus(params: XYWebRxAudioStatus): void; /** * 获取能力集 * 使用场景:当服务器配置发生变化时,需要获取最新能力集 * 调用时机:服务器配置变更后调用 * * @since 4.0.2 */ refreshAbility(): Promise; /** * 推送错误消息 * * @param { IReturnResult } msg - 错误消息 */ emitError(msg: IReturnResult): void; /** * 挂断当前会议,不进行销毁资源 * 调用时机:挂断会议,如果需要保持client状态,支持无需重新创建client及登录,即可快速发起新呼叫,可调用此方法 * 注意事项:此方法是Promise函数,需要等待执行完成后再执行后续的操作 * * @since 4.0.2 * @param {string} reason - 可选,挂断原因,默认是"OK" * @param {boolean} blockSendSocket - 可选,是否阻止发送Socket挂断消息,默认是false,不阻止 * @returns {Promise} 挂断成功返回true,失败则reject错误信息 */ hangup(reason?: string, blockSendSocket?: boolean): Promise; /** * AI-播放虚拟数字人(VEP) * * @since 3.9.11 * @param { string } sessionID - 数字人ID * @param { string } displayName - 数字人名称 */ playDigitalHuman(sessionID: string, displayName: string): Promise; /** * AI-停止虚拟数字人设备(VEP) * * @since 3.9.11 * @param { string } sessionID - 数字人ID */ stopDigitalHuman(sessionID: string): Promise; /** * AI-播放合成语音内容(TTS) * * @since 3.9.11 * @param { string } txt - 播放文本内容 */ playVirtualTTS(txt: string): Promise; /** * 挂断会议,销毁资源 * 调用时机: 挂断会议,如果不再需要使用client,应调用该接口及时销毁client实例,以释放相关资源;再次使用时,需重新创建client * 注意事项:此方法是Promise函数,需要等待执行完成后再执行后续的操作,避免资源释放不彻底 * * @param { string } reason - 可选,挂断原因,默认是"OK" * @param { boolean } blockSendSocket - 可选,是否阻止发送Socket挂断消息,默认是false,不阻止 */ destroy(reason?: string, blockSendSocket?: boolean): Promise; /** * 重置入会成功之后的会议信息 */ clearInvite(): void; /** * 异常情况下,停止某些操作并上报用户 * 包含录制、白板(建行暂时不支持)等等 */ stopActionsAndReport(): void; /** * 关闭当前会议,重置数据和销毁相关资源 */ close(reason?: string, blockSendSocket?: boolean): Promise; }