集成
本文将介绍如何快速完成 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' // 添加 TRTC SDK 依赖 }
2. 在
app/build.gradle
中 defaultConfig 指定项目的 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
即可成功进入房间,该方法通常在点击开始通话按钮后调用。// 将以下 trtcParams 参数修改为自己的参数TRTCCloudDef.TRTCParams trtcParams = new TRTCCloudDef.TRTCParams();trtcParams.sdkAppId = 1400000123;trtcParams.userId = "denny";trtcParams.userSig = "xxx";trtcParams.roomId = 123321;// 对于多人视频通话场景,推荐使用 TRTC_APP_SCENE_LIVEmCloud.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); // 仅静音 dennymCloud.muteAllRemoteAudio(true); // 静音所有远端用户
// 取消静音mCloud.muteRemoteAudio("denny", false); // 仅取消静音 dennymCloud.muteAllRemoteAudio(false); // 取消静音所有远端用户
步骤9. 退出房间
调用
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...");}}
常见问题
您可以在 API 参考 查看所有函数列表及其描述。
如果您的接入和使用中遇到问题,请参见 常见问题。
联系我们
如果有任何需要或者反馈,您可以联系:info_rtc@tencent.com。