tencent cloud

文档反馈

最后更新时间:2024-09-02 17:16:08
    本文将介绍如何快速完成 Flutter RTC Engine 的接入,实现一个基本的音视频通话。

    环境准备

    Flutter 2.0 及以上版本。
    Android 端开发:
    Android Studio 3.5及以上版本。
    App 要求 Android 4.1及以上版本设备。
    iOS 端开发:
    Xcode 11.0及以上版本。
    osx 系统版本要求 10.11 及以上版本
    请确保您的项目已设置有效的开发者签名。

    步骤1. 导入SDK

    通过以下命令安装组件 tencent_trtc_cloud
    flutter pub add tencent_trtc_cloud

    步骤2. 配置项目

    1. 开通摄像头麦克风的权限,即可开启语音通话功能。
    iOS
    Android
    1. 需要在 Info.plist 中加入对相机和麦克风的权限申请:
    <key>NSCameraUsageDescription</key>
    <string>授权摄像头权限才能正常视频通话</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>授权麦克风权限才能正常语音通话</string>
    2. 添加字段 io.flutter.embedded_views_preview,并设定值为 YES。
    1. 打开/android/app/src/main/AndroidManifest.xml文件。
    2. 在其中添加如下权限:
    <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" />
    说明:
    如果您在接入过程中遇到问题,请参见 常见问题

    步骤3. 创建 TRTC 实例

    1. 声明成员变量
    late TRTCCloud trtcCloud;
    2. 调用初始化接口创建 TRTC 实例并设置事件回调。
    trtcCloud = (await TRTCCloud.sharedInstance())!; trtcCloud.registerListener((type, param) async { switch (type) { case TRTCCloudListener.onError: print("onError errorCode:${param['errCode']} errorMsg:${param['errMsg']}") break; case TRTCCloudListener.onEnterRoom: if (param > 0) { print("Enter room success"); } else { print("Enter room failed"); } break; default: break; } });

    步骤4. 进入房间

    1. 如果您在 Android 设备上运行程序,需要提前请求 CAMERAMICROPHONE 权限。
    if (!(await Permission.camera.request().isGranted) || !(await Permission.microphone.request().isGranted)) { print('You need to obtain audio and video permission to enter'); return; }
    说明:
    此处权限申请使用了第三方仓库 permission_handler
    2. Tencent RTC 控制台 中单击 Create Application,在 Application Overview 中获取 SDKAppID 。
    
    
    
    3. UserSig Tools 中下来选择 SDKAppID ,并输入您自己的用户名(UserID),单击Generate即可获取您自己的 UserSig 。
    
    
    
    4. 在设置进房参数 TRTCParams 后,调用 enterRoom 接口函数即可进入房间。
    主播角色
    await trtcCloud.enterRoom( TRTCParams( sdkAppId: sdkAppId, // Please replace with your own SDKAppID userId: "denny", // Please replace with your own userid userSig: '', // Please replace with your own userSig role: TRTCCloudDef.TRTCRoleAnchor, roomId: 123321 // Please replace with your own room number ), TRTCCloudDef.TRTC_APP_SCENE_LIVE);
    观众角色
    await trtcCloud.enterRoom( TRTCParams( sdkAppId: sdkAppId, // Please replace with your own SDKAppID userId: "denny", // Please replace with your own userid userSig: '', // Please replace with your own userSig role: TRTCCloudDef.TRTCRoleAudience, roomId: 123321 // Please replace with your own room number ), TRTCCloudDef.TRTC_APP_SCENE_LIVE);
    注意:
    如果以观众角色进入房间,sdkAppIdroomId 需要与主播端相同,而 userIduserSig 需要替换为自己的值。

    步骤5. 打开摄像头

    1. 在页面的 build 方法中对应位置添加 TRTCCloudVideoView :
    TRTCCloudVideoView( key: valueKey, viewType: TRTCCloudDef.TRTC_VideoView_TextureView, onViewCreated: (viewId) async { setState(() { localViewId = viewId; }); }, ),
    2. 在调用接口 startLocalPreview 打开摄像头预览之前,您可以通过通过调用接口 setLocalRenderParams 来设置本地预览的渲染参数。
    trtcCloud.setLocalRenderParams(TRTCRenderParams( fillMode: TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL, mirrorType: TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO, rotation: TRTCCloudDef.TRTC_VIDEO_ROTATION_0, )); trtcCloud.startLocalPreview(isFrontCamera, viewId);
    3. 您可以通过调用接口 TXDeviceManager 来完成“切换前后摄像头”“设置对焦模式”等操作。
    TXDeviceManager manager = trtcCloud.getDeviceManager(); bool autoFocusEnable = (await manager.isAutoFocusEnabled())!; if (autoFocusEnable) { 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 trtcCloud.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 trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_MUSIC);

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

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

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

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

    步骤9. 退出房间

    您可以调用接口 exitRoom 即可退出当前的房间,SDK 会在退房结束后通过 onExitRoom(int reason) 回调事件通知您。
    // Exit current room
    trtcCloud.exitRoom();
    
    // Register callback listener
    trtcCloud.registerListener(onTrtcListener);
    
    // Listen for the `onExitRoom` callback to get the reason for room exit
    onTrtcListener(type, params) async {
    if (type == TRTCCloudListener.onExitRoom) { if (param == 0) { print("Exit current room by calling the 'exitRoom' api of sdk ..."); } else if (param == 1) { print("Kicked out of the current room by server through the restful api..."); } else if (param == 2) { print("Current room is dissolved by server through the restful api..."); } }
    }

    常见问题

    您可以在 API 参考 查看所有函数列表及其描述。
    如果您的接入和使用中遇到问题,请参见 常见问题
    联系我们

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

    技术支持

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

    7x24 电话支持