import { ChatSDK } from '@tencentcloud/chat';
export { default as TIM, default as TencentCloudChat } from '@tencentcloud/chat';
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_120_120 = 1,
    TRTCVideoResolution_160_160 = 3,
    TRTCVideoResolution_270_270 = 5,
    TRTCVideoResolution_480_480 = 7,
    TRTCVideoResolution_160_120 = 50,
    TRTCVideoResolution_240_180 = 52,
    TRTCVideoResolution_280_210 = 54,
    TRTCVideoResolution_320_240 = 56,
    TRTCVideoResolution_400_300 = 58,
    TRTCVideoResolution_480_360 = 60,
    TRTCVideoResolution_640_480 = 62,
    TRTCVideoResolution_960_720 = 64,
    TRTCVideoResolution_160_90 = 100,
    TRTCVideoResolution_256_144 = 102,
    TRTCVideoResolution_320_180 = 104,
    TRTCVideoResolution_480_270 = 106,
    TRTCVideoResolution_640_360 = 108,
    TRTCVideoResolution_960_540 = 110,
    TRTCVideoResolution_1280_720 = 112,
    TRTCVideoResolution_1920_1080 = 114
}
declare enum TRTCVideoStreamType {
    TRTCVideoStreamTypeBig = 0,
    TRTCVideoStreamTypeSmall = 1,
    TRTCVideoStreamTypeSub = 2
}
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
}
declare enum TRTCAppScene {
    TRTCAppSceneVideoCall = 0,
    TRTCAppSceneLIVE = 1,
    TRTCAppSceneAudioCall = 2,
    TRTCAppSceneVoiceChatRoom = 3
}
declare enum TRTCRoleType {
    TRTCRoleAnchor = 20,
    TRTCRoleAudience = 21
}
declare enum TRTCAudioQuality {
    TRTCAudioQualityDefault = 0,
    TRTCAudioQualitySpeech = 1,
    TRTCAudioQualityMusic = 3
}
/**
 * 设备信息<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);
}
declare enum TRTCDeviceState {
    TRTCDeviceStateAdd = 0,
    TRTCDeviceStateRemove = 1,
    TRTCDeviceStateActive = 2
}
declare enum TRTCDeviceType {
    TRTCDeviceTypeUnknow = -1,
    TRTCDeviceTypeMic = 0,
    TRTCDeviceTypeSpeaker = 1,
    TRTCDeviceTypeCamera = 2
}
/**
 * 进房相关参数<br>
 * 只有该参数填写正确，才能顺利调用 enterRoom 进入 roomId 所指定的音视频房间。
 * @param {Number}       sdkAppId      - 【字段含义】应用标识（必填），腾讯视频云基于 sdkAppId 完成计费统计。<br>
 *                                       【推荐取值】在腾讯云 [TRTC 控制台](https://console.cloud.tencent.com/rav/) 中创建应用，之后可以在账号信息页面中得到该 ID。<br>
 * @param {String}       userId        - 【字段含义】用户标识（必填）。当前用户的 userId，相当于用户名，UTF-8编码。<br>
 *                                       【推荐取值】如果一个用户在您的账号系统中的 ID 为“abc”，则 userId 即可设置为“abc”。<br>
 * @param {String}       userSig       - 【字段含义】用户签名（必填），当前 userId 对应的验证签名，相当于登录密码。<br>
 *                                       【推荐取值】请参考 [如何计算UserSig](https://cloud.tencent.com/document/product/647/17275)。<br>
 * @param {Number}       roomId        - 【字段含义】房间号码（必填），指定房间号，在同一个房间里的用户（userId）可以彼此看到对方并进行视频通话, roomId 和 strRoomId 必须填一个, 若您选用 strRoomId，则 roomId 需要填写为0。<br>
 *                                       【推荐取值】您可以随意指定，但请不要重复，如果您的用户账号 ID 是数字类型的，可以直接用创建者的用户 ID 作为 roomId。<br>
 * @param {String}       strRoomId     - 【字段含义】字符串房间号码（选填），roomId 和 strRoomId 必须填一个。若两者都填，则优先选择 roomId。<br>
 *                                       【推荐取值】您可以随意指定，但请不要重复。<br>
 * @param {TRTCRoleType} role          - 【字段含义】直播场景下的角色，仅适用于直播场景（TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom），视频通话场景下指定无效。<br>
 *                                       【推荐取值】默认值：主播（TRTCRoleAnchor）<br>
 * @param {String}       privateMapKey - 【字段含义】房间签名（非必填），如果您希望某个房间只能让特定的某些 userId 进入，就需要使用 privateMapKey 进行权限保护。<br>
 *                                       【推荐取值】仅建议有高级别安全需求的客户使用，参考文档：[进房权限保护](https://cloud.tencent.com/document/product/647/32240)<br>
 * @param {String}       businessInfo  - 【字段含义】业务数据（非必填），某些非常用的高级特性才需要用到此字段。<br>
 *                                       【推荐取值】不建议使用<br>
 * @param {String}       streamId      - 【字段含义】绑定腾讯云直播 CDN 流 ID[非必填]，设置之后，您就可以在腾讯云直播 CDN 上通过标准直播方案（FLV或HLS）播放该用户的音视频流。<br>
 *                                       【推荐取值】限制长度为64字节，可以不填写，一种推荐的方案是使用 “sdkappid_roomid_userid_main” 作为 streamid，这样比较好辨认且不会在您的多个应用中发生冲突。<br>
 *                                       【特殊说明】要使用腾讯云直播 CDN，您需要先在[控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启“启动自动旁路直播”开关。<br>
 *                                       【参考文档】[CDN 旁路直播](https://cloud.tencent.com/document/product/647/16826)。
 * @param {String}       userDefineRecordId - 【字段含义】设置云端录制完成后的回调消息中的 "userdefinerecordid"  字段内容，便于您更方便的识别录制回调。<br>
 *                                            【推荐取值】限制长度为64字节，只允许包含大小写英文字母（a-zA-Z）、数字（0-9）及下划线和连词符。<br>
 *                                            【参考文档】[云端录制](https://cloud.tencent.com/document/product/647/16823)。
 */
declare class TRTCParams {
    sdkAppId: number;
    userId: string;
    userSig: string;
    roomId: number;
    strRoomId: string;
    role: number;
    privateMapKey: null | string;
    streamId: null | string;
    userDefineRecordId: null | string;
    frameWorkType: number;
    constructor(sdkAppId?: number, userId?: string, userSig?: string, roomId?: number, strRoomId?: string, role?: TRTCRoleType, privateMapKey?: null | string, businessInfo?: null | string, streamId?: null | string, userDefineRecordId?: null | string, frameWorkType?: number);
}
/**
 * 视频编码参数<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
}
/**
 * 网络质量<br>
 * 表示视频质量的好坏，通过这个数值，您可以在 UI 界面上用图标表征 userId 的通话线路质量
 * @param {String}      userId  - 用户标识
 * @param {TRTCQuality} quality - 视频质量
 */
declare class TRTCQualityInfo {
    userId: string;
    quality: TRTCQuality;
    constructor(userId?: string, quality?: TRTCQuality);
}
/**
 * 音量大小<br>
 * 表示语音音量的评估大小，通过这个数值，您可以在 UI 界面上用图标表征 userId 是否有在说话。
 * @param {String} userId - 说话者的 userId，字符编码格式是 UTF-8
 * @param {Number} volume - 说话者的音量， 取值范围0 - 100
 */
declare class TRTCVolumeInfo {
    userId: string;
    volume: number;
    constructor(userId?: string, volume?: number);
}
/**
 * CDN 旁路推流参数<br>
 * @param {Number} appId - 腾讯云 AppID，请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用，单击【帐号信息】后，在“直播信息”中获取
 * @param {Number} bizId - 腾讯云直播 bizId，请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用，单击【帐号信息】后，在“直播信息”中获取
 * @param {String} url - 旁路转推的 URL
 */
declare class TRTCPublishCDNParam {
    appId: number;
    bizId: number;
    url: null | string;
    constructor(appId?: number, bizId?: number, url?: null | string);
}
/**
 * 本地的音视频统计信息<br>
 * @param {Number} width           - 视频宽度
 * @param {Number} height          - 视频高度
 * @param {Number} frameRate       - 帧率（fps）
 * @param {Number} videoBitrate    - 视频发送码率（Kbps）
 * @param {Number} audioSampleRate - 音频采样率（Hz）
 * @param {Number} audioBitrate    - 音频发送码率（Kbps）
 * @param {TRTCVideoStreamType} streamType - 流类型（大画面 | 小画面 | 辅路画面）
 */
declare class TRTCLocalStatistics {
    width: number;
    height: number;
    frameRate: number;
    videoBitrate: number;
    audioSampleRate: number;
    audioBitrate: number;
    streamType: TRTCVideoStreamType;
    constructor(width?: number, height?: number, frameRate?: number, videoBitrate?: number, audioSampleRate?: number, audioBitrate?: number, streamType?: TRTCVideoStreamType);
}
/**
 * 统计数据<br>
 * @param {Number} upLoss    - C -> S 上行丢包率（％），这个值越小越好，例如，0%的丢包率代表网络很好，
 *                             而 30% 的丢包率则意味着 SDK 向服务器发送的每10个数据包中就会有3个会在上行传输中丢失。
 * @param {Number} downLoss  - S -> C 下行丢包率（％），这个值越小越好，例如，0%的丢包率代表网络很好，
 *                             而 30% 的丢包率则意味着服务器向 SDK 发送的每10个数据包中就会有3个会在下行传输中丢失。
 * @param {Number} appCpu    - 当前 App 的 CPU 使用率（％）
 * @param {Number} systemCpu - 当前系统的 CPU 使用率（％）
 * @param {Number} rtt       - 延迟（毫秒），代表 SDK 跟服务器一来一回之间所消耗的时间，这个值越小越好。
 *                             一般低于50ms的 rtt 是比较理想的情况，而高于100ms的 rtt 会引入较大的通话延时。
 *                             由于数据上下行共享一条网络连接，所以 local 和 remote 的 rtt 相同。
 * @param {Number} receivedBytes - 总接收字节数（包含信令和音视频）
 * @param {Number} sentBytes     - 总发送字节总数（包含信令和音视频）
 * @param {TRTCLocalStatistics[]} localStatisticsArray - 自己本地的音视频统计信息，由于可能有大画面、小画面以及辅路画面等多路的情况，所以是一个数组
 * @param {Number} localStatisticsArraySize - 数组 localStatisticsArray 的大小
 * @param {TRTCRemoteStatistics[]} remoteStatisticsArray - 远端成员的音视频统计信息，由于可能有大画面、小画面以及辅路画面等多路的情况，所以是一个数组
 * @param {Number} remoteStatisticsArraySize - 数组 remoteStatisticsArray 的大小
 */
declare class TRTCStatistics {
    upLoss: number;
    downLoss: number;
    appCpu: number;
    systemCpu: number;
    rtt: number;
    receivedBytes: number;
    sentBytes: number;
    localStatisticsArray: TRTCLocalStatistics[];
    localStatisticsArraySize: number;
    remoteStatisticsArraySize: number;
    constructor(upLoss?: number, downLoss?: number, appCpu?: number, systemCpu?: number, rtt?: number, receivedBytes?: number, sentBytes?: number, localStatisticsArray?: TRTCLocalStatistics[], localStatisticsArraySize?: number, remoteStatisticsArraySize?: number);
}
declare enum TRTCVideoResolutionMode {
    TRTCVideoResolutionModeLandscape = 0,
    TRTCVideoResolutionModePortrait = 1
}
/**
 * 画质偏好<br>
 * 指当 TRTC SDK 在遇到弱网络环境时，您是希望“保清晰”还是“保流畅”：<br>
 * - Smooth：弱网下保流畅，在遭遇弱网环境时首先确保声音的流畅和优先发送，画面会变得模糊且会有较多马赛克，但可以保持流畅不卡顿。
 * - Clear：弱网下保清晰，在遭遇弱网环境时，画面会尽可能保持清晰，但可能会更容易出现卡顿。
 * @enum {Number}
 */
declare enum TRTCVideoQosPreference {
    TRTCVideoQosPreferenceSmooth = 1,
    TRTCVideoQosPreferenceClear = 2
}
/**
 * 流控模式<br>
 * TRTC SDK 内部需要时刻根据网络情况调整内部的编解码器和网络模块，以便能够对网络的变化做出反应。<br>
 * 为了支持快速算法升级，SDK 内部设置了两种不同的流控模式：
 * - ModeClient： 本地控制，用于 SDK 开发内部调试，客户请勿使用。
 * - ModeServer： 云端控制，推荐模式，也是默认默认。
 * > 推荐您使用云端控制，这样每当我们升级 Qos 算法时，您无需升级 SDK 即可体验更好的效果。
 * @enum {Number}
 */
declare enum TRTCQosControlMode {
    TRTCQosControlModeClient = 0,
    TRTCQosControlModeServer = 1
}
/**
 * 网络流控相关参数<br>
 * 网络流控相关参数，该设置决定了SDK在各种网络环境下的调控方向（比如弱网下是“保清晰”还是“保流畅”）
 * @param {TRTCVideoQosPreference} preference  - 【字段含义】弱网下是“保清晰”还是“保流畅”<br>
 *                                               【特别说明】<br>
 *                                                - 弱网下保流畅：在遭遇弱网环境时，画面会变得模糊，且会有较多马赛克，但可以保持流畅不卡顿
 *                                                - 弱网下保清晰：在遭遇弱网环境时，画面会尽可能保持清晰，但可能会更容易出现卡顿
 * @param {TRTCQosControlMode}     controlMode - 【字段含义】流控模式（云端控制 - 客户端控制）<br>
 *                                               【推荐取值】云端控制<br>
 *                                               【特别说明】<br>
 *                                                - Client 模式：客户端控制模式，用于 SDK 开发内部调试，客户请勿使用
 *                                                - Server 模式（默认）：云端控制模式，若没有特殊原因，请直接使用该模式
 *
 */
declare class TRTCNetworkQosParam {
    preference: TRTCVideoQosPreference;
    controlMode: TRTCQosControlMode;
    constructor(preference?: TRTCVideoQosPreference, controlMode?: TRTCQosControlMode);
}
/**
* 图缓存<br>
* @param {ArrayBuffer} buffer - 图内容
* @param {Number}      length - 图缓存大小
* @param {Number}      width  - 图宽
* @param {Number}      heigth - 图高
*/
declare class TRTCImageBuffer {
    buffer: ArrayBuffer;
    length: number;
    width: number;
    height: number;
    constructor(buffer?: ArrayBuffer, length?: number, width?: number, height?: number);
}
declare enum TRTCLogLevel {
    TRTCLogLevelVerbose = 0,
    TRTCLogLevelDebug = 1,
    TRTCLogLevelInfo = 2,
    TRTCLogLevelWarn = 3,
    TRTCLogLevelError = 4,
    TRTCLogLevelFatal = 5,
    TRTCLogLevelNone = 6
}
/**
 * 屏幕分享目标信息<br>
 * @enum {Number}
 */
declare enum TRTCScreenCaptureSourceType {
    TRTCScreenCaptureSourceTypeUnknown = -1,
    TRTCScreenCaptureSourceTypeWindow = 0,
    TRTCScreenCaptureSourceTypeScreen = 1,
    TRTCScreenCaptureSourceTypeCustom = 2
}
/**
* 屏幕采集源信息<br>
* @param {TRTCScreenCaptureSourceType} type       - 采集源类型
* @param {String}                      sourceId   - 采集源ID；对于窗口，该字段指示窗口句柄；对于屏幕，该字段指示屏幕ID
* @param {String}                      sourceName - 采集源名称，UTF8编码
* @param {TRTCImageBuffer}             thumbBGRA  - 缩略图内容
* @param {TRTCImageBuffer}             iconBGRA   - 图标内容
* @param {Boolean}                     isMinimizeWindow - 是否最小化窗口
*/
declare class TRTCScreenCaptureSourceInfo {
    type: number;
    sourceId: string;
    sourceName: string;
    thumbBGRA: TRTCImageBuffer;
    iconBGRA: TRTCImageBuffer;
    isMinimizeWindow: boolean;
    constructor(type?: TRTCScreenCaptureSourceType, sourceId?: string, sourceName?: string, thumbBGRA?: TRTCImageBuffer, iconBGRA?: TRTCImageBuffer, isMinimizeWindow?: boolean);
}
/**
 * 记录矩形的四个点坐标<br>
 * @param {Number} left   - 左坐标
 * @param {Number} top    - 上坐标
 * @param {Number} right  - 右坐标
 * @param {Number} bottom - 下坐标
 */
declare class Rect {
    left: number;
    top: number;
    right: number;
    bottom: number;
    constructor(left?: number, top?: number, right?: number, bottom?: number);
}
/**
 * 5.13 云端混流（转码）配置
 *
 * 包括最终编码质量和各路画面的摆放位置
 *
 * @param {TRTCTranscodingConfigMode} mode - 【字段含义】转码 config 模式
 * @param {Number} appId - 【字段含义】腾讯云直播 AppID<br>
 *                         【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用，单击【帐号信息】后，在“直播信息”中获取
 * @param {Number} bizId - 【字段含义】腾讯云直播 bizid<br>
 *                         【推荐取值】请在 [实时音视频控制台](https://console.cloud.tencent.com/rav) 选择已经创建的应用，单击【帐号信息】后，在“直播信息”中获取
 * @param {Number} videoWidth   - 【字段含义】最终转码后的视频分辨率的宽度。<br>
 *                                【推荐取值】推荐值：360px ，如果你是纯音频推流，请将 width × height 设为 0px × 0px，否则混流后会携带一条画布背景的视频流。
 * @param {Number} videoHeight  - 【字段含义】最终转码后的视频分辨率的高度。<br>
 *                                【推荐取值】推荐值：640px ，如果你是纯音频推流，请将 width × height 设为 0px × 0px，否则混流后会携带一条画布背景的视频流。
 * @param {Number} videoBitrate - 【字段含义】最终转码后的视频分辨率的码率（kbps）<br>
 *                                【推荐取值】如果填0，后台会根据videoWidth和videoHeight来估算码率，您也可以参考枚举定义TRTCVideoResolution_640_480的注释。
 * @param {Number} videoFramerate  - 【字段含义】最终转码后的视频分辨率的帧率（FPS）<br>
 *                                   【推荐取值】默认值：15fps，取值范围是 (0,30]。
 * @param {Number} videoGOP        - 【字段含义】最终转码后的视频分辨率的关键帧间隔（又称为 GOP）。<br>
 *                                   【推荐取值】默认值：2，单位为秒，取值范围是 [1,8]。
 * @param {Number} backgroundColor - 【字段含义】混合后画面的底色颜色，默认为黑色，格式为十六进制数字，比如：“0x61B9F1” 代表 RGB 分别为(97,158,241)。<br>
 *                                   【推荐取值】默认值：0x000000，黑色
 * @param {String} backgroundImage - 【字段含义】混合后画面的背景图。<br>
 *                                   【推荐取值】默认值：''，即不设置背景图<br>
 *                                   【特别说明】背景图需要您事先在 “[控制台](https://console.cloud.tencent.com/trtc) => 应用管理 => 功能配置 => 素材管理” 中上传，<br>
 *                                    上传成功后可以获得对应的“图片ID”，然后将“图片ID”转换成字符串类型并设置到 backgroundImage 里即可。<br>
 *                                    例如：假设“图片ID” 为 63，可以设置 backgroundImage = @"63";
 * @param {Number} audioSampleRate - 【字段含义】最终转码后的音频采样率。<br>
 *                                   【推荐取值】默认值：48000Hz。支持12000HZ、16000HZ、22050HZ、24000HZ、32000HZ、44100HZ、48000HZ。
 * @param {Number} audioBitrate    - 【字段含义】最终转码后的音频码率。<br>
 *                                   【推荐取值】默认值：64kbps，取值范围是 [32，192]。
 * @param {Number} audioChannels   - 【字段含义】最终转码后的音频声道数<br>
 *                                   【推荐取值】默认值：1。取值范围为 [1,2] 中的整型。
 * @param {TRTCMixUser[]} mixUsersArray - 【字段含义】每一路子画面的位置信息
 * @param {String} streamId        - 【字段含义】输出到 CDN 上的直播流 ID。<br>
 *                                    如不设置该参数，SDK 会执行默认逻辑，即房间里的多路流会混合到该接口调用者的视频流上，也就是 A+B =>A；<br>
 *                                    如果设置该参数，SDK 会将房间里的多路流混合到您指定的直播流 ID 上，也就是 A+B =>C。<br>
 *                                   【推荐取值】默认值：''，即房间里的多路流会混合到该接口调用者的视频流上。
 */
declare class TRTCTranscodingConfig {
    mode: TRTCTranscodingConfigMode;
    appId: number;
    bizId: number;
    videoWidth: number;
    videoHeight: number;
    videoBitrate: number;
    videoFramerate: number;
    videoGOP: number;
    backgroundColor: number;
    backgroundImage: string;
    audioSampleRate: number;
    audioBitrate: number;
    audioChannels: number;
    mixUsersArray: TRTCMixUser[];
    mixUsersArraySize: number;
    streamId: string;
    constructor(mode?: TRTCTranscodingConfigMode, appId?: number, bizId?: number, videoWidth?: number, videoHeight?: number, videoBitrate?: number, videoFramerate?: number, videoGOP?: number, backgroundColor?: number, backgroundImage?: string, audioSampleRate?: number, audioBitrate?: number, audioChannels?: number, mixUsersArray?: never[], streamId?: string);
}
declare enum TRTCTranscodingConfigMode {
    TRTCTranscodingConfigMode_Unknown = 0,
    TRTCTranscodingConfigMode_Manual = 1,
    TRTCTranscodingConfigMode_Template_PureAudio = 2,
    TRTCTranscodingConfigMode_Template_PresetLayout = 3,
    TRTCTranscodingConfigMode_Template_ScreenSharing = 4,
    TRTC_TranscodingConfigMode_Unknown = 5,
    TRTC_TranscodingConfigMode_Manual = 6,
    TRTC_TranscodingConfigMode_Template_PureAudio = 7,
    TRTC_TranscodingConfigMode_Template_PresetLayout = 8,
    TRTC_TranscodingConfigMode_Template_ScreenSharing = 9
}
/**
 * 5.9 云端混流中每一路子画面的位置信息
 *
 * TRTCMixUser 用于指定每一路（即每一个 userId）视频画面的具体摆放位置
 *
 * @param {String}              userId      - 参与混流的 userId
 * @param {String}              roomId      - 参与混流的 roomId，跨房流传入的实际 roomId，当前房间流传入 roomId = ''
 * @param {Rect}                rect        - 图层位置坐标以及大小，左上角为坐标原点(0,0) （绝对像素值）
 * @param {Number}              rect.left   - 图层位置的左坐标
 * @param {Number}              rect.top    - 图层位置的上坐标
 * @param {Number}              rect.right  - 图层位置的右坐标
 * @param {Number}              rect.bottom - 图层位置的下坐标
 * @param {Number}              zOrder      - 图层层次（1 - 15）不可重复
 * @param {Boolean}             pureAudio   - 是否纯音频
 * @param {TRTCVideoStreamType} streamType  - 参与混合的是主路画面（TRTCVideoStreamTypeBig）或屏幕分享（TRTCVideoStreamTypeSub）画面
 * @param {TRTCMixInputType}    inputType   - 指定该路流的混合内容（只混合音频、只混合视频、混合音频和视频），该字段是对 pureAudio 字段的升级。
 *                                            默认值：TRTCMixInputTypeUndefined，代表参考 pureAudio 的取值。
 *                                            如果您是第一次使用 TRTC，之前并没有对 pureAudio 字段进行过设置，您可以根据实际需要设置该字段，不建议您再设置 pureAudio。
 *                                            如果您之前在老版本中已经使用了 pureAudio 字段，并期望保持其设置，则可以将 inputType 设置为 TRTCMixInputTypeUndefined。
 * @param {Number}              renderMode  - 该画面在输出时的显示模式。默认值：视频流默认为0。0为裁剪，1为缩放，2为缩放并显示黑底。
 *
 */
declare class TRTCMixUser {
    userId: string;
    roomId: string;
    rect: null | Rect;
    zOrder: number;
    pureAudio: boolean;
    streamType: TRTCVideoStreamType;
    inputType: TRTCMixInputType;
    renderMode: Number;
    constructor(userId?: string, roomId?: string, rect?: null | Rect, zOrder?: number, pureAudio?: boolean, streamType?: TRTCVideoStreamType, inputType?: TRTCMixInputType, renderMode?: number);
}
declare enum TRTCMixInputType {
    TRTCMixInputTypeUndefined = 0,
    TRTCMixInputTypeAudioVideo = 1,
    TRTCMixInputTypePureVideo = 2,
    TRTCMixInputTypePureAudio = 3
}

interface IPlayVideoOption {
    rotation?: TRTCVideoRotation;
    fillMode?: TRTCVideoFillMode;
    mirrorType?: TRTCVideoMirrorType;
    muted?: boolean;
}
interface IStartRemoteViewParam {
    userID: string;
    videoViewDomID: string;
    options?: IPlayVideoOption;
}
interface IWxDeviceCheckParams {
    microphone: boolean;
    camera: boolean;
}

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
}
declare enum TUIAudioQuality {
    kAudioProfileSpeech = 0,
    kAudioProfileDefault = 1,
    kAudioProfileMusic = 2
}
declare enum TUINetworkQuality {
    kQualityUnknown = 0,
    kQualityExcellent = 1,
    kQualityGood = 2,
    kQualityPoor = 3,
    kQualityBad = 4,
    kQualityVeryBad = 5,
    kQualityDown = 6
}
/**
 * 消息结构体
 * @typedef {object} TUINetwork
 * @property {string} userId 用户 Id
 * @property {TUINetworkQuality} quality 网络质量
 * @property {number} upLoss 上行丢包率，单位 (%) 该数值越小越好，目前仅本地用户有该信息
 * @property {TUIRole} downLoss 下行丢包率，单位 (%) 该数值越小越好，目前仅本地用户有该信息
 * @property {Number} delay 网络延迟，单位 ms，目前仅本地用户有该信息
 */
type TUINetwork = {
    userId: string;
    quality: TUINetworkQuality;
    upLoss: number;
    downLoss: number;
    delay: number;
};
/**
 * 视频编码参数
 * @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 TUIKickedOutOfRoomReason {
    kKickedByAdmin = 0,
    kKickedByLoggedOnOtherDevice = 1,
    kKickedByServer = 2
}
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"
}
declare enum TUIRoomDeviceMangerEvents {
    /**
     * @description 设备变更事件
     * @default 'onDeviceChange'
     * @event TUIRoomDeviceMangerEvents#onDeviceChange
     * @param {object} options
     * @param {string} options.deviceId 设备 Id
     * @param {any} options.type 设备类型
     * @param {any} options.state 设备变更状态
     * @example
     * const roomEngine = new TUIRoomEngine();
     * const deviceManager = roomEngine.getDeviceManager();
     * deviceManager.on(TUIRoomDeviceMangerEvents.onDeviceChange, ({ deviceId, type, state }) => {
     *   console.log('deviceManager.onDeviceChange', deviceId, type, state);
     * });
     */
    onDeviceChanged = "onDeviceChanged"
}
declare enum TUICamera {
    kFront = 0,
    kBack = 1
}
/**
 * 切换摄像头参数
 * @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 {
    EAR = 0,
    SPEAKER = 1
}
/**
 * 接入侧需要的呼叫类型列表，详细如下：
 * @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;
    private static isWasmReady;
    private static sdkAppId;
    private static userId;
    private static userSig;
    private static Module;
    private _callEngineWASM;
    private _logger;
    private _logLevel;
    private _uniqueLoginId;
    private _isExternalTim;
    private _excludeFromHistoryMessage;
    private _localRenderFillMode;
    private _remoteRenderFillMode;
    private _callMediaType;
    tim: any;
    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(options: {
        nickName: string;
        avatar: string;
    }): 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(): any;
    /**
     * 获取 tim 实例
     * @returns {TIM} tim
     * web 端 tim 能力请查看：https://web.sdk.qcloud.com/im/doc/zh-cn/SDK.html
     * @example
     */
    getTim(): ChatSDK;
    /**
     * 切换扬声器和听筒
     */
    selectAudioPlaybackDevice(type: AUDIO_PLAYBACK_DEVICE): 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 _onDeviceUpdated;
    _initLogger(params: any): void;
    getDevicePermission(): {
        audio: boolean;
        video: boolean;
    };
    private _setDevicePermission;
}

export { AUDIO_PLAYBACK_DEVICE, CallEndReason, Rect, TRTCAppScene, TRTCAudioQuality, TRTCBeautyStyle, TRTCDeviceInfo, TRTCDeviceState, TRTCDeviceType, TRTCImageBuffer, TRTCLocalStatistics, TRTCLogLevel, TRTCMixInputType, TRTCMixUser, TRTCNetworkQosParam, TRTCParams, TRTCPublishCDNParam, TRTCQosControlMode, TRTCQuality, TRTCQualityInfo, TRTCRenderParams, TRTCRoleType, TRTCScreenCaptureSourceInfo, TRTCScreenCaptureSourceType, TRTCStatistics, TRTCTranscodingConfig, TRTCTranscodingConfigMode, TRTCVideoEncParam, TRTCVideoFillMode, TRTCVideoMirrorType, TRTCVideoQosPreference, TRTCVideoResolution, TRTCVideoResolutionMode, TRTCVideoRotation, TRTCVideoStreamType, TRTCVolumeInfo, TUIAudioQuality, TUICallCameraPosition, TUICallEngine, TUICallEvent, TUICallType, TUICamera, TUIErrorCode, TUIKickedOutOfRoomReason, TUINetworkQuality, TUIResolutionMode, TUIRoomDeviceMangerEvents, TUIVideoQuality, TUICallEngine as default };
export type { ILoginParams, TUIDeviceInfo, TUINetwork, TUIVideoEncoderParams };
