快速入门音频通话

最近更新时间:2022-09-20 05:17:40

本文主要介绍如何将 RTC Flutter SDK 音频通话集成到你的项目中以及相关注意事项。

开发环境要求

如果你的目标平台为 Android,你的开发环境需要满足以下要求:

  • Flutter 1.0.0 或更高版本
  • macOS操作系统或 Windows 操作系统
  • Android Studio 3.0 或以上版本。
  • 一个有效的 开发者账号

如果你的目标平台为 iOS,你的开发环境需要满足以下要求:

  • Flutter 1.0.0 或更高版本
  • macOS 操作系统
  • Xcode 9.0 或以上版本
  • 一个有效的 开发者账号

运行环境要求

  • 如果你的目标平台为 Android,你需要有一台 Android 真机。
  • 如果你的目标平台为 iOS,你需要有一台 iOS 的真机。

获取 AppID

参考以下步骤获取一个 AppID。若已经拥有 AppID,请跳过当前步骤,直接查看快速集成。

  • 1. 创建项目

    首先我们需要在开发者控制台创建一个「项目」。

  • 2. 获取 APP ID

    获取项目的「APP ID」

快速集成 SDK

pubspec.yaml 文件中添加以下依赖项:

  1. 添加 ar_rtc_engine 依赖项,集成 Flutter SDK。
  2. 添加 permission_handler 依赖项,安装权限处理插件。
dependencies:
  flutter:
    sdk: flutter
    ar_rtc_engine: ^4.2.0

操作流程

本节内容主要介绍如何实现音频直播,提供相关示例代码。

初始化客户端

将获取到的 App ID 添加到 <APP_ID> 一栏。调用 create 方法,传入获取到的 App ID,即可完成初始化 。使用相同 App ID 的应用才能互相通信。

var engine = await RtcEngine.create('YOUR APP ID');

设置相关权限

 await [ Permission.microphone, Permission.storage]
        .request();

加入频道

完成初始化后,你就可以调用 joinChannel 方法加入频道。你需要在该方法中传入如下参数:

  • token:传入能标识用户角色和权限的 Token。可设为如下一个值:
    • 临时 Token。临时 Token 服务有效期为 15小时、24 小时、3天、15天不等。你可以在控制台里生成一个临时 Token。
    • 在你的服务器端生成的 Token。在安全要求高的场景下,我们推荐你使用此种方式生成的 Token,详见生成 Token
    • 若项目已启用 权限密钥,请使用 Token。
    • 请勿将 token 设为 ""。
joinChannelSuccess: (String channel, String uid, int elapsed) {
          print('joinChannelSuccess ${channel} ${uid}');
          setState(() {
            _joined = true;
          });
        }, userJoined: (String uid, int elapsed) {
      print('userJoined ${uid}');
      setState(() {
        _remoteUid = uid;
      });
    await engine.enableVideo();
    await engine.joinChannel(null, '909090', "");//userId = ""时 sdk会自动生成一个

音频直播

在加入频道后,对频道内的远端用户进行监听。

remoteAudioStateChanged: (String uid,
        AudioRemoteState state, AudioRemoteStateReason reason, int elapsed){
      print('remoteAudioStateChanged ${uid} -${state} - ${reason} -${elapsed}');
    },
localAudioStateChanged: (AudioLocalState state, AudioLocalError error){
      print('localAudioStateChanged ${state} - ${error} ');
    },
remoteAudioStats: (RemoteAudioStats stats){
      print('RemoteAudioStats ${stats.audioLossRate}');
    },
rtcStats:(RtcStats stats) {
      print('RtcStats ${stats.totalDuration} == ${stats.rxBytes}');
    },networkTypeChanged: (NetworkType type){
      print('NetworkType ${NetworkType.WIFI} ');
    }

离开频道

根据场景需要,如结束通话、关闭 App 或 App 切换至后台时,调用 leaveChannel 离开当前通话频道。

   override fun onLeaveChannel(rtcChannel: RtcChannel?, stats: IRtcEngineEventHandler.RtcStats?) {
        callback(RtcChannelEvents.LeaveChannel, rtcChannel, stats?.toMap())
    }

开发注意事项

  • 在收发音频流,或者频道操作前,需要确保已经成功加入频道。
  • 回调多次监听会回调多次。