集成

本文将介绍如何快速完成 Android RTC Engine 的接入,实现一个基本的音视频通话。

环境准备

Android Studio 3.5+。
Android 8.1(SDK API 27)及以上系统。

接入指引

步骤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 架构
} } }
完成以上配置后,单击 Sync Now 后 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.** { *; }

步骤3. 创建 TRTC 实例

音视频功能的正常使用需要请求摄像头麦克风权限,推荐在成功请求后创建 TRTC 实例。
private TRTCCloud mCloud; // 声明成员变量
// 创建 TRTC 实例并设置监听
mCloud = TRTCCloud.sharedInstance(getApplicationContext()); mCloud.setListener(new TRTCCloudListener() { @Override public void onError(int errCode, String errMsg, Bundle extraInfo) { super.onError(errCode, errMsg, extraInfo); String notificaiton = "Error Code: " + errCode + ", Error Message: " + errMsg + ", extraInfo: " + extraInfo; Toast.makeText(getApplicationContext(), notificaiton, 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(); } } });

步骤4. 进入房间

1. 在进入房间之前需要请求摄像头麦克风权限。
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. 设置进房参数 TRTCParams 并调用 enterRoom 即可成功进入房间,该方法通常在点击开始通话按钮后调用。
参数
类型
描述
sdkAppId
number
您在 TRTC 控制台中创建的音频和视频应用程序的sdkAppId。
userId
string
您指定的用户ID。
userSig
string
用户签名,请参见 UserSig
roomId
number
您指定的房间 ID,通常是唯一的房间 ID。
有关更详细的参数描述,请参考接口文档 enterRoom
// 将以下 trtcParams 参数修改为自己的参数
TRTCCloudDef.TRTCParams trtcParams = new TRTCCloudDef.TRTCParams();
trtcParams.sdkAppId = 1400000123;
trtcParams.userId = "denny";
trtcParams.userSig = "xxx";
trtcParams.roomId = 123321;

// 对于多人视频通话场景,推荐使用 TRTC_APP_SCENE_LIVE
mCloud.enterRoom(trtcParams, TRTCCloudDef.TRTC_APP_SCENE_LIVE);

步骤5. 打开/关闭摄像头

1. 在布局文件中添加 TXCloudVideoView 视图组件,用于显示视频流内容。
<com.tencent.rtmp.ui.TXCloudVideoView android:id="@+id/txcvv_main_local" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
2. 设置本地预览的渲染参数 setLocalRenderParams ,并调用startLocalPreview进行本地预览,成功调用enterRoom后开始推流。
// 设置本地预览渲染参数
TRTCCloudDef.TRTCRenderParams trtcRenderParams = new TRTCCloudDef.TRTCRenderParams();
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);
调用stopLocalPreview关闭摄像头预览并停止推送本地视频信息。
mCloud.stopLocalPreview();
3. 添加“切换前后摄像头”“设置对焦模式”“闪光灯”等设备扩展功能的使用。
// 默认开启前置摄像头,切换为后置摄像头
TXDeviceManager manager = mCloud.getDeviceManager();
if(manager.isFrontCamera()) {
manager.switchCamera(false);
}

// 切换为前置摄像头
TXDeviceManager manager = mCloud.getDeviceManager();
manager.switchCamera(true);
// 若设备支持自动识别人脸位置,开启自动对焦功能
TXDeviceManager manager = mCloud.getDeviceManager();
if (manager.isAutoFocusEnabled()) {
manager.enableCameraAutoFocus(true);
}

// 关闭自动对焦功能
TXDeviceManager manager = mCloud.getDeviceManager();
manager.enableCameraAutoFocus(false);
// 切换后置摄像头时可开启闪光灯
TXDeviceManager manager = mCloud.getDeviceManager();
manager.enableCameraTorch(true);

// 关闭闪光灯
TXDeviceManager manager = mCloud.getDeviceManager();
manager.enableCameraTorch(false);

步骤6. 打开/关闭麦克风

调用 startLocalAudio 开启麦克风采集,请根据您的需求选择以下其中一个声音质量参数Quality
// 开启麦克风采集,设置当前场景为:语音模式
// 具有高的噪声抑制能力,有强有弱的网络阻力
mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH );
// 开启麦克风采集,设置当前场景为:音乐模式
// 为获得高保真度,低音质损失,建议配合专业声卡使用
mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC);
调用stopLocalAudio关闭麦克风采集并停止推送本地音频信息。
mCloud.stopLocalAudio();

步骤7. 播放/停止视频流

1. 在进入房间之前对 onUserVideoAvailable 进行监听,当您收到onUserVideoAvailable(userId, true)通知时,表示该路画面已经有可播放的视频帧到达。
2. 调用startRemoteView对远端采集画面进行播放。
// 播放远端画面
TXCloudVideoView cameraVideo = findViewById(R.id.txcvv_main_local);
mCloud.startRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, cameraVideo); // 以高清大画面播放远端采集视频内容
调用stopRemoteView 停止播放远端画面。
// 停止播放
mCloud.stopRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG); // 仅停止播放 denny 画面
mCloud.stopAllRemoteView(); // 停止播放所有视频

步骤8. 播放/停止音频流

默认情况下,SDK 将自动播放远程音频,因此您不需要调用任何 API 来手动播放它。
但当您不喜欢自动播放音频时,可以调用 muteRemoteAudio 选择播放或停止远端声音。
// 静音
mCloud.muteRemoteAudio("denny", true); // 仅静音 denny

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

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

步骤9. 退出房间

调用 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...");
}
}

常见问题

您可以在 API 参考 查看所有函数列表及其描述。
如果您的接入和使用中遇到问题,请参见 常见问题

联系我们

如果有任何需要或者反馈,您可以联系:info_rtc@tencent.com。