tencent cloud

文档反馈

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

    环境准备

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

    步骤1. 导入SDK

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

    步骤2. 配置项目

    1. 开通摄像头麦克风的权限,即可开启语音通话功能。
    iOS
    Android
    1. 需要在 Info.plist 的第一级<dict>目录下加入对相机和麦克风的权限申请:
    <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. 如果您需要编译运行在 Android 平台,您还需要进行如下配置:
    首先,需要在工程的 android/app/build.gradle 文件中对应位置添加:
    android {
    .....
    packagingOptions {
    pickFirst 'lib/**/libliteavsdk.so'
    }
    buildTypes {
    release {
    ......
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    }
    }
    在工程的 android/app 目录下创建 proguard-rules.pro 文件,并在 proguard-rules.pro 文件中添加如下代码:
    -keep class com.tencent.** { *; }
    说明:
    如果您在接入过程中遇到问题,请参见 常见问题

    步骤3. 创建 TRTC 实例

    1. 声明成员变量
    import 'package:tencent_rtc_sdk/trtc_cloud.dart';
    import 'package:tencent_rtc_sdk/trtc_cloud_def.dart';
    import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart';
    late TRTCCloud trtcCloud;
    2. 调用初始化接口创建 TRTC 实例并设置事件回调。
    // 创建 TRTC 实例
    trtcCloud = (await TRTCCloud.sharedInstance())!;
    
    // 创建 TRTCCloudListener 实例
    TRTCCloudListener listener = TRTCCloudListener(
    // 根据需要实现对应的回调
    onError: (errCode, errMsg) {
    // TODO
    }
    );
    
    // 注册监听器,将 listener 绑定到 trtcCloud 实例
    trtcCloud.registerListener(listener);

    步骤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 接口函数即可进入房间。
    主播角色
    trtcCloud.enterRoom(
    TRTCParams(
    sdkAppId: sdkAppId, // 请替换为您的 SDKAppID
    userId: "userId", // 请替换为您的 userid
    userSig: '', // 请替换为您的 userSig
    role: TRTCRoleType.anchor,
    roomId: 123123, // 请替换为您的 roomId
    ),
    TRTCAppScene.live
    );
    观众角色
    trtcCloud.enterRoom(
    TRTCParams(
    sdkAppId: sdkAppId, // 请替换为您的 SDKAppID
    userId: "userId", // 请替换为您的 userid
    userSig: '', // 请替换为您的 userSig
    role: TRTCRoleType.audience,
    roomId: 123123, // 请替换为您的 roomId
    ),
    TRTCAppScene.live
    );
    注意:
    如果以观众角色进入房间,sdkAppIdroomId 需要与主播端相同,而 userIduserSig 需要替换为自己的值。

    步骤5. 打开摄像头

    1. 在页面的 build 方法中对应位置添加 TRTCCloudVideoView :
    import 'package:tencent_rtc_sdk/trtc_cloud_video_view.dart';
    TRTCCloudVideoView(
    key: valueKey,
    onViewCreated: (viewId) {
    localViewId = viewId;
    // TODO
    },
    ),
    说明:
    viewId 为视频渲染控件 TRTCCloudVideoView 的唯一标识符。您可以以您想要的方式存储该标识符。此处使用 localViewId 来存储,用以后续渲染本地采集的视频流。
    2. 在调用接口 startLocalPreview 打开摄像头预览之前,您可以通过通过调用接口 setLocalRenderParams 来设置本地预览的渲染参数。
    // 设置本地预览渲染参数
    trtcCloud.setLocalRenderParams(
    TRTCRenderParams(
    fillMode: TRTCVideoFillMode.fill,
    mirrorType: TRTCVideoMirrorType.auto,
    rotation: TRTCVideoRotation.rotation0,
    ),
    );
    
    // 对前置摄像头采集内容进行本地预览
    trtcCloud.startLocalPreview(true, localViewId);
    
    // 对后置摄像头采集内容进行本地预览
    trtcCloud.startLocalPreview(false, localViewId);
    调用stopLocalPreview关闭摄像头预览并停止推送本地视频信息。
    trtcCloud.stopLocalPreview();
    3. 您可以通过调用接口 TXDeviceManager 来完成“切换前后摄像头”“设置对焦模式”、“闪光灯”等设备扩展功能的使用。
    import 'package:tencent_rtc_sdk/tx_device_manager.dart';
    // 获取设备管理器实例
    TXDeviceManager manager = trtcCloud.getDeviceManager();
    
    // 判断是否为前置摄像头
    if (manager.isFrontCamera()) {
    // 切换为后置摄像头
    manager.switchCamera(false);
    } else {
    // 切换为前置摄像头
    manager.switchCamera(true);
    }
    // 获取设备管理器实例
    TXDeviceManager manager = trtcCloud.getDeviceManager();
    
    // 设备是否支持自动识别人脸位置
    if (manager.isAutoFocusEnabled()) {
    // 开启自动对焦功能
    manager.enableCameraAutoFocus(true);
    } else {
    // 关闭自动对焦功能
    manager.enableCameraAutoFocus(false);
    }
    // 获取设备管理器实例
    TXDeviceManager manager = trtcCloud.getDeviceManager();
    
    // 切换后置摄像头时可开启闪光灯
    manager.enableCameraTorch(true);
    
    // 关闭闪光灯
    manager.enableCameraTorch(false);

    步骤6. 打开麦克风

    您可以调用 startLocalAudio 来开启麦克风采集,该接口需要您通过 quality 参数确定采集模式,建议根据您的需求选择以下其中一个适合您项目的模式
    // 开启麦克风采集,设置当前场景为:语音模式
    // 具有高的噪声抑制能力,有强有弱的网络阻力
    trtcCloud.startLocalAudio(TRTCAudioQuality.speech);
    // 开启麦克风采集,设置当前场景为:音乐模式
    // 为获得高保真度,低音质损失,建议配合专业声卡使用
    trtcCloud.startLocalAudio(TRTCAudioQuality.music);
    调用stopLocalAudio关闭麦克风采集并停止推送本地音频信息。
    trtcCloud.stopLocalAudio();

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

    1. 在进入房间之前对 onUserVideoAvailable 进行监听,当您收到onUserVideoAvailable(userId, true)通知时,表示该路画面已经有可播放的视频帧到达。
    说明:
    此处假设可播放视频的用户为 denny,预计要将用户 denny 的视频流渲染到唯一标识符为 remoteViewIdTRTCCloudVideoView 控件中。
    2. 您可以通过调用接口 startRemoteView 来播放远端用户的视频画面。
    // 播放远端用户 denny 的主流视频画面
    trtcCloud.startRemoteView("denny", TRTCVideoStreamType.big, remoteViewId);
    之后,您通过调用接口 stopRemoteView 停止某个远端用户的视频,也可以通过接口 stopAllRemoteView 停止播放所有远端用户的视频。
    // 停止播放远端用户 denny 的主流视频画面
    trtcCloud.stopRemoteView("denny", TRTCVideoStreamType.big);
    // 停止播放所有远端用户的视频画面
    trtcCloud.stopAllRemoteView();

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

    默认情况下,SDK 将自动播放远程音频,因此您不需要调用任何 API 来手动播放它。
    但当您不喜欢自动播放音频时,可以调用 muteRemoteAudio/muteAllRemoteAudio选择播放或停止远端声音。
    // 仅静音远端用户 denny
    trtcCloud.muteRemoteAudio("denny", true);
    
    // 静音所有远端用户
    trtcCloud.muteAllRemoteAudio(true);
    // 取消静音远端用户 denny
    trtcCloud.muteRemoteAudio("denny", true);
    
    // 取消静音所有远端用户
    trtcCloud.muteAllRemoteAudio(true);

    步骤9. 退出房间

    调用 exitRoom 退出当前的房间:
    trtcCloud.exitRoom();
    TRTC SDK 会在退房结束后通过 onExitRoom 回调事件通知您。
    TRTCCloudListener listener = TRTCCloudListener(
    onExitRoom: (reason) {
    // TODO
    }
    );
    
    trtcCloud.registerListener(listener);

    常见问题

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

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

    技术支持

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

    7x24 电话支持