tencent cloud

文档反馈

最后更新时间:2024-10-18 12:08:32
    本文将介绍如何快速完成 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。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持