本文将介绍如何快速完成 Android RTC Engine 的接入,实现一个基本的音视频通话。
环境准备
Android Studio 3.5+。
Android 4.1(SDK API 16)及以上系统。
步骤1. 导入 SDK
1. 在app/build.gradle
文件中添加 TRTC SDK 的依赖。
dependencies {
implementation 'com.tencent.liteav:LiteAVSDK_TRTC:latest.release'
}
2. 在 defaultConfig 中指定 App 使用的 CPU 架构。
defaultConfig {
ndk {
abiFilters "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 实例
1. 声明成员变量
private final static String TAG = MainActivity.class.getSimpleName();
private static final int REQUEST_CAMERA_AND_MICROPHONE = 1;
private TRTCCloud mCloud;
2. 调用初始化接口创建 TRTC 实例并设置事件回调接口。
mCloud = TRTCCloud.sharedInstance(getApplicationContext());
mCloud.setListener(new TRTCCloudListener() {
@Override
public void onError(int errCode, String errMsg, Bundle extraInfo) {
super.onError(errCode, errMsg, extraInfo);
if (errCode == TXLiteAVCode.ERR_CAMERA_NOT_AUTHORIZED) {
Log.d(TAG, "Current application is not authorized to use the camera");
}
}
@Override
public void onEnterRoom(long result) {
super.onEnterRoom(result);
if (result > 0) {
Log.d(TAG, "Enter room succeed");
} else {
Log.d(TAG, "Enter room failed");
}
}
});
步骤4. 进入房间
1. 请求 CAMERA 和 MICROPHONE 权限。
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) {
} else {
Toast.makeText(this, "Camera and Microphone permissions are required", Toast.LENGTH_SHORT).show();
}
}
}
2. 在Tencent RTC 控制台中单击Create Application
,在 Application Overview 中获取 SDKAppID 。 3. 在UserSig Tools中下来选择 SDKAppID ,并输入您自己的用户名(UserID),单击Generate
即可获取您自己的 UserSig 。 4. 设置进房参数 TRTCParams 后,调用接口 enterRoom
函数即可进入房间。
主播角色:
TRTCCloudDef.TRTCParams trtcParams = new TRTCCloudDef.TRTCParams();
trtcParams.sdkAppId = 1400000123;
trtcParams.userId = "denny";
trtcParams.roomId = 123321;
trtcParams.userSig = "xxx";
trtcParams.role = TRTCCloudDef.TRTCRoleAnchor;
mCloud.enterRoom(trtcParams, TRTCCloudDef.TRTC_APP_SCENE_LIVE);
观众角色:
TRTCCloudDef.TRTCParams trtcParams = new TRTCCloudDef.TRTCParams();
trtcParams.sdkAppId = 1400000123;
trtcParams.userId = "denny";
trtcParams.roomId = 123321;
trtcParams.userSig = "xxx";
trtcParams.role = TRTCCloudDef.TRTCRoleAudience;
mCloud.enterRoom(trtcParams, TRTCCloudDef.TRTC_APP_SCENE_LIVE);
注意:
如果以观众角色进入房间,sdkAppId 和 roomId 需要与主播端相同,而 userId 和 userSig 需要替换为自己的值。
步骤5. 打开摄像头
1. 在对应的.xml
文件中添加,如以下代码所示。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<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" />
</androidx.constraintlayout.widget.ConstraintLayout>
2. 在调用接口 startLocalPreview
打开摄像头预览之前,您可以通过通过调用接口 setLocalRenderParams
来设置本地预览的渲染参数。
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);
3. 您可以通过调用接口 TXDeviceManager
来完成“切换前后摄像头”、“设置对焦模式”、“打开”等操作。
TXDeviceManager manager = mCloud.getDeviceManager();
if (manager.isAutoFocusEnabled()) {
manager.enableCameraAutoFocus(true);
}
manager.enableCameraTorch(true);
说明:
摄像头默认打开前置摄像头,如果您需要使用后置摄像头,调用manager.switchCamera(false)
即可打开后置摄像头。
步骤6. 打开麦克风
您可以调用 startLocalAudio
来开启麦克风采集,该接口需要您通过 quality
参数确定采集模式,建议根据您的需求选择以下其中一个适合您项目的模式。
mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH );
mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC);
步骤7. 播放/停止视频流
创建一个新项目,按照步骤1-4以观众角色进入 denny 的房间后,您可以通过调用接口 startRemoteView
来播放远端用户的视频画面。
mCloud.startRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG,cameraView);
之后,您通过调用接口 stopRemoteView
停止某个远端用户的视频,也可以通过接口 stopAllRemoteView
停止播放所有远端用户的视频。
mCloud.stopRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG,cameraView);
mCloud.stopAllRemoteView();
步骤8. 播放/停止音频流
您可以通过调用接口 muteRemoteAudio("denny",true)
来静音远端用户 denny 的声音。
mCloud.muteRemoteAudio("denny", true);
之后也可以通过调用接口 muteRemoteAudio("denny",false)
来解除对他的静音。
mCloud.muteRemoteAudio("denny", false);
步骤9. 退出房间
您可以调用接口 exitRoom
即可退出当前的房间,SDK 会在退房结束后通过 onExitRoom(int reason)
回调事件通知您。
mCloud.exitRoom();
@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...");
}
}
常见问题
联系我们
如果有任何需要或者反馈,您可以联系:info_rtc@tencent.com。
本页内容是否解决了您的问题?