Copyright (c) 2021 Tencent. All rights reserved.
Module: TRTCCloud @ TXLiteAVSDK
Function: 腾讯云 TRTC 主功能接口
Version: 11.5
ITRTCCloud
ITRTCCloud
函数列表 | 描述 |
创建 TRTCCloud 实例(单例模式) | |
销毁 TRTCCloud 实例(单例模式) | |
添加 TRTC 事件回调 | |
移除 TRTC 事件回调 | |
进入房间 | |
离开房间 | |
切换角色 | |
切换角色(支持设置权限位) | |
切换房间 | |
请求跨房通话 | |
退出跨房通话 | |
设置订阅模式(需要在进入房前设置才能生效) | |
创建子房间实例(用于多房间并发观看) | |
销毁子房间实例 | |
更改跨房主播在本房间的上行能力 | |
开始向腾讯云直播 CDN 上发布音视频流 | |
停止向腾讯云直播 CDN 上发布音视频流 | |
开始向非腾讯云 CDN 上发布音视频流 | |
停止向非腾讯云 CDN 上发布音视频流 | |
设置云端混流的排版布局和转码参数 | |
开始发布媒体流 | |
更新发布媒体流 | |
停止发布媒体流 | |
开启本地摄像头的预览画面(移动端) | |
开启本地摄像头的预览画面(桌面端) | |
更新本地摄像头的预览画面 | |
停止摄像头预览 | |
暂停/恢复发布本地的视频流 | |
设置本地画面被暂停期间的替代图片 | |
订阅远端用户的视频流,并绑定视频渲染控件 | |
更新远端用户的视频渲染控件 | |
停止订阅远端用户的视频流,并释放渲染控件 | |
停止订阅所有远端用户的视频流,并释放全部渲染资源 | |
暂停/恢复订阅远端用户的视频流 | |
暂停/恢复订阅所有远端用户的视频流 | |
设置视频编码器的编码参数 | |
设置网络质量控制的相关参数 | |
设置本地画面的渲染参数 | |
设置远端画面的渲染模式 | |
设置视频编码器输出的画面方向 | |
设置编码器输出的画面镜像模式 | |
开启大小画面双路编码模式 | |
切换指定远端用户的大小画面 | |
视频画面截图 | |
开启本地音频的采集和发布 | |
停止本地音频的采集和发布 | |
暂停/恢复发布本地的音频流 | |
暂停/恢复播放远端的音频流 | |
暂停/恢复播放所有远端用户的音频流 | |
设定某一个远端用户的声音播放音量 | |
设定本地音频的采集音量 | |
获取本地音频的采集音量 | |
设定远端音频的播放音量 | |
获取远端音频的播放音量 | |
启用音量大小提示 | |
开始录音 | |
停止录音 | |
开启本地媒体录制 | |
停止本地媒体录制 | |
设置远端音频流智能并发播放策略 | |
启用 3D 音效 | |
设置 3D 音效中自身坐标及朝向信息 | |
设置 3D 音效中远端用户坐标信息 | |
设置指定用户所发出声音的可被接收范围 | |
获取设备管理类(TXDeviceManager) | |
设置美颜、美白、红润等特效 | |
添加水印 | |
获取音效管理类(TXAudioEffectManager) | |
开启系统声音采集 | |
停止系统声音采集 | |
设置系统声音的采集音量 | |
启动屏幕分享 | |
停止屏幕分享 | |
暂停屏幕分享 | |
恢复屏幕分享 | |
枚举可分享的屏幕和窗口(该接口仅支持桌面系统) | |
选取要分享的屏幕或窗口(该接口仅支持桌面系统) | |
设置屏幕分享(即辅路)的视频编码参数(桌面系统和移动系统均已支持) | |
设置屏幕分享时的混音音量大小(该接口仅支持桌面系统) | |
将指定窗口加入屏幕分享的排除列表中(该接口仅支持桌面系统) | |
将指定窗口从屏幕分享的排除列表中移除(该接口仅支持桌面系统) | |
将所有窗口从屏幕分享的排除列表中移除(该接口仅支持桌面系统) | |
将指定窗口加入屏幕分享的包含列表中(该接口仅支持桌面系统) | |
将指定窗口从屏幕分享的包含列表中移除(该接口仅支持桌面系统) | |
将全部窗口从屏幕分享的包含列表中移除(该接口仅支持桌面系统) | |
启用/关闭视频自定义采集模式 | |
向 SDK 投送自己采集的视频帧 | |
启用音频自定义采集模式 | |
向 SDK 投送自己采集的音频数据 | |
启用/关闭自定义音轨 | |
向 SDK 混入自定义音轨 | |
设置推流时混入外部音频的推流音量和播放音量 | |
生成自定义采集时的时间戳 | |
.1 开启视频第三方美颜 | |
.2 设置第三方美颜的视频数据回调 | |
设置本地视频自定义渲染回调 | |
设置远端视频自定义渲染回调 | |
设置音频数据自定义回调 | |
设置本地麦克风采集出的音频帧回调格式 | |
设置经过前处理后的本地音频帧回调格式 | |
设置最终要由系统播放出的音频帧回调格式 | |
开启音频自定义播放 | |
获取可播放的音频数据 | |
使用 UDP 通道发送自定义消息给房间内所有用户 | |
使用 SEI 通道发送自定义消息给房间内所有用户 | |
开始进行网速测试(进入房间前使用) | |
停止网络测速 | |
获取 SDK 版本信息 | |
设置 Log 输出级别 | |
启用/禁用控制台日志打印 | |
启用/禁用日志的本地压缩 | |
设置本地日志的保存路径 | |
设置日志回调 | |
显示仪表盘 | |
调用实验性接口 | |
开启或关闭媒体流私有加密 |
getTRTCShareInstance
getTRTCShareInstance
ITRTCCloud* getTRTCShareInstance | (void *context) |
创建 TRTCCloud 实例(单例模式)
参数 | 描述 |
context | 仅适用于 Android 平台,SDK 内部会将其转化为 Android 平台的 ApplicationContext 用于调用 Androud System API。 如果传入的 context 参数为空,SDK 内部会自动获取当前进程的 ApplicationContext。 |
注意
1. 如果您使用 delete ITRTCCloud* 会导致编译错误,请使用 destroyTRTCCloud 释放对象指针。
2. 在 Windows、Mac 和 iOS 平台上,请调用 getTRTCShareInstance() 接口。
3. 在 Android 平台上,请调用 getTRTCShareInstance(void *context) 接口。
destroyTRTCShareInstance
destroyTRTCShareInstance
销毁 TRTCCloud 实例(单例模式)
addCallback
addCallback
void addCallback |
添加 TRTC 事件回调
removeCallback
enterRoom
enterRoom
void enterRoom | |
|
进入房间
TRTC 的所有用户都需要进入房间才能“发布”或“订阅”音视频流,“发布”是指将自己的音频和视频推送到云端,“订阅”是指从云端拉取房间里其他用户的音视频流。
实时通话:
包括 TRTCAppSceneVideoCall 和 TRTCAppSceneAudioCall 两个可选项,分别是视频通话和语音通话,该模式适合 1对1 的音视频通话,或者参会人数在 300 人以内的在线会议。
在线直播:
包括 TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom 两个可选项,分别是视频直播和语音直播,该模式适合十万人以内的在线直播场景,但需要您在接下来介绍的 TRTCParams 参数中指定 角色(role) 这个字段,也就是将房间中的用户区分为 主播 (TRTCRoleAnchor) 和 观众 (TRTCRoleAudience) 两种不同的角色。
如果进房成功,参数 result 会是一个正数(result > 0),表示从函数调用到进入房间所花费的时间,单位是毫秒(ms)。
如果进房失败,参数 result 会是一个负数(result < 0),表示进房失败的错误码。
参数 | 描述 |
param | |
scene |
注意
1. 同一个房间内的所有用户需要设定相同的 scene。不同的 scene 会导致偶现的异常问题。
2. 当您指定参数 scene 为 TRTCAppSceneLIVE 或 TRTCAppSceneVoiceChatRoom 时,您必须通过 TRTCParams 中的 “role” 字段为当前用户设定他/她在房间中的角色。
exitRoom
exitRoom
离开房间
调用该接口会让用户离开自己所在的音视频房间,并释放摄像头、麦克风、扬声器等设备资源。
switchRole
switchRole
void switchRole |
切换角色
调用本接口可以实现用户在
主播
和 观众
两种角色之间来回切换。
由于视频直播和语音聊天室需要支持多达10万名观众同时观看,所以设定了 只有主播才能发布自己的音视频 的规则。因此,当有些观众希望发布自己的音视频流(以便能跟主播互动)时,就需要先把自己的角色切换成 主播。
参数 | 描述 |
role | 角色,默认为 主播。 TRTCRoleAnchor :主播,可以发布自己的音视频,同一个房间里最多支持50个主播同时发布音视频。 TRTCRoleAudience :观众,不能发布自己的音视频流,只能观看房间中其他主播的音视频。如果要发布自己的音视频,需要先通过 switchRole 切换成 主播,同一个房间内同时最多可以容纳 10 万名观众。 |
注意
switchRole
switchRole
void switchRole | |
| const char* privateMapKey) |
切换角色(支持设置权限位)
调用本接口可以实现用户在
主播
和 观众
两种角色之间来回切换。
由于视频直播和语音聊天室需要支持多达10万名观众同时观看,所以设定了“只有主播才能发布自己的音视频”的规则。
因此,当有些观众希望发布自己的音视频流(以便能跟主播互动)时,就需要先把自己的角色切换成“主播”。
参数 | 描述 |
privateMapKey | 用于权限控制的权限票据,当您希望某个房间只能让特定的 userId 进入或者上行视频时,需要使用 privateMapKey 进行权限保护。 仅建议有高级别安全需求的客户使用,更多详情请参见 开启高级权限控制。 |
role | 角色,默认为“主播”: TRTCRoleAnchor :主播,可以发布自己的音视频,同一个房间里最多支持50个主播同时发布音视频。 TRTCRoleAudience :观众,不能发布自己的音视频流,只能观看房间中其他主播的音视频。如果要发布自己的音视频,需要先通过 switchRole 切换成“主播”,同一个房间内同时最多可以容纳 10 万名观众。 |
注意
switchRoom
switchRoom
void switchRoom |
切换房间
使用该接口可以让用户可以快速从一个房间切换到另一个房间。
如果用户的身份是“观众”,该接口的调用效果等同于 exitRoom(当前房间) + enterRoom(新的房间)。
如果用户的身份是“主播”,该接口在切换房间的同时还会保持自己的音视频发布状态,因此在房间切换过程中,摄像头的预览和声音的采集都不会中断。
该接口适用于在线教育场景中,监课老师在多个房间中进行快速切换的场景。在该场景下使用 switchRoom 可以获得比 exitRoom+enterRoom 更好的流畅性和更少的代码量。
参数 | 描述 |
config |
注意
由于对老版本 SDK 兼容的需求,参数 config 中同时包含 roomId 与 strRoomId 两个参数,这两个参数的填写格外讲究,请注意如下事项:
1. 若您选用 strRoomId,则 roomId 需要填写为0。若两者都填,将优先选用 roomId。
2. 所有房间需要同时使用 strRoomId 或同时使用 roomId,不可混用,否则将会出现很多预期之外的 bug。
connectOtherRoom
connectOtherRoom
void connectOtherRoom | (const char* param) |
请求跨房通话
默认情况下,只有同一个房间中的用户之间可以进行音视频通话,不同的房间之间的音视频流是相互隔离的。
但您可以通过调用该接口,将另一个房间中某个主播音视频流发布到自己所在的房间中,与此同时,该接口也会将自己的音视频流发布到目标主播的房间中。
也就是说,您可以使用该接口让身处两个不同房间中的主播进行跨房间的音视频流分享,从而让每个房间中的观众都能观看到这两个主播的音视频。该功能可以用来实现主播之间的 PK 功能。
例如:当房间“101”中的主播 A 通过 connectOtherRoom() 跟房间“102”中的主播 B 建立跨房通话后,
房间“101”中的用户都会收到主播 B 的 onRemoteUserEnterRoom(B) 和 onUserVideoAvailable(B,true) 这两个事件回调,即房间“101”中的用户都可以订阅主播 B 的音视频。
房间“102”中的用户都会收到主播 A 的 onRemoteUserEnterRoom(A) 和 onUserVideoAvailable(A,true) 这两个事件回调,即房间“102”中的用户都可以订阅主播 A 的音视频。

跨房通话的参数考虑到后续扩展字段的兼容性问题,暂时采用了 JSON 格式的参数:
情况一:数字房间号
如果房间“101”中的主播 A 要跟房间“102”中的主播 B 连麦,那么主播 A 调用该接口时需要传入:{"roomId": 102, "userId": "userB"}
示例代码如下:
Json::Value jsonObj;jsonObj["roomId"] = 102;jsonObj["userId"] = "userB";Json::FastWriter writer;std::string params = writer.write(jsonObj);trtc.ConnectOtherRoom(params.c_str());
情况二:字符串房间号
如果您使用的是字符串房间号,务必请将 json 中的 “roomId” 替换成 “strRoomId”: {"strRoomId": "102", "userId": "userB"}
示例代码如下:
Json::Value jsonObj;jsonObj["strRoomId"] = "102";jsonObj["userId"] = "userB";Json::FastWriter writer;std::string params = writer.write(jsonObj);trtc.ConnectOtherRoom(params.c_str());
参数 | 描述 |
param | 需要你传入 JSON 格式的字符串参数,roomId 代表数字格式的房间号,strRoomId 代表字符串格式的房间号,userId 代表目标主播的用户 ID。 |
disconnectOtherRoom
disconnectOtherRoom
退出跨房通话
setDefaultStreamRecvMode
setDefaultStreamRecvMode
void setDefaultStreamRecvMode | (bool autoRecvAudio |
| bool autoRecvVideo) |
设置订阅模式(需要在进入房前设置才能生效)
您可以通过该接口在“自动订阅”和“手动订阅”两种模式下进行切换:
自动订阅:默认模式,用户在进入房间后会立刻接收到该房间中的音视频流,音频会自动播放,视频会自动开始解码(依然需要您通过 startRemoteView 接口绑定渲染控件)。
手动订阅:在用户进入房间后,需要手动调用 startRemoteView 接口才能启动视频流的订阅和解码,需要手动调用 muteRemoteAudio (false) 接口才能启动声音的播放。
在绝大多数场景下,用户进入房间后都会订阅房间中所有主播的音视频流,因此 TRTC 默认采用了自动订阅模式,以求得最佳的“秒开体验”。
如果您的应用场景中每个房间同时会有很多路音视频流在发布,而每个用户只想选择性地订阅其中的 1-2 路,则推荐使用“手动订阅”模式以节省流量费用。
参数 | 描述 |
autoRecvAudio | true:自动订阅音频;false:需手动调用 muteRemoteAudio(false) 订阅音频。默认值:true。 |
autoRecvVideo | true:自动订阅视频;false:需手动调用 startRemoteView 订阅视频。默认值:true。 |
注意
1. 需要在进入房间前调用该接口进行设置才能生效。
createSubCloud
createSubCloud
创建子房间实例(用于多房间并发观看)
TRTCCloud 一开始被设计成单例模式,限制了多房间并发观看的能力。
通过调用该接口,您可以创建出多个 TRTCCloud 实例,以便同时进入多个不同的房间观看音视频流。
但需要注意的是,您在多个 TRTCCloud 实例中发布音视频流的能力会受到一定限制。
该功能主要用于在线教育场景中一种被称为“超级小班课”的业务场景中,用于解决“每个 TRTC 的房间中最多只能有 50 人同时发布自己音视频流”的限制。
示例代码如下:
//In the small room that needs interaction, enter the room as an anchor and push audio and video streamsITRTCCloud *mainCloud = getTRTCShareInstance();TRTCParams mainParams;//Fill your paramsmainParams.role = TRTCRoleAnchor;mainCloud->enterRoom(mainParams, TRTCAppSceneLIVE);//...mainCloud->startLocalAudio(TRTCAudioQualityDefault);mainCloud->startLocalPreview(renderView);//In the large room that only needs to watch, enter the room as an audience and pull audio and video streamsITRTCCloud *subCloud = mainCloud->createSubCloud();TRTCParams subParams;//Fill your paramssubParams.role = TRTCRoleAudience;subCloud->enterRoom(subParams, TRTCAppSceneLIVE);//...subCloud->startRemoteView(userId, TRTCVideoStreamTypeBig, renderView);//...//Exit from new room and release it.subCloud->exitRoom();mainCloud->destroySubCloud(subCloud);
注意
同一个用户,可以使用同一个 userId 进入多个不同 roomId 的房间。
两台不同的终端设备不可以同时使用同一个 userId 进入同一个 roomId 的房间。
您可以分别为不同实例分别设置 ITRTCCloudCallback 获取各自的事件通知。
同一个用户可以在多个 TRTCCloud 实例中推流,也可以调用子实例中与本地音视频相关的接口。但需要注意:
多实例的音频需要同时为麦克风采集或自定义采集,而且与音频设备相关的接口调用会以最后一次为准;
与摄像头相关的调用会以最后一次为准:startLocalPreview。
返回值说明:
子 TRTCCloud 实例
destroySubCloud
updateOtherRoomForwardMode
updateOtherRoomForwardMode
void updateOtherRoomForwardMode | (const char* param) |
更改跨房主播在本房间的上行能力
通常情况下,在调用 connectOtherRoom 接口与另一个房间的主播进行跨房通话后,本房间内的所有观众都将收到该主播发布的音视频流。
您可以通过调用该接口,限制跨房主播在本房间内的上行能力,禁止或允许跨房主播发布音频/主路视频/辅路视频,该行为会影响房间内的所有用户。
在禁用跨房主播某种上行能力后,本房间内所有用户将无法收到对应音视频流,且无法再订阅对应的音视频。
需要注意的是,该接口只能由进行跨房通话的主播调用,且通过该接口设置的限制会因为跨房通话的中断或对应主播退房重置。
例如:
房间“101”中有主播 A 与观众 B,房间“102”中有主播 C,主播 C 正常发布音视频流。主播 A 通过 connectOtherRoom() 跟主播 C 建立跨房通话。
此时,主播 A 与观众 B 都会收到主播 C 的 onRemoteUserEnterRoom(C) 和 onUserVideoAvailable(C,true)、onUserAudioAvailable(C,true) 这三个事件回调,可以订阅主播 C 的音视频。
之后,主播 A 调用该接口禁用主播 C 在本房间发布音频的能力。
此后,主播 C 的音频流将无法发布至房间“101”,主播 A 与观众 B 都将收到 onUserAudioAvailable(C,false) 事件回调,且无法再通过 muteRemoteAudio(C,false) 订阅主播 C 的音频。
主播 C 的视频流将不受影响。房间“102”中的其他观众也不受影响,可以正常订阅主播 C 的音频。
该接口的参数考虑到后续扩展字段的兼容性问题,暂时采用了 JSON 格式的参数,示例如下:
情况一:数字房间号
{"roomId":102,"userId":"userC","muteAudio":false,"muteVideo":true,"muteSubStream":false}
情况二:字符串房间号
{"strRoomId":"102","userId":"userC","muteAudio":false,"muteVideo":true,"muteSubStream":false}
参数 | 描述 |
param | 需要你传入 JSON 格式的字符串参数,roomId 代表数字格式的房间号,strRoomId 代表字符串格式的房间号,userId 代表目标主播的用户 ID,muteAudio、muteVideo、muteSubStream均为可选项,分表代表禁止或允许跨房主播发布音频/主路视频/辅路视频的能力。 |
startPublishing
startPublishing
void startPublishing | (const char* streamId |
|
开始向腾讯云直播 CDN 上发布音视频流
该接口会向 TRTC 服务器发送指令,要求其将当前用户的音视频流旁路到直播 CDN 上。您可以通过参数 streamId 设定直播流的 StreamId,从而可以指定该用户的音视频流对应在直播 CDN 上的播放地址。
例如:您可以通过该接口将当前用户的直播流 ID 指定为 user_stream_001,那么该用户音视频流对应的 CDN 播放地址为:
“http://yourdomain/live/user_stream_001.flv”,其中 yourdomain 为您自己备案的播放域名,
您也可以在设置 enterRoom 的参数 TRTCParams 时指定 streamId, 而且我们更推荐您采用这种方案。
参数 | 描述 |
streamId | 自定义流 ID。 |
streamType |
注意
若您选择“指定流旁路”,则您可以通过该接口将对应音视频流推送到腾讯云 CDN 且指定为填写的流 ID。
若您选择“全局自动旁路”,则您可以通过该接口调整默认的流 ID。
stopPublishing
stopPublishing
停止向腾讯云直播 CDN 上发布音视频流
startPublishCDNStream
startPublishCDNStream
void startPublishCDNStream |
开始向非腾讯云 CDN 上发布音视频流
该接口跟 startPublishing 功能类似,不同之处在于,startPublishing 仅支持向腾讯云的 CDN 发布,而本接口支持向非腾讯云的直播 CDN 上转推音视频流。
参数 | 描述 |
param |
注意
使用 startPublishing 接口向腾讯云的直播 CDN 上发布音视频流不会收取额外费用。
使用 startPublishCDNStream 接口向非腾讯云的直播 CDN 上发布音视频流,需要收取额外的转推带宽费用。
stopPublishCDNStream
stopPublishCDNStream
停止向非腾讯云 CDN 上发布音视频流
setMixTranscodingConfig
setMixTranscodingConfig
void setMixTranscodingConfig |
设置云端混流的排版布局和转码参数
在一个直播间中可能同时会有多个主播发布自己的音视频流,但对于直播 CDN 上的观众而言,只需要观看一条 HTTP-FLV 或 HLS 格式的视频流即可。
当您调用本接口函数时,SDK 会向腾讯云的 TRTC 混流服务器发送一条指令,混流服务器会将房间里的多路音视频流混合成一路。

参数 | 描述 |
config |
注意
关于云端混流的注意事项:
混流转码为收费功能,调用接口将产生云端混流转码费用,详见 云端混流转码计费说明 。
调用该接口的用户,如果没设定 config 参数中的 streamId 字段,TRTC 会将房间中的多路画面混合到当前用户所对应的音视频流上,即 A + B => A。
调用该接口的用户,如果设定了 config 参数中的 streamId 字段,TRTC 会将房间中的多路画面混合到您指定的 streamId 上,即 A + B => streamId。
请注意,若您还在房间中且不再需要混流,请务必再次调用本接口并将 config 设置为空以进行取消,不及时取消混流可能会引起不必要的计费损失。
请放心,当您退房时 TRTC 会自动取消混流状态。
startPublishMediaStream
startPublishMediaStream
void startPublishMediaStream | |
| |
|
开始发布媒体流
该接口会向 TRTC 服务器发送指令,要求其将当前用户的音视频流转推/转码到直播 CDN 或者回推到 TRTC 房间中您可以通过 TRTCPublishTarget 配置中的 TRTCPublishMode 指定具体的发布模式
参数 | 描述 |
config | |
params | 媒体流编码输出参数,具体配置参考 TRTCStreamEncoderParam。转码和回推到 TRTC 房间中时为必填项,您需要指定您预期的转码输出参数。在转推时,为了更好的转推稳定性和 CDN 兼容性,也建议您进行配置。 |
target |
注意
2. 同一个任务(TRTCPublishMode 与 TRTCPublishCdnUrl 均相同)仅支持启动一次。若您后续需要更新或者停止该项任务,需要记录并使用返回的 taskId,通过 updatePublishMediaStream 或者 stopPublishMediaStream 来操作。
3. target 支持同时配置多个 CDN URL(最多同时 10 个)。若您的同一个转推/转码任务需要发布至多路 CDN,则仅需要在 target 中配置多个 CDN URL 即可。同一个转码任务即使有多个转推地址,对应的转码计费仍只收取一份。
4. 使用时需要注意不要多个任务同时往相同的 URL 地址推送,以免引起异常推流状态。一种推荐的方案是 URL 中使用 “sdkappid_roomid_userid_main” 作为区分标识,这种命名方式容易辨认且不会在您的多个应用中发生冲突。
updatePublishMediaStream
updatePublishMediaStream
void updatePublishMediaStream | (const char* taskId |
| |
| |
|
更新发布媒体流
参数 | 描述 |
config | |
params | 媒体流编码输出参数,具体配置参考 TRTCStreamEncoderParam。转码和回推到 TRTC 房间中时为必填项,您需要指定您预期的转码输出参数。在转推时,为了更好的转推稳定性和 CDN 兼容性,也建议您进行配置。 |
target | |
taskId |
注意
1. 您可以通过本接口来更新发布的 CDN URL(支持增删,最多同时 10 个),但您使用时需要注意不要多个任务同时往相同的 URL 地址推送,以免引起异常推流状态。
2. 您可以通过 taskId 来更新调整转推/转码任务。例如在 pk 业务中,您可以先通过 startPublishMediaStream 发起转推,接着在主播发起 pk 时,通过 taskId 和本接口将转推更新为转码任务。此时,CDN 播放将连续并且不会发生断流(您需要保持媒体流编码输出参数 param 一致)。
3. 同一个任务不支持纯音频、音视频、纯视频之间的切换。
stopPublishMediaStream
stopPublishMediaStream
void stopPublishMediaStream | (const char* taskId) |
停止发布媒体流
参数 | 描述 |
taskId |
注意
1. 若您的业务后台并没有保存该 taskId,在您的主播异常退房重进后,如果您需要重新获取 taskId,您可以再次调用 startPublishMediaStream 启动任务。此时 TRTC 后台会返回任务启动失败,同时带给您上一次启动的 taskId
2. 若 taskId 填空字符串,将会停止该用户所有通过 startPublishMediaStream 启动的媒体流,如果您只启动了一个媒体流或者想停止所有通过您启动的媒体流,推荐使用这种方式。
startLocalPreview
startLocalPreview
void startLocalPreview | (bool frontCamera |
| TXView view) |
开启本地摄像头的预览画面(移动端)
在 enterRoom 之前调用此函数,SDK 只会开启摄像头,并一直等到您调用 enterRoom 之后才开始推流。
在 enterRoom 之后调用此函数,SDK 会开启摄像头并自动开始视频推流。当开始渲染首帧摄像头画面时,您会收到 ITRTCCloudCallback 中的 onCameraDidReady 回调通知。
参数 | 描述 |
frontCamera | true:前置摄像头;false:后置摄像头。 |
view | 承载视频画面的控件。 |
注意
如果希望开播前预览摄像头画面并通过 BeautyManager 调节美颜参数,您可以:
方案一:在调用 enterRoom 之前调用 startLocalPreview。
方案二:在调用 enterRoom 之后调用 startLocalPreview + muteLocalVideo(true)。
startLocalPreview
startLocalPreview
void startLocalPreview | (TXView view) |
开启本地摄像头的预览画面(桌面端)
在调用该接口之前,您可以先调用 setCurrentCameraDevice 选择使用 Mac 自带摄像头或外接摄像头。
在 enterRoom 之前调用此函数,SDK 只会开启摄像头,并一直等到您调用 enterRoom 之后才开始推流。
在 enterRoom 之后调用此函数,SDK 会开启摄像头并自动开始视频推流。
当开始渲染首帧摄像头画面时,您会收到 TRTCCloudDelegate 中的 onCameraDidReady 回调通知。
参数 | 描述 |
view | 承载视频画面的控件。 |
注意
如果希望开播前预览摄像头画面并通过 BeautyManager 调节美颜参数,您可以:
方案一:在调用 enterRoom 之前调用 startLocalPreview。
方案二:在调用 enterRoom 之后调用 startLocalPreview + muteLocalVideo(true)。
updateLocalView
updateLocalView
void updateLocalView | (TXView view) |
更新本地摄像头的预览画面
stopLocalPreview
stopLocalPreview
停止摄像头预览
muteLocalVideo
muteLocalVideo
void muteLocalVideo | |
| bool mute) |
暂停/恢复发布本地的视频流
该接口可以暂停(或恢复)发布本地的视频画面,暂停之后,同一房间中的其他用户将无法继续看到自己画面。
该接口在指定 TRTCVideoStreamTypeBig 时等效于 start/stopLocalPreview 这两个接口,但具有更好的响应速度。
因为 start/stopLocalPreview 需要打开和关闭摄像头,而打开和关闭摄像头都是硬件设备相关的操作,非常耗时。
相比之下,muteLocalVideo 只需要在软件层面对数据流进行暂停或者放行即可,因此效率更高,也更适合需要频繁打开关闭的场景。
当暂停/恢复发布指定 TRTCVideoStreamTypeBig 后,同一房间中的其他用户将会收到 onUserVideoAvailable 回调通知。
当暂停/恢复发布指定 TRTCVideoStreamTypeSub 后,同一房间中的其他用户将会收到 onUserSubStreamAvailable 回调通知。
参数 | 描述 |
mute | true:暂停;false:恢复。 |
streamType |
setVideoMuteImage
setVideoMuteImage
void setVideoMuteImage | |
| int fps) |
设置本地画面被暂停期间的替代图片
当您调用 muteLocalVideo(true) 暂停本地画面时,您可以通过调用本接口设置一张替代图片,设置后,房间中的其他用户会看到这张替代图片,而不是黑屏画面。
参数 | 描述 |
fps | 设置替代图片帧率,最小值为5,最大值为10,默认5。 |
image | 设置替代图片,空值代表在 muteLocalVideo 之后不再发送视频流数据,默认值为空。 |
startRemoteView
startRemoteView
void startRemoteView | (const char* userId |
| |
| TXView view) |
订阅远端用户的视频流,并绑定视频渲染控件
如果您已经知道房间中有视频流的用户的 userid,可以直接调用 startRemoteView 订阅该用户的画面。
如果您不知道房间中有哪些用户在发布视频,您可以在 enterRoom 之后等待来自 onUserVideoAvailable 的通知。
参数 | 描述 |
streamType | 指定要观看 userId 的视频流类型。 高清大画面:TRTCVideoStreamTypeBig。 低清小画面:TRTCVideoStreamTypeSmall(需要远端用户通过 enableSmallVideoStream 开启双路编码后才有效果)。 辅流画面(常用于屏幕分享):TRTCVideoStreamTypeSub。 |
userId | 指定远端用户的 ID。 |
view | 用于承载视频画面的渲染控件。 |
注意
注意几点规则需要您关注:
1. SDK 支持同时观看某 userid 的大画面和辅路画面,或者同时观看某 userid 的小画面和辅路画面,但不支持同时观看大画面和小画面。
3. 当指定的 userid 的小画面不存在时,SDK 默认切换到该用户的大画面。
updateRemoteView
updateRemoteView
void updateRemoteView | (const char* userId |
| |
| TXView view) |
更新远端用户的视频渲染控件
该接口可用于更新远端视频画面的渲染控件,常被用于切换显示区域的交互场景中。
参数 | 描述 |
streamType | |
userId | 指定远端用户的 ID。 |
view | 承载视频画面的控件。 |
stopRemoteView
stopRemoteView
void stopRemoteView | (const char* userId |
|
停止订阅远端用户的视频流,并释放渲染控件
调用此接口会让 SDK 停止接收该用户的视频流,并释放该路视频流的解码和渲染资源。
参数 | 描述 |
streamType | 指定要观看 userId 的视频流类型。 高清大画面:TRTCVideoStreamTypeBig。 低清小画面:TRTCVideoStreamTypeSmall。 辅流画面(常用于屏幕分享):TRTCVideoStreamTypeSub。 |
userId | 指定远端用户的 ID。 |
stopAllRemoteView
stopAllRemoteView
停止订阅所有远端用户的视频流,并释放全部渲染资源
调用此接口会让 SDK 停止接收所有来自远端的视频流,并释放全部的解码和渲染资源。
注意
如果当前有正在显示的辅路画面(屏幕分享)也会一并被停止。
muteRemoteVideoStream
muteRemoteVideoStream
void muteRemoteVideoStream | (const char* userId |
| |
| bool mute) |
暂停/恢复订阅远端用户的视频流
该接口仅暂停/恢复接收指定用户的视频流,但并不释放显示资源,视频画面会被冻屏在接口调用时的最后一帧。
参数 | 描述 |
mute | 是否暂停接收。 |
streamType | 要暂停/恢复的视频流类型。 高清大画面:TRTCVideoStreamTypeBig。 低清小画面:TRTCVideoStreamTypeSmall。 辅流画面(常用于屏幕分享):TRTCVideoStreamTypeSub。 |
userId | 指定远端用户的 ID。 |
注意
调用该接口暂停接收指定用户的视频流后,只调用 startRemoteView 接口无法播放指定用户的视频,需要调用 muteRemoteVideoStream(false) 或 muteAllRemoteVideoStreams(false) 才能恢复。
muteAllRemoteVideoStreams
muteAllRemoteVideoStreams
void muteAllRemoteVideoStreams | (bool mute) |
暂停/恢复订阅所有远端用户的视频流
该接口仅暂停/恢复接收所有用户的视频流,但并不释放显示资源,视频画面会被冻屏在接口调用时的最后一帧。
参数 | 描述 |
mute | 是否暂停接收。 |
注意
调用该接口暂停接收所有用户的视频流后,只调用 startRemoteView 接口无法播放指定用户的视频,需要调用 muteRemoteVideoStream(false) 或 muteAllRemoteVideoStreams(false) 才能恢复。
setVideoEncoderParam
setVideoEncoderParam
void setVideoEncoderParam |
设置视频编码器的编码参数
该设置能够决定远端用户看到的画面质量,同时也能决定云端录制出的视频文件的画面质量。
参数 | 描述 |
param |
注意
从v11.5版本开始,编码输出分辨率会按照宽8高2字节对齐,并且是向下调整,eg:输入分辨率540x960,实际编码输出分辨率536x960。
setNetworkQosParam
setNetworkQosParam
void setNetworkQosParam |
设置网络质量控制的相关参数
该设置决定在差网络环境下的质量调控策略,如“画质优先”或“流畅优先”等策略。
参数 | 描述 |
param |
setLocalRenderParams
setLocalRenderParams
void setLocalRenderParams |
setRemoteRenderParams
setRemoteRenderParams
void setRemoteRenderParams | (const char* userId |
| |
|
设置远端画面的渲染模式
可设置的参数包括有:画面的旋转角度、填充模式以及左右镜像等。
参数 | 描述 |
params | |
streamType | |
userId | 指定远端用户的 ID。 |
setVideoEncoderRotation
setVideoEncoderRotation
void setVideoEncoderRotation |
设置视频编码器输出的画面方向
该设置不影响本地画面的预览方向,但会影响房间中其他用户所观看到(以及云端录制文件)的画面方向。
当用户将手机或 Pad 上下颠倒时,由于摄像头的采集方向没有变,所以房间中其他用户所看到的画面会变成上下颠倒的,
在这种情况下,您可以通过调用该接口将 SDK 编码出的画面方向旋转180度,如此一来,房间中其他用户所看到的画面可保持正常的方向。
如果您希望实现上述这种友好的交互体验,我们更推荐您直接调用 setGSensorMode 实现更加智能的方向适配,无需您手动调用本接口。
参数 | 描述 |
rotation | 目前支持 0、90、180、270 两个旋转角度,默认值:TRTCVideoRotation_0,即不旋转。 |
setVideoEncoderMirror
setVideoEncoderMirror
void setVideoEncoderMirror | (bool mirror) |
设置编码器输出的画面镜像模式
该设置不影响本地画面的镜像模式,但会影响房间中其他用户所观看到(以及云端录制文件)的镜像模式。
参数 | 描述 |
mirror | 是否开启远端镜像,true:开启远端画面镜像;false:关闭远端画面镜像,默认值:false。 |
enableSmallVideoStream
enableSmallVideoStream
void enableSmallVideoStream | (bool enable |
|
开启大小画面双路编码模式
开启双路编码模式后,当前用户的编码器会同时输出【高清大画面】和【低清小画面】两路视频流(但只有一路音频流)。
如此以来,房间中的其他用户就可以根据自身的网络情况或屏幕大小选择订阅【高清大画面】或是【低清小画面】。
参数 | 描述 |
enable | 是否开启小画面编码,默认值:false。 |
smallVideoEncParam | 小流的视频参数。 |
注意
双路编码开启后,会消耗更多的 CPU 和 网络带宽,所以 Mac、Windows 或者高性能 Pad 可以考虑开启,不建议手机端开启。
返回值说明:
0:成功;-1:当前大画面已被设置为较低画质,开启双路编码已无必要。
setRemoteVideoStreamType
setRemoteVideoStreamType
void setRemoteVideoStreamType | (const char* userId |
|
切换指定远端用户的大小画面
参数 | 描述 |
streamType | 视频流类型,即选择看大画面还是小画面,默认为大画面。 |
userId | 指定远端用户的 ID。 |
注意
snapshotVideo
snapshotVideo
void snapshotVideo | (const char* userId |
| |
|
视频画面截图
您可以通过本接口截取本地的视频画面,远端用户的主路画面以及远端用户的辅路(屏幕分享)画面。
参数 | 描述 |
sourceType | |
streamType | |
userId | 用户 ID,如指定空置表示截取本地的视频画面。 |
注意
startLocalAudio
startLocalAudio
void startLocalAudio |
开启本地音频的采集和发布
SDK 默认不开启麦克风,当用户需要发布本地音频时,需要调用该接口开启麦克风采集,并将音频编码并发布到当前的房间中。
参数 | 描述 |
quality | 声音音质 TRTCAudioQualitySpeech,流畅:采样率:16k;单声道;音频裸码率:16kbps;适合语音通话为主的场景,比如在线会议,语音通话。 TRTCAudioQualityDefault,默认:采样率:48k;单声道;音频裸码率:50kbps;SDK 默认的音频质量,如无特殊需求推荐选择之。 TRTCAudioQualityMusic,高音质:采样率:48k;双声道 + 全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如在线K歌、音乐直播等。 |
注意
该函数会检查麦克风的使用权限,如果当前 App 没有麦克风权限,SDK 会自动向用户申请麦克风使用权限。
stopLocalAudio
stopLocalAudio
停止本地音频的采集和发布
muteLocalAudio
muteLocalAudio
void muteLocalAudio | (bool mute) |
暂停/恢复发布本地的音频流
因此在对录制文件的质量要求较高的场景中,建议选择 muteLocalAudio 而不建议使用 stopLocalAudio。
参数 | 描述 |
mute | true:静音;false:恢复。 |
muteRemoteAudio
muteRemoteAudio
void muteRemoteAudio | (const char* userId |
| bool mute) |
暂停/恢复播放远端的音频流
当您静音某用户的远端音频时,SDK 会停止播放指定用户的声音,同时也会停止拉取该用户的音频数据。
参数 | 描述 |
mute | true:静音;false:取消静音。 |
userId | 用于指定远端用户的 ID。 |
注意
在进入房间(enterRoom)之前或之后调用本接口均生效,静音状态在退出房间(exitRoom)之后会被重置为 false。
muteAllRemoteAudio
muteAllRemoteAudio
void muteAllRemoteAudio | (bool mute) |
暂停/恢复播放所有远端用户的音频流
当您静音所有用户的远端音频时,SDK 会停止播放所有来自远端的音频流,同时也会停止拉取所有用户的音频数据。
参数 | 描述 |
mute | true:静音;false:取消静音。 |
注意
在进入房间(enterRoom)之前或之后调用本接口均生效,静音状态在退出房间(exitRoom)之后会被重置为 false。
setRemoteAudioVolume
setRemoteAudioVolume
void setRemoteAudioVolume | (const char *userId |
| int volume) |
设定某一个远端用户的声音播放音量
您可以通过 setRemoteAudioVolume(userId, 0) 将某一个远端用户的声音静音。
参数 | 描述 |
userId | 用于指定远端用户的 ID。 |
volume | 音量大小,取值范围为0 - 100,默认值:100。 |
注意
如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
setAudioCaptureVolume
setAudioCaptureVolume
void setAudioCaptureVolume | (int volume) |
设定本地音频的采集音量
参数 | 描述 |
volume | 音量大小,取值范围为0 - 100;默认值:100。 |
注意
如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
getAudioCaptureVolume
getAudioCaptureVolume
获取本地音频的采集音量
setAudioPlayoutVolume
setAudioPlayoutVolume
void setAudioPlayoutVolume | (int volume) |
设定远端音频的播放音量
该接口会控制 SDK 最终交给系统播放的声音音量,调节效果会影响到本地音频录制文件的音量大小,但不会影响到耳返的音量大小。
参数 | 描述 |
volume | 音量大小,取值范围为0 - 100,默认值:100。 |
注意
如果将 volume 设置成 100 之后感觉音量还是太小,可以将 volume 最大设置成 150,但超过 100 的 volume 会有爆音的风险,请谨慎操作。
getAudioPlayoutVolume
getAudioPlayoutVolume
获取远端音频的播放音量
enableAudioVolumeEvaluation
enableAudioVolumeEvaluation
void enableAudioVolumeEvaluation | (bool enable |
|
启用音量大小提示
参数 | 描述 |
enable | 是否启用音量提示,默认为关闭状态。 |
params |
startAudioRecording
startAudioRecording
int startAudioRecording |
开始录音
当您调用该接口后, SDK 会将本地和远端的所有音频(包括本地音频,远端音频,背景音乐和音效等)混合并录制到一个本地文件中。
该接口在进入房间前后调用均可生效,如果录制任务在退出房间前尚未通过 stopAudioRecording 停止,则退出房间后录制任务会自动被停止。
本次录制的启动、完成状态会通过本地录制相关回调进行通知。参见 TRTCCloud 相关回调。
参数 | 描述 |
param |
注意
自 v11.5 版本,音频录制的状态结果由返回值统一调整为异步回调进行通知。参见 TRTCCloud 相关回调。
返回值说明:
0:成功;-1:录音已开始;-2:文件或目录创建失败;-3:后缀指定的音频格式不支持。
stopAudioRecording
stopAudioRecording
停止录音
如果录制任务在退出房间前尚未通过本接口停止,则退出房间后录音任务会自动被停止。
startLocalRecording
startLocalRecording
void startLocalRecording |
stopLocalRecording
stopLocalRecording
停止本地媒体录制
如果录制任务在退出房间前尚未通过本接口停止,则退出房间后录音任务会自动被停止。
setRemoteAudioParallelParams
setRemoteAudioParallelParams
void setRemoteAudioParallelParams |
enable3DSpatialAudioEffect
enable3DSpatialAudioEffect
void enable3DSpatialAudioEffect | (bool enabled) |