本文将介绍如何快速完成 Android RTC Engine 的接入,实现一个基本的音视频通话。
环境准备
Android Studio 3.5+。
Android 8.1(SDK API 27)及以上系统。
接入指引
步骤1. 导入 SDK
1. 在app/build.gradle
中 dependencies 添加对 TRTC SDK 的依赖。
dependencies {
implementation 'com.tencent.liteav:LiteAVSDK_TRTC:latest.release'
}
2. 在app/build.gradle
中 defaultConfig 指定项目的 CPU 架构,以支持 armeabi-v7a/arm64-v8a 架构的设备。
android {
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 实例
音视频功能的正常使用需要请求摄像头和麦克风权限,推荐在成功请求后创建 TRTC 实例。
private TRTCCloud mCloud;
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;
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(getApplicationContext(), "获取权限失败!", Toast.LENGTH_LONG).show();
}
}
}
2. 设置进房参数 TRTCParams
并调用 enterRoom
即可成功进入房间,该方法通常在点击开始通话按钮后调用。
|
sdkAppId | number | |
userId | string | 您指定的用户ID。 |
userSig | string | |
roomId | number | 您指定的房间 ID,通常是唯一的房间 ID。 |
TRTCCloudDef.TRTCParams trtcParams = new TRTCCloudDef.TRTCParams();
trtcParams.sdkAppId = 1400000123;
trtcParams.userId = "denny";
trtcParams.userSig = "xxx";
trtcParams.roomId = 123321;
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
关闭麦克风采集并停止推送本地音频信息。
步骤7. 播放/停止视频流
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);
mCloud.stopAllRemoteView();
步骤8. 播放/停止音频流
默认情况下,SDK 将自动播放远程音频,因此您不需要调用任何 API 来手动播放它。
但当您不喜欢自动播放音频时,可以调用 muteRemoteAudio
选择播放或停止远端声音。
mCloud.muteRemoteAudio("denny", true);
mCloud.muteAllRemoteAudio(true);
mCloud.muteRemoteAudio("denny", false);
mCloud.muteAllRemoteAudio(false);
步骤9. 退出房间
调用 exitRoom
退出当前的房间,TRTC SDK 会在退房结束后通过 onExitRoom
回调事件通知您。
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。
本页内容是否解决了您的问题?