UNPKG

@tencentcloud/call-engine-wx

Version:
1,074 lines (1,067 loc) 42.8 kB
import { ChatSDK } from '@tencentcloud/chat'; export { default as TIM, default as TencentCloudChat } from '@tencentcloud/chat'; import TRTCCloud from '@tencentcloud/trtc-component-wx'; export { default as TRTCCloud } from '@tencentcloud/trtc-component-wx'; interface ITUICallEngineOption { SDKAppID?: number; sdkAppID?: number; tim?: any; callkitVersion?: string; framework?: string; isFromChat?: boolean; language?: number; component?: number; isSharedInstance?: boolean; } interface ICallParam { userID: string; type: CALL_MEDIA_TYPE; timeout?: number; offlinePushInfo?: OfflinePushInfo; roomID?: number; strRoomID?: string; userData?: string; } interface IGroupCallParam { userIDList: string[]; type: CALL_MEDIA_TYPE; groupID: string; timeout?: number; offlinePushInfo?: OfflinePushInfo; roomID?: number; strRoomID?: string; userData?: string; } interface IJoinInGroupCallParam { type: CALL_MEDIA_TYPE; groupID: string; roomID: number; strRoomID: string; } interface IInviteUserParam { userIDList: string[]; offlinePushInfo?: OfflinePushInfo; timeout?: number; userData?: string; } interface ICallsParam { userIDList: string[]; type: CALL_MEDIA_TYPE; chatGroupID?: string; timeout?: number; offlinePushInfo?: OfflinePushInfo; roomID?: number; strRoomID?: string; userData?: string; } interface IJoinParam { callId: string; } interface OfflinePushInfo { title?: string; description?: string; androidOPPOChannelID?: string; extension: string; ignoreIOSBadge?: boolean; iOSSound?: string; androidSound?: string; androidVIVOClassification?: number; androidXiaoMiChannelID?: string; androidFCMChannelID?: string; androidHuaWeiCategory?: string; isDisablePush?: boolean; iOSPushType?: IOSOfflinePushType; } declare enum IOSOfflinePushType { APNs = 0, VoIP = 1 } interface IStopRemoteViewParam { userID: string; } declare enum CALL_MEDIA_TYPE { UNKNOWN = 0, AUDIO_CALL = 1, VIDEO_CALL = 2 } declare enum LOG_LEVEL { NORMAL = 0, RELEASE = 1, WARNING = 2, ERROR = 3, NONE = 4 } declare enum TRTCVideoResolution { TRTCVideoResolution_640_480 = 62, TRTCVideoResolution_960_720 = 64, TRTCVideoResolution_960_540 = 110, TRTCVideoResolution_1280_720 = 112, TRTCVideoResolution_1920_1080 = 114 } declare enum TRTCVideoFillMode { TRTCVideoFillMode_Fill = 0, TRTCVideoFillMode_Fit = 1 } declare enum TRTCVideoMirrorType { TRTCVideoMirrorType_Auto = 0, TRTCVideoMirrorType_Enable = 1, TRTCVideoMirrorType_Disable = 2 } declare enum TRTCBeautyStyle { TRTCBeautyStyleSmooth = 0, TRTCBeautyStyleNature = 1 } /** * 设备信息<br> * @param {String} deviceId - 设备PID,字符编码格式是UTF-8 * @param {String} deviceName - 设备名称,字符编码格式是UTF-8 * @param {String} kind - 设备类型,['videoinput' | 'audioinput'] * @param {String} deviceName - 设备名称,字符编码格式是UTF-8 */ declare class TRTCDeviceInfo { deviceId: string; deviceName: string; kind?: string; label?: string; groupId?: string; constructor(deviceId?: string, deviceName?: string, kind?: string, label?: string, groupId?: string); } /** * 视频编码参数<br> * 该设置决定了远端用户看到的画面质量(同时也是云端录制出的视频文件的画面质量)。 * @param {TRTCVideoResolution} videoResolution - 【字段含义】 视频分辨率<br> * 【推荐取值】 <br> * - 视频通话建议选择360 × 640及以下分辨率,resMode 选择 Portrait。<br> * - 手机直播建议选择 540 × 960,resMode 选择 Portrait。<br> * - Window 和 iMac 建议选择 640 × 360 及以上分辨率,resMode 选择 Landscape。 * 【特别说明】 TRTCVideoResolution 默认只能横屏模式的分辨率,例如640 × 360。<br> * 如需使用竖屏分辨率,请指定 resMode 为 Portrait,例如640 × 360结合 Portrait 则为360 × 640。<br> * @param {Number} videoFps - 【字段含义】视频采集帧率<br> * 【推荐取值】15fps 或 20fps,10fps 以下会有轻微卡顿感,5fps 以下卡顿感明显,20fps 以上的帧率则过于浪费(电影的帧率也只有 24fps)。<br> * 【特别说明】很多 Android 手机的前置摄像头并不支持15fps以上的采集帧率,部分过于突出美颜功能的 Android 手机前置摄像头的采集帧率可能低于10fps。<br> * @param {Number} videoBitrate - 【字段含义】视频上行码率<br> * 【推荐取值】推荐设置请参考本文件前半部分 TRTCVideoResolution 定义处的注释说明<br> * 【特别说明】码率太低会导致视频中有很多的马赛克<br> */ declare class TRTCVideoEncParam { videoResolution: TRTCVideoResolution; videoFps: number; videoBitrate: number; constructor(videoResolution?: TRTCVideoResolution, videoFps?: number, videoBitrate?: number); } declare enum TRTCVideoRotation { TRTCVideoRotation0 = 0, TRTCVideoRotation90 = 1, TRTCVideoRotation180 = 2, TRTCVideoRotation270 = 3 } /** * 画面渲染参数<br> * 您可以通过设置此参数来控制画面的旋转、填充、镜像模式 * @param {TRTCVideoRotation} rotation - 【字段含义】视频画面旋转方向 * @param {TRTCVideoFillMode} fillMode - 【字段含义】视频画面填充模式 * @param {TRTCVideoMirrorType} mirrorType - 【字段含义】画面渲染镜像类型 */ declare class TRTCRenderParams { rotation: TRTCVideoRotation; fillMode: TRTCVideoFillMode; mirrorType: TRTCVideoMirrorType; constructor(rotation?: TRTCVideoRotation, fillMode?: TRTCVideoFillMode, mirrorType?: TRTCVideoMirrorType); } declare enum TRTCQuality { TRTCQuality_Unknown = 0, TRTCQuality_Excellent = 1, TRTCQuality_Good = 2, TRTCQuality_Poor = 3, TRTCQuality_Bad = 4, TRTCQuality_Vbad = 5, TRTCQuality_Down = 6 } declare enum TRTCLogLevel { TRTCLogLevelVerbose = 0, TRTCLogLevelDebug = 1, TRTCLogLevelInfo = 2, TRTCLogLevelWarn = 3, TRTCLogLevelError = 4, TRTCLogLevelFatal = 5, TRTCLogLevelNone = 6 } interface IPlayVideoOption { rotation?: TRTCVideoRotation; fillMode?: TRTCVideoFillMode; mirrorType?: TRTCVideoMirrorType; muted?: boolean; } interface IStartRemoteViewParam { userID: string; videoViewDomID: string; options?: IPlayVideoOption; } interface IWxDeviceCheckParams { microphone: boolean; camera: boolean; } interface IBeautyLevelParams { style: TRTCBeautyStyle; beautyLevel: number; whitenessLevel: number; } declare enum TUIErrorCode { ERR_SUCC = 0, ERR_FAILED = -1, ERR_INVALID_PARAMETER = -1001, ERR_SDK_NOT_INITIALIZED = -1002, ERR_PERMISSION_DENIED = -1003, ERR_REQUIRE_PAYMENT = -1004, ERR_CAMERA_START_FAILED = -1100, ERR_CAMERA_NOT_AUTHORIZED = -1101, ERR_CAMERA_OCCUPIED = -1102, ERR_CAMERA_DEVICE_EMPTY = -1103, ERR_MICROPHONE_START_FAILED = -1104, ERR_MICROPHONE_NOT_AUTHORIZED = -1105, ERR_MICROPHONE_OCCUPIED = -1106, ERR_MICROPHONE_DEVICE_EMPTY = -1107, ERR_ROOM_NAME_INVALID = -2107, ERR_USER_NOT_EXIST = -2200, ERR_REQUEST_ID_INVALID = -2311 } declare enum TUIVideoQuality { kVideoQuality_360p = 1, kVideoQuality_540p = 2, kVideoQuality_720p = 3, kVideoQuality_1080p = 4 } /** * 视频编码参数 * @typedef {object} TUIVideoEncoderParams * @property {number} fps 帧率设置 * @property {number} bitrate 目标编码码率设置 * @property {TUIVideoQuality} quality 上行视频分辨率 * @property {TUIVideoQuality} videoResolution 上行视频分辨率(自 v1.6.0 版本开始支持,v1.6.0 之前版本请使用 quality 参数) * @property {TUIResolutionMode} resolutionMode 横竖屏模式 */ type TUIVideoEncoderParams = { quality?: TUIVideoQuality; videoResolution: TUIVideoQuality; fps: number; bitrate: number; resolutionMode: TUIResolutionMode; }; declare enum TUIResolutionMode { kResolutionMode_Landscape = 0, kResolutionMode_Portrait = 1 } type TUIDeviceInfo = { deviceId: string; deviceName: string; deviceProperties?: { supportedResolution?: { width: number; height: number; }[]; }; }; /** * **TUIRoomEngine 事件列表**<br> * @namespace TUICallEvents * @example * import TUIRoomEngine, { TUICallEvents } from '@tencentcloud/tuiroom-engine-js'; * const roomEngine = new TUIRoomEngine(); * roomEngine.on(TUICallEvents.onError, (error) => { * console.log('roomEngine.error', error); * }) */ declare enum TUICallEvent { /** * @description sdk内部发生了错误 * @memberOf module:TUICallEvent * @example * let onError = function(error) { * console.log(error) * }; * tuiCallEngine.on(TUICallEvent.ERROR, onError); */ ERROR = "onError", /** * @description SDK 进入 ready 状态时收到该回调 * @memberOf module:TUICallEvent * @example * let onSDKReady = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.SDK_READY, onSDKReady); */ SDK_READY = "sdkReady", /** * @description 重复登陆,收到该回调说明被踢出房间 * @memberOf module:TUICallEvent * @example * let handleOnKickedOut = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.KICKED_OUT, handleOnKickedOut); */ KICKED_OUT = "onKickedOffLine", /** * @description userSig 过期事件 * @default 'onUserSigExpired' * @event TUICallEvents#onUserSigExpired * @example * const roomEngine = new TUIRoomEngine(); * roomEngine.on(TUICallEvents.onUserSigExpired, () => { * console.log('roomEngine.onUserSigExpired'); * }); */ onUserSigExpired = "onUserSigExpired", /** * @description 表示通话接通,主叫和被叫都可以收到,您可以通过监听这个事件来开启云端录制、内容审核等流程。 * - **注意:支持 v1.4.6+ 版本**。 * @memberOf module:TUICallEvent * @example * let handleOnCallBegin = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.ON_CALL_BEGIN, handleOnCallBegin); */ ON_CALL_BEGIN = "onCallBegin", /** * @description 收到通话请求的回调(仅被叫收到) * - 注意:后续计划废弃, 建议使用 ON_CALL_RECEIVED 事件。 * @memberOf module:TUICallEvent * @example * let handleNewInvitationReceived = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.INVITED, handleNewInvitationReceived); */ INVITED = "onInvited", /** * @description 收到通话请求的回调(仅被叫收到),您可以通过监听这个事件,来决定是否显示通话接听界面。 * @memberOf module:TUICallEvent * @example * let handleOnCallReceived = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.ON_CALL_RECEIVED, handleOnCallReceived); */ ON_CALL_RECEIVED = "onCallReceived", /** * @description 如果有用户接听,那么会收到此回调 * @memberOf module:TUICallEvent * @example * let handleUserAccept = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.USER_ACCEPT, handleUserAccept); */ USER_ACCEPT = "onUserAccept", /** * @description 如果有用户同意进入通话,那么会收到此回调 * @memberOf module:TUICallEvent * @example * let handleUserEnter = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.USER_ENTER, handleUserEnter); */ USER_ENTER = "onUserJoin", /** * @description 如果有用户同意离开通话,那么会收到此回调 * @memberOf module:TUICallEvent * @example * let handleUserLeave = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.USER_LEAVE, handleUserLeave); */ USER_LEAVE = "onUserLeave", /** * @description 用户拒绝通话 * 1. 在C2C通话中,只有发起方会收到拒绝回调 * 例如 A 邀请 B、C 进入通话,B拒绝,A可以收到该回调,但C不行 * 2. 在IM群组通话中,所有被邀请人均能收到该回调 * 例如 A 邀请 B、C 进入通话,B拒绝,A、C均能收到该回调 * @memberOf module:TUICallEvent * @example * let handleInviteeReject = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.REJECT, handleInviteeReject); */ REJECT = "onUserReject", /** * @description 邀请用户无应答 * 1. 在C2C通话中,只有发起方会收到无人应答的回调 * 例如 A 邀请 B、C 进入通话,B不应答,A可以收到该回调,但C不行 * 2. 在IM群组通话中,所有被邀请人均能收到该回调 * 例如 A 邀请 B、C 进入通话,B不应答,A、C均能收到该回调 * @memberOf module:TUICallEvent * @example * let handleNoResponse = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.NO_RESP, handleNoResponse); */ NO_RESP = "onUserNoResponse", /** * @description 邀请方忙线 * @memberOf module:TUICallEvent * @example * let handleLineBusy = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.LINE_BUSY, handleLineBusy); */ LINE_BUSY = "onUserLineBusy", /** * @description 作为被邀请方会收到,收到该回调说明本次通话被取消了 * - **注意:废弃,推荐使用 ON_CALL_NOT_CONNECTED 事件**。 * @memberOf module:TUICallEvent * @example * let handleCallingCancel = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.CALLING_CANCEL, handleCallingCancel); */ CALLING_CANCEL = "onCallingCancel", /** * @description 如果通话未建立,都会抛出该事件。您可以通过监听该事件来实现类似未接来电、重置 UI 状态等显示逻辑。 * - **注意:废弃,推荐使用 ON_CALL_NOT_CONNECTED 事件**。 * @memberOf module:TUICallEvent * @example * let handleOnCallCanceled = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.ON_CALL_CANCELED, handleOnCallCanceled); */ ON_CALL_CANCELED = "onCallCancelled", /** * @private * @description 收到该回调说明本次通话结束了 * @memberOf module:TUICallEvent * @example * let handleCallingEnd = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.CALL_END, handleCallingEnd); */ CALL_END = "onCallEnd", /** * @description 收到该回调说明本次通话结束了 * @memberOf module:TUICallEvent * @example * let handleCallingEnd = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.CALLING_END, handleCallingEnd); */ CALLING_END = "onCallEnd", /** * @description 远端用户开启/关闭了摄像头, 会收到该回调 * @memberOf module:TUICallEvent * @example * let handleUserVideoChange = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.USER_VIDEO_AVAILABLE, handleUserVideoChange); */ USER_VIDEO_AVAILABLE = "onUserVideoAvailable", /** * @description 远端用户开启/关闭了麦克风, 会收到该回调 * @memberOf module:TUICallEvent * @example * let handleUserAudioChange = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.USER_AUDIO_AVAILABLE, handleUserAudioChange); */ USER_AUDIO_AVAILABLE = "onUserAudioAvailable", /** * @description 远端用户说话音量调整, 会收到该回调 * @memberOf module:TUICallEvent * @example * let handleUserVoiceVolumeChange = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.USER_VOICE_VOLUME, handleUserVoiceVolumeChange); */ USER_VOICE_VOLUME = "onUserVoiceVolumeChanged", /** * @description 群聊更新邀请列表收到该回调 * @memberOf module:TUICallEvent * @example * let handleGroupInviteeListUpdate = function(event) { * console.log(event) * }; * tuiCallEngine.on(TUICallEvent.GROUP_CALL_INVITEE_LIST_UPDATE, handleGroupInviteeListUpdate); */ GROUP_CALL_INVITEE_LIST_UPDATE = "onGroupCallInviteeListUpdate", /** * @description 通话类型切换收到该回调 * @memberOf module:TUICallEvent * @example * let handleCallTypeChanged = function({oldCallType, newCallType}) { * console.log(oldCallType, newCallType) * }; * tuiCallEngine.on(TUICallEvent.CALL_TYPE_CHANGED, handleCallTypeChanged); */ CALL_TYPE_CHANGED = "onCallMediaTypeChanged", /** * @description 设备列表更新 * @memberOf module:TUICallEvent * @example * let handleDeviceUpdated = function({ microphoneList, cameraList, currentMicrophone, currentCamera}) { * console.log(microphoneList, cameraList, currentMicrophone, currentCamera) * }; * tuiCallEngine.on(TUICallEvent.DEVICED_UPDATED, handleDeviceUpdated); */ DEVICED_UPDATED = "onDeviceUpdated", /** * @description 用户网络质量 * @memberOf module:TUICallEvent * @example * let handleOnUserNetworkQualityChanged = function(event) { * console.log(event.networkQualityList); * }; * tuiCallEngine.on(TUICallEvent.ON_USER_NETWORK_QUALITY_CHANGED, handleOnUserNetworkQualityChanged); */ ON_USER_NETWORK_QUALITY_CHANGED = "onUserNetworkQualityChanged", MESSAGE_SENT_BY_ME = "onMessageSentByMe", /** * @description 设备变更事件 * @default 'onDeviceChange' * @event TUICallEvents#onDeviceChange * @param {object} options * @param {string} options.deviceId 设备 Id * @param {any} options.type 设备类型 * @param {any} options.state 设备变更状态 * @example * const roomEngine = new TUIRoomEngine(); * roomEngine.on(TUICallEvents.onDeviceChange, ({ deviceId, type, state }) => { * console.log('roomEngine.onDeviceChange', deviceId, type, state); * }); */ onDeviceChange = "onDeviceChange", /** * @description 通话结束的回调,通话未接通的情况下,因为用户拒绝、忙线等原因导致的通话结束,都会回调该接口。 * - **注意:v3.0.0 + 支持**。 * @memberOf module:TUICallEvent * @example * tuiCallEngine.on(TUICallEvent.ON_CALL_NOT_CONNECTED, (event) => { * console.log(event); * }); */ ON_CALL_NOT_CONNECTED = "onCallNotConnected", /** * @description 当一个多人通话发生邀请他人时, 处在该通话的所有人都会抛出该事件, userId 就是被邀请者 * - **注意:v3.0.0 + 支持**。 * @memberOf module:TUICallEvent * @example * tuiCallEngine.on(TUICallEvent.ON_USER_INVITING, (event) => { * console.log(event); * }); */ ON_USER_INVITING = "onUserInviting" } /** * 切换摄像头参数 * @memberof SDK * * @exports TUICallCameraPosition * @module TUICallCameraPosition */ declare enum TUICallCameraPosition { /** * @description 摄像头类型 - 前置摄像头 * @memberOf module:TRTCCallCameraPosition * @example * tuiCallEngine.switchCamera(TUICallCameraPosition.FRONT); // 切换前置摄像头 */ FRONT = 0, /** * @description 摄像头类型 - 后置摄像头 * @memberOf module:TRTCCallCameraPosition * @example * tuiCallEngine.switchCamera(TUICallCameraPosition.BACK); // 切换后置摄像头 */ BACK = 1 } declare enum AUDIO_PLAYBACK_DEVICE { SPEAKER = 0, EAR = 1 } declare enum AUDIO_ROUTE { SPEAKER = "speaker", EAR = "ear" } /** * 接入侧需要的呼叫类型列表,详细如下: * @memberof SDK * * @exports TUICallType * @module TUICallType */ declare const TUICallType: { /** * @description 通话类型 - 语音通话 * @memberOf module:TUICallType * @example * let onError = function(error) { * console.log(error) * }; * tuiCallEngine.call({userID: 'user1', type: TUICallType.AUDIO_CALL}) */ AUDIO_CALL: number; /** * @description 通话类型 - 视频通话 * @memberOf module:TUICallType * @example * let onError = function(error) { * console.log(error) * }; * tuiCallEngine.call({userID: 'user1', type: TUICallType.VIDEO_CALL}) */ VIDEO_CALL: number; /** * @description 设备类型 - 摄像头 * @memberOf module:TUICallType * @example * let onError = function(error) { * console.log(error) * }; * tuiCallEngine.getDeviceList(TUICallType.DEVCIED_CARMERA) // 获取摄像头列表 */ DEVCIED_CAMERA: string; /** * @description 设备类型 - 麦克风 * @memberOf module:TUICallType * @example * let onError = function(error) { * console.log(error) * }; * tuiCallEngine.getDeviceList(TUICallType.DEVCIED_CARMERA) // 获取麦克风列表 */ DEVCIED_MICROPHONES: string; }; interface ILoginParams { userID: string; userSig: string; assetsPath?: string; } declare enum CallEndReason { UnKnown = 0, Hangup = 1, Reject = 2, NoResponse = 3, Offline = 4, LineBusy = 5, Canceled = 6, OtherDeviceAccepted = 7, OtherDeviceReject = 8, EndByServer = 9 } /** * TUICallEngine 提供了 Call 的基本能力 * @class TUICallEngine */ declare class TUICallEngine { static className: string; static instance: TUICallEngine | null; private static isWasmReady; private static sdkAppId; private static userId; private static Module; private _callEngineWASM; private _logger; private _uniqueLoginId; private _isExternalTim; private _localRenderFillMode; private _remoteRenderFillMode; private _callMediaType; tim: any; trtcCloud: TRTCCloud; private _permission; constructor(options: ITUICallEngineOption); static setModule(Module: any): void; /** * @private * 调用 TUICallEngineWASM 的异步方法 * @param funcName * @param args */ private JSCallNativeFunctionPromise; /** * 创建 TUICallEngine 实例 * @memberof TUICallEngine * @param {Object} options 配置 * @param {Number} options.SDKAppID - 云通信应用的 `SDKAppID` * @param {ChatSDK=} options.tim - [TIM 实例](https://web.sdk.qcloud.com/im/doc/zh-cn/TIM.html)(选填) * - tim 参数适用于业务中已存在 TIM 实例,需要传入保证 TIM 实例唯一性 * @example * let options = { * SDKAppID: 0, // 接入时需要将0替换为您的云通信应用的 SDKAppID * // tim 参数适用于业务中已存在 TIM 实例,需要传入保证 TIM 实例唯一性 * tim: tim * }; * let tuiCallEngine = TUICallEngine.createInstance(options); */ static createInstance(options: ITUICallEngineOption): TUICallEngine; static once(event: string, func: (...args: any[]) => void): void; /** * 销毁 TUICallEngine 实例 * - 注:SDK 会先 logout,然后释放资源 * @memberof TUICallEngine * @returns {Promise} */ destroyInstance(): Promise<void>; /** * 登录 TUICallEngine * @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 * // 登录 TUICallEngine * await TUICallEngine.login({ * sdkAppId: 0, // 填写您申请的 sdkAppId * userId: '', // 填写您业务对应的 userId * userSig: '', // 填写服务器或本地计算的 userSig * }) */ login(params: ILoginParams): Promise<void>; /** * 登出接口,登出后无法再进行拨打操作 * @memberof TUICallEngine * @returns {Promise} * @example * await tuiCallEngine.logout(); */ logout(): Promise<void>; /** * C2C邀请通话,被邀请方会收到 TUICallEvent.INVITED 事件<br> * - 注意:离线推送仅适用于终端(Android 或 iOS),Web 和 微信小程序不支持。 * @memberof TUICallEngine * @param {Object} params - 拨打通话配置 * @param {String} params.userID 被邀请方 userID * @param {Number} params.type 0-未知, 1-语音通话,2-视频通话 * @param {Number=} params.timeout 0为不超时, 单位 s(秒)(选填) - 默认 30s * @param {Number=} params.roomID 数字房间号, 范围 [1, 2147483647]。支持 v1.4.2+ 版本。 * @param {String=} params.userData 扩展字段: 用于在邀请信令中增加扩展信息。支持 v1.4.2+ 版本。 * @param {Object=} params.offlinePushInfo - 自定义离线消息推送(选填)-- 需 tsignaling 版本 >= 0.8.0 * | name | Type | Description | * | :--- | :--- | :--- | * | title | string | 离线推送标题(选填) | * | description | string | 离线推送内容(选填) | * | androidOPPOChannelID | string | 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID(选填) | * | extension | string | 离线推送透传内容(选填)(tsignaling 版本 >= 0.9.0)| * @returns {Promise} * @example * await tuiCallEngine.call({userID: 'user1', type: 1}); */ call(params: ICallParam): Promise<any>; /** * IM群组邀请通话,被邀请方会收到 TUICallEvent.INVITED 事件<br> * 注意:离线推送仅适用于终端(Android 或 iOS),Web 和 微信小程序不支持。 * @memberof TUICallEngine * @param {Object} params - 群聊拨打通话配置 * @param {Array} params.userIDList 邀请列表 * @param {Number} params.type 0-未知, 1-语音通话,2-视频通话 * @param {String} params.groupID IM 群组 ID * @param {Number=} params.timeout 0为不超时, 单位 s(秒)(选填) - 默认 30s * @param {Number=} params.roomID 数字房间号, 范围 [1, 2147483647] * @param {String=} params.userData 扩展字段: 用于在邀请信令中增加扩展信息 * @param {Object=} params.offlinePushInfo - 自定义离线消息推送(选填)-- 需 tsignaling 版本 >= 0.8.0 * | name | Type | Description | * | :--- | :--- | :--- | * | title | string | 离线推送标题(选填) | * | description | string | 离线推送内容(选填) | * | androidOPPOChannelID | string | 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID (选填) | * | extension | string | 离线推送透传内容(选填)(tsignaling 版本 >= 0.9.0) | * @returns {Promise} * @example * await tuiCallEngine.groupCall({userIDList: ['user1', 'user2'], type: 1, groupID: 'IM群组 ID'}); */ groupCall(params: IGroupCallParam): Promise<any>; /** * 多人通话<br> * 注意:离线推送仅适用于终端(Android 或 iOS),Web 和 微信小程序不支持。 * @memberof TUICallEngine * @param {Object} params - 群聊拨打通话配置 * @param {Array} params.userIDList 邀请列表 * @param {Number} params.type 0-未知, 1-语音通话,2-视频通话 * @param {String=} params.chatGroupID IM 群组 ID * @param {Number=} params.timeout 0为不超时, 单位 s(秒)(选填) - 默认 30s * @param {Number=} params.roomID 数字房间号, 范围 [1, 2147483647] * @param {String=} params.userData 扩展字段: 用于在邀请信令中增加扩展信息 * @param {Object=} params.offlinePushInfo - 自定义离线消息推送(选填)-- 需 tsignaling 版本 >= 0.8.0 * | name | Type | Description | * | :--- | :--- | :--- | * | title | string | 离线推送标题(选填) | * | description | string | 离线推送内容(选填) | * | androidOPPOChannelID | string | 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID (选填) | * | extension | string | 离线推送透传内容(选填)(tsignaling 版本 >= 0.9.0) | * @returns {Promise} * @example * await tuiCallEngine.calls({userIDList: ['user1', 'user2'], type: 1, chatGroupID: 'IM群组 ID'}); */ calls(params: ICallsParam): Promise<any>; /** * 当您作为被邀请方收到 TUICallEvent.INVITED 事件的回调时,可以调用该接口接听来电 * @memberof TUICallEngine * @returns {Promise} * @example * tuiCallEngine.on(TUICallEvent.INVITED, () => { * tuiCallEngine.accept().then(() => { * //success * }).catch(error => { * console.warn('accept error:', error); * }); * }); */ accept(): Promise<any>; reject(): Promise<any>; hangup(): Promise<any>; /** * IM群组邀请通话,被邀请方会收到 TUICallEvent.INVITED 事件<br> * 注意:离线推送仅适用于终端(Android 或 iOS),Web 和 微信小程序不支持。 * @memberof TUICallEngine * @param {Object} params - 群聊拨打通话配置 * @param {Array} params.userIDList 邀请列表 * @param {Number} params.type 0-未知, 1-语音通话,2-视频通话 * @param {String} params.groupID IM 群组 ID * @param {Number=} params.timeout 0为不超时, 单位 s(秒)(选填) - 默认 30s * @param {Number=} params.roomID 数字房间号, 范围 [1, 2147483647] * @param {String=} params.userData 扩展字段: 用于在邀请信令中增加扩展信息 * @param {Object=} params.offlinePushInfo - 自定义离线消息推送(选填)-- 需 tsignaling 版本 >= 0.8.0 * | name | Type | Description | * | :--- | :--- | :--- | * | title | string | 离线推送标题(选填) | * | description | string | 离线推送内容(选填) | * | androidOPPOChannelID | string | 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID (选填) | * | extension | string | 离线推送透传内容(选填)(tsignaling 版本 >= 0.9.0) | * @returns {Promise} * @example * await tuiCallEngine.inviteUser({userIDList: ['user1', 'user2'], type: 1, groupID: 'IM群组 ID'}); */ inviteUser(params: IInviteUserParam): Promise<void>; /** * IM群组邀请通话,被邀请方会收到 TUICallEvent.INVITED 事件<br> * 注意:离线推送仅适用于终端(Android 或 iOS),Web 和 微信小程序不支持。 * @memberof TUICallEngine * @param {Object} params - 群聊拨打通话配置 * @param {Array} params.userIDList 邀请列表 * @param {Number} params.type 0-未知, 1-语音通话,2-视频通话 * @param {String} params.groupID IM 群组 ID * @param {Number=} params.timeout 0为不超时, 单位 s(秒)(选填) - 默认 30s * @param {Number=} params.roomID 数字房间号, 范围 [1, 2147483647] * @param {String=} params.userData 扩展字段: 用于在邀请信令中增加扩展信息 * @param {Object=} params.offlinePushInfo - 自定义离线消息推送(选填)-- 需 tsignaling 版本 >= 0.8.0 * | name | Type | Description | * | :--- | :--- | :--- | * | title | string | 离线推送标题(选填) | * | description | string | 离线推送内容(选填) | * | androidOPPOChannelID | string | 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID (选填) | * | extension | string | 离线推送透传内容(选填)(tsignaling 版本 >= 0.9.0) | * @returns {Promise} * @example * await tuiCallEngine.groupCall({userIDList: ['user1', 'user2'], type: 1, groupID: 'IM群组 ID'}); */ joinInGroupCall(params: IJoinInGroupCallParam): Promise<void>; /** * call 3.0 新增的 “中途加入” 接口 * @param params 入参 * @param {String} params.callId 当前通话的唯一 id */ join(params: IJoinParam): Promise<void>; openCamera(videoViewDomID: string, isFrontCamera?: boolean): Promise<void>; closeCamera(): Promise<void>; /** * 切换前后置摄像头<br> * **Note: v3.0.0+ 支持,且该接口仅在移动端使用生效。** * @memberof TUICallEngine * @param {TUICallCameraPosition} cameraPosition 摄像头类型 * - TUICallCameraPosition.FRONT 前置摄像头 * - TUICallCameraPosition.BACK 后置摄像头 * @example * await tuiCallEngine.switchCamera(TUICallCameraPosition.FRONT); // 切换前置摄像头 * await tuiCallEngine.switchCamera(TUICallCameraPosition.BACK); // 切换后置摄像头 */ switchCamera(cameraPosition: TUICallCameraPosition): Promise<void>; /** * 打开麦克风,处于通话中的用户会收到 USER_AUDIO_AVAILABLE 回调 * @memberof TUICallEngine * @returns {Promise} * @example * tuiCallEngine.openMicrophone().then(() => { * // success * }).catch(error => { * console.warn('openMicrophone error:', error) * }); */ openMicrophone(): Promise<void>; /** * 关闭麦克风,处于通话中的用户会收到 USER_AUDIO_AVAILABLE 回调 * @memberof TUICallEngine * @returns {Promise} * @example * tuiCallEngine.closeMicrophone().then(() => { * // success * }).catch(error => { * console.warn('closeMicrophone error:', error) * }); */ closeMicrophone(): Promise<void>; startRemoteView(params: IStartRemoteViewParam): Promise<void>; /** * 停止远端画面渲染 * @memberof TUICallEngine * @param {Object} params - 渲染远端视频配置 * @param {String} params.userID 用户id * @returns {Promise} * @example * let promise = tuiCallEngine.stopRemoteView({userID: 'user1'}); * promise.then(() => { * //success * }).catch(error => { * console.warn('stopRemoteView error:', error) * }); */ stopRemoteView(params: IStopRemoteViewParam): Promise<void>; /** * 开启/关闭 TUICallEngine 的多设备登录模式 (**尊享版套餐支持**) * - **注意**:v2.1.1+ 才支持。 * @param {boolean} enable 开启、关闭多设备登录. 开启: true; 关闭: false; 默认: 关闭 * @returns {void} * @example * tuiCallEngine.enableMultiDeviceAbility(true); */ enableMultiDeviceAbility(enable: boolean): void; /** * 设置当前用户基本信息(用户名、用户头像) * * @param {object} options * @param {string} options.nickName 用户名,必填 * @param {string} options.avatar 用户头像,必填 * App 管理员可以通过 [即时通信 IM 控制台 > 用户自定义字段](https://console.cloud.tencent.com/im/user-data) 新增自定义资料字段 * 用户自定义字段生效以后,用户可以调用 setSelfInfo 接口设置自定义资料 * @returns {Promise<void>} * * @example * // 设置当前用户用户名及用户头像 * await TUICallEngine.setSelfInfo(nickName: '', avatar: '') */ setSelfInfo(nickName: string, avatar: string): Promise<void>; /** * 支持 webrtc 的基础美颜 * @param {TRTCBeautyStyle} style 磨皮算法,有“光滑”(TRTCBeautyStyleSmooth=0)和“自然”(TRTCBeautyStyleNature=1)两种算法, 默认为 TRTCBeautyStyleNature * @param {number} beautyLevel 美颜级别,取值范围 [0 - 9],0表示关闭,1 - 9值越大,效果越明显。 * @param {number} whitenessLevel 美白级别,取值范围 [0 - 9],0表示关闭,1 - 9值越大,效果越明显。 * @returns {Promise} * @example * import {} from '@tencentcloud/call-engine-js'; * await setBeautyLevel({ * type: TRTCBeautyStyle.TRTCBeautyStyleSmooth, * beautyLevel: 0.3, * whitenessLevel: 0.4, * }) */ setBeautyLevel(params: IBeautyLevelParams): Promise<void>; /** * @memberof TUICallEngine * @description 设置日志级别,低于 level 的日志将不会输出。 * @param {LOG_LEVEL} level - 日志级别 * - 0 普通级别,日志量较多,接入时建议使用 * - 1 主要级别,SDK 输出关键信息,默认日志等级 * - 2 告警级别,SDK 只输出告警和错误级别的日志 * - 3 错误级别,SDK 只输出错误级别的日志 * - 4 无日志级别,SDK 将不打印任何日志 * @example * tuiCallEngine.setLogLevel(0); */ setLogLevel(level: LOG_LEVEL): void; /** * login() 方法的别名接口,参数一致 * @memberof TUICallEngine * @returns {Promise} */ init(params: ILoginParams): Promise<void>; /** * 监听 callEngine 的事件 * @param event TUICallEvent * @param func function * @returns {void} * @example * const callEngine = new TUICallEngine(); * callEngine.on(event, func); */ on(event: TUICallEvent, callback: () => void, context: any): void; /** * 移除监听 callEngine 的事件 * @param event TUICallEvent * @param func function * @returns {void} * @example * const callEngine = new TUICallEngine(); * callEngine.off(event, func); */ off(event: TUICallEvent, callback: () => void, context: any): void; /** * 获取 trtcCloud 实例 * @returns {TRTCCloud} trtcCloud * web 端 trtcCloud 能力请查看:https://web.sdk.qcloud.com/trtc/webrtc/trtcCloud/doc/TRTCCloud.html * * @example * const callEngine = new TUICallEngine(); * const trtcCloud = callEngine.getTRTCCloud(); */ getTRTCCloudInstance(): TRTCCloud; /** * 获取 tim 实例 * @returns {TIM} tim * web 端 tim 能力请查看:https://web.sdk.qcloud.com/im/doc/zh-cn/SDK.html * @example */ getTim(): ChatSDK; /** * 实验性接口 * @private * @param jsonStr jason 字符串 * @returns */ callExperimentalAPI(jsonStr: string): Promise<any>; /** * 切换扬声器和听筒 */ selectAudioPlaybackDevice(type: AUDIO_ROUTE): Promise<void>; deviceCheck(params: IWxDeviceCheckParams): Promise<any>; /** * 当前通话类型切换 * - 仅支持1v1通话过程中使用 * - 失败监听 ERROR 事件,code: 60001 * @memberof TUICallEngine * @param {String} newMediaType 通话类型 * - 1 语音通话 * - 2 视频通话 * @example * tuiCallEngine.switchCallMediaType(1).then(() => { // 视频通话切换语音通话 * // success * }).catch(error => { * console.warn('switchCallMediaType error:', error) * }); */ switchCallMediaType(newMediaType: number): Promise<void>; private _checkDevicePermission; private _handleTrtcCloudBindEvent; private _observerFunction; private _initLogger; getDevicePermission(): { audio: boolean; video: boolean; }; } export { AUDIO_PLAYBACK_DEVICE, AUDIO_ROUTE, CallEndReason, TRTCBeautyStyle, TRTCDeviceInfo, TRTCLogLevel, TRTCQuality, TRTCRenderParams, TRTCVideoEncParam, TRTCVideoFillMode, TRTCVideoMirrorType, TRTCVideoResolution, TRTCVideoRotation, TUICallCameraPosition, TUICallEngine, TUICallEvent, TUICallType, TUIErrorCode, TUIResolutionMode, TUIVideoQuality, TUICallEngine as default }; export type { ILoginParams, TUIDeviceInfo, TUIVideoEncoderParams };