/** * Copyright (c) 2022 XYLink Inc. * * XY Electron SDK Lib * * @summary 小鱼易连主SDK模块,实现加入会议、会议管理等操作; * * Created at : 2020-06-10 15:44:10 * Last modified : 2025-01-06 19:07:40 */ import { IConfig, ILayout, IFrame, IMakeCallInfo, ILoginInfo, IModel, IVideoProfile, IAudioMeterInfo, IStatistics, IEventMap, IReqParams, ILocalVideoStatus, IMasterMap, IMasterParams, TCallMode, TFaceType, TemplateModel, SDKFECCCommand, DeviceTypeMap, IDeviceList, ICurrentDevice, IDeviceItem, DeviceTypeKey, LanguageType, IXYParams, IExtTokenParams, Locale, ISendContentParams, IRegion, IVersion, IMonitorThumbnail, IApp, IAppIcon, IAppThumbnail, VideoBeautyStyle, VideoFilterStyle, VirtualBgMode, IMonitorInfo, ILine, XYProxyInfo, XYProxyType } from './type/index'; import { LocalPreviewResolution } from './tools/enum'; declare const EventEmitter: any; declare class XYRTC extends EventEmitter { sdk: any; static instance: XYRTC; config: IConfig; private loginState; private connectState; private callState; private logger; private makeCallInfo; private audio; private video; private rename; private loginInfo; private isExternal; private isSlaveMode; private externalTimers; private externalCb; private externalInterval; private layoutManager; private deviceManager; private remoteMasterMap; private localPreviewResolution; private faceType; private enableLocalFD; private recordStatus; private isSelfRecord; private confCanRecord; private isSupportAiCaption; /** 要发送的内容共享数据 */ private sendContentParams; /** 是否在共享 */ private contentSharing; private interactiveToolProcessType; private initialized; private onCameraTypeChange; private onMicrophoneTypeChange; private onSpeakerTypeChange; constructor(config: any); private initSDKAll; /** * 获取 XYRTC 实例 * 每次入会时,都需要调用此方法获取实例,仅针对当此会议有效! * * @static */ static getXYInstance(config: IConfig): XYRTC; statisticsTimer: number; private statisticsSysSource; /** * 销毁 XYRTC 实例 */ static clearXYInstance(): void; /** * 获取SDK初始化配置数据 * * @public * @returns { IConfig } sdk init config params */ getConfig(): IConfig; /** * 获取登录用户信息 * * @public * @returns { ILoginInfo } */ getLoginInfo(): ILoginInfo; /** * 获取呼叫会议信息 * * @public * @returns { IMakeCallInfo } */ getMakeCallInfo(): IMakeCallInfo; /** * 获取人脸识别类型 * * @returns faceType */ getFaceType(): string; /** * 获取本地音频、视频状态 * * @public * @returns { ILocalVideoStatus } */ getLocalVideoStatus(): ILocalVideoStatus; /** * 获取Electron SDK version * * @returns {IVersion} */ getVersion(): IVersion; /** * Get dlls path and Init Nemo SDK * * @private */ private initNemoSDK; /** * setProxy函数延迟处理 * * @param { XYProxyType } proxyType 代理类型 * @param { XYProxyInfo } proxyInfo 代理详情 * @returns { XYReturnResult } 状态码数据 */ private setProxyDelay; /** * 设置代理 * 注意:代理只能在登录前设置 * * @since 3.10.6 * @param { XYProxyType } proxyType 代理类型 * @param { XYProxyInfo } proxyInfo 代理详情 * @returns { XYReturnResult } 状态码数据 */ setProxy(proxyType: XYProxyType, proxyInfo: XYProxyInfo): Promise; /** * 设置SDK国际化语言 * * @param { Locale } locale 语言 */ setLocale(language: Locale): void; /** * 设置底层接口n-ua,供数据埋点使用 */ private setUserAgent; /** * Get Local data * * @public * @returns { ILayout } local data */ getLocal(): ILayout; /** * 获取已经注册的屏幕列表数据 * * @public * @returns { remoteMasterMap } remoteMasterMap list */ getRemoteMasterMap(): IMasterMap; /** * Get video frame buffer data by c++ * * @public * @param { string } sourceId - 用户资源id * @param { boolean } isContent - 是否是共享Content内容 * @returns { IFrame } Video frame buffer data */ getVideoFrame(sourceId: string, isContent: boolean): IFrame; /** * 获取可用设备列表数据 * * @public * @param { DeviceTypeKey } type 设备类型:"camera" | "microphone" | "speaker" * @property camera: 摄像头 * @property microphone: 麦克风 * @property speaker: 扬声器 * @returns { Promise } Promise */ getDeviceList(type?: DeviceTypeKey): Promise; /** * 获取当前使用的设备 * * @param {DeviceTypeKey} [type] * @return {*} {(Promise)} * @memberof XYRTC */ getCurrentDevice(type?: DeviceTypeKey): Promise; /** * 获取设备列表 仅供sdk内部使用 * * @param {DeviceTypeMap} devType * @return {*} * @memberof XYRTC */ getDevListEx(devType: DeviceTypeMap): any; /** * 开始音频采集,麦克风 */ startAudioCapture(): void; /** * 结束音频采集,麦克风 */ stopAudioCapture(): void; /** * 选择设备切换 仅供sdk内部使用 * * @param {DeviceTypeMap} devType * @param {string} devId * @memberof XYRTC */ chooseDevEx(devType: DeviceTypeMap, devId: string): void; /** * 切换输入/输出设备 * * @public * @param { DeviceTypeKey } type 设备类型:"camera" | "microphone" | "speaker" * @param { string } devId 设备id * @returns { Promise } Promise */ switchDevice(type: DeviceTypeKey, devId: string): Promise; /** * 切换设备同步方法 sdk内部使用 * * @param {DeviceTypeKey} type * @param {string} devId * @memberof XYRTC */ switchDeviceSync(type: DeviceTypeKey, devId: string | undefined): void; /** * 切换分页 * @param page 分页 大于等于0 * @returns Promise */ switchPage(page: number): Promise; /** * 订阅部分参会者数据,会按照分页模式优先返回这些订阅的数据 * * @public * @param { string[] } uriList callerUri列表数据,callerUri 需要从 Server SDK Api 上获取所有的参会成员数据 * @returns { Promise } Promise */ subscribeRoster(uriList: string[]): Promise; /** * 检查是否支持同传字幕 * * @public * @return { Promise } Promise */ checkAiCaptionSupport(): Promise; /** * 同传字幕切换语言 * * @public * @param {LanguageType} language 切换的字幕语言/关闭字幕 * @return { Promise } Promise */ setCaptionLanguage(language: LanguageType): Promise; /** * 停止所有的渲染器 * * @public */ stopAllVideoRender(): void; /** * 【外接屏幕】上报视频流数据 * * @private */ private cbStreamBySourceId; /** * 【外接屏幕】设置渲染定时器 * * @public * @param { ILayout } item 设置roster item数据 */ setExternalTimer(item: ILayout): void; /** * 【外接屏幕】清理External定时器 * * @public * @param { string } key sourcedId资源id */ clearExternalTimer(key: string): void; /** * 【外接屏幕】上报Local视频流数据 * * @public * @param { (id, sourceId, roster) => void } callback 数据流回调 */ startLocalExternal(callback: any): string; /** * 【外接屏幕】停止上报Local视频流数据 * * @public */ stopLocalExternal(): string; /** * 绑定sourceId和canvas,代理渲染视频 * * @public * @param sourceId sourceId,通过回调:EVENT.RTC_EVENT_VIDEO_STREAMS 返回给业务 * @param canvasEle canvas id,由第三方提供canvas元素id,后续由sdk接管使用webgl渲染视频 */ setVideoRender(sourceId: string, canvasEle: HTMLCanvasElement | string): { code: any; msg: string; data: Record; }; /** * 发起呼叫 * * @param number 会议号 * @param meetingPwd 入会密码,如果没有,则填写空字符 * @param displayName 入会昵称,本地和远端显示此名称 * @param muteVideo 是否关闭摄像头入会 * @param muteAudio 是否静音入会 * @param callMode 会议模式 "AudioVideo":音视频; "AudioOnly":语音模式 */ makeCall(meetingNumber?: string, meetingPwd?: string, displayName?: string, muteVideo?: boolean, muteAudio?: boolean, config?: { callMode?: string; isMonitor?: boolean; meetingId?: string; }): { code: any; msg: string; data: Record; }; /** * 开启摄像头 */ startCamera(): void; /** * 关闭摄像头 */ stopCamera(): void; /** * 切换布局模式 * * @param model 默认是AUTO布局,可以设定自动布局(AUTO)和自定义布局(CUSTOM) */ switchModel(model: IModel): void; /** * 获取主持会议的相关配置信息和状态, 在ConfHostChanged中回调 * * @param conferenceNo 会议室号码 * @param scheduledMeetingId 预约会议id */ checkHostMeetingPermission(conferenceNo: string, scheduledMeetingId?: string): void; /** * 切换麦克风状态 * * true为静音,设置后远端听不到当前设备的声音 * false为非静音,设置后,远端可以听到当前设备的声音 * * @param status boolean */ muteMic(status: boolean): { code: any; msg: string; data: Record; }; /** * 切换摄像头状态 * * true为关闭摄像头,关闭后,远端不显示此设备画面,并显示当前设备视频暂停状态 * false为开启摄像头,开启后,远端可以看到当前设备的画面 * * @param status boolean */ muteCamera(status: boolean): { code: any; msg: string; data: Record; }; /** * 切换布局 * @param templateModel 布局模式 CONTENT 5种 NORMAL 2种 共7种 * @returns */ switchLayout(templateModel?: TemplateModel): Promise; /** * 遥控摄像头方法,外部调用 * * @public * @param {string} callUri 终端callUri * @param {SDKFECCCommand} command 遥控指令 * @param {number} angle 步长角度 * @memberof XYRTC */ farEndHardwareControl(callUri: string, command: SDKFECCCommand, angle: number): void; /** * 重新计算Layout布局数据 * * 触发机制:当页面窗口变化/Container Dom大小变化时,可主动调用同时SDK更新Layout信息 * 建议:需配置autoResizeLayout为false关闭内部的事件,避免重复计算; * * @memberof XYRTC */ updateLayoutSize(): { code: any; msg: string; data: Record; }; /** * 结束会议 * * 自动释放设备资源,会时必须主动调用 */ endCall(): void; /** * 重置云端录制状态 */ private resetRecordStatus; /** * 区域共享后更新区域坐标 * * @param {IRegion} region 区域坐标 * @returns */ updateContentCaptureRegion(region: IRegion): { code: any; msg: string; data: Record; }; /** * 共享内容 * * @param {ISendContentParams} params 共享内容参数 * @returns */ startSendContent(params: ISendContentParams): { code: any; msg: string; data: Record; }; /** * 暂停content采集 */ pauseContentCapture(): void; /** * 恢复content采集 */ resumeContentCapture(): void; /** * 结束分享桌面 */ stopSendContent(): void; /** * 开始标注 */ startAnnotation(): void; /** * 关闭标注 */ stopAnnotation(): void; /** * 清空标注 */ cleanAnnotation(): void; /** * 发送线,content接受者标注时用到 * * @param line */ sendAnnotationLine(line: ILine): void; /** * 设置本地预览视频分辨率 */ setLocalPreviewResolution(res: LocalPreviewResolution): string; /** * AE Audio dump * 入会前设置,dump本次呼叫中的音频数据供分析噪声,回声使用 */ enableAudioDump(): void; /** * 是否开启小鱼回声消除功能(默认启用) * * @public * @param { boolean } enable 是否开启AE模块,默认是启用 */ enableAECMode(enable: boolean): void; /** * 小鱼账号登录 (旧) * * @deprecated 已废弃 但不影响老客户调用,建议使用新登录方式:loginXYAccount * * @param { string } userName 用户名、邮箱 * @param { string } password 密码 * @returns { Object } 登录结果 */ login(userName?: string, password?: string): { code: any; msg: string; data: Record; }; /** * 第三方登录接口 * * 注意:v1.0.4版本登录方式进行了安全升级,但需要传authCode和isTempUser两个参数。 * 为了兼容旧的登录方式,新增的两个参数作为选填项 * 1. 如果用户没有传authCode,则仍然使用旧的登录方式登录, * 2. 如果传了authCode,则使用新的更安全的方式登录 * * @param {string} extID 企业ID * @param {string} extUserId 第三方用户ID * @param {string} displayName 第三方用户名 * @param {string} authCode 授权码 v1.0.4新增 * @param {boolean} isTempUser 是否临时用户 v1.0.4新增 */ loginExternalAccount(extID: string, extUserId: string, displayName: string, authCode?: string, isTempUser?: boolean): { code: any; msg: string; data: Record; }; /** * 建行授权码登录 * * @param {string} extID 企业id * @param {string} extUserId 用户id * @param {string} displayName 用户名称 * @param {string} oauthCode 授权码 * @param {boolean} isTempUser 是否临时账户 * @param {string} channelId 渠道id * @return {*} */ loginWithAuthCode(extID: string, extUserId: string, displayName: string, oauthCode: string, isTempUser: boolean, channelId: string): { code: any; msg: string; data: Record; }; /** * 小鱼账号登录 (新) * * @param { IXYParams } params 账户信息 */ loginXYAccount(params: IXYParams): { code: any; msg: string; data: Record; }; /** * 三方企业token登录 * * @param { IExtTokenParams } params 三方企业token信息 */ loginExtToken(params: IExtTokenParams): { code: any; msg: string; data: Record; }; /** * 检测是否支持webgl渲染 * * @returns {boolean} 返回是否支持webgl渲染状态 */ isSupportWebGL(): boolean; /** * 退出登录 */ logout(): void; /** * 获取本地麦克风能量波动 */ getMicPeakMeter(): any; /** * 获取通话统计信息 */ getStatistics(): IStatistics; /** * 设置mic声音峰值范围[0, 100] */ setMicVolume(volume: number): void; /** * 获取本地麦克风音量范围值,范围[0, 100] */ getMicVolume(): any; enableListenerTest(enable: boolean): void; /** * 获取本地扬声器能量波动 * @returns */ getSpeakerPeakMeter(): number; /** * 设置本地扬声器能量 * * @param { number } volume */ setSpeakerVolume(volume: number): void; /** * 获取本地扬声器当前能量 * * @returns */ getSpeakerVolume(): number; /** * 获取远端音频能量 * * @returns */ getAudioPeakMeters(): IAudioMeterInfo[]; /** * 获取屏幕缩略图 * * @param {string} monitorName 屏幕标识 */ getMonitorThumbnail(monitorName: string): IMonitorThumbnail; /** * 获取显示器列表 * * @returns {string[]} monitorName */ getMonitorList(): string[]; /** * 获取显示器列表,包含monitorName和位置信息 * * @returns {IMonitorInfo[]} */ getMonitorInfos(): IMonitorInfo[]; /** * 获取 app 列表 */ getAppList(): IApp[]; /** * 获取 app 缩略图数据 * * @param {number} hwnd app 窗口句柄 */ getAppThumbnail(hwnd: number): IAppThumbnail; /** * 获取 App icon 图标数据 * * @param {number} hwnd app 窗口句柄 */ getAppIcon(hwnd: number): IAppIcon; /** * 开启远端音频能量峰值计量 */ setAudioPeakMeterEnabled(enable: boolean): void; /** * 开始播放测试文件用于扬声器检测 * * @param { string } wavFile wav文件 * @param { number } loopTimes 循环次数, 0:循环播放 */ startPlayWavFile(wavFile: string, loopTimes?: number): void; /** * 结束播放测试文件用于扬声器检测 */ stopPlayWavfile(): void; setVideoProfile(videoProfile: IVideoProfile): void; /** * 录制文件地址配置 */ setLocalRecordingsFilePath(filePath: any): Promise; /** * 开启本地录制 * * @public */ startLocalRecord(): void; /** * 停止本地录制 * * @public */ stopLocalRecord(): void; /** * 开启云端录制 */ startCloudRecord(): { code: any; msg: string; data: Record; }; /** * 停止云端录制 */ stopCloudRecord(): { code: any; msg: string; data: Record; }; /** * 举手发言 */ sendSpeakingRequest(): void; /** * 发言结束 */ sendSpeakingEnd(): void; /** * 取消举手 */ cancelSpeakingRequest(): void; /** * 签到 * * @public * @param {string} url webViewUrl * @param {string} questionnaireId 业务id * @memberof XYRTC */ signIn(url: string, questionnaireId: string): void; /** * 获取会控URL * * @param { string } confNum */ getConfMgmtUrl(confNum?: string): void; /** * 全屏请流 * @param id rosterId */ forceFullScreen(id: string): Promise; /** * 是否广播本地电子铭牌 * * @param { boolean } enable */ broadcastEletronicBadge(enable?: boolean): void; /** * 是否显示远端人脸信息 * * @param { TFaceType } faceType Detect:扫描模式 EletronicBadge:电子铭牌 * @param { boolean } enable 是否显示 */ enableFaceDetectMode(faceType?: TFaceType, enable?: boolean): void; updateFaceDetectMode(): void; /** * 获取人脸信息详情 * * @deprecated * @param { number[] } faceIds * @returns */ getFaceInfo(faceIds: number[]): { code: any; msg: string; data: Record; }; /** * 切换语音模式 * * @param { TCallMode } callMode AudioOnly 语音模式, AudioVideo 音视频模式 */ switchCallMode(callMode: TCallMode): void; sendDtmf(key: any, remoteUri?: string): void; /** * 释放音频焦点,会外设备检测完成之后,如果需要释放音频的话调用 */ releaseAudioFocus(): void; /** * 日志上传 * * @param { string } comments 反馈内容 */ logUpload(comments?: string): void; /** * 主屏幕启动外接屏幕渲染模式,默认屏幕id是:LocalDeviceId * * @param { IMasterParams } params 设置主屏幕启动服务信息 */ startMaster(params?: IMasterParams): Promise; /** * 停止外接屏幕渲染 * * @public * @returns { Promise } */ stopMaster(): Promise; /** * Set log level * level: "INFO" | "DEBUG" | "WARNING" | "ERROR" | "NONE" * * @public */ setLogLevel(level: 'INFO' | 'DEBUG' | 'WARNING' | 'ERROR' | 'NONE'): void; /** * 设置本地视频镜像翻转 * * @param { boolean } bFlip 是否反转镜像 */ setLocalPreviewFlip(bFlip: boolean): void; /** * 发送消息 * * @param { keyof IEventMap } key 消息key * @param { any } data 消息内容 */ emitMessage(key: keyof IEventMap, data: any): void; /** * [CUSTOM]请求参会成员质量和分辨率数据的画面 * * @param reqList 请流列表 * @param maxViewCount 每页最多可请求多少数据流,最大可设定位8位 * @param pageIndex:页码,指定请求第几页数据 */ requestLayout(reqList?: any, maxViewCount?: number, pageIndex?: number): void; /** * [SDK]请求参会成员质量和分辨率数据的画面 * * @param { IReqParams } params 请流参数 */ requestLayoutEx(params: IReqParams): void; /** * 设置美颜效果 * * @param { VideoBeautyStyle } style 美颜类型 * @param { number } level 美颜等级,值在 0-100 之间 */ setVideoBeautyEffect(style: VideoBeautyStyle, level: number): void; /** * 设置滤镜效果 * * @param { VideoFilterStyle } style 滤镜类型 * @param { number } level 滤镜等级,值在 0-100 之间 */ setVideoFilterEffect(style: VideoFilterStyle, level: number): void; /** * 设置虚拟背景模式 * * @param { VirtualBgMode } mode 虚拟背景模式 */ setVirtualBgMode(mode: VirtualBgMode): void; /** * 设置虚拟背景图片 * * @param { string } imgPath 虚拟背景图片的文件路径 */ setVirtualBgImage(imgPath: string): { code: any; msg: string; data: Record; }; /** * 设备变化回调事件 * * @private * @param deviceType */ private onDeviceTypeChange; /** * register c++ bridge event message * * @private */ private initEventHandler; } export { XYRTC };