融云 RTC Wrapper Plugin
本文档主要讲解了如何使用融云 RTC Wrapper Plugin,基于 融云 iOS/Android 平台的 RTCLib SDK
前期准备
1 申请开发者账号
融云官网申请开发者账号
通过管理后台的 "基本信息"->"App Key" 获取 AppKey
通过管理后台的 "IM 服务"—>"API 调用"->"用户服务"->"获取 Token",通过用户 id 获取 IMToken
2 开通音视频服务
管理后台的 "音视频服务"->"服务设置" 开通音视频 RTC 3.0 ,开通两个小时后生效
依赖 RTC Wrapper Plugin
在项目的 pubspec.yaml
中写如下依赖
dependencies:
flutter:
sdk: flutter
rongcloud_rtc_wrapper_plugin: 5.12.0
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" />
前置接口说明
初始化 IM SDK
RongIMClient.init(RongAppKey);
连接 IM
RongIMClient.connect(IMToken, (code, userId) {
});
创建 RTC 引擎
engine = await RCRTCEngine.create();
音视频模式接口说明
用户加入房间,渲染并发布资源
加入 RTC 房间
// 设置加入 RTC 房间事件监听
engine.onRoomJoined = (int code, String? message) {
};
// 加入 RTC 房间
RCRTCRoomSetup setup = RCRTCRoomSetup.create(
type: RCRTCMediaType.audio_video,
role: RCRTCRole.meeting_member,
);
engine.joinRoom(id, setup);
采集音频
引擎默认开启音频采集
engine.enableMicrophone(true);
采集视频
engine.enableCamera(true);
渲染视频
RCRTCView view = await RCRTCView.create();
engine.setLocalView(view);
发布资源
engine.publish(RCRTCMediaType.audio_video);
渲染远端用户
监听远端用户加入的回调
当用户加入的时候,不要做订阅渲染的处理
,因为此时该用户可能刚加入房间成功,但是尚未发布资源
engine.onUserJoined = (roomId, userId) {
};
监听远端用户发布资源的回调
engine.onRemotePublished = (roomId, userId, type) {
};
远端用户发布资源后,订阅远端用户资源
engine.subscribe(userId, type);
渲染远端用户资源
RCRTCView view = await RCRTCView.create();
engine.setRemoteView(userId, view);
直播模式接口说明
主播加入房间,渲染并发布资源
加入 RTC 房间
// 设置加入 RTC 房间事件监听
engine.onRoomJoined = (int code, String? message) {
};
// 加入 RTC 房间
RCRTCRoomSetup setup = RCRTCRoomSetup.create(
type: RCRTCMediaType.audio_video,
role: RCRTCRole.live_broadcaster,
);
engine.joinRoom(id, setup);
采集音频
引擎默认开启音频采集
engine.enableMicrophone(true);
采集视频
engine.enableCamera(true);
渲染视频
RCRTCView view = await RCRTCView.create();
engine.setLocalView(view);
发布资源
engine.publish(RCRTCMediaType.audio_video);
渲染远端主播
监听远端主播加入的回调
当主播加入的时候,不要做订阅渲染的处理
,因为此时该主播可能刚加入房间成功,但是尚未发布资源
engine.onUserJoined = (roomId, userId) {
};
监听远端主播发布资源的回调
engine.onRemotePublished = (roomId, userId, type) {
};
远端主播发布资源后,订阅远端主播资源
engine.subscribe(userId, type);
渲染远端主播资源
RCRTCView view = await RCRTCView.create();
engine.setRemoteView(userId, view);
观众加入房间,订阅并渲染MCU资源
加入 RTC 房间
// 设置加入 RTC 房间事件监听
engine.onRoomJoined = (int code, String? message) {
};
// 加入 RTC 房间
RCRTCRoomSetup setup = RCRTCRoomSetup.create(
type: RCRTCMediaType.audio_video,
role: RCRTCRole.live_audience,
);
engine.joinRoom(id, setup);
监听MCU资源发布回调
engine.onRemoteLiveMixPublished = (type) {
};
MCU资源发布后,订阅MCU资源
engine.subscribeLiveMix(type);
渲染MCU资源
RCRTCView view = await RCRTCView.create();
engine.setLiveMixView(view);
观众加入房间,订阅并渲染主播资源
加入 RTC 房间
// 设置加入 RTC 房间事件监听
engine.onRoomJoined = (int code, String? message) {
};
// 加入 RTC 房间
RCRTCRoomSetup setup = RCRTCRoomSetup.create(
type: RCRTCMediaType.audio_video,
role: RCRTCRole.live_audience,
);
engine.joinRoom(id, setup);
监听远端主播加入的回调
当主播加入的时候,不要做订阅渲染的处理
,因为此时该主播可能刚加入房间成功,但是尚未发布资源
engine.onUserJoined = (roomId, userId) {
};
监听远端主播发布资源的回调
engine.onRemotePublished = (roomId, userId, type) {
};
远端主播发布资源后,订阅远端主播资源
engine.subscribe(userId, type);
渲染远端主播资源
RCRTCView view = await RCRTCView.create();
engine.setRemoteView(userId, view);
其他接口
离开房间
engine.leaveRoom();
销毁引擎
engine.destroy();
Libraries
- rongcloud_rtc_wrapper_plugin
- wrapper/rongcloud_rtc_configs
- @author Pan ming da @time 2021/6/8 15:55 @version 1.0
- wrapper/rongcloud_rtc_constants
- wrapper/rongcloud_rtc_custom_layout
- wrapper/rongcloud_rtc_engine
- @author Pan ming da @time 2021/6/8 15:51 @version 1.0
- wrapper/rongcloud_rtc_listeners
- @author Pan ming da @time 2021/6/8 15:56 @version 1.0
- wrapper/rongcloud_rtc_rect
- wrapper/rongcloud_rtc_setups
- @author Pan ming da @time 2021/6/8 15:56 @version 1.0
- wrapper/rongcloud_rtc_stats
- @author Pan ming da @time 2021/6/8 15:56 @version 1.0