trtc-electron-sdk
Version:
trtc electron sdk
1,240 lines • 169 kB
TypeScript
/// <reference types="node" />
import { EventEmitter } from 'events';
import { TRTCConfig } from './Renderer/util';
import TRTCLocalMediaTranscoder from './LocalMediaTranscoder';
import { AudioMusicParam, Rect, TRTCAppScene, TRTCAudioEffectParam, TRTCAudioQuality, TRTCBeautyStyle, TRTCDeviceType, TRTCLogLevel, TRTCRenderParams, TRTCRoleType, TRTCSwitchRoomParam, TRTCVideoBufferType, TRTCVideoFillMode, TRTCAudioFrame, TRTCVideoPixelFormat, TRTCVideoRotation, TRTCVideoStreamType, TRTCWaterMarkSrcType, TRTCPluginType, TRTCPluginInfo, TRTCVideoProcessPluginOptions, TRTCMediaEncryptDecryptPluginOptions, TRTCAudioRecordingParams, TRTCScreenCaptureSourceInfo, TRTCScreenCaptureProperty, TRTCSpeedTestParams, TRTCRecordType, TRTCDeviceInfo, TRTCCameraCaptureParams, TRTCImageBuffer, TRTCInitConfig, TRTCAudioParallelParams, TRTCVoiceReverbType, TRTCVoiceChangerType, TRTCMusicPlayObserver, TRTCAudioFrameCallback, TRTCAudioProcessPluginOptions, TRTCPublishTarget, TRTCStreamEncoderParam, TRTCStreamMixingConfig } from './trtc_define';
import { ITRTCCloud, TRTCVideoRenderCallback } from './types';
import TRTCMediaMixingManager, { TRTCMediaMixingService } from './extensions/MediaMixingManager';
/**
* 腾讯云视频通话功能的主要接口类
*
*
* @example
* // 创建/使用/销毁 TRTCCloud 对象的示例代码:
* import TRTCCloud from 'trtc-electron-sdk';
* const rtcCloud = TRTCCloud.getTRTCShareInstance();
* // 获取 SDK 版本号
* const version = rtcCloud.getSDKVersion();
*
*/
declare class TRTCCloud extends EventEmitter implements ITRTCCloud {
private logger;
private id;
private static isIPCMode;
private static ipcModeReferenceCount;
private static sharedTRTCCloudInstance;
private static subInstances;
private stateStore;
private rtcCloud;
private videoRendererMap;
private localFillMode;
private remoteFillModeMap;
private imageData;
private localVideoCallback;
private remoteVideoCallback;
private isExternalRenderEnabled;
private pixelFormat;
private pixelLength;
private enableRenderFrame;
private screenCaptureStreamType;
private isScreenCapturing;
private localMediaTranscoder;
private isCaptureLocalVideoEnabled;
private videoProcessBufferType;
private videoProcessPixelFormat;
private videoRenderFPS;
private localVideoRenderController;
private deviceManager;
private audioEffectManager;
private pluginManager;
private mediaMixingService;
private mediaMixingManager;
private localRotation;
private localMirrorType;
private remoteMainStreamFillMode;
private remoteMainStreamRotation;
private remoteMainStreamMirrorType;
private remoteSubStreamFillMode;
private remoteSubStreamRotation;
private remoteSubStreamMirrorType;
private priorRemoteVideoStreamType;
private audioQuality;
private bgmId;
private playAudioEffectIdList;
private remoteVideoBufferMap;
private localVideoBufferMap;
private paramsStore;
/**
* @param {TRTCInitConfig} [config] - 初始化参数,可选
* @param {Record<string, any>} [config.networkProxy] - 网络代理参数,可选。为空时,默认不开启网络代理。
* @param {Boolean} [config.isIPCMode] - 是否跨进程模式,跨进程模式支持本地混流且混流视频采用原生窗口渲染。默认:false,不开启。
*/
constructor(config?: TRTCInitConfig);
/**
* 创建 TRTCCloud 主实例对象(单例模式)
*
* @param {TRTCInitConfig} [config] - 初始化参数,可选
* @param {Record<String, any>} [config.networkProxy] - 网络代理参数,可选。为空时,默认不开启网络代理。
* @param {String} [config.networkProxy.host] - 网络代理服务器地址。
* @param {Number} [config.networkProxy.port] - 网络代理服务器端口。
* @param {String} [config.networkProxy.username] - 网络代理服务器用户名。
* @param {String} [config.networkProxy.password] - 网络代理服务器密码。
* @param {Record<String, any>} [config.networkProxy.config] - 网络代理配置,可选。
* @param {Boolean} [config.networkProxy.config.supportHttps] - 是否支持 HTTPS 代理,可选。默认:true。
* @param {Boolean} [config.networkProxy.config.supportTcp] - 是否支持 TCP 代理,可选。默认:true。
* @param {Boolean} [config.networkProxy.config.supportUdp] - 是否支持 UDP 代理,可选。默认:true。
* @param {Boolean} [config.isIPCMode] - 是否跨进程模式,跨进程模式支持本地混流且混流视频采用原生窗口渲染。默认:false,不开启。
*
* @returns {TRTCCloud}
*
* @example
* import TRTCCloud from 'trtc-electron-sdk';
* const rtcCloud = TRTCCloud.getTRTCShareInstance({
* networkProxy: {
* host: 'www.my-domain.com',
* port: 9999,
* username: 'proxy',
* password: 'proxy password',
* config: {
* supportHttps: true,
* supportTcp: true,
* supportUdp: true,
* }
* },
* isIPCMode: false,
* });
*/
static getTRTCShareInstance(config?: TRTCInitConfig): TRTCCloud;
/**
* 销毁 TRTCCloud 主实例对象(单例模式)
*
* 注释:会同时销毁所有子实例
*/
static destroyTRTCShareInstance(): void;
private onFPSChanged;
/**
* 创建子实例
*
* 注意:只有主实例才能创建子实例,子实例不能创建子实例
*
* @example
* import TRTCCloud from 'trtc-electron-sdk';
*
* const rtcCloud = TRTCCloud.getTRTCShareInstance();
* rtcCloud.startLocalAudio(); // 主实例开启麦克风采集
*
* const childRtcCloud = rtcCloud.createSubCloud();
* childRtcCloud?.startSystemAudioLoopback(); // 子实例开启系统音采集
*
* @returns {TRTCCloud|null}
*/
createSubCloud(config?: TRTCInitConfig): TRTCCloud | null;
/**
* 获取 TRTC 配置对象
*
* 可以通过 TRTC 配置对象 {@link TRTCConfig} 打开 debug 模式
*
* @example
* // Enable 'debug' mode
* import TRTCCloud from 'trtc-electron-sdk';
* const rtcCloud = TRTCCloud.getTRTCShareInstance();
* rtcCloud.getConfigObject().setDebugMode(true);
*
* @returns {TRTCConfig}
*/
getConfigObject(): TRTCConfig;
/**
* @deprecated
*/
setExternalRenderEnabled(enabled: boolean): void;
/**
* @deprecated
*/
setCaptureLocalVideoEnabled(enabled: boolean): void;
/**
* 销毁当前实例,释放资源
*/
destroy(): void;
/**
* 设置 TRTCCloud 回调
*
* @example
* // 创建/使用/销毁 TRTCCloud 对象的示例代码:
* import TRTCCloud from 'trtc-electron-sdk';
* this.rtcCloud = TRTCCloud.getTRTCShareInstance();
*
* // 注册回调的方法,事件关键字详见下方"通用事件回调"
* subscribeEvents = (rtcCloud) => {
* rtcCloud.on('onError', (errcode, errmsg) => {
* console.info('trtc_demo: onError :' + errcode + " msg" + errmsg);
* });
* };
*
* @namespace TRTCCallback
*/
private initEventHandler;
private fire;
/**
* 错误回调:SDK 不可恢复的错误,一定要监听,并分情况给用户适当的界面提示。
*
* @event TRTCCallback#onError
* @param {Number} errCode - 错误码
* @param {String} errMsg - 错误信息
*/
private handleOnError;
/**
* 警告回调:用于告知您一些非严重性问题,例如出现了卡顿或者可恢复的解码失败。
*
* @event TRTCCallback#onWarning
* @param {Number} warningCode - 警告码
* @param {String} warningMsg - 警告信息
* @param {Any} extra - 补充信息
*/
private handleOnWarning;
/**
* 已加入房间的回调
*
* 调用 TRTCCloud 中的 [enterRoom()]{@link TRTCCloud#enterRoom} 接口执行进房操作后,会收到来自 SDK 的 onEnterRoom(result) 回调:
* 如果加入成功,result 会是一个正数(result > 0),代表加入房间的时间消耗,单位是毫秒(ms)。
* 如果加入失败,result 会是一个负数(result < 0),代表进房失败的错误码。
* 进房失败的错误码含义请参见 [错误码](https://cloud.tencent.com/document/product/647/32257)。
*
* 注意:
* - 在 Ver6.6 之前的版本,只有进房成功会抛出 onEnterRoom(result) 回调,进房失败由 onError() 回调抛出。
* - 在 Ver6.6 及之后改为:进房成功返回正的 result,进房失败返回负的 result,同时进房失败也会有 onError() 回调抛出。
*
* @event TRTCCallback#onEnterRoom
* @param {Number} result - result > 0 时为进房耗时(ms),result < 0 时为进房错误码。
*/
private handleOnEnterRoom;
/**
* 退出房间的事件回调
*
* 调用 TRTCCloud 中的 [exitRoom()]{@link TRTCCloud#exitRoom} 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。
* 待资源释放完毕,SDK 会通过 onExitRoom() 回调通知到您。
*
* 如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作。
* 否则可能会遇到例如摄像头、麦克风设备被强占等各种异常问题。
*
* @event TRTCCallback#onExitRoom
* @param {Number} reason - 离开房间原因,0:主动调用 exitRoom 退房;1:被服务器踢出当前房间;2:当前房间整个被解散。
*/
private handleOnExitRoom;
/**
* 切换房间的事件回调
*
* @event TRTCCallback#onSwitchRoom
* @param {Number} errCode - 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
* @param {String} errMsg - 错误信息。
*/
private handleOnSwitchRoom;
/**
* 切换角色的事件回调
*
* 调用 TRTCCloud 中的 [switchRole()]{@link TRTCCloud#switchRole} 接口会切换主播和观众的角色,该操作会伴随一个线路切换的过程,
* 待 SDK 切换完成后,会抛出 onSwitchRole() 事件回调。
*
* @event TRTCCallback#onSwitchRole
* @param {Number} errCode - 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
* @param {String} errMsg - 错误信息。
*/
private handleOnSwitchRole;
/**
* 请求跨房连麦(主播跨房 PK)的结果回调
*
* 调用 TRTCCloud 中的 [connectOtherRoom()]{@link TRTCCloud#connectOtherRoom} 接口会将两个不同房间中的主播拉通视频通话,也就是所谓的"主播PK"功能。
* 调用者会收到 onConnectOtherRoom() 回调来获知跨房通话是否成功,
* 如果成功,两个房间中的所有用户都会收到 PK 主播的 onUserVideoAvailable() 回调。
*
* @event TRTCCallback#onConnectOtherRoom
* @param {String} userId - 要 PK 的目标主播 userId。
* @param {Number} errCode - 错误码,ERR_NULL 代表切换成功,其他请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
* @param {String} errMsg - 错误信息。
*/
private handleOnConnectOtherRoom;
/**
* 关闭跨房连麦(主播跨房 PK)的结果回调
*
* @event TRTCCallback#onDisconnectOtherRoom
* @param {Number} errCode - 错误码,ERR_NULL 代表切换成功,其他请参见 [错误码](https://cloud.tencent.com/document/product/647/32257)。
* @param {String} errMsg - 错误信息。
*/
private handleOnDisconnectOtherRoom;
/**
* 有用户加入当前房间
*
* 出于性能方面的考虑,在两种不同的应用场景下,该通知的行为会有差别:
* - 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户进入房间都会触发该通知。
* - 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):该场景不限制观众的数量,如果任何用户进出都抛出回调会引起很大的性能损耗,所以该场景下只有主播进入房间时才会触发该通知,观众进入房间不会触发该通知。
*
* 注意:onRemoteUserEnterRoom 和 onRemoteUserLeaveRoom 只适用于维护当前房间里的"成员列表",如果需要显示远程画面,建议使用监听 onUserVideoAvailable() 事件回调。
*
* @event TRTCCallback#onRemoteUserEnterRoom
* @param {String} userId - 用户标识
*/
private handleOnRemoteUserEnterRoom;
/**
* 有用户离开当前房间
*
* 与 onRemoteUserEnterRoom 相对应,在两种不同的应用场景下,该通知的行为会有差别:
* - 通话场景(TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户的离开都会触发该通知。
* - 直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom):只有主播离开房间时才会触发该通知,观众离开房间不会触发该通知。
*
* @event TRTCCallback#onRemoteUserLeaveRoom
* @param {String} userId - 用户标识
* @param {Number} reason - 离开原因,0表示用户主动退出房间,1表示用户超时退出,2表示被踢出房间。
*/
private handleOnRemoteUserLeaveRoom;
/**
* 用户是否开启摄像头视频
*
* 当您收到 onUserVideoAvailable(userId, 1) 通知时,代表该路画面已经有可用的视频数据帧到达。
* 之后,您需要调用 [startRemoteView()]{@link TRTCCloud#startRemoteView} 接口加载该用户的远程画面。
* 再之后,您还会收到名为 onFirstVideoFrame(userId) 的首帧画面渲染回调。
*
* 当您收到了 onUserVideoAvailable(userId, 0) 通知时,代表该路远程画面已经被关闭,这可能是
* 由于该用户调用了 [muteLocalVideo()]{@link TRTCCloud#muteLocalVideo} 或 [stopLocalPreview()]{@link TRTCCloud#stopLocalPreview} 所致。
*
* @event TRTCCallback#onUserVideoAvailable
* @param {String} userId - 用户标识
* @param {Number} available - 画面是否开启
*/
private handleOnUserVideoAvailable;
/**
* 用户是否开启了辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)
*
* 注意:显示辅路画面使用的函数是[startRemoteView()]{@link TRTCCloud#startRemoteView}, 从 8.0 版本开始已不再推荐使用 [startRemoteSubStreamView()]{@link TRTCCloud#startRemoteSubStreamView}。
*
* @event TRTCCallback#onUserSubStreamAvailable
* @param {String} userId - 用户标识
* @param {Number} available - 辅路画面是否开启
*/
private handleOnUserSubStreamAvailable;
/**
* 用户是否开启音频上行
*
* @event TRTCCallback#onUserAudioAvailable
* @param {String} userId - 用户标识
* @param {Number} available - 声音是否开启
*/
private handleOnUserAudioAvailable;
/**
* 开始渲染本地或远程用户的首帧画面
*
* 如果 userId 为 null,表示开始渲染本地采集的摄像头画面,需要您先调用 [startLocalPreview()]{@link TRTCCloud#startLocalPreview} 触发。
* 如果 userId 不为 null,表示开始渲染远程用户的首帧画面,需要您先调用 [startRemoteView()]{@link TRTCCloud#startRemoteView} 触发。
*
* 注意:只有当您调用 startLocalPreview() 或 startRemoteView() 之后,才会触发该回调。
*
* @event TRTCCallback#onFirstVideoFrame
* @param {String} userId - 本地或远程用户 ID,如果 userId == '' 代表本地,userId != '' 代表远程。
* @param {Number} streamType - 视频流类型,TRTCVideoStreamTypeBig:主路画面,一般用于摄像头;TRTCVideoStreamTypeSub:辅路画面,一般用于屏幕分享。
* @param {Number} width - 画面宽度
* @param {Number} height - 画面高度
*/
private handleOnFirstVideoFrame;
/**
* 开始播放远程用户的首帧音频(本地声音暂不通知)
*
* @event TRTCCallback#onFirstAudioFrame
* @param {String} userId - 远程用户 ID。
*/
private handleOnFirstAudioFrame;
/**
* 首帧本地视频数据已经被送出
*
* SDK 会在 enterRoom() 并 startLocalPreview() 成功后开始摄像头采集,并将采集到的画面进行编码。
* 当 SDK 成功向云端送出第一帧视频数据后,会抛出这个回调事件。
*
* @event TRTCCallback#onSendFirstLocalVideoFrame
* @param {Number} streamType - - 视频流类型,TRTCVideoStreamTypeBig:主路画面,一般用于摄像头;TRTCVideoStreamTypeSub:辅路画面,一般用于屏幕分享。
*/
private handleOnSendFirstLocalVideoFrame;
/**
* 首帧本地音频数据已经被送出
*
* SDK 会在 enterRoom() 并 startLocalAudio() 成功后开始麦克风采集,并将采集到的声音进行编码。
* 当 SDK 成功向云端送出第一帧音频数据后,会抛出这个回调事件。
*
* @event TRTCCallback#onSendFirstLocalAudioFrame
*/
private handleOnSendFirstLocalAudioFrame;
/**
* 废弃事件:有主播加入当前房间
*
* 该回调接口可以被看作是 onRemoteUserEnterRoom 的废弃版本,不推荐使用。请使用 onUserVideoAvailable 或 onRemoteUserEnterRoom 进行替代。
*
* @deprecated 从 TRTCSDK6.8 后该接口已被废弃,不推荐使用
* @event TRTCCallback#onUserEnter
* @param {String} userId - 用户标识
*/
private handleOnUserEnter;
/**
* 废弃事件:有主播离开当前房间
*
* 该回调接口可以被看作是 onRemoteUserLeaveRoom 的废弃版本,不推荐使用。请使用 onUserVideoAvailable 或 onRemoteUserEnterRoom 进行替代。
*
* @deprecated 从 TRTCSDK6.8 后该接口已被废弃,不推荐使用
* @event TRTCCallback#onUserExit
* @param {String} userId - 用户标识
* @param {Number} reason - 离开原因代码,区分用户是正常离开,还是由于网络断线等原因离开。
*/
private handleOnUserExit;
/**
* 网络质量:该回调每2秒触发一次,统计当前网络的上行和下行质量
*
* 注意:userId == '' 代表自己当前的视频质量
*
* @event TRTCCallback#onNetworkQuality
* @param {TRTCQualityInfo} localQuality - 上行网络质量
* @param {TRTCQualityInfo[]} remoteQuality - 下行网络质量
*/
private handleOnNetworkQuality;
/**
* 技术指标统计回调
*
* 如果您是熟悉音视频领域相关术语,可以通过这个回调获取 SDK 的所有技术指标。
* 如果您是首次开发音视频相关项目,可以只关注 onNetworkQuality 回调。
*
* 注意:每2秒回调一次
*
* @event TRTCCallback#onStatistics
* @param {TRTCStatistics} statis - 统计数据,包括本地和远程的
*/
private handleOnStatistics;
/**
* SDK 跟服务器的连接断开
*
* @event TRTCCallback#onConnectionLost
*/
private handleOnConnectionLost;
/**
* SDK 尝试重新连接到服务器
*
* @event TRTCCallback#onTryToReconnect
*/
private handleOnTryToReconnect;
/**
* SDK 跟服务器的连接恢复
*
* @event TRTCCallback#onConnectionRecovery
*/
private handleOnConnectionRecovery;
/**
* 废弃事件:服务器测速的回调,SDK 对多个服务器 IP 做测速,每个 IP 的测速结果通过这个回调通知
*
* @deprecated 从 TRTCSDK 9.3 后该接口已被废弃,不会抛出该事件, 请采用 onSpeedTestResult 事件代替
*
* @event TRTCCallback#onSpeedTest
* @param {TRTCSpeedTestResult} currentResult - 当前完成的测速结果
* @param {Number} finishedCount - 已完成测速的服务器数量
* @param {Number} totalCount - 需要测速的服务器总数量
*/
private bindOnSpeedTest;
/**
* 网速测试的结果回调
*
* 该统计回调由 startSpeedTest 触发。
*
* @event TRTCCallback#onSpeedTestResult
* @param {TRTCSpeedTestResult} result 网速测试数据数据,包括丢包、往返延迟、上下行的带宽速率。
*/
private handleOnSpeedTestResult;
/**
* 摄像头准备就绪
*
* @event TRTCCallback#onCameraDidReady
*/
private handleOnCameraDidReady;
/**
* 麦克风准备就绪
*
* @event TRTCCallback#onMicDidReady
*/
private handleOnMicDidReady;
/**
* userId 对应的成员语音音量
*
* 您可以通过调用 TRTCCloud 中的 [enableAudioVolumeEvaluation()]{@link TRTCCloud#enableAudioVolumeEvaluation} 接口来开关这个回调或者设置它的触发间隔。
* 需要注意的是,调用 enableAudioVolumeEvaluation 开启音量回调后,无论频道内是否有人说话,都会按设置的时间间隔调用这个回调,
* 如果没有人说话,则 totalVolume 为0。
*
* @event TRTCCallback#onUserVoiceVolume
* @param {TRTCVolumeInfo} userVolumes - 每位发言者的语音音量,取值范围0 - 100
* @param {Number} userVolumesCount - 发言者的人数,即 userVolumes 数组的大小
* @param {Number} totalVolume - 总的语音音量, 取值范围0 - 100
*/
private handleOnUserVoiceVolume;
/**
* 本地设备通断回调
*
* @event TRTCCallback#onDeviceChange
* @param {String} deviceId - Windows 端返回设备名,Mac 端返回设备 ID
* @param {TRTCDeviceType} type - 设备类型
* @param {TRTCDeviceState} state - 事件类型
*/
private handleOnDeviceChange;
/**
* 麦克风测试音量回调
*
* 麦克风测试接口 [startMicDeviceTest()]{@link TRTCCloud#startMicDeviceTest} 会触发这个回调
*
* @event TRTCCallback#onTestMicVolume
* @param {Number} volume - 音量值,取值范围0 - 100
*/
private handleOnTestMicVolume;
/**
* 扬声器测试音量回调
*
* 扬声器测试接口 [startSpeakerDeviceTest()]{@link TRTCCloud#startSpeakerDeviceTest} 会触发这个回调
*
* @event TRTCCallback#onTestSpeakerVolume
* @param {Number} volume - 音量值,取值范围0 - 100
*/
private handleOnTestSpeakerVolume;
/**
* 当前音频采集设备音量变化回调
*
* 使用 [enableAudioVolumeEvaluation]{@link TRTCCloud#enableAudioVolumeEvaluation}(interval>0)开启,(interval==0)关闭
*
* @event TRTCCallback#onAudioDeviceCaptureVolumeChanged
* @param {Number} volume - 音量值,取值范围0 - 100
* @param {Boolean} muted - 当前采集音频设备是否被静音
*/
private handleOnAudioDeviceCaptureVolumeChanged;
/**
* 当前音频播放设备音量变化回调
*
* 使用 [enableAudioVolumeEvaluation]{@link TRTCCloud#enableAudioVolumeEvaluation}(interval>0)开启,(interval==0)关闭
*
* @event TRTCCallback#onAudioDevicePlayoutVolumeChanged
* @param {Number} volume - 音量值,取值范围0 - 100
* @param {Boolean} muted - 当前音频播放设备是否被静音
*/
private handleOnAudioDevicePlayoutVolumeChanged;
/**
* 收到自定义消息回调
*
* 当房间中的某个用户使用 [sendCustomCmdMsg()]{@link TRTCCloud#sendCustomCmdMsg} 发送自定义消息时,房间中的其它用户可以通过 onRecvCustomCmdMsg 接口接收消息
*
* @event TRTCCallback#onRecvCustomCmdMsg
* @param {String} userId - 用户标识
* @param {Number} cmdId - 命令 ID
* @param {Number} seq - 消息序号
* @param {String} msg - 消息数据
*/
private handleOnRecvCustomCmdMsg;
/**
* 自定义消息丢失回调
*
* 实时音视频使用 UDP 通道,即使设置了可靠传输(reliable)也无法确保100%不丢失,只是丢消息概率极低,能满足常规可靠性要求。
* 在发送端设置了可靠传输(reliable)后,SDK 都会通过此回调通知过去时间段内(通常为5s)传输途中丢失的自定义消息数量统计信息。
*
* 注意:只有在发送端设置了可靠传输(reliable),接收方才能收到消息的丢失回调
*
* @event TRTCCallback#onMissCustomCmdMsg
* @param {String} userId - 用户标识
* @param {Number} cmdId - 命令 ID
* @param {Number} errCode - 错误码
* @param {Number} missed - 丢失的消息数量
*/
private handleOnMissCustomCmdMsg;
/**
* 收到 SEI 消息的回调
*
* 当房间中的某个用户使用 [sendSEIMsg()]{@link TRTCCloud#sendSEIMsg} 发送数据时,房间中的其它用户可以通过 onRecvSEIMsg 接口接收数据。
*
* @event TRTCCallback#onRecvSEIMsg
* @param {String} userId - 用户标识
* @param {ArrayBuffer} message - 原始字节(二进制安全)。文本数据可用 TextDecoder 解码。
*/
private handleOnRecvSEIMsg;
/**
* 开始向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 [startPublishing()]{@link TRTCCloud#startPublishing} 接口
*
* @event TRTCCallback#onStartPublishing
* @param {Number} errCode - 0 表示成功,其余值表示失败
* @param {String} errMsg - 具体错误原因
* @deprecated
*/
private handleOnStartPublishing;
/**
* 停止向腾讯云的直播 CDN 推流的回调,对应于 TRTCCloud 中的 [stopPublishing()]{@link TRTCCloud#stopPublishing} 接口
*
* @event TRTCCallback#onStopPublishing
* @param {Number} errCode - 0 表示成功,其余值表示失败
* @param {String} errMsg - 具体错误原因
* @deprecated
*/
private handleOnStopPublishing;
/**
* 旁路推流到 CDN 的回调
*
* 对应于 TRTCCloud 的 [startPublishCDNStream()]{@link TRTCCloud#startPublishCDNStream} 接口
*
* 注意:Start 回调如果成功,只能说明转推请求已经成功告知给腾讯云,如果目标 CDN 有异常,还是有可能会转推失败。
*
* @event TRTCCallback#onStartPublishCDNStream
* @param {Number} errCode - 错误码
* @param {String} errMsg - 错误详细信息
* @deprecated
*/
private handleOnStartPublishCDNStream;
/**
* 停止旁路推流到 CDN 的回调
*
* 对应于 TRTCCloud 中的 [stopPublishCDNStream()]{@link TRTCCloud#stopPublishCDNStream} 接口
*
* @event TRTCCallback#onStopPublishCDNStream
* @param {Number} errCode - 错误码
* @param {String} errMsg - 错误详细信息
* @deprecated
*/
private handleOnStopPublishCDNStream;
/**
* 设置云端的混流转码参数的回调
*
* 对应于 TRTCCloud 中的 [setMixTranscodingConfig()]{@link TRTCCloud#setMixTranscodingConfig} 接口
*
* @event TRTCCallback#onSetMixTranscodingConfig
* @param {Number} errCode - 错误码
* @param {String} errMsg - 错误详细信息
* @deprecated
*/
private handleOnSetMixTranscodingConfig;
/**
* 开始发布媒体流的事件回调
*
* 当您调用 [startPublishMediaStream]{@link TRTCCloud#startPublishMediaStream} 开始向 TRTC 后台服务发布媒体流时,SDK 会立刻将这一指令同步给云端服务器,随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
*
* @event TRTCCallback#onStartPublishMediaStream
* @param taskId {String} - 当请求成功时,TRTC 后台会在回调中提供给您这项任务的 taskId,后续您可以通过该 taskId 结合 [updatePublishMediaStream]{@link TRTCCloud#updatePublishMediaStream} 和 [stopPublishMediaStream]{@link TRTCCloud#stopPublishMediaStream} 进行更新和停止。
* @param code {Number} - 回调结果,0 表示成功,其余值表示失败。
* @param message {String} - 具体回调信息。
*/
private handleOnStartPublishMediaStream;
/**
* 更新媒体流的事件回调
*
* 当您调用媒体流发布接口 ([updatePublishMediaStream]{@link TRTCCloud#updatePublishMediaStream}) 开始向 TRTC 后台服务更新媒体流时,SDK 会立刻将这一指令同步给云端服务器,随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
* @event TRTCCallback#onUpdatePublishMediaStream
* @param taskId {String} - 您调用媒体流发布接口 ([updatePublishMediaStream]{@link TRTCCloud#updatePublishMediaStream}) 时传入的 taskId,会通过此回调再带回给您,用于标识该回调属于哪一次更新请求。
* @param code {Number} - 回调结果,0 表示成功,其余值表示失败。
* @param message {String} - 具体回调信息。
*/
private handleOnUpdatePublishMediaStream;
/**
* 停止媒体流的事件回调
*
* 当您调用停止发布媒体流 ([stopPublishMediaStream]{@link TRTCCloud#stopPublishMediaStream}) 开始向 TRTC 后台服务停止媒体流时,SDK 会立刻将这一指令同步给云端服务器,随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
* @event TRTCCallback#onStopPublishMediaStream
* @param taskId {String} - 您调用停止发布媒体流 ([stopPublishMediaStream]{@link TRTCCloud#stopPublishMediaStream}) 时传入的 taskId,会通过此回调再带回给您,用于标识该回调属于哪一次停止请求。
* @param code {Number} - 回调结果,0 表示成功,其余值表示失败。
* @param message {String} - 具体回调信息。
*/
private handleOnStopPublishMediaStream;
/**
* RTMP/RTMPS 推流状态发生改变回调
*
* 当您调用 [startPublishMediaStream]{@link TRTCCloud#startPublishMediaStream} 开始向 TRTC 后台服务发布媒体流时,SDK 会立刻将这一指令同步给云端服务。
* 若您在目标推流配置 ([TRTCPublishTarget]{@link TRTCPublishTarget}) 设置了向腾讯或者第三方 CDN 上发布音视频流的 URL 配置,则具体 RTMP 或者 RTMPS 推流状态将通过此回调同步给您。
*
* @event TRTCCallback#onCdnStreamStateChanged
* @param cdnUrl {String} - 您调用 [startPublishMediaStream]{@link TRTCCloud#startPublishMediaStream} 时通过目标推流配置 ([TRTCPublishTarget]{@link TRTCPublishTarget}) 传入的 url,在推流状态变更时,会通过此回调同步给您。
* @param status {Number} - 推流状态。
* - 0:推流未开始或者已结束。在您调用 [stopPublishMediaStream]{@link TRTCCloud#stopPublishMediaStream} 时会返回该状态。
* - 1:正在连接 TRTC 服务器和 CDN 服务器。若无法立刻成功,TRTC 后台服务会多次重试尝试推流,并返回该状态(5s回调一次)。如成功进行推流,则进入状态 2;如服务器出错或 60 秒内未成功推流,则进入状态 4。
* - 2:CDN 推流正在进行。在成功推流后,会返回该状态。
* - 3:TRTC 服务器和 CDN 服务器推流中断,正在恢复。当 CDN 出现异常,或推流短暂中断时,TRTC 后台服务会自动尝试恢复推流,并返回该状态(5s回调一次)。如成功恢复推流,则进入状态 2;如服务器出错或 60 秒内未成功恢复,则进入状态 4。
* - 4:TRTC 服务器和 CDN 服务器推流中断,且恢复或连接超时。即此时推流失败,你可以再次调用 [updatePublishMediaStream]{@link TRTCCloud#updatePublishMediaStream} 尝试推流。
* - 5:正在断开 TRTC 服务器和 CDN 服务器。在您调用 [stopPublishMediaStream]{@link TRTCCloud#stopPublishMediaStream} 时,TRTC 后台服务会依次同步状态 5 和状态 0。
* @param code {Number} - 回调结果,0 表示成功,其余值表示失败。
* @param msg {String} - 具体回调信息。
*/
private handleOnCdnStreamStateChanged;
/**
* 废弃事件: 播放音效结束回调
*
* @deprecated 从 TRTCSDK 8.0 后该接口已被废弃,不推荐使用
*
* @event TRTCCallback#onAudioEffectFinished
* @param {Number} effectId - 音效 ID
* @param {Number} code - 0表示播放正常结束;其他表示异常结束
*/
private handleOnAudioEffectFinished;
/**
* 当屏幕分享窗口被遮挡无法正常捕获时,SDK 会通过此回调通知,可在此回调里通知用户移开遮挡窗口
*
* @event TRTCCallback#onScreenCaptureCovered
*/
private handleOnScreenCaptureCovered;
/**
* 当屏幕分享开始时,SDK 会通过此回调通知
*
* @event TRTCCallback#onScreenCaptureStarted
*/
private handleOnScreenCaptureStarted;
/**
* 当屏幕分享暂停时,SDK 会通过此回调通知
*
* @event TRTCCallback#onScreenCapturePaused
* @param {Number} reason - 停止原因,0:表示用户主动暂停;1:注意此字段的含义在 MAC 和 Windows 平台有稍微差异。屏幕窗口不可见暂停(Mac)。表示设置屏幕分享参数导致的暂停(Windows);2:表示屏幕分享窗口被最小化导致的暂停(仅 Windows);3:表示屏幕分享窗口被隐藏导致的暂停(仅 Windows)
*/
private handleOnScreenCapturePaused;
/**
* 当屏幕分享恢复时,SDK 会通过此回调通知
*
* @event TRTCCallback#onScreenCaptureResumed
* @param {Number} reason - 停止原因,0:表示用户主动恢复,1:表示屏幕分享参数设置完毕后自动恢复;2:表示屏幕分享窗口从最小化被恢复;3:表示屏幕分享窗口从隐藏被恢复
*/
private handleOnScreenCaptureResumed;
/**
* 当屏幕分享停止时,SDK 会通过此回调通知
*
* @event TRTCCallback#onScreenCaptureStopped
* @param {Number} reason - 停止原因,0:表示用户主动停止;1:表示屏幕分享窗口被关闭
*/
private handleOnScreenCaptureStopped;
/**
* 截图完成时回调
*
* @event TRTCCallback#onSnapshotComplete
*
* @param {String} userId - 用户 ID,空字符串表示截取本地画面
* @param {TRTCVideoStreamType} type - 视频流类型
* @param {String} data - 截图数据, base64 string
* @param {Number} width - 截图画面的宽度
* @param {Number} height - 截图画面的高度
*/
private handleOnSnapshotComplete;
/**
* 本地录制任务开始的事件回调
*
* 当您调用 [startLocalRecording]{@link TRTCCloud#startLocalRecording} 启动本地媒体录制任务时,SDK 会抛出该事件回调,用于通知您录制任务是否已经顺利启动。
*
* @event TRTCCallback#onLocalRecordBegin
* @param {number} errCode - 错误码 0:初始化录制成功;-1:初始化录制失败;-2: 文件后缀名有误。
* @param {string} storagePath - 录制文件存储路径
*/
private handleOnLocalRecordBegin;
/**
* 本地录制任务正在进行中的事件回调
*
* 当您调用 [startLocalRecording]{@link TRTCCloud#startLocalRecording} 成功启动本地媒体录制任务后,SDK 变会定时地抛出本事件回调。 您可通过捕获该事件回调来获知录制任务的健康状况。 您可以在 [startLocalRecording]{@link TRTCCloud#startLocalRecording} 时设定本事件回调的抛出间隔。
*
* @event TRTCCallback#onLocalRecording
* @param {number} duration - 已经录制的累计时长,单位毫秒。
* @param {string} storagePath - 录制文件存储路径
*/
private handleOnLocalRecording;
/**
* 本地录制任务结束的事件回调
*
* 当您调用 [stopLocalRecording]{@link TRTCCloud#stopLocalRecording} 停止本地媒体录制任务时,SDK 会抛出该事件回调,用于通知您录制任务的最终结果。
*
* @event TRTCCallback#onLocalRecordComplete
* @param {number} errCode - 错误码
* - 0:录制成功;
* - -1:录制失败;
* - -2:切换分辨率或横竖屏导致录制结束;
* - -3:录制时间太短,或未采集到任何视频或音频数据,请检查录制时长,或是否已开启音、视频采集。
* @param {string} storagePath - 录制文件存储路径
*/
private handleOnLocalRecordComplete;
/**
* 系统音频采集回调,SDK在采集失败时会抛出该事件回调,用于通知错误信息
*
* @event TRTCCallback#onSystemAudioLoopbackError
*
* @param {Number} errCode - 错误码含义
* - ERR_AUDIO_PLUGIN_START_FAIL(-1330) :开启系统声音录制失败,例如音频驱动插件不可用
* - ERR_AUDIO_PLUGIN_INSTALL_NOT_AUTHORIZED (-1331) :未授权安装音频驱动插件
* - ERR_AUDIO_PLUGIN_INSTALL_FAILED (-1332) :安装音频驱动插件失败
*/
private handleOnSystemAudioLoopbackError;
private handleVideoSizeChange;
/**
* 进入房间
*
* 调用接口后,您会收到来自 TRTCCallback 中的 [onEnterRoom(result)]{@link TRTCCallback#onEnterRoom} 回调:
* - 如果加入成功,result 会是一个正数(result > 0),表示加入房间的时间消耗,单位是毫秒(ms)。
* - 如果加入失败,result 会是一个负数(result < 0),表示进房失败的错误码。
*
* 进房失败的错误码含义请参见[错误码](https://cloud.tencent.com/document/product/647/32257)。
*
* 参数 scene 的枚举值如下:
* - {@link TRTCAppSceneVideoCall}:<br>
* 视频通话场景,支持720P、1080P高清画质,单个房间最多支持300人同时在线,最高支持50人同时发言。<br>
* 适合:[1对1视频通话]、[300人视频会议]、[在线问诊]、[视频聊天]、[远程面试]等。<br>
* - {@link TRTCAppSceneAudioCall}:<br>
* 语音通话场景,支持 48kHz,支持双声道。单个房间最多支持300人同时在线,最高支持50人同时发言。<br>
* 适合:[1对1语音通话]、[300人语音会议]、[语音聊天]、[语音会议]、[在线狼人杀]等。<br>
* - {@link TRTCAppSceneLIVE}:<br>
* 视频互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。<br>
* 适合:[视频低延时直播]、[十万人互动课堂]、[视频直播 PK]、[视频相亲房]、[互动课堂]、[远程培训]、[超大型会议]等。<br>
* - {@link TRTCAppSceneVoiceChatRoom}:<br>
* 语音互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。<br>
* 适合:[语音低延时直播]、[语音直播连麦]、[语聊房]、[K 歌房]、[FM 电台]等。<br>
*
* 注意:<br>
* 1. 当 scene 选择为 TRTCAppSceneLIVE 或 TRTCAppSceneVoiceChatRoom 时,您必须通过 TRTCParams 中的 role 字段指定当前用户的角色。<br>
* 2. 不管进房是否成功,enterRoom 都必须与 exitRoom 配对使用,在调用 exitRoom 前再次调用 enterRoom 函数会导致不可预期的错误问题。
*
* @param {TRTCParams} params - 进房参数
* @param {Number} params.sdkAppId - 应用标识(必填)
* @param {String} params.userId - 用户标识(必填)
* @param {String} params.userSig - 用户签名(必填)
* @param {Number} params.roomId - 房间号码, roomId 和 strRoomId 必须填一个, 若您选用 strRoomId,则 roomId 需要填写为0。
* @param {String} params.strRoomId - 字符串房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话, roomId 和 strRoomId 必须填一个。若两者都填,则优先选择 roomId。
* @param {TRTCRoleType} params.role - 直播场景下的角色,默认值:主播
* - TRTCRoleAnchor: 主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。
* - TRTCRoleAudience: 观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。
* @param {String} params.privateMapKey - 房间签名(非必填)
* @param {String} params.businessInfo - 业务数据(非必填)
* @param {String} params.streamId - 自定义 CDN 播放地址(非必填)
* @param {String} params.userDefineRecordId - 设置云端录制完成后的回调消息中的 "userdefinerecordid" 字段内容,便于您更方便的识别录制回调。
* @param {TRTCAppScene} scene - 应用场景,目前支持视频通话(VideoCall)、在线直播(Live)、语音通话(AudioCall)、语音聊天室(VoiceChatRoom)四种场景。
*/
enterRoom(params: any, scene: TRTCAppScene): void;
/**
* 退出房间
*
* 调用 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源。
* 待资源释放完毕,SDK 会通过 TRTCCallback 中的 onExitRoom() 回调通知您。
*
* 如果您要再次调用 enterRoom() 或者切换到其它的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作,
* 否则可能会遇到如摄像头、麦克风设备被强占等各种异常问题。
*/
exitRoom(): void;
/**
* 切换房间
*
* 调用该接口后,用户会先退出原来的房间并快速进入 TRTCSwitchRoomParam 中指定的新房间:
* 相比于直接调用 exitRoom + enterRoom 的方式,switchRoom 接口对主播更加友好,因为 switchRoom
* 不会停止主播端视频的采集和预览。
*
* @param {TRTCSwitchRoomParam} params 房间切换参数,请参考 {@link TRTCSwitchRoomParam}
*
* 接口调用结果会通过 onSwitchRoom(errCode, errMsg) 事件回调通知给您。
*/
switchRoom(params: TRTCSwitchRoomParam): void;
/**
* 切换角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom)
*
* 在直播场景下,一个用户可能需要在"观众"和"主播"之间来回切换。
* 您可以在进房前通过 TRTCParams 中的 role 字段确定角色,也可以通过 switchRole 在进房后切换角色。
*
* @param {TRTCRoleType} role - 目标角色,默认为主播
* - TRTCRoleAnchor: 主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。
* - TRTCRoleAudience: 观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。
* @param {string} [privateMapKey] - 用于权限控制的权限票据(可选)。
* 当您希望只有特定的用户才能在 TRTC 房间中切换角色时,可以通过该参数传入权限票据进行鉴权。
* 仅在后台开启了房间高级权限控制时,该参数才生效。详情请参见 [开启高级权限控制](https://cloud.tencent.com/document/product/647/32240)。
*/
switchRole(role: TRTCRoleType, privateMapKey?: string): void;
/**
* 请求跨房连麦(主播跨房 PK)
*
* TRTC 中两个不同音视频房间中的主播,可以通过"跨房连麦"功能拉通连麦通话功能。使用此功能时,
* 两个主播无需退出各自原来的直播间即可进行"连麦 PK"。
*
* 例如:当房间"001"中的主播 A 通过 connectOtherRoom() 跟房间"002"中的主播 B 拉通跨房连麦后,
* 房间"001"中的用户都会收到主播 B 的 onUserEnter(B) 回调和 onUserVideoAvailable(B,true) 回调。
* 房间"002"中的用户都会收到主播 A 的 onUserEnter(A) 回调和 onUserVideoAvailable(A,true) 回调。
*
* 简言之,跨房连麦的本质,就是把两个不同房间中的主播相互分享,让每个房间里的观众都能看到两个主播。
*
* <pre>
* 房间 001 房间 002
* ------------- ------------
* 跨房连麦前: | 主播 A | | 主播 B |
* | 观众 U V W | | 观众 X Y Z |
* ------------- ------------
*
* 房间 001 房间 002
* ------------- ------------
* 跨房连麦后: | 主播 A B | | 主播 B A |
* | 观众 U V W | | 观众 X Y Z |
* ------------- ------------
* </pre>
*
* 考虑到后续扩展字段的兼容性问题,跨房连麦的参数暂时采用了 JSON 格式的字符串,要求至少包含两个字段:
* - roomId:房间"001"中的主播 A 要跟房间"002"中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 roomId 应指定为"002"。
* - userId:房间"001"中的主播 A 要跟房间"002"中的主播 B 连麦,主播 A 调用 connectOtherRoom() 时 userId 应指定为 B 的 userId。
*
* 跨房连麦的请求结果会通过 TRTCCallback 中的 onConnectOtherRoom 回调通知给您。
*
* @example
* let json = JSON.stringify({roomId: 2, userId: "userB"});
* rtcCloud.connectOtherRoom(json);
*
* @param {String} params - JSON 字符串连麦参数,roomId 代表目标房间号,userId 代表目标用户 ID。
*
*/
connectOtherRoom(params: string): void;
/**
* 关闭跨房连麦(主播跨房 PK)
*
* 跨房连麦的退出结果会通过 TRTCCallback 中的 onDisconnectOtherRoom 回调通知给您。
*/
disconnectOtherRoom(): void;
/**
* 设置音视频数据接收模式(需要在进房前设置才能生效)
*
* 为实现进房秒开的绝佳体验,SDK 默认进房后自动接收音视频。即在您进房成功的同时,您将立刻收到远端所有用户的音视频数据。
* 若您没有调用 startRemoteView,视频数据将自动超时取消。
* 若您主要用于语音聊天等没有自动接收视频数据需求的场景,您可以根据实际需求选择接收模式。
*
* 注意:需要在进房前设置才能生效。
*
* @param {Boolean} autoRecvAudio - true:自动接收音频数据;false:需要调用 [muteRemoteAudio]{@link TRTCCloud#muteRemoteAudio} 进行请求或取消。默认值:true
* @param {Boolean} autoRecvVideo - true:自动接收视频数据;false:需要调用 [startRemoteView]{@link TRTCCloud#startRemoteView}/[stopRemoteView]{@link TRTCCloud#stopRemoteView} 进行请求或取消。默认值:true
*
*/
setDefaultStreamRecvMode(autoRecvAudio: boolean, autoRecvVideo: boolean): void;
/**
* 开始发布媒体流
*
* 该接口会向 TRTC 服务器发送指令,要求其将当前用户的音视频流转推/转码到直播 CDN 或者回推到 TRTC 房间中,您可以通过 [TRTCPublishTarget]{@link TRTCPublishTarget} 配置中的 [TRTCPublishMode]{@link TRTCPublishMode} 指定具体的发布模式。
*
* 注意:
* 1. SDK 会通过回调 [onStartPublishMediaStream]{@link TRTCCallback#event:onStartPublishMediaStream} 带给您后台启动的任务标识(即 taskId)。
* 2. 同一个任务(TRTCPublishMode 与 TRTCPublishCdnUrl 均相同)仅支持启动一次。若您后续需要更新或者停止该项任务,需要记录并使用返回的 taskId,通过 [updatePublishMediaStream]{@link TRTCCloud#updatePublishMediaStream} 或者 [stopPublishMediaStream]{@link TRTCCloud#stopPublishMediaStream} 来操作。
* 3. target 支持同时配置多个 CDN URL(最多同时 10 个)。若您的同一个转推/转码任务需要发布至多路 CDN,则仅需要在 target 中配置多个 CDN URL 即可。同一个转码任务即使有多个转推地址,对应的转码计费仍只收取一份。
* 4. 使用时需要注意不要多个任务同时往相同的 URL 地址推送,以免引起异常推流状态。一种推荐的方案是 URL 中使用 "sdkappid_roomid_userid_main" 作为区分标识,这种命名方式容易辨认且不会在您的多个应用中发生冲突。
*
* @example
* // Publish big stream(camera video) to CDN
* import TRTCCloud, { TRTCPublishMode } from 'trtc-electron-sdk';
* const trtcCloud = TRTCCloud.getTRTCShareInstance();
*
* let cdnTaskId = '';
* trtcCloud.on('onStartPublishMediaStream', (taskId: string, code: number, message: string) => {
* if (code === 0) {
* cdnTaskId = taskId;
* } else {
* console.log('startPublishMediaStream error:', code, message);
* }
* });
*
* trtc.startPublishMediaStream({
* mode: TRTCPublishMode.TRTCPublishBigStreamToCdn,
* cdnUrlList: [{
* rtmpUrl: 'rtmp://<Your RTMP URL>',
* isInternalLine: true
* }],
* mixStreamIdentity: null
* }, null, null);
*
* @example
* // Publish sub stream(screen sharing video) to CDN
* import TRTCCloud, { TRTCPublishMode } from 'trtc-electron-sdk';
* const trtcCloud = TRTCCloud.getTRTCShareInstance();
*
* let cdnTaskId = '';
* trtcCloud.on('onStartPublishMediaStream', (taskId: string, code: number, message: string) => {
* if (code === 0) {
* cdnTaskId = taskId;
* } else {
* console.log('startPublishMediaStream error:', code, message);
* }
* });
*
* trtc.startPublishMediaStream({
* mode: TRTCPublishMode.TRTCPublishSubStreamToCdn,
* cdnUrlList: [{
* rtmpUrl: 'rtmp://<Your RTMP URL>',
* isInternalLine: true
* }],
* mixStreamIdentity: null
* }, null, null);
*
* @example
* // Publish and mixing multi-user video and audio to CDN
* import TRTCCloud, { TRTCPublishMode } from 'trtc-electron-sdk';
* const trtcCloud = TRTCCloud.getTRTCShareInstance();
*
* let cdnTaskId = '';
* trtcCloud.on('onStartPublishMediaStream', (taskId: string, code: number, message: string) => {
* if (code === 0) {
* cdnTaskId = taskId;
* } else {
* console.log('startPublishMediaStream error:', code, message);
* }
* });
*
* trtc.startPublishMediaStream(
* {
* mode: TRTCPublishMode.TRTCPublishMixStreamToCdn,
* cdnUrlList: [{
* rtmpUrl: 'rtmp://<Your RTMP URL>',
* isInternalLine: true
* }],
* mixStreamIdentity: null
* },
* {
* audioEncodedChannelNum: 2,
* audioEncodedCodecType: 0,
* audioEncodedKbps: 128,
* audioEncodedSampleRate: 48000,
* videoEncodedCodecType: 0,
* videoEncodedFPS: 30,
* videoEncodedGOP: 1,
* videoEncodedWidth: 1280,
* videoEncodedHeight: 720,
* videoEncodedKbps: 2000,
* videoSeiParams: "",
* },
* {
* "backgroundColor": 14362921,
* "backgroundImage": "",
* "videoLayoutList": [
* {
* "rect": { "top": 0, "left": 0, "right": 960, "bottom": 540 },
* "zOrder": 1,
* "fillMode": 0,
* "backgroundColor": 14483711,
* "placeHolderImage": "",
* "fixedVideoUser": { "userId": "windev", "intRoomId": 5055005, "strRoomId": "" },
* "fixedVideoStreamType": 0
* },
* {
* "rect": { "top": 360, "left": 640, "right": 1280, "bottom": 720 },
* "zOrder": 2,
* "fillMode": 0,
* "backgroundColor": 14480000,
* "placeHolderImage": "",
* "fixedVideoUser": { "userId": "macdev", "intRoomId": 5055005, "strRoomId": "" },
* "fixedVideoStreamType": 0
* }
* ],
* "audioMixUserList": [
* { "userId": "windev", "intRoomId": 5055005, "strRoomId": "" },
* { "userId": "macdev", "intRoomId": 5055005, "strRoomId": "" }
* ],
* "watermarkList": [
* {
* "watermarkUrl": "https://<Your watermark image URL>",
* "rect": { "top": 540, "left": 0, "right": 320, "bottom": 640 },
* "zOrder": 3
* }
* ]
* }
* );
*
* @param target {TRTCPublishTarget} - 媒体流发布的目标地址,支持转推/转码到腾讯或者第三方 CDN,也支持转码回推到 TRTC 房间中。
* @param params {TRTCStreamEncoderParam|null} - 媒体流编码输出参数,转码和回推到 TRTC 房间中时为必填项,您需要指定您预期的转码输出参数。在转推时,为了更好的转推稳定性和 CDN 兼容性,也建议您进行配置。
* @param config {TRTCStreamMixingConfig|null} - 媒体流转码配置参数,转码和回推到 TRTC 房间中时为必填项,您需要指定您预期的转码配置参数。转推模式下则无效。
*/
startPublishMediaStream(target: TRTCPublishTarget, params: TRTCStreamEncoderParam | null, config: TRTCStreamMixingConfig | null): void;
/**
* 更新发布媒体流
*
* 该接口会向 TRTC 服务器发送指令,更新通过 [startPublishMediaStream]{@link TRTCCloud#startPublishMediaStream} 启动的媒体流
*
* 注意:
* 1. 您可以通过本接口来更新发布的 CDN URL(支持增删,最多同时 10 个),但您使用时需要注意不要多个任务同时往相同的 URL 地址推送,以免引起异常推流状态。
* 2. 您可以通过 taskId 来更新调整转推/转码任务。例如在 pk 业务中,您可以先通过 [startPublishMediaStream]{@link startPublishMediaStream} 发起转推,接着在主播发起 pk 时,通过 taskId 和本接口将转推更新为转码任务。此时,CDN 播放将连续并且不会发生断流(您需要保持媒体流编码输出参数 `param` 一致)。
* 3. 同一个任务不支持纯音频、音视频、纯视频之间的切换。
*
* @example
* // Publish and mixing multi-user video and audio to TRTC Room
* import TRTCCloud, { TRTCPublishMode } from 'trtc-electron-sdk';
* const trtcCloud = TRTCCloud.getTRTCShareInstance();
*
* let cdnTaskId = '';
* trtcCloud.on('onStartPublishMediaStream', (taskId: string, code: number, message: string) => {
* if (code === 0) {
* cdnTaskId = taskId;
* } else {
* console.log('startPublishMediaStream error:', code, message);
* }
* });
*
* trtc.updatePublishMediaStream(
* cdnTaskId,
* {
* mode: TRTCPublishMode.TRTCPublishMixStreamToRoom,
* cdnUrlList: [],
* mixStreamIdentity: { // Publish to TRTC Room
* "userId": "__robot__",
* "intRoomId": 5055005,
* "strRoomId": ""
* }
* },
* {
* audioEncodedChannelNum: 2,
* audioEncodedCodecType: 0,
* audioEncodedKbps: 128,
* audioEncodedSampleRate: 48000,
* videoEncodedCodecType: 0,
* videoEncodedFPS: 30,
* videoEncodedGOP: 1,
* videoEncodedWidth: 1280,
* videoEncodedHeight: 720,
* videoEncodedKbps: 2000,
* videoSeiParams: "",
* },
* {
* "backgroundColor": 14362921,
* "backgroundImage": "",
* "videoLayoutList": [
* {
* "rect": { "top": 0, "left": 0, "right": 960, "bottom": 540 },
* "zOrder": 1,
* "fillMode": 0,
* "backgroundColor": 14483711,
* "placeHolderImage": "",
* "fixedVideoUser": { "userId": "windev", "intRoomId": 5055005, "strRoomId": "" },
* "fixedVideoStreamType": 0
* },
* {
* "rect": { "top": 360, "left": 640, "right": 1280, "bottom": 720 },
* "zOrder": 2,
* "fillMode": 0,
* "backgroundColor": 14480000,
* "placeHolderImage": "",
* "fixedVideoUser": { "userId": "macdev", "intRoomId": 5055005, "strRoomId": "" },
* "fixedVideoStreamType": 0
* }
* ],
* "audioMixUserList": [
* { "userId": "windev", "intRoomId": 5055005, "strRoomId": "" },
* { "userId": "macdev", "intRoomId": 5055005, "strRoomId": "" }
* ],
* "watermarkList": [
* {
* "watermarkUrl": "https://<Your watermark image URL>",
* "rect": { "top": 540, "left": 0, "right": 320, "bottom": 640 },
* "zOrder": 3
* }
* ]
* }
* );
*
* @param taskId {String} - 通过回调 [onStartPublishMediaStream]{@link TRTCCallback#event:onStartPublishMediaStream} 带给您后台启动的任务标识(即 taskId)
* @param target {TRTCPublishTarget|null} - 媒体流发布的目标地址,支持转推/转码到腾讯或者第三方 CDN,也支持转码回推到 TRTC 房间中。
* @param params {TRTCStreamEncoderParam|null} - 媒体流编码输出参数,转码和回推到 TRTC 房间中时为必填项,您需要指定您预期的转码输出参数。在转推时,为了更好的转推稳定性和 CDN 兼容性,也建议您进行配置。
* @param config {TRTCStreamMixingConfig|null} - 媒体流转码配置参数,转码和回推到 TRTC 房间中时为必填项,您需要指定您预期的转码配置参数。转推模式下则无效。
*/
updatePublishMediaStream(taskId: string, target: TRTCPublishTarget | null, params: TRTCStreamEncoderParam | null, config: TRTCStreamMixingConfig | null): void;
/**
* 停止发布媒体流
*
* 该接口会向 TRTC 服务器发送指令,停止通过 [startPublishMediaStream]{@link TRTCCloud#startPublishMediaStream} 启动的媒体流
*
* 注意:
* 1. 若您的业务后台并没有保存该 taskId,在您的主播异常退房重进后,如果您需要重新获取 taskId,您可以再次调用 [startPublishMediaStream]{@link TRTCCloud#startPublishMediaStream} 启动任务。此时 TRTC 后台会返回任务启动失败,同时带给您上一次启动的 taskId
* 2. 若 taskId 填空字符串,将会停止该用户所有通过 [startPublishMediaStream]{@link TRTCCloud#startPublishMediaStream} 启动的媒体流,如果您只启动了一个媒体流或者想停止所有通过您启动的媒体流,推荐使用这种方式。
*
* @param taskId {String} - 通过回调 [onStartPublishMediaStream]{@link TRTCCallback#event:onStartPublishMediaStream} 带给您后台启动的任务标识(即 taskId)
*/
stopPublishMediaStream(taskId: string): void;
/**
* 开始向腾讯云的直播 CDN 推流
*
* 该接口会指定当前用户的音视频流在腾讯云 CDN 所对应的 StreamId,进而可以指定当前用户的 CDN 播放地址。
*
* 例如:如果我们采用如下代码设置当前用户的主画面 StreamId 为 user_stream_001,那么该用户主画面对应的 CDN 播放地址为:
* "http://yourdomain/live/user_stream_001.flv",其中 yourdomain 为您自己备案的播放域名,
* 您可以在直播[控制台](https://console.cloud.tencent.com/live) 配置您的播放域名,腾讯云不提供默认的播放域名。
*
* 您也可以在设置 enterRoom 的参数 TRTCParams 时指定 streamId, 而且我们更推荐您采用这种方案。
*
* 注意:您需要先在实时音视频 [控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启"启动自动旁路直播"才能生效。
*
* @example
* let trtcCloud = TRTCCloud.getTRTCShareInstance();
* trtcCloud.enterRoom(params, TRTCAppScene.TRTCAppSceneLIVE);
* trtcCloud.startLocalPreview(view);
* trtcCloud.startLocalAudio(TRTCAudioQuality.TRTCAudioQualityDefault);
* trtcCloud.startPublishing("user_stream_001", TRTCVideoStreamType.TRTCVideoStreamTypeBig);
*
*
* @param {String} streamId - 自定义流 ID。
* @param {TRTCVideoStreamType} type - 仅支持 TRTCVideoStreamTypeBig 和 TRTCVideoStreamTypeSub。
* @deprecated
*/
startPublishing(streamId: string, type: TRTCVideoStreamType): void;
/**
* 停止向腾讯云的直播 CDN 推流
* @deprecated
*/
stopPublishing(): void;
/**
* 开始向非腾讯云的直播 CDN 转推
*
* 该接口跟 startPublishing() 类似,但 startPublishCDNStream() 支持向非腾讯云的直播 CDN 转推。
*
* 注意:
* - 使用 startPublishCDNStream() 绑定非腾讯云直播 CDN 需要收取转推费用,且需要通过工单联系我们开通。
*
* @param {TRTCPublishCDNParam} param - 转推参数
* @param {Number} param.appId - 腾讯云直播服务的 AppID
* @param {Number} param.bizId - 腾讯云直播服务的 bizid
* @param {String} param.url - 指定该路音视频流在第三方直播服务商的推流地址,推流 URL 必须为 RTMP 格式,必须符合您的目标直播服务商的规范要求,否则目标服务商会拒绝来自 TRTC 后台服务的推流请求。
* @param {String} param.streamId - 需要转推的 streamId,默认值:空值。如果不填写,则默认转推调用者的旁路流。
* @deprecated
*/
startPublishCDNStream(param: any): void;
/**
* 停止向非腾讯云的直播 CDN 推流
* @deprecated
*/
stopPublishCDNStream(): void;
/**
* 设置云端的混流转码参数
*
* 如果您在实时音视频 [控制台](https://console.cloud.tencent.com/trtc/) 中的功能配置页开启了"启动自动旁路直播"功能,
* 房间里的每一路画面都会有一个默认的直播 [CDN 地址](https://cloud.tencent.com/document/product/647/16826)。
*
* 一个直播间中可能有不止一位主播,而且每个主播都有自己的画面和声音,但对于 CDN 观众来说,他们只需要一路直播流,
* 所以您需要将多路音视频流混成一路标准的直播流,这就需要混流转码。
*
* 当您调用 setMixTranscodingConfig() 接口时,SDK 会向腾讯云的转码服务器发送一条指令,目的是将房间里的多路音视频流混合为一路,
* 您可以通过 mixUsers 参数来调整每一路画面的位置,以及是否只混合声音,也可以通过 videoWidth、videoHeight、videoBitrate 等参数控制混合音视频流的编码参数。
*
* <pre>
* 【画面1】=> 解码 ====> \
* \
* 【画面2】=> 解码 => 画面混合 => 编码 => 【混合后的画面】
* /
* 【画面3】=> 解码 ====> /
*
* 【声音1】=> 解码 ====> \
* \
* 【声音2】=> 解码 => 声音混合 => 编码 => 【混合后的声音】
* /
* 【声音3】=> 解码 ====> /
* </pre>
*
* 参考文档:[云端混流转码](https://cloud.tencent.com/document/product/647/16827)。
*
* 注意:混流转码为收费功能,调用接口将产生云端混流转码费用,详见 [云端混流转码计费说明](https://cloud.tencent.com/document/product/647/49446)。
*
* @note 关于云端混流的注意事项:
* - 云端转码会引入一定的 CDN 观看延时,大概会增加1 - 2秒。
* - 调用该函数的用户,会将连麦中的多路画面混合到自己当前这路画面中。
*
* @param {TRTCTranscodingConfig} config - 请参考 trtc_define.js 中关于 TRTCTranscodingConfig 的介绍, 如果传入 null 取消云端混流转码。
* @param {TRTCTranscodingConfigMode} config.mode - 转码 config 模式
* @param {Number} config.appId - 腾讯云直播 AppID
* @param {Number} config.bizId - 腾讯云直播 bizid
* @param {Number} config.videoWidth - 最终转码后的视频分辨率的宽度(px)
* @param {Number} config.videoHeight - 最终转码后的视频分辨率的高度(px)
* @param {Number} config.videoBitrate - 最终转码后的视频分辨率的码率(kbps)
* @param {Number} config.videoFramerate - 最终转码后的视频分辨率的帧率(FPS)
* @param {Number} config.videoGOP - 最终转码后的视频分辨率的关键帧间隔(也被称为 GOP),单位秒
* @param {Number} config.audioSampleRate - 最终转码后的音频采样率
* @param {Number} config.audioBitrate - 最终转码后的音频码率,单位:kbps
* @param {Number} config.audioChannels - 最终转码后的音频声道数
* @param {Number} config.audioCodec - 指定云端转码的输出流音频编码类型,默认为0
* @param {String} config.backgroundColor - 混合后画面的底色颜色,格式为十六进制数字,比如:"0x61B9F1" 代表 RGB 分别为(97,158,241)
* @param {String} config.backgroundImage - 混合后画面的背景图
* @param {String} config.streamId - 输出到 CDN 上的直播流 ID
* @param {String} config.videoSeiParams - 混流 SEI 参数,默认不填写
* @param {TRTCMixUser[]} config.mixUsersArray - 每一路子画面的位置信息
* @param {String} config.mixUsersArray[].userId - 参与混流的 userId
* @param {String} config.mixUsersArray[].roomId - 参与混流的 roomId,跨房流传入的实际 roomId。当前房间流,请传入空字符串(roomId = '')。
* @param {Rect} config.mixUsersArray[].rect - 图层位置坐标以及大小,左上角为坐标原点(0,0) (绝对像素值)
* @param {Number} config.mixUsers