本文主要介绍如何将 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,请跳过当前步骤,直接查看快速集成。
快速集成 SDK
在 pubspec.yaml
文件中添加以下依赖项:
- 添加
ar_rtc_engine
依赖项,集成 Flutter SDK。 - 添加
permission_handler
依赖项,安装权限处理插件。
dependencies:
flutter:
sdk: flutter
ar_rtc_engine: ^4.2.4
操作流程
本节内容主要介绍如何实现视频直播,提供相关示例代码。
初始化客户端
将获取到的 App ID 添加到 example/lib/src/utils/settings.dart 即可 。使用相同 App ID 的应用才能互相通信。
设置相关权限
await [Permission.camera, 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会自动生成一个
音频直播
在加入频道后,对频道内的远端用户进行监听。
remoteVideoStateChanged: (String uid,
VideoRemoteState state, VideoRemoteStateReason reason, int elapsed){
print('remoteVideoStateChanged ${uid} -${state} - ${reason} -${elapsed}');
},
localVideoStateChanged: (LocalVideoStreamState localVideoState, LocalVideoStreamError error){
print('localVideoStateChanged ${localVideoState} - ${error} ');
},
remoteVideoStats: (RemoteVideoStats stats){
print('RemoteVideoStats ${stats.decoderOutputFrameRate} == ${stats.rendererOutputFrameRate}');
},
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())
}
开发注意事项
- 在收发音频流,或者频道操作前,需要确保已经成功加入频道。
- 回调多次监听会回调多次。