UNPKG

@tencentcloud/tuiroom-engine-electron

Version:
1,265 lines (1,263 loc) 48.4 kB
import TIM from '@tencentcloud/chat'; import TRTCCloud, { TRTCDeviceInfo, TRTCScreenCaptureSourceInfo } from 'trtc-electron-sdk'; import { TUIRoomInfo, TUIVideoStreamType, TUIVideoQuality, TUIAudioQuality, TUIRole, TUIRoomEvents, TUIRoomType, TUISeatInfo, TUIRequestCallback, TUISpeechMode, TUIMediaDevice, TUISeatLockParams, TUILoginUserInfo, TUIUserInfo, TUIRequest, TUIVideoEncoderParams, TUIResolutionMode } from './types'; export * from './types'; export { TRTCDeviceType, TRTCDeviceState, TRTCDeviceInfo, TRTCVideoMirrorType, TRTCVideoRotation, TRTCVideoFillMode, TRTCVideoStreamType, TRTCScreenCaptureSourceInfo, TRTCScreenCaptureSourceType, Rect, TRTCVideoEncParam, TRTCVideoResolution, TRTCVideoResolutionMode, TRTCScreenCaptureProperty, TRTCVolumeInfo, TRTCLogLevel, } from 'trtc-electron-sdk'; export { TRTCCloud, TIM }; /** * TUIRoomEngine 提供了音视频房间的能力 * * @class TUIRoomEngine */ declare class TUIRoomEngine { static className: string; private static isReady; private roomEngineWASM; private static userId; private static sdkAppId; private static Module; private logger; private roomId; private localVideoQuality; private localAudioQuality; static setModule(Module: any): void; static once(event: string, func: (...args: any[]) => void): void; constructor(); /** * @private * 调用 TUIRoomEngineWASM 的静态方法 */ private static JSCallNativeFunctionPromise; /** * @private * 调用 TUIRoomEngineWASM 的异步方法 * @param funcName * @param args */ private JSCallNativeFunctionPromise; private JSCallNativeRequestFunctionPromise; /** * 登录 TUIRoomEngine * * @param {object} options * @param {number} options.sdkAppId sdkAppId <br> * 在 [实时音视频控制台](https://console.cloud.tencent.com/trtc) 单击 **应用管理** > **创建应用** 创建新应用之后,即可在 **应用信息** 中获取 sdkAppId 信息。 * @param {string} options.userId 用户ID <br> * 建议限制长度为32字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。 * @param {string} options.userSig userSig 签名 <br> * 计算 userSig 的方式请参考 [UserSig 相关](https://cloud.tencent.com/document/product/647/17275)。 * @returns {Promise<void>} * * @example * // 登录 TUIRoomEngine * await TUIRoomEngine.login({ * sdkAppId: 0, // 填写您申请的 sdkAppId * userId: '', // 填写您业务对应的 userId * userSig: '', // 填写服务器或本地计算的 userSig * }) */ static login(options: { sdkAppId: number; userId: string; userSig: string; tim?: TIM; }): Promise<void>; /** * 设置当前用户基本信息(用户名、用户头像) * * @param {object} options * @param {string} options.userName 用户名,必填 * @param {string} options.avatarUrl 用户头像,必填 * @param {object=} options.customInfo 用户自定义资料 * App 管理员可以通过 [即时通信 IM 控制台 > 用户自定义字段](https://console.cloud.tencent.com/im/user-data) 新增自定义资料字段 * 用户自定义字段生效以后,用户可以调用 setSelfInfo 接口设置自定义资料 * @returns {Promise<void>} * * @example * // 设置当前用户用户名及用户头像 * await TUIRoomEngine.setSelfInfo({ * userName: '', // 填写您的新用户名 * avatarUrl: '', // 填写您的新头像地址 * }) * * // 设置当前用户用户名, 用户头像及用户自定义消息 * await TUIRoomEngine.setSelfInfo({ * userName: '', // 填写您的新用户名 * avatarUrl: '', // 填写您的新头像地址 * customInfo: { // 填写用户自定义消息 * Tag_Profile_Custom_Test: 'value1', * Tag_Profile_Custom_profile: 'value2, * }, * }) */ static setSelfInfo(options: { userName: string; avatarUrl: string; customInfo?: Record<string, any>; }): Promise<void>; /** 获取当前用户信息接口 * @returns {Promise<TUILoginUserInfo>} loginUserInfo * 该接口返回用户信息 * * @example * await TUIRoomEngine.getSelfInfo(); */ static getSelfInfo(): Promise<TUILoginUserInfo>; /** * 登出 TUIRoomEngine, 登出 TUIRoomEngine 时将销毁所有 roomEngine 实例 * * @example * await TUIRoomEngine.logout(); */ static logout(): Promise<void>; /** * 主持人创建房间,调用 createRoom 的用户为房间的所有者。创建房间时可设置房间 Id,房间名称,房间类型,发言模式以及房间是否允许加入用户开启音视频,发送消息等功能。 * * @param {object} options * @param {string} options.roomId 房间 Id,必填, roomId 限制长度为64字节,且仅支持以下范围的字符集:<br> * - 大小写英文字母(a-zA-Z) * - 数字(0-9) * - 空格 ! # $ % & ( ) + - : ; < = . > ? @ [ ] ^ _ { } | ~ , * @param {string=} [options.roomName=roomId] 房间名称,默认值为 roomId,传入的值不能为空字符串 * @param {TUIRoomType=} [options.roomType=TUIRoomType.kConference] 房间类型, 默认值为 TUIRoomType.kConference <br> * 办公协同、医疗问诊、远程会议、教育场景,roomType 设置为 TUIRoomType.kConference * 电商直播、语聊房场景,roomType 设置为 TUIRoomType.kLivingRoom * @param {TUISpeechMode=} [options.speechMode=TUISpeechMode.kFreeToSpeak] 房间内发言模式,默认值为 TUISpeechMode.kFreeToSpeak * 1. roomType 为 TUIRoomType.kConference (教育及会议场景) 时: * a. speechMode 设置为 TUISpeechMode.kFreeToSpeak,用户进房默认可以打开摄像头和麦克风 * b. speechMode 设置为 TUISpeechMode.kApplyToSpeak,用户进房默认不打开摄像头和麦克风,需要向主持人申请打开摄像头或麦克风 * TUIRoomType.kConference 场景下,TUISpeechMode.kFreeToSpeak 及 TUISpeechMode.kApplyToSpeak 模式可互相切换 * c. speechMode 设置为 TUISpeechMode.kSpeakAfterTakingSeat,用户进房后需要调用 takeSeat 上麦接口获取打开摄像头和麦克风的权限 * * 2. roomType 为 TUIRoomType.kLivingRoom (直播场景) 时: * a. speechMode 设置为 TUISpeechMode.kFreeToSpeak,上麦不需要主持人同意 * b. speechMode 设置为 TUISpeechMode.kSpeakAfterTakingSeat,上麦需要主持人同意 * TUIRoomType.kLivingRoom 场景下,TUISpeechMode.kFreeToSpeak 及 TUISpeechMode.kSpeakAfterTakingSeat 模式可互相切换 * @param {boolean=} [options.isMicrophoneDisableForAllUser=false] 是否开启全员禁麦,默认不开启全员禁麦(创建房间可选参数) * @param {boolean=} [options.isCameraDisableForAllUser=false] 是否开启全员禁画,默认不开启全员禁画(创建房间可选参数) * @param {boolean=} [options.isMessageDisableForAllUser=false] 是否允许成员发送消息,默认不禁止(创建房间可选参数) * @param {number=} options.maxSeatCount 最大麦位数量 (创建房间可选参数)<br> * roomType 为 TUIRoomType.kConference (教育及会议场景) 时,maxSeatCount 值不做限制; * roomType 为 TUIRoomType.kLivingRoom (直播场景) 时,maxSeatCount 最大限制为 16; * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.createRoom({ * roomId: '12345', // 填入您的房间 Id, 注意房间 Id 要求为字符串类型 * roomName: 'Test Room', // 填入您的房间名称, 房间名称默认为 roomId,最长 30 字节 * roomType: TUIRoomType.kConference, // 设置房间类型为 TUIRoomType.kConference 类型 * speechMode: TUISpeechMode.kFreeToSpeak, // 设置会议模式为自由发言模式 * }); */ createRoom(options: { roomId: string; roomName?: string; roomType?: TUIRoomType; speechMode?: TUISpeechMode; isMicrophoneDisableForAllUser?: boolean; isCameraDisableForAllUser?: boolean; isMessageDisableForAllUser?: boolean; maxSeatCount?: number; }): Promise<void>; /** * 进入房间接口 * @param {object} options * @param {string} options.roomId 房间号,字符串类型 * @returns {Promise<TUIRoomInfo>} roomInfo * 该接口返回当前房间信息 * * @example * const roomEngine = new TUIRoomEngine(); * const roomDetailInfo = await roomEngine.enterRoom({ * roomId: '12345', * }); */ enterRoom(options: { roomId: string; }): Promise<TUIRoomInfo>; /** * 解散房间接口,解散房间必须由房间所有者发起,解散房间之后房间不可进入 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.destroyRoom(); */ destroyRoom(): Promise<void>; /** * 离开房间接口,用户在执行 enterRoom 之后可通过 exitRoom 离开房间 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.exitRoom(); */ exitRoom(): Promise<void>; /** * 获取房间信息 * @returns {Promise<TUIRoomInfo>} roomInfo * 获取房间信息 * * @example * const roomEngine = new TUIRoomEngine(); * const roomInfo = await roomEngine.fetchRoomInfo(); */ fetchRoomInfo(): Promise<TUIRoomInfo>; /** * 更新房间的名字(仅群主或者管理员可以调用) * @param {object} options * @param {string} options.roomName 更新当前房间的名字 * @returns {Promise<void>} * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.createRoom({ roomId: '12345' }); * await roomEngine.updateRoomNameByAdmin({ roomName: '新的名字' }); */ updateRoomNameByAdmin(options: { roomName: string; }): Promise<void>; /** * 更新房间的发言模式(仅群主或者管理员可以调用) * @param {object} options * @param {TUISpeechMode} options.speechMode 发言类型 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.updateRoomSpeechModeByAdmin({ * speechMode: TUISpeechMode.kSpeakAfterTakingSeat, // 更新为上麦后发言模式 * }); */ updateRoomSpeechModeByAdmin(options: { speechMode: TUISpeechMode; }): Promise<void>; /** * 获取当前房间用户列表,注意该接口一次拉取的用户列表量最大为 100 个 * * @param {object=} options 获取用户列表的参数 * @param {number=} options.nextSequence 偏移量,默认从 0 开始拉取用户<br/> * @return {Promise<object>} result * result.nextSequence 下一次拉取群组用户的偏移量,如果 nextSequence 为 0 则代表 userList 全部拉下来了 * result.userInfoList 本次拉取的 userList * * @example * const roomEngine = new TUIRoomEngine(); * const userList = []; * let result; * do { * result = await roomEngine.getUserList(); * userList.push(...result.userInfoList); * } while (result.nextSequence !== 0) */ getUserList(options?: { nextSequence?: number; }): Promise<Array<TUIUserInfo>>; /** * 获取用户的详细信息 * @param {object} options 获取用户信息的参数 * @param {string} options.userId 根据 userId 获取该用户的详细信息 * @returns Promise<TUIUserInfo> userInfo * 该接口返回指定用户的用户信息 * * @example * const roomEngine = new TUIRoomEngine(); * const userInfo = await roomEngine.getUserInfo({ * userId: 'user_12345', * }); */ getUserInfo(options: { userId: string; }): Promise<any>; /** * 设置本地视频流的渲染位置 * @param {object} options 设置本地视频流的渲染位置的参数 * @param {string | Array<string> | null} options.view 本地视频流的渲染位置,如果传入 null 则不预览摄像头画面,但不影响摄像头采集,会正常推流。 * @returns {Promise<void>} * @desc 自 v1.6.1 版本起,setLocalVideoView 不再需要传入 streamType 参数 * * @example * const roomEngine = new TUIRoomEngine(); * * // 设置本地摄像头流的播放区域为 id 是 'preview-camera' 的 div 元素 * roomEngine.setLocalVideoView({ * view: 'preview-camera', * }); */ setLocalVideoView(options: { view: string | Array<string> | null; streamType?: TUIVideoStreamType; }): void; /** * 打开本地摄像头,开始视频流采集 * @param {object} options 设置本地流的参数 * @returns {Promise<void>} * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.openLocalCamera(); */ openLocalCamera(): Promise<void>; /** * 关闭本地摄像头 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.closeLocalCamera(); */ closeLocalCamera(): Promise<void>; /** * 打开麦克风 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.openLocalMicrophone(); */ openLocalMicrophone(): Promise<void>; /** * 关闭本地麦克风, 停止采集音频流 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.closeLocalMicrophone(); */ closeLocalMicrophone(): Promise<void>; /** * 设置本地视频流的编码参数 * @param {object} options * @param {TUIVideoQuality} options.quality * * - 360p TUIVideoQuality.kVideoQuality_360p <br/> * - 540p TUIVideoQuality.kVideoQuality_540p <br/> * - 720p TUIVideoQuality.kVideoQuality_720p <br/> * - 1080p TUIVideoQuality.kVideoQuality_1080p <br/> * * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.updateVideoQuality({ * quality: TUIVideoQuality.kVideoQuality_360p, * }); */ updateVideoQuality(options: { quality: TUIVideoQuality; }): Promise<void>; /** * 设置本地视频流的分辨率模式 * @param {object} options * @param {TUIVideoStreamType} options.streamType * @param {TUIResolutionMode} options.resolutionMode * * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.setVideoResolutionMode({ * type: TUIVideoStreamType.kCameraStream, * resolutionMode: TUIResolutionMode.kResolutionMode_Landscape, * }); */ setVideoResolutionMode(options: { streamType: TUIVideoStreamType; resolutionMode: TUIResolutionMode; }): Promise<void>; /** * 设置本地视频流的详细编码参数 * @param {object} options * @param {TUIVideoStreamType} options.streamType * @param {TUIVideoEncoderParams} options.encoderParams * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.updateVideoQualityEx({ * streamType: TUIVideoStreamType.kCameraStream, * encoderParams: { * videoResolution: TUIVideoQuality.kVideoQuality_720p, * fps: 15, * bitrate: 2000, * resMode: TUIResolutionMode.kResolutionMode_Landscape, * } * }); */ updateVideoQualityEx(options: { streamType: TUIVideoStreamType; encoderParams: TUIVideoEncoderParams; }): Promise<void>; /** * 设置本地音频的参数<br/> * @param {object} options 设置本地音频的参数 * @param {TUIAudioQuality} options.quality * * - TUIAudioQuality.kAudioProfileSpeech:语言模式;采样率:16k<br/> * - TUIAudioQuality.kAudioProfileDefault:标准模式(或者默认模式);采样率:48k<br/> * - TUIAudioQuality.kAudioProfileMusic:音乐模式;采样率:48k * * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.updateAudioQuality({ * quality: TUIAudioQuality.kAudioProfileSpeech, * }); */ updateAudioQuality(options: { quality: TUIAudioQuality; }): Promise<void>; /** * 开始向远端推本地视频流 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.startPushLocalVideo(); */ startPushLocalVideo(): Promise<void>; /** * 停止向远端推本地视频流 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.startPushLocalVideo(); */ stopPushLocalVideo(): Promise<void>; /** * 开始向远端推本地音频流 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.startPushLocalAudio(); */ startPushLocalAudio(): Promise<void>; /** * 停止向远端推本地音频流 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.stopPushLocalAudio(); */ stopPushLocalAudio(): Promise<void>; /** * 开始向远端推本地音频流 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.muteLocalAudio(); * @since 1.5.1 */ muteLocalAudio(): Promise<void>; /** * 停止向远端推本地音频流 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.unmuteLocalAudio(); * @since 1.5.1 */ unmuteLocalAudio(): Promise<void>; /** * 设置远端流渲染的区域 * * @param {object} options 设设置远端流渲染区域的参数 * @param {string} options.userId 用户 Id * @param {TUIVideoStreamType} options.streamType 用户流类型 * @param {string | Array<string>} options.view 播放远端用户流的 div 元素的 id * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * * // 设置远端用户视频流在 id 为 'remote_preview_camera' 的区域播放 * roomEngine.setRemoteVideoView()({ * userId: 'user_1234', * streamType: TUIVideoStreamType.kCameraStream, * view: 'remote_preview_camera', * }); * * // 设置远端用户屏幕分享流在 id 为 'remote_preview_screen' 的区域播放 * roomEngine.setRemoteVideoView()({ * userId: 'user_1234', * streamType: TUIVideoStreamType.kScreenStream, * view: 'remote_preview_screen', * }); */ setRemoteVideoView(options: { userId: string; streamType: TUIVideoStreamType; view: string | Array<string>; }): Promise<void>; /** * 开始播放远端用户视频流 * * @param {object} options 开始播放远端用户视频流的参数 * @param {string} options.userId 用户 Id * @param {TUIVideoStreamType} options.streamType 用户流类型 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.startPlayRemoteVideo({ * userId: 'user_1234', * streamType: TUIVideoStreamType.kCameraStream, * }); */ startPlayRemoteVideo(options: { userId: string; streamType: TUIVideoStreamType; }): Promise<void>; /** * 停止播放远端用户视频流 * * @param {object} options 停止播放远端用户视频流的参数 * @param {string} options.userId 用户 Id * @param {TUIVideoStreamType} options.streamType 用户流类型<br/> * * - TUIVideoStreamType.kCameraStream 视频流<br/> * - TUIVideoStreamType.kScreenStream 屏幕分享流<br/> * - TUIVideoStreamType.kCameraStreamLow 低清视频流 * * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.stopPlayRemoteVideo({ * userId: 'user_1234', * streamType: TUIVideoStreamType.kCameraStream, * }); */ stopPlayRemoteVideo(options: { userId: string; streamType: TUIVideoStreamType; }): Promise<void>; /** * 停止远端用户的音频流 * @param {object} options 停止远端用户音频流的参数 * @param {string} options.userId 停止远端用户的userId * @param {boolean} options.isMute 是否停止远端用户的音频 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.muteRemoteAudioStream({ * userId: 'user_1234', * isMute: true, * }); */ muteRemoteAudioStream(options: { userId: string; isMute: boolean; }): Promise<void>; /** * 请求远端用户打开媒体设备 * @param {object} options 请求远端用户打开摄像头的参数 * @param {string} options.userId 用户 Id * @param {TUIMediaDevice} options.device 请求的设备 * @param {number} options.timeout 超时时间。若 timeout 设置为 0 ,则无超时时间 * @param {Function} 请求回调,用来通知发起方请求被接受/拒绝/取消/超时/错误的回调 * @return {Promise<number>} <br/> * 该接口返回 requestId,用户可使用该 requestId 调用 cancelRequest 接口取消请求 * * @example * const roomEngine = new TUIRoomEngine(); * const requestId = roomEngine.openRemoteDeviceByAdmin({ * userId: 'user_1234', * device: TUIMediaDevice.kMicrophone //请求的设备为麦克风 * timeout: 0, * requestCallback: ({ requestCallbackType, requestId, userId, code, message }) => { * switch (requestCallbackType) { * case TUIRequestCallbackType.kRequestAccepted: * // 请求被接受 * break; * case TUIRequestCallbackType.kRequestRejected: * // 请求被拒绝 * break; * case TUIRequestCallbackType.kRequestCancelled: * // 请求已取消 * break; * case TUIRequestCallbackType.kRequestTimeout: * // 请求超时 * break; * case TUIRequestCallbackType.kRequestError: * // 请求错误 * break; * default: * break; * } * }, * }); */ openRemoteDeviceByAdmin(options: { userId: string; device: TUIMediaDevice; timeout: number; requestCallback?: (callbackInfo: TUIRequestCallback) => void; }): Promise<TUIRequest>; /** * 参会者向主持人申请打开设备 * * @param {object} options 请求远端用户打开摄像头的参数 * @param {TUIMediaDevice} options.device 请求的设备 * @param {number} options.timeout 超时时间。若 timeout 设置为 0 ,则无超时时间 * @param {Function} 请求回调,用来通知发起方请求被接受/拒绝/取消/超时/错误的回调 * @return {Promise<number>} <br/> * 该接口返回 requestId,用户可使用该 requestId 调用 cancelRequest 接口取消请求 * * @example * const roomEngine = new TUIRoomEngine(); * const requestId = roomEngine.applyToAdminToOpenLocalDevice({ * device: TUIMediaDevice.kMicrophone, //请求打开麦克风 * timeout: 0, * requestCallback: ({ requestCallbackType, requestId, userId, code, message }) => { * switch (requestCallbackType) { * case TUIRequestCallbackType.kRequestAccepted: * // 请求被接受 * break; * case TUIRequestCallbackType.kRequestRejected: * // 请求被拒绝 * break; * case TUIRequestCallbackType.kRequestCancelled: * // 请求已取消 * break; * case TUIRequestCallbackType.kRequestTimeout: * // 请求超时 * break; * case TUIRequestCallbackType.kRequestError: * // 请求错误 * break; * default: * break; * } * }, * }); */ applyToAdminToOpenLocalDevice(options: { device: TUIMediaDevice; timeout: number; requestCallback?: (callbackInfo: TUIRequestCallback) => void; }): Promise<TUIRequest>; /** * 关闭远端用户媒体设备 * * @param {object} options 关闭远端用户摄像头的参数 * @param {string} options.userId 用户 Id * @param {TUIMediaDevice} options.device 用户 Id * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.closeRemoteDeviceByAdmin({ * userId: 'user_1234', * device: TUIMediaDevice.kMicrophone, //关闭掉麦克风 * }); */ closeRemoteDeviceByAdmin(options: { userId: string; device: TUIMediaDevice; }): Promise<void>; /** * 取消已经发出的请求 * @param {object} options 取消已经发出请求的参数 * @param {string} options.requestId 请求 Id * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.cancelRequest({ * requestId: '', // 请使用实际 requestId * }); */ cancelRequest(options: { requestId: string; }): Promise<void>; /** * 回复远端用户的请求 * @param {object} options 回复远端用户的请求的参数 * @param {string} options.requestId 请求 Id * @param {boolean} options.agree 是否同意 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * * // 同意远端的请求 * await roomEngine.responseRemoteRequest({ * requestId: '', // 请使用实际 requestId * agree: true, * }); * * // 拒绝远端的请求 * await roomEngine.responseRemoteRequest({ * requestId: '', // 请使用实际 requestId * agree: false, * }); */ responseRemoteRequest(options: { requestId: string; agree: boolean; }): Promise<any>; /** * 禁止/允许所有用户打开媒体设备(此接口对于房主和管理员无效) * @param {object} options * @param {TUIMediaDevice} options.device 操作的媒体设备 * @param {boolean} options.isDisable 是否被禁止 * @returns {Promise<void>} * @example * // Example 1: 禁止所有用户打开麦克风 * await roomEngine.disableDeviceForAllUserByAdmin({ * device: TUIMediaDevice.kMicrophone, * isDisable: true, * }) * // Example 2: 允许所有用户打开麦克风 * await roomEngine.disableDeviceForAllUserByAdmin({ * device: TUIMediaDevice.kMicrophone, * isDisable: false, * }) */ disableDeviceForAllUserByAdmin(options: { device: TUIMediaDevice; isDisable: boolean; }): Promise<void>; /** * 禁止/允许所有用户发送消息 * @param {object} options * @param {boolean} options.isDisable 是否被禁止 * @returns {Promise<void>} * @example * await roomEngine.disableSendingMessageForAllUser({ * isDisable: true, * }) */ disableSendingMessageForAllUser(options: { isDisable: boolean; }): Promise<void>; /** * 禁止/允许某个用户发送消息 * @param {object} options * @param {string} options.userId 用户的 Id * @param {boolean} options.isDisable 是否被禁止 * @returns {Promise<void>} * @example * await roomEngine.disableSendingMessageByAdmin({ * userId: 'user_1234', * isDisable: true, * }) */ disableSendingMessageByAdmin(options: { userId: string; isDisable: boolean; }): Promise<void>; /** * 改变用户的角色,仅主持人可调用该接口 * @param {object} options 改变用户的角色,仅主持人可调用该接口的参数 * @param {string} options.userId 用户 Id * @param {TUIRole} options.userRole 用户角色 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * // 将房间移交给用户 user_1234 * await roomEngine.changeUserRole({ * userId: 'user_1234', * userRole: TUIRole.kRoomOwner, * }); * * // 将用户 user_1234 设置为房间管理员 * await roomEngine.changeUserRole({ * userId: 'user_1234', * userRole: TUIRole.kAdministrator, * }); */ changeUserRole(options: { userId: string; userRole: TUIRole; }): Promise<void>; /** * 将用户踢出房间,仅主持人和管理员可调用该接口 * @param {object} options * @param {string} options.userId 用户 Id * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.kickRemoteUserOutOfRoom({ * userId: 'user_1234', * }); */ kickRemoteUserOutOfRoom(options: { userId: string; }): Promise<void>; /** * 设置房间麦位最大值 * @param {object} options * @param {number} options.maxSeatCount 设置房间麦位最大值<br/> * roomType 为 TUIRoomType.kConference (教育及会议场景) 时,maxSeatCount 值不做限制; * roomType 为 TUIRoomType.kLivingRoom (直播场景) 时,maxSeatCount 最大限制为 16; * @returns {Promise<void>} * const roomEngine = new TUIRoomEngine(); * await roomEngine.createRoom({ roomId: '12345' }); * await roomEngine.setMaxSeatCount({ maxSeatCount: 16 }) */ setMaxSeatCount(options: { maxSeatCount: number; }): Promise<void>; /** * 获取麦位列表 * @returns {Promise<TUISeatInfo[]>} * * @example * const roomEngine = new TUIRoomEngine(); * const seatList = await roomEngine.getSeatList(); * ; */ getSeatList(): Promise<TUISeatInfo[]>; /** * 麦下用户可调用 takeSeat 成为麦上用户,仅麦上用户可发布本地音视频流。<br/> * 主持人&管理员调用 takeSeat 成功后即为麦上用户。<br/> * roomInfo.SpeechMode 为 TUISpeechMode.kFreeToSpeak 模式时,普通用户调用 takeSeat 方法成功后即为麦上用户。<br/> * roomInfo.SpeechMode 为 TUISpeechMode.kSpeakAfterTakingSeat 模式时,普通用户调用 takeSeat 方法需要等待主持人/管理员的同意后成为麦上用户。<br/> * 麦上用户的变更通过 TUIRoomEvents.onSeatListChanged 通知所有用户。<br/> * @param {object} options 获取麦位的参数 * @param {number} options.seatIndex 麦位 index, 无麦位序号时设置为 -1 * @param {number} options.timeout 超时时间。若 timeout 设置为 0,则无超时时间 * @param {Function} options.requestCallback 请求回调,用来通知发起方请求被接受/拒绝/取消/超时/错误的回调 * @returns {Promise<number>} <br/> * 该接口返回 request 结构体,当 request.requestId 不为 '' 时,用户可调用 cancelRequest 接口取消上麦请求。 * * @example * const roomEngine = new TUIRoomEngine(); * * // 情景一:主持人/管理员上麦 * // 情景二:roomInfo.SpeechMode 为 TUISpeechMode.kFreeToSpeak 模式时,普通用户上麦 * await roomEngine.takeSeat({ * seatIndex: -1, * timeout: 0, * }); * * // 情景三:roomInfo.SpeechMode 为 TUISpeechMode.kSpeakAfterTakingSeat 模式时,普通用户上麦 * const request = await roomEngine.instance?.takeSeat({ * seatIndex: -1, * timeout: 0, * requestCallback: ({ requestCallbackType, requestId, userId, code, message }) => { * switch (requestCallbackType) { * case TUIRequestCallbackType.kRequestAccepted: * // 请求被接受 * break; * case TUIRequestCallbackType.kRequestRejected: * // 请求被拒绝 * break; * case TUIRequestCallbackType.kRequestCancelled: * // 请求已取消 * break; * case TUIRequestCallbackType.kRequestTimeout: * // 请求超时 * break; * case TUIRequestCallbackType.kRequestError: * // 请求错误 * break; * default: * break; * } * }, * }); */ takeSeat(options: { seatIndex: number; timeout: number; requestCallback?: (callbackInfo: TUIRequestCallback) => void; }): Promise<TUIRequest>; /** * 离开麦位 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.leaveSeat(); */ leaveSeat(): Promise<void>; /** * 邀请其他人上麦(仅房间主持人和管理员可调用此方法) * @param {object} options 邀请其他人上麦的参数 * @param {number} options.seatIndex 麦位 index, roomType 为 TUIRoomType.kConference 时无需关心,填 -1 即可 * @param {string} options.userId 用户 Id * @param {number} options.timeout 超时时间,设置为 0 时,无超时时间 * @param {Function} options.requestCallback 请求回调,用来通知发起方请求被接受/拒绝/取消/超时/错误的回调 * @returns {Promise<number>} <br/> * 该接口返回 requestId,用户可使用该 requestId 调用 cancelRequest 接口取消请求 * * @example * const roomEngine = new TUIRoomEngine(); * const requestId = await roomEngine.takeUserOnSeatByAdmin({ * seatIndex: 0, * userId: 'user_1234', * timeout: 0, * requestCallback: ({ requestCallbackType, requestId, userId, code, message }) => { * switch (requestCallbackType) { * case TUIRequestCallbackType.kRequestAccepted: * // 请求被接受 * break; * case TUIRequestCallbackType.kRequestRejected: * // 请求被拒绝 * break; * case TUIRequestCallbackType.kRequestCancelled: * // 请求已取消 * break; * case TUIRequestCallbackType.kRequestTimeout: * // 请求超时 * break; * case TUIRequestCallbackType.kRequestError: * // 请求错误 * break; * default: * break; * } * }, * }); */ takeUserOnSeatByAdmin(options: { seatIndex: number; userId: string; timeout: number; requestCallback?: (callbackInfo: TUIRequestCallback) => void; }): Promise<TUIRequest>; /** * 将其他人踢下麦(仅房间主持人和管理员可调用此方法) * @param {object} options 要求其他人下麦的参数 * @param {number} options.seatIndex 麦位 index * @param {string} options.userId 用户 Id * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.kickUserOffSeatByAdmin({ * seatIndex: 0, * userId: 'user_1234', * }); */ kickUserOffSeatByAdmin(options: { seatIndex: number; userId: string; }): Promise<void>; /** * 锁定某个麦位状态(仅房间主持人和管理员可调用此方法) * * @param {object} options 锁定某个麦位需要的参数 * @param {number} options.seatIndex 麦位索引 * @param {TUISeatLockParams} options.lockParams 锁麦参数 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.lockSeatByAdmin({ * seatIndex: -1, * lockParams: { * lockSeat: true, * lockVideo: true, * lockAudio: true, * } * }); */ lockSeatByAdmin(options: { seatIndex: number; lockParams: TUISeatLockParams; }): Promise<any>; /** * 发送文本消息 * @param {object} options * @param {string} options.messageText 文本消息内容 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.sendTextMessage({ * messageText: 'hello, everyone', * }); */ sendTextMessage(options: { messageText: string; }): Promise<void>; /** * 发送自定义消息 * @param {object} options * @param {string} options.messageText 自定义消息内容 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.sendCustomMessage({ * messageText: '{ data:'', description: ''}', * }); */ sendCustomMessage(options: { messageText: string; }): Promise<void>; /** * 开始屏幕共享 * @param {object=} options * @param {boolean=} [options.screenAudio=false] web 端屏幕共享是否可选共享系统声音, screenAudio 默认值为 false * @param {string=} options.view 非必填,本地预览屏幕分享的 dom 元素的 id * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * // example 1: 开始屏幕分享 * await roomEngine.startScreenSharing(); * // example 2: 开始屏幕分享(可采集系统音频) * await roomEngine.startScreenSharing({ screenAudio: true }); * // example 3: 开始屏幕分享并在本地预览 * await roomEngine.startScreenSharing({ view: 'screen-preview' }); */ startScreenSharing(options?: { screenAudio?: boolean; view?: string; }): Promise<void>; /** * 停止屏幕共享 * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.stopScreenSharing(); */ stopScreenSharing(): Promise<void>; /** * 开始屏幕共享 Electron * @param {object} options Electron 开始屏幕共享参数 * @param {string} options.targetId 分享窗口 id, 可从 getScreenSharingTarget 获取 * @param {string=} options.view 非必填,本地预览屏幕分享的 dom 元素的 id * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * // example 1: 开始屏幕共享 * await roomEngine.startScreenSharingElectron({ targetId: 'xxx' }); * // example 2: 开始屏幕共享并在本地预览 * await roomEngine.startScreenSharingElectron({ targetId: 'xxx', view: 'screen-preview' }); * */ startScreenSharingElectron(options: { targetId: string; view?: string; } | string): Promise<void>; /** * 停止屏幕共享 Electron * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.stopScreenSharingElectron(); */ stopScreenSharingElectron(): Promise<void>; /** * 获取屏幕分享列表 Electron * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * const screenList = await roomEngine.getScreenSharingTarget(); */ getScreenSharingTarget(): Promise<Array<TRTCScreenCaptureSourceInfo>>; /** * 切换屏幕分享窗口 Electron * @param {object} options Electron 切换屏幕分享窗口参数 * @param {string} options.targetId 分享窗口 id, 可从 getScreenSharingTarget 获取 * * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.selectScreenSharingTarget({ targetId: 'xxx' }); */ selectScreenSharingTarget(options: { targetId: string; } | string): Promise<void>; /** * 监听 roomEngine 的事件 * @param event TUIRoomEvents * @param func function * @returns {void} * * @example * const roomEngine = new TUIRoomEngine(); * roomEngine.on(event, func); */ on(event: TUIRoomEvents, func: (...args: any[]) => void): void; private setObserver; /** * 取消监听 roomEngine 的事件 * @param event TUIRoomEvents * @param func function * @returns {void} * * @example * const roomEngine = new TUIRoomEngine(); * roomEngine.off(event, func); */ off(event: string, func: (...args: any[]) => void): void; private handleTrtcCloudBindEvent; /** * 获取摄像头设备列表<br> * @returns {Promise<TRTCDeviceInfo[]>} 摄像头列表 * @example * const roomEngine = new TUIRoomEngine(); * const cameralist = await roomEngine.getCameraDevicesList(); * for (i = 0; i < cameralist.length; i++) { * var camera = cameralist[i]; * console.info("camera deviceName: " + camera.deviceName + " deviceId:" + camera.deviceId); * } */ getCameraDevicesList(): Promise<TRTCDeviceInfo[]>; /** * 获取麦克风设备列表<br> * @returns {Promise<TRTCDeviceInfo[]>} 麦克风列表 * @example * const roomEngine = new TUIRoomEngine(); * const micList = await roomEngine.getMicDevicesList(); * for (i = 0; i < micList.length; i++) { * var mic = micList[i]; * console.info("mic deviceName: " + mic.deviceName + " deviceId:" + mic.deviceId); * } */ getMicDevicesList(): Promise<TRTCDeviceInfo[]>; /** * 获取扬声器设备列表<br> * @returns {Promise<TRTCDeviceInfo[]>} 扬声器列表 * @example * const roomEngine = new TUIRoomEngine(); * const speakerList = await roomEngine.getSpeakerDevicesList(); * for (i = 0; i < speakerList.length; i++) { * var speaker = speakerList[i]; * console.info("speaker deviceName: " + speaker.deviceName + " deviceId:" + speaker.deviceId); * } */ getSpeakerDevicesList(): Promise<TRTCDeviceInfo[]>; /** * 设置要使用的摄像头设备<br> * @param {Object} options * @param {String} options.deviceId - 从 getCameraDevicesList 中得到的设备 ID * @returns {Promise<void>} * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.setCurrentCameraDevice({ deviceId: '' }); */ setCurrentCameraDevice(options: { deviceId: string; }): Promise<void>; /** * 设置要使用的麦克风设备<br> * @param {Object} options * @param {String} options.deviceId - 从 getMicDevicesList 中得到的设备 ID * @returns {Promise<void>} * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.setCurrentMicDevice({ deviceId: '' }); */ setCurrentMicDevice(options: { deviceId: string; }): Promise<void>; /** * 设置要使用的扬声器设备<br> * @param {Object} options * @param {String} options.deviceId - 从 getSpeakerDevicesList 中得到的设备 ID * @returns {Promise<void>} * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.setCurrentSpeakerDevice({ deviceId: '' }); */ setCurrentSpeakerDevice(options: { deviceId: string; }): Promise<void>; /** * 获取当前正在使用的摄像头设备 * @returns {TRTCDeviceInfo} 设备信息,能获取设备 ID 和设备名称 * @example * const roomEngine = new TUIRoomEngine(); * const currentCameraDevice = roomEngine.getCurrentCameraDevice(); */ getCurrentCameraDevice(): TRTCDeviceInfo; /** * 获取当前正在使用的麦克风设备 * @returns {TRTCDeviceInfo} 设备信息,能获取设备 ID 和设备名称 * @example * const roomEngine = new TUIRoomEngine(); * const currentMicDevice = roomEngine.getCurrentMicDevice(); */ getCurrentMicDevice(): TRTCDeviceInfo; /** * 获取当前正在使用的扬声器设备 * @returns {TRTCDeviceInfo} 设备信息,能获取设备 ID 和设备名称 * @example * const roomEngine = new TUIRoomEngine(); * const currentSpeakerDevice = roomEngine.getCurrentSpeakerDevice(); */ getCurrentSpeakerDevice(): TRTCDeviceInfo; /** * 开始进行摄像头测试 * @param {string} view 显示摄像头测试的视频区域, 传入的 view 为承载预览画面 div 元素的 id * @returns {Promise<void>} * * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.startCameraDeviceTest({ view: 'test-preview' }); */ startCameraDeviceTest(options: { view: string; }): Promise<void>; /** * 停止摄像头测试 * @returns {void} * @example * const roomEngine = new TUIRoomEngine(); * await roomEngine.stopCameraDeviceTest(); */ stopCameraDeviceTest(): Promise<void>; /** * 开始进行麦克风测试 * @param options * @param {number} options.interval 麦克风音量的回调时间 */ startMicDeviceTest(options: { interval: number; }): Promise<void>; /** * 停止进行麦克风测试 */ stopMicDeviceTest(): Promise<void>; /** * 获取 trtcCloud 实例 * @returns {TRTCCloud} trtcCloud * web 端 trtcCloud 能力请查看:https://web.sdk.qcloud.com/trtc/webrtc/trtcCloud/doc/TRTCCloud.html * * @example * const roomEngine = new TUIRoomEngine(); * const trtcCloud = roomEngine.getTRTCCloud(); */ getTRTCCloud(): TRTCCloud; /** * 获取 tim 实例 * @returns {TIM} tim * web 端 tim 能力请查看:https://web.sdk.qcloud.com/im/doc/zh-cn/SDK.html * * @example * const roomEngine = new TUIRoomEngine(); * const trtcCloud = roomEngine.getTIM(); */ getTIM(): any; destroy(): void; /** * 实验性接口 * @private * @param jsonStr jason 字符串 * @returns */ callExperimentalAPI(jsonStr: string): Promise<void>; private handleSetFramework; } export default TUIRoomEngine;