Only the Chinese version of this page is provided currently. The English version will be provided soon.

Android

Last updated: 2026-03-24 10:32:27

本文将介绍如何快速完成腾讯云 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.gradledependencies 添加对 TRTC SDK 的依赖。
dependencies {
// ...项目其他依赖
implementation 'com.tencent.liteav:LiteAVSDK_TRTC:latest.release' // 添加 TRTC SDK 依赖
}
2. app/build.gradledefaultConfig 指定项目的 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() {
@Override
public 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();
}

@Override
public 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);
}

@Override
public 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">

<ImageView
android:id="@+id/txcvv_main_local"
android:layout_width="540dp"
android:layout_height="960dp"
android:scaleType="centerCrop"
android:src="@drawable/test_chang" />

<ImageView
android: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 后开始推流。
参数
参数说明
取值
取值说明
rotation
图像的顺时针旋转角度。支持 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度。
fillMode
画面填充模式。填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值: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 即可成功进入房间,该方法通常在点击开始通话按钮后调用。
参数
类型
描述
sdkAppId
number
您在 实时音视频控制台 中创建的音频和视频应用程序的 sdkAppId。
userId
string
您指定的用户 ID。
userSig
string
用户签名,请参见 UserSig
strRoomId
string
您指定的房间 ID,通常是唯一的房间 ID。
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_LIVE
mCloud.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 选择播放或停止远端声音。
// 仅静音 denny
mCloud.muteRemoteAudio("denny", true);

// 静音所有远端用户
mCloud.muteAllRemoteAudio(true);
// 仅取消静音 denny
mCloud.muteRemoteAudio("denny", false);

// 取消静音所有远端用户
mCloud.muteAllRemoteAudio(false);

步骤10:退出房间

调用 TRTCCloud#exitRoom 退出当前的房间,TRTC SDK 会在退房结束后通过 onExitRoom 回调事件通知您。
// 退出当前房间
mCloud.exitRoom();

// 监听 `onExitRoom` 回调
@Override
public 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 概览 查看所有函数列表及其描述。
如果您的接入和使用中遇到问题,请参见 常见问题

下一步

至此,你已成功实现基本的音视频通话,你还可以参考下列文档了解更多核心功能:

参考信息

我们在 GitHub 上提供了开源的 示例项目 供你参考。

联系我们

如果您在接入或使用过程中有任何疑问或者建议,欢迎 联系我们 提交反馈。