tencent cloud

实时音视频

动态与公告
产品动态
产品近期公告
关于 TRTC Live 正式上线的公告
关于TRTC Conference 正式版上线的公告
Conference 商业化版本即将推出
关于多人音视频 Conference 开启内测公告
关于音视频通话 Call 正式版上线的公告
关于腾讯云音视频终端 SDK 播放升级及新增授权校验的公告
关于 TRTC 应用订阅套餐服务上线的相关说明
产品简介
产品概述
基本概念
产品功能
产品优势
应用场景
性能数据
购买指南
计费概述
免费时长说明
月订阅
现收现付
TRTC 逾期与暂停政策
常见问题解答
退款说明
新手指引
Demo 体验
视频通话 SDK
组件介绍
开通服务
跑通 Demo
快速接入
离线唤醒
会话聊天
云端录制
AI 降噪
界面定制
Chat 集成通话能力
更多特性
无 UI 集成
服务端 API
客户端 API
解决方案
错误码表
发布日志
常见问题
视频会议 SDK
组件介绍(TUIRoomKit)
开通服务(TUIRoomKit)
跑通 Demo(TUIRoomKit)
快速接入(TUIRoomKit)
屏幕共享(TUIRoomKit)
预定会议(TUIRoomKit)
会中呼叫(TUIRoomKit)
界面定制(TUIRoomKit)
虚拟背景(TUIRoomKit)
会议控制(TUIRoomKit)
云端录制(TUIRoomKit)
AI 降噪(TUIRoomKit)
会中聊天(TUIRoomKit)
机器人推流(TUIRoomKit)
更多特性(TUIRoomKit)
客户端 API(TUIRoomKit)
服务端 API(TUIRoomKit)
常见问题(TUIRoomKit)
错误码 (TUIRoomKit)
SDK更新日志(TUIRoomKit)
直播与语聊 SDK
Live 视频直播计费说明
组件介绍
开通服务(TUILiveKit)
跑通 Demo
无 UI 集成
UI 自定义
直播监播
视频直播
语聊房
高级功能
客户端 API
服务端 API
错误码
发布日志
常见问题
RTC Engine
开通服务
SDK 下载
API-Example
接入指引
API-参考手册
高级功能
AI 集成
概述
MCP 配置
Skills 配置
集成指南
常见问题
RTC RESTFUL API
History
Introduction
API Category
Room Management APIs
Stream mixing and relay APIs
On-cloud recording APIs
Data Monitoring APIs
Pull stream Relay Related interface
Web Record APIs
AI Service APIs
Cloud Slicing APIs
Cloud Moderation APIs
Making API Requests
Call Quality Monitoring APIs
Usage Statistics APIs
Data Types
Appendix
Error Codes
控制台指南
应用管理
套餐包管理
用量统计
监控仪表盘
开发辅助
解决方案
实时合唱
常见问题
迁移指南
计费相关
功能相关
UserSig 相关
应对防火墙限制相关
缩减安装包体积相关
Andriod 与 iOS 相关
Web 端相关
Flutter 相关
Electron 相关
TRTCCalling Web 相关
音视频质量相关
其他问题
旧版文档
RTC RoomEngine SDK(旧)
集成 TUIRoom (Web)
集成 TUIRoom (Android)
集成 TUIRoom (iOS)
集成 TUIRoom (Flutter)
集成 TUIRoom (Electron)
TUIRoom API 查询
实现云端录制与回放(旧)
监控仪表盘计费(旧)
协议与策略
安全合规认证
安全白皮书
信息安全说明
服务等级协议
苹果隐私策略:PrivacyInfo.xcprivacy
TRTC 政策
隐私协议
数据处理和安全协议
词汇表
文档实时音视频

跑通直播模式(Android)

聚焦模式
字号
最后更新时间: 2025-08-04 14:49:32

适用场景

TRTC 支持四种不同的进房模式,其中视频通话(VideoCall)和语音通话(VoiceCall)统称为 通话模式,视频互动直播(Live)和语音互动直播(VoiceChatRoom)统称为直播模式。 直播模式下的 TRTC,支持单个房间最多10万人同时在线,具备小于300ms的连麦延迟和小于1000ms的观看延迟,以及平滑上下麦切换技术。适用低延时互动直播、十万人互动课堂、视频相亲、在线教育、远程培训、超大型会议等应用场景。

原理解析

TRTC 云服务由两种不同类型的服务器节点组成,分别是“接口机”和“代理机”:
接口机 该类节点都采用最优质的线路和高性能的机器,善于处理端到端的低延时连麦通话。
代理机 该类节点都采用普通的线路和性能一般的机器,善于处理高并发的拉流观看需求。
在直播模式下,TRTC 引入了角色的概念,用户被分成“主播”和“观众”两种角色,“主播”会被分配到接口机上,“观众”则被分配在代理机,同一个房间的观众人数上限为10万人。 如果“观众”要上麦,需要先切换角色(switchRole)为“主播”才能发言。切换角色的过程也伴随着用户从代理机到接口机的迁移,TRTC 特有的低延时观看技术和平滑上下麦切换技术,可以让整个切换时间变得非常短暂。



示例代码

您可以登录 Github 获取本文档相关的示例代码。


说明:
如果访问 Github 较慢,您也可以直接下载 TXLiteAVSDK_TRTC_Android_latest.zip

操作步骤

步骤1:集成 SDK

您可以选择以下方式将 TRTC SDK 集成到项目中。

方式一:自动加载(aar)

TRTC SDK 已发布到 mavenCentral 库,您可以通过配置 gradle 自动下载更新。 您只需用 Android Studio 打开待集成 SDK 的工程(TRTC-API-Example 已完成集成,示例代码可以供您参考),然后通过简单的步骤修改app/build.gradle文件,即可完成 SDK 集成:
1. 在 dependencies 中添加 TRTCSDK 的依赖。
dependencies {
compile 'com.tencent.liteav:LiteAVSDK_TRTC:latest.release'
}
2. 在 defaultConfig 中,指定 App 使用的 CPU 架构。
说明:
目前 TRTC SDK 支持 armeabi-v7a 和 arm64-v8a。
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
3. 单击 Sync Now 同步 SDK。 如果您的网络连接 mavenCentral 没有问题,SDK 会自动下载集成到工程中。

方式二:下载 ZIP 包手动集成

您可以直接下载 ZIP 压缩包,并参见 快速集成(Android) 将 SDK 集成到您的工程中。

步骤2:配置 App 权限

AndroidManifest.xml文件中添加摄像头、麦克风以及网络的申请权限。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

步骤3:初始化 SDK 实例并监听事件回调

1. 使用 sharedInstance() 接口创建 TRTCCloud 实例。
// 创建 trtcCloud 实例
mTRTCCloud = TRTCCloud.sharedInstance(getApplicationContext());
mTRTCCloud.setListener(new TRTCCloudListener());
2. 设置setListener属性注册事件回调,并监听相关事件和错误通知。
// 错误通知监听,错误通知意味着 SDK 不能继续运行
@Override
public void onError(int errCode, String errMsg, Bundle extraInfo) {
Log.d(TAG, "sdk callback onError");
if (activity != null) {
Toast.makeText(activity, "onError: " + errMsg + "[" + errCode+ "]" , Toast.LENGTH_SHORT).show();
if (errCode == TXLiteAVCode.ERR_ROOM_ENTER_FAIL) {
activity.exitRoom();
}
}
}

步骤4:组装进房参数 TRTCParams

在调用 enterRoom() 接口时需要填写一个关键参数 TRTCParams,该参数包含的必填字段如下表所示。
参数名称
字段类型
补充说明
填写示例
sdkAppId
数字
应用 ID,您可以在 实时音视频控制台 中查看 SDKAppID。
1400000123
userId
字符串
只允许包含大小写英文字母(a-z、A-Z)、数字(0-9)及下划线和连词符。建议结合业务实际账号体系自行设置。
test_user_001
userSig
字符串
基于 userId 可以计算出 userSig,计算方法请参见 如何计算及使用 UserSig
eJyrVareCeYrSy1SslI...
roomId
数字
数字类型的房间号。如果您想使用字符串形式的房间号,请使用 TRTCParams 中的 strRoomId。
29834
注意:
TRTC 同一时间不支持两个相同的 userId 进入房间,否则会相互干扰。
每个端在应用场景 appScene 上必须要进行统一,否则会出现一些不可预料的问题。

步骤5:主播端开启摄像头预览和麦克风采音

1. 主播端调用 startLocalPreview() 可以开启本地的摄像头预览,SDK 会向系统请求摄像头使用权限。
2. 主播端调用 setLocalViewFillMode() 可以设定本地视频画面的显示模式:
Fill 模式表示填充,画面可能会被等比放大和裁剪,但不会有黑边。
Fit 模式表示适应,画面可能会等比缩小以完全显示其内容,可能会有黑边。
3. 主播端调用 setVideoEncoderParam() 接口可以设定本地视频的编码参数,该参数将决定房间里其他用户观看您的画面时所感受到的 画面质量
4. 主播端调用 startLocalAudio() 开启麦克风,SDK 会向系统请求麦克风使用权限。
//示例代码:发布本地的音视频流
mTRTCCloud.setLocalViewFillMode(TRTC_VIDEO_RENDER_MODE_FIT);
mTRTCCloud.startLocalPreview(mIsFrontCamera, localView);
//设置本地视频编码参数
TRTCCloudDef.TRTCVideoEncParam encParam = new TRTCCloudDef.TRTCVideoEncParam();
encParam.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540;
encParam.videoFps = 15;
encParam.videoBitrate = 1200;
encParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;
mTRTCCloud.setVideoEncoderParam(encParam);
mTRTCCloud.startLocalAudio();

步骤6:主播端设置美颜效果

1. 主播端调用 getBeautyManager() 可以获取美颜设置接口 TXBeautyManager
2. 主播端调用 setBeautyStyle() 可以设置美颜风格:
Smooth:光滑,效果比较明显,类似网红风格。
Nature:自然,磨皮算法更多地保留了面部细节,主观感受上会更加自然。
Pitu :仅 全功能版 才支持。
3. 主播端调用 setBeautyLevel() 可以设置磨皮的级别,一般设置为5即可。
4. 主播端调用 setWhitenessLevel() 可以设置美白级别,一般设置为5即可。

步骤7:主播端创建房间并开始推流

1. 主播端设置 TRTCParams 中的字段roleTRTCCloudDef.TRTCRoleAnchor,表示当前用户的角色为主播。
2. 主播端调用 enterRoom() 即可创建 TRTCParams 参数中字段roomId的值为房间号的音视频房间,并指定**appScene**参数:
TRTCCloudDef.TRTC_APP_SCENE_LIVE:视频互动直播模式,本文以该模式为例。
TRTCCloudDef.TRTC_APP_SCENE_VOICE_CHATROOM:语音互动直播模式。
3. 房间创建成功后,主播端开始音视频数据的编码和传输流程。同时,SDK 会回调 onEnterRoom(result) 事件,参数result大于0时表示进房成功,具体数值为加入房间所消耗的时间,单位为毫秒(ms);当result小于0时表示进房失败,具体数值为进房失败的错误码。
public void enterRoom() {
TRTCCloudDef.TRTCParams trtcParams = new TRTCCloudDef.TRTCParams();
trtcParams.sdkAppId = sdkappid;
trtcParams.userId = userid;
trtcParams.roomId = 908;
trtcParams.userSig = usersig;
mTRTCCloud.enterRoom(trtcParams, TRTCCloudDef.TRTC_APP_SCENE_LIVE);
}

@Override
public void onEnterRoom(long result) {
if (result > 0) {
toastTip("进房成功,总计耗时[\\(result)]ms")
} else {
toastTip("进房失败,错误码[\\(result)]")
}
}

步骤8:观众端进入房间观看直播

1. 观众端设置 TRTCParams 中的字段roleTRTCCloudDef.TRTCRoleAudience,表示当前用户的角色为观众。
2. 观众端调用 enterRoom() 即可进入 TRTCParams 参数中roomId代指的音视频房间,并指定**appScene**参数:
TRTCCloudDef.TRTC_APP_SCENE_LIVE:视频互动直播模式,本文以该模式为例。
TRTCCloudDef.TRTC_APP_SCENE_VOICE_CHATROOM:语音互动直播模式。
3. 观看主播的画面:
如果观众端事先知道主播的 userId,直接在进房成功后使用主播userId调用 startRemoteView(userId, view) 即可显示主播的画面。
如果观众端不知道主播的 userId,观众端在进房成功后会收到 onUserVideoAvailable() 事件通知,使用回调中获取的主播userId调用 便可显示主播的画面。

步骤9:观众跟主播连麦

1. 观众端调用 switchRole(TRTCCloudDef.TRTCRoleAnchor) 将角色切换为主播(TRTCCloudDef.TRTCRoleAnchor)。
2. 观众端调用 startLocalPreview() 可以开启本地的画面。
3. 观众端调用 startLocalAudio() 开启麦克风采音。
//示例代码:观众上麦
mTrtcCloud.switchRole(TRTCCloudDef.TRTCRoleAnchor);
mTrtcCloud.startLocalAudio();
mTrtcCloud.startLocalPreview(mIsFrontCamera, localView);

//示例代码:观众下麦
mTrtcCloud.switchRole(TRTCCloudDef.TRTCRoleAudience);
mTrtcCloud.stopLocalAudio();
mTrtcCloud.stopLocalPreview();

步骤10:主播间进行跨房连麦 PK

TRTC 中两个不同音视频房间中的主播,可以在不退出原来的直播间的场景下,通过“跨房通话”功能拉通连麦通话功能进行“跨房连麦 PK”。
1. 主播 A 调用 connectOtherRoom() 接口,目前接口参数采用 JSON 格式,需要将主播 B 的roomIduserId拼装成格式为{"roomId": "978","userId": "userB"}的参数传递给接口函数。
2. 跨房成功后,主播 A 会收到 onConnectOtherRoom() 事件回调。同时,两个直播房间里的所有用户均会收到 onUserVideoAvailable()onUserAudioAvailable() 事件通知。 例如,当房间“001”中的主播 A 通过connectOtherRoom()与房间“002”中的主播 B 拉通跨房通话后, 房间“001”中的用户会收到主播 B 的onUserVideoAvailable(B, true)回调和onUserAudioAvailable(B, true)回调。 房间“002”中的用户会收到主播 A 的onUserVideoAvailable(A, true) 回调和onUserAudioAvailable(A, true)回调。
3. 两个房间里的用户通过调用 startRemoteView(userId, view) 即可显示另一房间里主播的画面,声音会自动播放。
//示例代码:跨房连麦 PK
mTRTCCloud.ConnectOtherRoom(String.format("{\\"roomId\\":%s,\\"userId\\":\\"%s\\"}", roomId, username));

步骤11:退出当前房间

调用 exitRoom() 方法退出房间,SDK 在退房时需要关闭和释放摄像头、麦克风等硬件设备,因此退房动作并非瞬间完成的,需收到 onExitRoom() 回调后才算真正完成退房操作。
// 调用退房后请等待 onExitRoom 事件回调
mTRTCCloud.exitRoom()

@Override
public void onExitRoom(int reason) {
Log.i(TAG, "onExitRoom: reason = " + reason);
}
注意:
如果您的 App 中同时集成了多个音视频 SDK,请在收到onExitRoom回调后再启动其它音视频 SDK,否则可能会遇到硬件占用问题。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈