rongcloud_rtc_plugin 0.9.8

  • Readme
  • Changelog
  • Example
  • Installing
  • 61

融云 RTC Flutter Plugin #

本文档主要讲解了如何使用融云 RTC Flutter Plugin,基于 融云 iOS/Android 平台的 RTCLib SDK

Flutter 官网

融云 iOS RTC 文档

融云 Android RTC 文档

源码地址 Github,任何问题可以通过 Github Issues 提问

前期准备 #

1 申请开发者账号 #

融云官网申请开发者账号

通过管理后台的 "基本信息"->"App Key" 获取 AppKey

通过管理后台的 "IM 服务"—>"API 调用"->"用户服务"->"获取 Token",通过用户 id 获取 IMToken

2 开通音视频服务 #

管理后台的 "音视频服务"->"服务设置" 开通音视频 RTC 3.0 ,开通两个小时后生效

依赖 RTC Flutter Plugin #

在项目的 pubspec.yaml 中写如下依赖

dependencies:
  flutter:
    sdk: flutter

  rongcloud_rtc_plugin: ^0.9.8

iOS 需要在 Info.plist 中需要加入对相机和麦克风的权限申请

<key>NSCameraUsageDescription</key>
<string>使用相机</string>
<key>NSMicrophoneUsageDescription</key>
<string>使用麦克风</string>

还需要添加字段 io.flutter.embedded_views_preview 值为 YES

Android 需要在 AndroidManifest.xml 文件中声明对相机和麦克风的权限

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.INTERNET" />

项目依赖关系 #

如图 RTC 依赖于 IM 发送信令

音视频模式处理流程 #

1.用户加入房间,渲染并发布流的处理过程 #

2.渲染已经在房间的远端用户的处理过程 #

3.渲染后续进入房间的远端用户的处理过程 #

音视频模式接口说明 #

1.用户加入房间,渲染并发布流 #

1.1.初始化 IM SDK #

RongcloudImPlugin.init(RongAppKey);

1.2.连接 IM #

int rc = await RongcloudImPlugin.connect(IMToken);
print("连接 im " + rc.toString());

1.3.加入 RTC 房间 #

RongRTCEngine.joinRTCRoom(this.roomId,(int code) {
      
});

1.4.开始采集音视频 #

RongRTCEngine.startCapture();

1.5.获取 native 待渲染视频的 view #

Widget view = RongRTCEngine.createPlatformView(userId, 200, 300, (int viewId) {
      
});

1.6.渲染当前用户音视频流到 view 上 #

RongRTCEngine.renderLocalVideo(viewId);

1.7.发布当前用户音视频流 #

RongRTCEngine.publishAVStream((int code) {

});

2.渲染已经在房间的远端用户 #

2.1.获取已经在房间里的远端用户列表 #

List userIds = await RongRTCEngine.getRemoteUsers(this.roomId);

2.2.订阅远端用户的音视频流 #

如果有多人存在,需要循环订阅

RongRTCEngine.subscribeAVStream(userId,(int code) {
      
});

2.3.获取 native 待渲染视频的 view #

Widget view = RongRTCEngine.createPlatformView(userId, 200, 300, (int viewId) {
      
});

2.4.渲染远端用户的音视频流到 view 上 #

RongRTCEngine.renderRemoteVideo(userId, viewId,RongRTCVodioFillMode.Fill);

3.渲染后续进入房间的远端用户 #

3.1.监听远端用户加入的回调 #

当用户加入的时候,不要做订阅渲染的处理,因为此时该用户可能刚加入房间成功,但是尚未发布音视频流

RongRTCEngine.onUserJoined = (String userId) {
    
};

3.2.监听远端用户发布流的回调 #

RongRTCEngine.onUserStreamPublished = (String userId) {
  
};

3.3.远端用户发布流成功,则通过 userId 订阅该用户的音视频流 #

RongRTCEngine.subscribeAVStream(userId,(int code) {
      
});

3.4.获取 native 待渲染视频的 view #

Widget view = RongRTCEngine.createPlatformView(userId, 200, 300, (int viewId) {
      
});

3.5.渲染该用户的音视频流到 view 上 #

RongRTCEngine.renderRemoteVideo(userId, viewId,RongRTCVodioFillMode.Fill);

纯音频模式处理流程 #

如果只使用纯音频模式,请参考此文档

其他接口 #

配置接口 #

配置分辨率,默认为 640x480

RongRTCEngine.config(RongRTCConfig.defaultConfig());

离开房间 #

RongRTCEngine.leaveRTCRoom(this.roomId,null);

取消发布当前用户音视频流 #

RongRTCEngine.unpublishAVStream((int code) {

});

取消订阅远端用户的音视频流 #

RongRTCEngine.unsubscribeAVStream(userId,(int code) {

});

当前用户静音 #

RongRTCEngine.muteLocalAudio(this.muted);

切换本地摄像头 #

RongRTCEngine.switchCamera();

移除渲染视频的 view #

RongRTCEngine.removePlatformView(viewId);

更多接口请参考源码

常见问题 #

iOS 无法加载视频页面并报错:[VERBOSE-2:platform_view_layer.cc(28)] Trying to embed a platform view but the PaintContext does not support embedding

打开 iOS 工程,在Info.plist中添加字段io.flutter.embedded_views_preview,其值为YES

0.9.8 #

  • 与依赖的 rongcloud_im_plugin 版本保持一致

0.9.7 #

  • 与依赖的 rongcloud_im_plugin 版本保持一致

0.9.6+1 #

0.9.6 #

  • 与依赖的 rongcloud_im_plugin 版本保持一致

0.9.5 #

  • 与依赖的 rongcloud_im_plugin 版本保持一致
  • 更新文档

0.9.4 #

  • 与依赖的 rongcloud_im_plugin 版本保持一致

0.9.3 #

  • 与依赖的 rongcloud_im_plugin 版本保持一致

0.9.2 #

  • 与依赖的 rongcloud_im_plugin 版本保持一致
  • 实现的接口和回调如下

接口

初始化(im_plugin 接口)
连接(im_plugin 接口)
断开连接(im_plugin 接口)

加入 RTC 房间
退出 RTC 房间

设置录制参数
开启关闭采集

发布默认音视频流
取消发布默认音视频流

订阅音视频流
取消订阅音视频流

获取远端用户 id 列表

渲染本地视频 view
渲染远端视频 view

本地用户静音
本地用户切换摄像头
切换听筒、外放
移除视频 view

回调

本地加入房间结果回调
远端用户加入房间结果回调
远端用户离开房间回调
远端用户取消发布流
远端用户打开或关闭视频流
远端用户发布语音或者静音
远端用户第一帧到达
远端用户发布流成功回调

example/README.md

融云 RTC Flutter Plugin 项目的 APP 层代码 #

该目录是基于 rongcloud_rtc_plugin 开发 iOS/Android 的项目源码

如何运行该项目?

终端进入项目路径执行下面命令获取相关的依赖

$ flutter packages get

iOS 项目 #

使用 iOS 设备连接电脑,最好用真机,记得修改项目的 Bundle Identifier 为自己的,方便真机运行

使用 Flutter 命令运行 iOS 项目 #

进入 example/ 目录执行 flutter run 命令,第一次可能会花费较长的时间(因为 Flutter 会自动从 pod 仓库下载融云 IMLib 和 RTCLib 的 iOS SDK,如果时间较长不想等待,可以自行进入 example/ios/ 目录,执行 pod update 命令,手动下载 iOS SDK)

当启动了之后就可以正常使用了

使用 Xcode 运行 iOS 项目 #

按照上一步骤执行完 flutter run 命令之后, example/ios/ 目录会生成 Runner.xcworkspace 文件,Xcode 直接打开即可

Android 项目 #

使用 Android 设备连接电脑,最好用真机

使用 Flutter 命令运行 Android 项目 #

进入 example/ 目录执行 flutter run 命令,第一次可能会花费较长的时间(因为 Flutter 会自动从 Maven 仓库下载融云 IMLib 和 RTCLib 的 Android SDK)

当命令执行完之后就可以正常使用了

使用 Android Studio 运行 Android 项目 #

使用 Android Studio 打开 example/android/ 目录即可

常见问题

1.执行 flutter run 命令报错

必须确保在 example 目录执行 flutter run 命令

2.执行 flutter run 弹出下面的内容

➜  example git:(dev) ✗ flutter run
More than one device connected; please specify a device with the '-d <deviceId>' flag, or use '-d all' to act on all devices.

SM G6200      • 9789da1aa5                               • android-arm64 • Android 8.1.0 (API 27)
“Sin”的 iPhone • 40106a0c0583066c9f22bdaae546d55e25449c85 • ios           • iOS 12.1.4

这是因为 flutter run 只有一个连接设备的时候使用,如果有多个设备就会有这样的问题,此时需要加 -d 参数来指定设备,上面内容的第二列就是设备 id,可以按照下面命令执行

$ flutter run -d 9789da1aa5

3.iOS 执行报错 #

[VERBOSE-2:platform_view_layer.cc(28)] Trying to embed a platform view but the PaintContext does not support embedding

打开 iOS 工程,在Info.plist中添加字段io.flutter.embedded_views_preview,其值为YES

4.Android 无法 IM ,报错 dlopen failed: library "libsqlite.so" not found

参照 https://support.rongcloud.cn/ks/NTQw

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  rongcloud_rtc_plugin: ^0.9.8

2. Install it

You can install packages from the command line:

with Flutter:


$ flutter pub get

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:rongcloud_rtc_plugin/rongcloud_rtc_plugin.dart';
  
Popularity:
Describes how popular the package is relative to other packages. [more]
31
Health:
Code health derived from static analysis. [more]
99
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
80
Overall:
Weighted score of the above. [more]
61
Learn more about scoring.

We analyzed this package on Oct 22, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.5.1
  • pana: 0.12.21
  • Flutter: 1.9.1+hotfix.4

Platforms

Detected platforms: Flutter

References Flutter, and has no conflicting libraries.

Health suggestions

Fix lib/src/rong_rtc_engine.dart. (-0.50 points)

Analysis of lib/src/rong_rtc_engine.dart reported 1 hint:

line 222 col 35: This function has a return type of 'Future', but doesn't end with a return statement.

Fix lib/src/rong_rtc_error_code.dart. (-0.50 points)

Analysis of lib/src/rong_rtc_error_code.dart reported 1 hint:

line 1 col 1: Prefer using /// for doc comments.

Format lib/src/rong_method_key.dart.

Run flutter format to format lib/src/rong_method_key.dart.

Format lib/src/rong_rtc_config.dart.

Run flutter format to format lib/src/rong_rtc_config.dart.

Maintenance suggestions

The package description is too short. (-20 points)

Add more detail to the description field of pubspec.yaml. Use 60 to 180 characters to describe the package, what it does, and its target use case.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.1.0 <3.0.0
flutter 0.0.0
rongcloud_im_plugin ^0.9.8 0.9.8
Transitive dependencies
collection 1.14.11 1.14.12
meta 1.1.7
sky_engine 0.0.99
typed_data 1.1.6
vector_math 2.0.8
Dev dependencies
flutter_test