GitHub - rongcloud/rongcloud-rtc-flutter-sdk
source link: https://github.com/rongcloud/rongcloud-RTC-flutter-sdk?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
融云 RTC Flutter Plugin
本文档主要讲解了如何使用融云 RTC Flutter Plugin,基于 融云 iOS/Android 平台的 RTCLib SDK
源码地址 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: ^4.0.4+2
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" />
从 1.1.0 开始为方便排查 Android 问题将 RTC Flutter SDK Android 的包名改为 io.rong.flutter.rtclib
项目依赖关系
如图 RTC 依赖于 IM 发送信令
音视频模式处理流程
1.用户加入房间,渲染并发布流的处理过程
2.渲染已经在房间的远端用户的处理过程
3.渲染后续进入房间的远端用户的处理过程
音视频模式接口说明
1.用户加入房间,渲染并发布流
1.1.初始化 IM SDK
RongIMClient.init(RongAppKey);
1.2.连接 IM
RongIMClient.connect(IMToken, (code, userId) { });
1.3.初始化RTC SDK
RCRTCEngine.getInstance().init(null);
1.4.加入 RTC 房间
RCRTCCodeResult result = await RCRTCEngine.getInstance().joinRoom(roomId, roomConfig);
1.5.开始采集视频
RCRTCCameraOutputStream stream = await RCRTCEngine.getInstance().getDefaultVideoStream(); stream.startCamera();
1.6.渲染当前用户视频流到 view 上
RCRTCCameraOutputStream stream = await RCRTCEngine.getInstance().getDefaultVideoStream(); RCRTCTextureView view = RCRTCTextureView( (view, id) { stream.setTextureView(id); }, mirror: true, );
1.7.发布当前用户音视频流
int code = await RCRTCEngine.getInstance().getRoom().localUser.publishDefaultStreams();
2.渲染已经在房间的远端用户
2.1.获取已经在房间里的远端用户列表
List<RCRTCRemoteUser> remoteUserList = RCRTCEngine.getInstance().getRoom().remoteUserList;
2.2.订阅远端用户的音视频流
循环订阅房间里远端用户的音视频流
for (RCRTCRemoteUser user in remoteUserList) { RCRTCEngine.getInstance().getRoom().localUser.subscribeStreams(user.streamList); }
2.3.渲染远端用户的视频流到 view 上
for (RCRTCRemoteUser user in remoteUserList) { user.streamList.whereType<RCRTCVideoInputStream>().forEach((stream) { RCRTCTextureView view = RCRTCTextureView( (view, id) { stream.setTextureView(id); }, mirror: false, ); }); }
3.渲染后续进入房间的远端用户
3.1.监听远端用户加入的回调
当用户加入的时候,不要做订阅渲染的处理
,因为此时该用户可能刚加入房间成功,但是尚未发布音视频流
RCRTCEngine.getInstance().getRoom().onRemoteUserJoined = (user) { }
3.2.监听远端用户发布流的回调
RCRTCEngine.getInstance().getRoom().onRemoteUserPublishResource = (user, streams) { };
3.3.远端用户发布流成功,则通过 streams 订阅该用户的音视频流
RCRTCEngine.getInstance().getRoom().localUser.subscribeStreams(streams);
3.4.渲染该用户的视频流到 view 上
streams.whereType<RCRTCVideoInputStream>().forEach((stream) { RCRTCTextureView view = RCRTCTextureView( (view, id) { stream.setTextureView(id); }, mirror: false, ); });
纯音频模式处理流程
如果只使用纯音频模式,请参考此文档
配置视频流
RCRTCCameraOutputStream stream = await RCRTCEngine.getInstance().getDefaultVideoStream(); stream.setVideoConfig(config);
int code = await RCRTCEngine.getInstance().leaveRoom();
取消发布当前用户音视频流
RCRTCEngine.getInstance().getRoom().localUser.unPublishDefaultStreams();
取消订阅远端用户的音视频流
int code = await RCRTCEngine.getInstance().getRoom().localUser.unsubscribeStreams(streams);
当前用户静音
RCRTCMicOutputStream stream = await RCRTCEngine.getInstance().getDefaultAudioStream(); stream.mute(mute);
切换本地摄像头
RCRTCCameraOutputStream stream = await RCRTCEngine.getInstance().getDefaultVideoStream(); bool isFront = await stream.switchCamera();
更多接口请参考源码
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK