本文将介绍如何快速完成腾讯云 TRTC(实时音视频)的接入,实现一个基本的音视频通话。
前提条件
开通服务
1. 登录 实时音视频控制台,单击创建应用 。如果您已经完成创建,可以跳过该操作。
2. 在创建应用成功后,您可以在应用管理中获取到您的 SDKAppID 和 SDK 密钥。

SDKAppID: 控制台创建的实时音视频应用的唯一标识。
UserSig(SDK 密钥):用户鉴权凭证,由您的业务服务器生成。
环境准备
在开始之前,请确保您已满足下列要求:
最低兼容 Android 4.4(SDK API Level 19),建议使用 Android 5.0 (SDK API Level 21)及以上版本。
Android Studio 4.0 及以上版本。
两部 Android 4.4 及以上设备。
版本兼容性说明:
为确保构建环境稳定,请严格遵循官方兼容性要求进行配置:
Gradle、Android Gradle Plugin、JDK 与 Android Studio 的兼容性,请参阅 Android 官方文档:版本说明。
Kotlin、Android Gradle Plugin 与 Gradle 的版本映射关系,请参阅 Kotlin 官方文档:Kotlin-Gradle 插件兼容性。
我们建议您根据上述指南,选择与项目要求完全匹配的版本组合。
创建项目
创建项目具体步骤
1. 打开 Android Studio,创建一个新的 Android 项目。
2. 选择 Empty Views Activity 模板,点击 Next。
3. 设置你的项目名称、包名、保存路径,其中:
Language 选择 Java。
Minimum SDK 选择默认版本。
Build configuration language 选择 Groovy DSL (build.gradle)。
4. 点击 Finish 创建项目。

集成并引入 SDK
步骤1:导入 SDK
1. 在
app/build.gradle中 dependencies 添加对 TRTC SDK 的依赖。dependencies {// ...项目其他依赖implementation 'com.tencent.liteav:LiteAVSDK_TRTC:latest.release' // 添加 TRTC SDK 依赖}
2. 在
app/build.gradle中 defaultConfig 指定项目的 CPU 架构,以支持 armeabi-v7a/arm64-v8a 架构的设备。android {defaultConfig {// ...其他默认配置ndk {abiFilters "armeabi-v7a", "arm64-v8a" // 支持 armeabi-v7a 和 arm64-v8a 架构}}}
3. 完成以上配置后,在 Android Studio 的工具栏单击 Sync Now(或执行
File > Sync Project with Gradle Files)后 SDK 将自动集成到目标工程中。步骤2:配置工程
1. 进入
AndroidManifest.xml文件,添加 TRTC SDK 所需权限。<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.RECORD_AUDIO" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera.autofocus" />
注意:
请勿设置
android:hardwareAccelerated="false",关闭硬件加速将导致视频流无法渲染。2. 进入
proguard-rules.pro文件, 将 TRTC SDK 相关类及其成员加入不混淆名单。-keep class com.tencent.** { *; }
实现步骤
步骤1:创建 TRTC 实例
1. 音视频功能的正常使用需要请求摄像头和麦克风权限,推荐在成功请求后创建 TRTC 实例。
private TRTCCloud mCloud; // 声明成员变量// 创建 TRTC 实例并设置监听mCloud = TRTCCloud.sharedInstance(getApplicationContext());mCloud.addListener(new TRTCCloudListener() {@Overridepublic void onError(int errCode, String errMsg, Bundle extraInfo) {super.onError(errCode, errMsg, extraInfo);String notification = "Error Code: " + errCode + ", Error Message: " + errMsg + ", extraInfo: " + extraInfo;Toast.makeText(getApplicationContext(), notification, Toast.LENGTH_LONG).show();}@Overridepublic void onEnterRoom(long result) {super.onEnterRoom(result);if(result > 0) {Toast.makeText(getApplicationContext(), "进房成功!", Toast.LENGTH_LONG).show();} else {Toast.makeText(getApplicationContext(), "进房失败!", Toast.LENGTH_LONG).show();}}});
2. 实时音视频会使用摄像头和麦克风,需要请求摄像头和麦克风权限。
private static final int REQUEST_CAMERA_AND_MICROPHONE = 1; // ActivityCompat.requestPermissions() 方法所需 requestCode 参数protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 请求摄像头和麦克风权限requestCameraAndMicrophonePermission();}private void requestCameraAndMicrophonePermission() {String[] permissions = {android.Manifest.permission.CAMERA, android.Manifest.permission.RECORD_AUDIO};ActivityCompat.requestPermissions(this, permissions, REQUEST_CAMERA_AND_MICROPHONE);}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);if (requestCode == REQUEST_CAMERA_AND_MICROPHONE) {boolean allPermissionsGranted = true;for (int grantResult : grantResults) {if (grantResult != PackageManager.PERMISSION_GRANTED) {allPermissionsGranted = false;break;}}if (allPermissionsGranted) {// 申请设备权限成功,创建 TRTC 实例并使用音视频所支持的功能} else {// 申请设备权限失败,可做出相应提示Toast.makeText(getApplicationContext(), "获取权限失败!", Toast.LENGTH_LONG).show();}}}
步骤2:打开/关闭摄像头
1. 在布局文件中添加
TXCloudVideoView 视图组件,用于显示视频流内容。<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/app_content_bg"android:orientation="vertical"><ImageViewandroid:id="@+id/txcvv_main_local"android:layout_width="540dp"android:layout_height="960dp"android:scaleType="centerCrop"android:src="@drawable/test_chang" /><ImageViewandroid:id="@+id/txcvv_remote_view"android:layout_width="180dp"android:layout_height="320dp"android:layout_marginTop="10dp"android:layout_marginRight="10dp"android:layout_alignParentRight="true"android:scaleType="centerCrop"android:src="@drawable/test_chang" /></RelativeLayout>
2. 设置本地预览的渲染参数
TRTCCloud#setLocalRenderParams,并调用 TRTCCloud#startLocalPreview 进行本地预览,成功调用 TRTCCloud#enterRoom 后开始推流。参数 | 参数说明 | 取值 | 取值说明 |
图像的顺时针旋转角度。支持 90度、180度以及270度 旋转角度,默认值:TRTCCloudDef.TRTC_VIDEO_ROTATION_0 | TRTC_VIDEO_ROTATION_0 | 不旋转。 | |
| | TRTC_VIDEO_ROTATION_90 | 顺时针旋转90度。 |
| | TRTC_VIDEO_ROTATION_180 | 顺时针旋转180度。 |
| | TRTC_VIDEO_ROTATION_270 | 顺时针旋转270度。 |
画面填充模式。填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL。 | TRTC_VIDEO_RENDER_MODE_FILL | 填充模式:即将画面内容居中等比缩放以充满整个显示区域,超出显示区域的部分将会被裁剪掉,此模式下画面可能不完整。 | |
| | TRTC_VIDEO_RENDER_MODE_FIT | 适应模式:即按画面长边进行缩放以适应显示区域,短边部分会被填充为黑色,此模式下图像完整但可能留有黑边。 |
| | TRTC_VIDEO_RENDER_MODE_SCALE_FILL | 缩放填充模式:即无论画面的宽高比,都会被拉伸或压缩以完全填充显示区域,此模式下画面宽高比可能会被改变,导致渲染画面变形 |
画面镜像模式。默认值:TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO。 | TRTC_VIDEO_MIRROR_TYPE_AUTO | 自动模式:如果正使用前置摄像头则开启镜像,如果是后置摄像头则不开启镜像(仅适用于移动设备)。 | |
| | TRTC_VIDEO_MIRROR_TYPE_ENABLE | 强制开启镜像,不论当前使用的是前置摄像头还是后置摄像头。 |
| | TRTC_VIDEO_MIRROR_TYPE_DISABLE | 强制关闭镜像,不论当前使用的是前置摄像头还是后置摄像头。 |
// 设置本地预览渲染参数TRTCCloudDef.TRTCRenderParams trtcRenderParams = new TRTCCloudDef.TRTCRenderParams();trtcRenderParams.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0; // 旋转角度为不旋转trtcRenderParams.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL; // 渲染模式为填充trtcRenderParams.mirrorType = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO; // 镜像类型为自动mCloud.setLocalRenderParams(trtcRenderParams);// 对采集内容进行本地预览TXCloudVideoView cameraVideo = findViewById(R.id.txcvv_main_local);mCloud.startLocalPreview(true, cameraVideo);
3. 如果你需要关闭摄像头并停止推送视频流,请调用
TRTCCloud#stopLocalPreview 关闭摄像头预览并停止推送本地视频信息。mCloud.stopLocalPreview();
步骤3:前后摄像头切换
调用
TXDeviceManager#switchCamera(true/false) 进行前后摄像头切换。TXDeviceManager manager = mCloud.getDeviceManager();// 默认开启前置摄像头,切换为后置摄像头if(manager.isFrontCamera()) {manager.switchCamera(false);}// 切换为前置摄像头manager.switchCamera(true);
步骤4:开启/关闭自动对焦
调用
TXDeviceManager#enableCameraAutoFocus(true/false) 开启和关闭自动对焦。TXDeviceManager manager = mCloud.getDeviceManager();// 若设备支持自动识别人脸位置,开启自动对焦功能if (manager.isAutoFocusEnabled()) {manager.enableCameraAutoFocus(true);}// 关闭自动对焦功能manager.enableCameraAutoFocus(false);
步骤5:开启/关闭闪光灯
调用
TXDeviceManager#enableCameraTorch(true/false) 开启和关闭闪光灯。TXDeviceManager manager = mCloud.getDeviceManager();// 切换后置摄像头时可开启闪光灯manager.enableCameraTorch(true);// 关闭闪光灯manager.enableCameraTorch(false);
步骤6:打开/关闭麦克风
1. 调用
TRTCCloud#startLocalAudio 开启麦克风采集,请根据您的需求在下方选择一个声音质量参数:参数 | 描述 |
人声模式:单声道;编码码率:18kbps;具备几个模式中最强的网络抗性,适合语音通话为主的场景,例如在线会议,语音通话等。 | |
默认模式:单声道;编码码率:50kbps;介于 Speech 和 Music 之间的档位,SDK 默认档位,推荐选择。 | |
音乐模式:全频带立体声;编码码率:128kbps;适合需要高保真传输音乐的场景,例如在线K歌、音乐直播等。 |
// 开启麦克风采集,设置当前场景为:语音模式// 具有高的噪声抑制能力,有强有弱的网络阻力mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH);
// 开启麦克风采集,设置当前场景为:音乐模式// 为获得高保真度,低音质损失,建议配合专业声卡使用mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC);
2. 调用
TRTCCloud#stopLocalAudio 关闭麦克风采集并停止推送本地音频信息。mCloud.stopLocalAudio();
步骤7:进入房间
1. 设置进房参数 TRTCParams 并调用
TRTCCloud#enterRoom 即可成功进入房间,该方法通常在点击开始通话按钮后调用。2. 有关更详细的参数描述,请参考接口文档
TRTCCloud#enterRoom 。// 将以下 trtcParams 参数修改为自己的参数TRTCCloudDef.TRTCParams trtcParams = new TRTCCloudDef.TRTCParams();trtcParams.sdkAppId = 1400000123;trtcParams.userId = "denny";trtcParams.userSig = "xxx";trtcParams.strRoomId = "123abc";// 对于多人视频通话场景,推荐使用 TRTC_APP_SCENE_LIVEmCloud.enterRoom(trtcParams, TRTCCloudDef.TRTC_APP_SCENE_LIVE);
步骤8:播放/停止视频流
1. 在进入房间之前对
TRTCCloudListener#onUserVideoAvailable 进行监听,当您收到 TRTCCloudListener#onUserVideoAvailable(userId, true) 通知时,表示该路画面已经有可播放的视频帧到达。2. 调用
TRTCCloud#startRemoteView 对远端采集画面进行播放。// 播放远端画面TXCloudVideoView cameraVideo = findViewById(R.id.txcvv_remote_view);// 以高清大画面播放远端采集视频内容mCloud.startRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, cameraVideo);
3. 调用
TRTCCloud#stopRemoteView 来停止播放远端画面。// 仅停止播放 denny 画面mCloud.stopRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG);// 停止播放所有视频mCloud.stopAllRemoteView();
步骤9:播放/停止音频流
1. 默认情况下,SDK 将自动播放远程音频,因此您不需要调用任何 API 来手动播放它。
2. 但当您不喜欢自动播放音频时,可以调用
TRTCCloud#muteRemoteAudio 选择播放或停止远端声音。// 仅静音 dennymCloud.muteRemoteAudio("denny", true);// 静音所有远端用户mCloud.muteAllRemoteAudio(true);
// 仅取消静音 dennymCloud.muteRemoteAudio("denny", false);// 取消静音所有远端用户mCloud.muteAllRemoteAudio(false);
步骤10:退出房间
调用
TRTCCloud#exitRoom 退出当前的房间,TRTC SDK 会在退房结束后通过 onExitRoom 回调事件通知您。// 退出当前房间mCloud.exitRoom();// 监听 `onExitRoom` 回调@Overridepublic void onExitRoom(int reason) {if (reason == 0) {Log.d(TAG, "Exit current room by calling the 'exitRoom' api of sdk ...");} else if (reason == 1) {Log.d(TAG, "Kicked out of the current room by server through the restful api...");} else if (reason == 2) {Log.d(TAG, "Current room is dissolved by server through the restful api...");}}
步骤11:销毁实例
当 TRTCCloud 实例不再使用时,可以销毁实例,释放资源。
// 销毁实例,销毁后 mCloud 将不能再使用,如果要使用,需要重新创建mCloud.destroySharedInstance();
编译并运行
1. 将 Android 设备连接至电脑,在 Android 设备上打开开发者模式,启用 USB 调试,并且在 Android 设备上选择 USB 用于传输文件(如有)。
2. 在 Android Studio 界面顶部的 Running devices 选项中选择您用来测试的 Android 设备。

3. 点击运行按钮开始编译。编译成功后,您的设备上会自动安装好 App。
说明:
本 Demo 默认集成了音视频通话功能,由于该功能依赖的音视频 SDK 暂不支持模拟器,因此建议使用真机调试、运行 Demo。
4. 运行 App。


常见问题
您可以在 API 概览 查看所有函数列表及其描述。
如果您的接入和使用中遇到问题,请参见 常见问题。
下一步
至此,你已成功实现基本的音视频通话,你还可以参考下列文档了解更多核心功能:
调整视频画质
调整画面方向