Files
2026-03-04 15:32:30 +08:00

1075 lines
42 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { ChatSDK } from '@tencentcloud/lite-chat/basic';
export { default as TIM, default as TencentCloudChat } from '@tencentcloud/lite-chat/basic';
import TRTCCloud from '@tencentcloud/trtc-component-wx';
export { default as TRTCCloud } from '@tencentcloud/trtc-component-wx';
declare enum TUIErrorCode {
ERR_FAILED = -1
}
/**
* **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",
/**
* @description 收到该回调说明本次通话结束了
* @memberOf module:TUICallEvent
* @example
* let handleCallingEnd = function(event) {
* console.log(event)
* };
* tuiCallEngine.on(TUICallEvent.ON_CALL_END, handleCallEnd);
*/
ON_CALL_END = "onCallEnd",
/**
* @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"
}
declare enum CallMediaType {
UNKNOWN = 0,
AUDIO = 1,
VIDEO = 2
}
/**
* @property {String} ear 听筒
* @property {String} speaker 免提
*/
declare enum AudioPlayBackDevice {
EAR = "ear",
SPEAKER = "speaker"
}
declare enum CameraPosition {
FRONT = 0,
BACK = 1
}
declare enum IOSOfflinePushType {
APNs = 0,
VoIP = 1
}
declare enum LOG_LEVEL {
NORMAL = 0,
RELEASE = 1,
WARNING = 2,
ERROR = 3,
NONE = 4
}
/**
* TRTC 关键类型定义<br>
* @description 分辨率、质量等级等枚举和常量值的定义
*/
/**
* 视频分辨率<br>
* 此处仅定义了横屏分辨率,如果要使用360 × 640这样的竖屏分辨率,需要同时指定 TRTCVideoResolutionMode 为 Portrait。
* @enum {Number}
*/
declare enum TRTCVideoResolution {
TRTCVideoResolution_640_480 = 62,
TRTCVideoResolution_960_720 = 64,
TRTCVideoResolution_960_540 = 110,
TRTCVideoResolution_1280_720 = 112,
TRTCVideoResolution_1920_1080 = 114
}
/**
* 视频画面填充模式<br>
* 如果画面的显示分辨率不等于画面的原始分辨率,就需要您设置画面的填充模式:
* - TRTCVideoFillMode_Fill,图像铺满屏幕,超出显示视窗的视频部分将被截掉,所以画面显示可能不完整。
* - TRTCVideoFillMode_Fit,图像长边填满屏幕,短边区域会被填充黑色,但画面的内容肯定是完整的。
* @enum {Number}
*/
declare enum TRTCVideoFillMode {
TRTCVideoFillMode_Fill = 0,
TRTCVideoFillMode_Fit = 1
}
/**
* 画面渲染镜像类型<br>
* TRTC 的画面镜像提供下列设置模式
* @enum {Number}
*/
declare enum TRTCVideoMirrorType {
TRTCVideoMirrorType_Auto = 0,
TRTCVideoMirrorType_Enable = 1,
TRTCVideoMirrorType_Disable = 2
}
/**
* 美颜(磨皮)算法<br>
* TRTC SDK 内置了多种不同的磨皮算法,您可以选择最适合您产品定位的方案。
* @enum {Number}
*/
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 × 960resMode 选择 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);
}
/**
* 视频画面旋转方向<br>
* TRTC SDK 提供了对本地和远程画面的旋转角度设置 API,如下的旋转角度都是指顺时针方向的。
* @enum {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);
}
/**
* 网络质量<br>
* @enum {Number}
*/
declare enum TRTCQuality {
TRTCQuality_Unknown = 0,
TRTCQuality_Excellent = 1,
TRTCQuality_Good = 2,
TRTCQuality_Poor = 3,
TRTCQuality_Bad = 4,
TRTCQuality_Vbad = 5,
TRTCQuality_Down = 6
}
/**
* 4.1 Log 级别
* @enum {Number}
*/
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 IMediaDeviceAuth {
audio?: boolean;
video?: boolean;
isThrowVideoError?: boolean;
callMediaType?: CallMediaType;
}
interface IWxDeviceCheckParams {
microphone: boolean;
camera: boolean;
}
interface IBeautyLevelParams {
style: TRTCBeautyStyle;
beautyLevel: number;
whitenessLevel: number;
}
interface ITUICallEngineOption {
SDKAppID?: number;
sdkAppID?: number;
tim?: any;
callkitVersion?: string;
framework?: string;
isFromChat?: boolean;
language?: number;
component?: number;
isSharedInstance?: boolean;
scene?: string;
}
interface ICallParam {
userID: string;
type: CallMediaType;
timeout?: number;
offlinePushInfo?: IOfflinePushInfo;
roomID?: number;
strRoomID?: string;
userData?: string;
}
interface IGroupCallParam {
userIDList: string[];
type: CallMediaType;
groupID: string;
timeout?: number;
offlinePushInfo?: IOfflinePushInfo;
roomID?: number;
strRoomID?: string;
userData?: string;
}
interface IJoinInGroupCallParam {
type: CallMediaType;
groupID: string;
roomID: number;
strRoomID: string;
}
interface IInviteUserParam {
userIDList: string[];
offlinePushInfo?: IOfflinePushInfo;
timeout?: number;
userData?: string;
}
interface ICallsParam {
userIDList: string[];
type: CallMediaType;
chatGroupID?: string;
timeout?: number;
offlinePushInfo?: IOfflinePushInfo;
roomID?: number;
strRoomID?: string;
userData?: string;
}
interface IJoinParam {
callId: string;
}
interface IOfflinePushInfo {
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;
}
interface ILoginParams {
userID: string;
userSig: string;
assetsPath?: string;
}
interface IStopRemoteViewParam {
userID: string;
}
/**
* @param {string} callType
* @returns {boolean}
*/
declare function devicePermissions(callType: CallMediaType): Promise<unknown>;
/**
* 检测input类型是否为string
* @param {*} input 任意类型的输入
* @returns {Boolean} true->string / false->not a string
*/
declare const isString: (input: any) => boolean;
declare const isObject: (input: any) => boolean;
/**
* 检测input类型是否为数组
* @param {*} input 任意类型的输入
* @returns {Boolean} true->array / false->not an array
*/
declare const isArray: (input: any) => boolean;
/**
* Checks to see if a value is undefined
* @param {*} input 任意类型的输入
* @returns {Boolean} true->input value is undefined
*/
declare const isUndefined: (input: any) => boolean;
/**
* 检测input类型是否为数组或者object
* @param {*} input 任意类型的输入
* @returns {Boolean} true->input is an array or an object
*/
declare const isArrayOrObject: (input: any) => boolean;
/**
* 检测input类型是否为function
* @param {*} input 任意类型的输入
* @returns {Boolean} true->input is a function
*/
declare const isFunction: (input: any) => boolean;
/**
* 检测input是否为Error的实例
* @param {*} input 任意类型的输入
* @returns {Boolean} true->input is an instance of Error
*/
declare const isInstanceOfError: (input: any) => boolean;
/**
* Get the object type string
* @param {*} input 任意类型的输入
* @returns {String} the object type string
*/
declare const getType: (input: any) => string;
/**
* 序列化Error实例,只序列化Error实例的message和code属性(如果有的话)
* @param {Error} error Error实例
* @returns {String} 序列化后的内容
*/
declare const stringifyError: (error: any) => string;
declare function getValueType(value: any): string;
declare function safelyParse(data: any): any;
declare function generateRandomString(length: any): string;
/**
* 获取设备权限,查看当前是否有麦克风以及摄像头权限
* @param {Object} params - 参数对象
* @param {Boolean} params.microphone 麦克风权限
* @param {Boolean} params.camera 摄像头权限
*/
declare function deviceCheck(params: any): Promise<any>;
declare function appDeviceCheck(params: any): boolean;
declare function convertOfflinePushInfoToCIdentifier(offlinePushInfo?: {}): {
title: any;
desc: any;
extension: any;
is_disable_push: any;
ios_push_type: any;
android_push_type: any;
ignore_ios_badge: boolean;
android_vivo_classification: any;
};
/**
* 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 {CameraPosition} cameraPosition 摄像头类型
* - CameraPosition.FRONT 前置摄像头
* - CameraPosition.BACK 后置摄像头
* @example
* await tuiCallEngine.switchCamera(CameraPosition.FRONT); // 切换前置摄像头
* await tuiCallEngine.switchCamera(CameraPosition.BACK); // 切换后置摄像头
*/
switchCamera(cameraPosition: CameraPosition): 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 'call-engine-lite-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>;
reportLog(logData: any): void;
/**
* 切换扬声器和听筒
*/
selectAudioPlaybackDevice(type: AudioPlayBackDevice): 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 { AudioPlayBackDevice, CallMediaType, CameraPosition, IOSOfflinePushType, LOG_LEVEL, TRTCBeautyStyle, TRTCDeviceInfo, TRTCLogLevel, TRTCQuality, TRTCRenderParams, TRTCVideoEncParam, TRTCVideoFillMode, TRTCVideoMirrorType, TRTCVideoResolution, TRTCVideoRotation, TUICallEngine, TUICallEvent, TUIErrorCode, appDeviceCheck, convertOfflinePushInfoToCIdentifier, TUICallEngine as default, deviceCheck, devicePermissions, generateRandomString, getType, getValueType, isArray, isArrayOrObject, isFunction, isInstanceOfError, isObject, isString, isUndefined, safelyParse, stringifyError };
export type { IBeautyLevelParams, ICallParam, ICallsParam, IGroupCallParam, IInviteUserParam, IJoinInGroupCallParam, IJoinParam, ILoginParams, IMediaDeviceAuth, IOfflinePushInfo, IPlayVideoOption, IStartRemoteViewParam, IStopRemoteViewParam, ITUICallEngineOption, IWxDeviceCheckParams };