UNPKG

trtc-electron-sdk

Version:

trtc electron sdk

1,240 lines 169 kB
/// <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