@tencentcloud/call-engine-wx
Version:
Tencent Cloud TUICallEngine SDK for Wechat
1,074 lines (1,067 loc) • 42.8 kB
TypeScript
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 };