tencent cloud

文档反馈

最后更新时间:2024-07-18 15:17:24
    本文将介绍如何快速完成 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; // Declare the mCloud member variable
    2. 调用初始化接口创建 TRTC 实例并设置事件回调接口。
    // Create trtc instance(singleton) and set up event listeners
    mCloud = TRTCCloud.sharedInstance(getApplicationContext()); mCloud.setListener(new TRTCCloudListener() {
    
    // Listen to the "onError" event, and print logs for errors such as "Camera is not authorized" @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"); } }
    // Listen for the `onEnterRoom` event of the SDK and learn whether the room is successfully entered @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. 请求 CAMERAMICROPHONE 权限。
    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
    // ... Other codes
    // Request camera and microphone permissions 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) { // All permissions are granted, you can start using the camera and microphone
    // Here to create TRTC instances, enter the room, publish audio and video streams, subscribe audio and video streams and check out and other functions } else { // Show a message to the user that the permissions are required to use the app features 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 函数即可进入房间。
    主播角色:
    // Please replace each field in TRTCParams with your own parameters
    TRTCCloudDef.TRTCParams trtcParams = new TRTCCloudDef.TRTCParams();
    trtcParams.sdkAppId = 1400000123; // Please replace with your own SDKAppID
    trtcParams.userId = "denny"; // Please replace with your own userid
    trtcParams.roomId = 123321; // Please replace with your own room number
    trtcParams.userSig = "xxx"; // Please replace with your own userSig
    trtcParams.role = TRTCCloudDef.TRTCRoleAnchor;
    
    // If your application scenario is a video call between several people, please use "TRTC_APP_SCENE_LIVE"
    mCloud.enterRoom(trtcParams, TRTCCloudDef.TRTC_APP_SCENE_LIVE);
    观众角色:
    // Please replace each field in TRTCParams with your own parameters
    TRTCCloudDef.TRTCParams trtcParams = new TRTCCloudDef.TRTCParams();
    trtcParams.sdkAppId = 1400000123; // Please replace with your own SDKAppID
    trtcParams.userId = "denny"; // Please replace with your own userid
    trtcParams.roomId = 123321; // Please replace with your own room number
    trtcParams.userSig = "xxx"; // Please replace with your own userSig
    trtcParams.role = TRTCCloudDef.TRTCRoleAudience;
    
    // If your application scenario is a video call between several people, please use "TRTC_APP_SCENE_LIVE"
    mCloud.enterRoom(trtcParams, TRTCCloudDef.TRTC_APP_SCENE_LIVE);
    注意:
    如果以观众角色进入房间,sdkAppIdroomId 需要与主播端相同,而 userIduserSig 需要替换为自己的值。

    步骤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 来设置本地预览的渲染参数。
    // Set the preview mode of the local screen
    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);
    
    // Start a preview of the local camera
    TXCloudVideoView cameraVideo = findViewById(R.id.txcvv_main_local);
    mCloud.startLocalPreview(true, cameraVideo);
    3. 您可以通过调用接口 TXDeviceManager 来完成“切换前后摄像头”“设置对焦模式”“打开”等操作。
    // Enable auto focus and turn on the flash using the TXDeviceManager
    TXDeviceManager manager = mCloud.getDeviceManager();
    if (manager.isAutoFocusEnabled()) {
    manager.enableCameraAutoFocus(true);
    }
    manager.enableCameraTorch(true);
    说明:
    摄像头默认打开前置摄像头,如果您需要使用后置摄像头,调用manager.switchCamera(false)即可打开后置摄像头。

    步骤6. 打开麦克风

    您可以调用 startLocalAudio 来开启麦克风采集,该接口需要您通过 quality 参数确定采集模式,建议根据您的需求选择以下其中一个适合您项目的模式
    // Enable microphone acquisition and set the current scene to: Voice mode
    // For high noise suppression capability, strong and weak network resistance
    mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_SPEECH );
    
    // Enable microphone acquisition, and set the current scene to: Music mode (
    // For high fidelity acquisition, low sound quality loss, recommended to use with professional sound cards
    mCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC);

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

    创建一个新项目,按照步骤1-4观众角色进入 denny 的房间后,您可以通过调用接口 startRemoteView 来播放远端用户的视频画面。
    // Play denny's camera footage
    mCloud.startRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG,cameraView);
    之后,您通过调用接口 stopRemoteView 停止某个远端用户的视频,也可以通过接口 stopAllRemoteView 停止播放所有远端用户的视频。
    // Stop denny's camera footage
    mCloud.stopRemoteView("denny", TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG,cameraView);
    // Stop all camera footages
    mCloud.stopAllRemoteView();

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

    您可以通过调用接口 muteRemoteAudio("denny",true) 来静音远端用户 denny 的声音。
    // Mute user with id denny
    mCloud.muteRemoteAudio("denny", true);
    之后也可以通过调用接口 muteRemoteAudio("denny",false) 来解除对他的静音。
    // Unmute user with id denny
    mCloud.muteRemoteAudio("denny", false);

    步骤9. 退出房间

    您可以调用接口 exitRoom 即可退出当前的房间,SDK 会在退房结束后通过 onExitRoom(int reason) 回调事件通知您。
    // Exit current room
    mCloud.exitRoom();
    
    // Listen for the `onExitRoom` callback to get the reason for room exit
    @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 电话支持