3.X 升级到 5.X (直播场景)
本文描述 RTCLib SDK 直播场景的升级步骤。
升级概述
- RTCLib SDK 5.X 对比 3.X,适配了 iPhone 新机型与新系统,功能更丰富,更稳定,并在之前版本上修复了大量问题,建议尽早升级至新版 RTCLib SDK。
- 3.X 版本的的观众没有加房间的功能,只能通过
subscribeLiveAVStream:liveType:handler:
这个接口订阅 liveUrl 合流;5.X 版本的观众会先加入房间,拿到房间内的合流来订阅。
前置条件
- 5.X RTCLib SDK 依赖 RongIMLibCore 请您确保已将 RongIMLibCore 升级至 5.X。
- RongIMLib SDK 5.X 做了拆分,请遵照 IMLib 的升级文档先将使用对应功能的 SDK 进行升级集成。
- 已遵照 IMLib 升级要求将您的 Cocoapod 版本升级到 1.10.0 以上。
手动集成
-
将原先 RTCLib SDK 依赖的系统库全部去掉,如果 App 或者其他 SDK 有依赖的系统库除外
- AssetsLibrary
- MapKit
- ImageIO
- Security
- SystemConfiguration
- QuartzCore
- AVFoundation
- GLKit
- OpenGLES
- CoreGraphics
- CoreLocation
- CoreTelephony
- CoreFoundation
- CoreMedia
- CoreAudio
- CoreVideo
- CFNetwork
- AudioToolbox
- VideoToolBox
- AVFoundation
- libc++.tbd
- libz.tbd
- libbz2.tbd
- libiconv.tbd
- libsqlite3.tbd
-
将 3.X 的 RongRTCLib.framework、RongIMLib.framework、libopencore-amrnb.a (该库包含在 RongIMLib 软件包中) 删除并替换为 5.X 的 RongRTCLib.xcframework、RongIMLibCore.xcframework
-
General -> Frameworks,Libraries,and Embedded Binaries 中将 RongXX.framework 的 Embed 设置为 Embed & Sign
pod 集成
-
在 podfile 中添加如下内容:
# pod 'RongRTCLib','~> 3.2.2' # 注释 3.X 的内容
pod 'RongCloudRTC/RongRTCLib', '~> x.y.z' -
请在终端中运行以下命令:
pod install
如果出现找不到相关版本的问题,可先执行 pod repo update ,再执行 pod install 。
接口替换说明
对象命名的改变
RTCLib SDK 从 3.X 升级到 5.X 将对象的命名规则由 RongXXX
变更为 RCXXX
,您可以全局针对 RTCLib 的对象进行统一的替换。
例如加入房间的方法名称没有变动,方法返回的实例对象名称由 RongRTCRoom
变更为 RCRTCRoom
:
- (void)joinRoom:(NSString *)roomId
config:(RCRTCRoomConfig *)config
completion:(nullable void (^)(RCRTCRoom *_Nullable room, RCRTCCode code))completion;
初始化接口
将原有 AppKey 初始化方法进行替换
#import <RongIMLibCore/RongIMLibCore.h>
[[RCCoreClient sharedCoreClient] initWithAppKey:@"从控制台申请的 AppKey"];
连接接口
将原有连接 IM 方法替换为
// 连接 IM 服务
[[RCCoreClient sharedCoreClient] connectWithToken:@"从您服务器端获取的 Token"
dbOpened:^(RCDBErrorCode code) {}
success:^(NSString *userId) {}
error:^(RCConnectErrorCode status) {}];
音视频引擎初始化
将原有 sharedEngine
方法替换为
RCRTCEngine *engine = [RCRTCEngine sharedInstance];
状态监听接口
将原有的 RongRTCActivityMonitorDelegate
状态监视器代理替换为
@property (nonatomic, weak, nullable) id<RCRTCStatusReportDelegate> statusReportDelegate;
房间事件代理回调接口
将原有的 RongRTCRoomDelegate
房间事件代理替换为
/*!
房间事件代理
*/
@property (nonatomic, weak, nullable) id<RCRTCRoomEventDelegate> delegate;
代理中对应的方法变动对照 RCRTCRoomEventDelegate
中的说明替换即可
获取当前房间
将原有的当前加入房间 currentRoom
属性替换为
@property (nonatomic, strong, readonly, nullable) RCRTCRoom *room;
断线重连设置
断线重连功能默认开启,如果 3.X 有使用 setReconnectEnable:
设置为 NO ;升级后需要在引擎初始化时传入以下配置进行关闭:
RCRTCConfig *config = [[RCRTCConfig alloc] init];
config.isEnableAutoReconnect = NO;
[[RCRTCEngine sharedInstance] initWithConfig:config];
离开房间接口
将原有的 leaveRoom:completion:
方法替换为
- (void)leaveRoom:(nullable RCRTCOperationCallback)completion;
房间配置接口
原有的 RongRTCRoomConfig
的配置类变更为 RCRTCRoomConfig
,并且新增了参数 RCRTCLiveRoleType
用来标识加入房间的用户身份是主播还是观众
RCRTCRoomConfig *config = [[RCRTCRoomConfig alloc] init];
config.roomType = RCRTCRoomTypeLive; //房间类型为直播
config.liveType = RCRTCLiveTypeAudioVideo; //直播类型为音视频直播
config.roleType = RCRTCLiveRoleTypeBroadcaster; //以主播身份加入房间
主播发布与取消发布资源接口
加入房间成功后 3.X 是通过加入房间返回的 RongRTCRoom
对象管理本地默认音视频流;5.X 变动为通过加入房间返回的 RCRTCRoom
中的 RCRTCLocalUser
对象管理本地默认音视频流
// 发布本地默认音视频资源
[[RCRTCEngine sharedInstance].room.localUser publishDefaultLiveStreams:^(BOOL isSuccess, RCRTCCode desc, RCRTCLiveInfo * _Nullable liveInfo) {
// 可以通过拿到的liveInfo对象进行推流相关配置
}];
// 取消发布本地默认音视频资源
[[RCRTCEngine sharedInstance].room.localUser unpublishDefaultLiveStreams:^(BOOL isSuccess, RCRTCCode code) {
}];
主播订阅与取消订阅资源接口
加入房间成功后 3.X 是通过加入房间返回的 RongRTCRoom
对象管理对端的音视频流;5.X 变动为通过加入房间返回的 RCRTCRoom
中的 RCRTCLocalUser
对象管理对端音视频流
// 订阅对端音视频资源
[[RCRTCEngine sharedInstance].room.localUser subscribeStream:avStreams
tinyStreams:nil
completion:^(BOOL isSuccess, RCRTCCode desc) {
}];
// 取消订阅对端音视频资源
[[RCRTCEngine sharedInstance].room.localUser unsubscribeStream:streams
completion:^(BOOL isSuccess, RCRTCCode desc) {
}];
创建渲染视图
3.X 的创建渲染视图分为本地渲染视图 RongRTCLocalVideoView
与远端渲染视图 RongRTCRemoteVideoView
,5.X 统一将创建渲染视图调整为 RCRTCVideoView
// 初始化本地渲染视图
RCRTCVideoView *view = [[RCRTCVideoView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
渲染视频流
将 3.X 的渲染视图接口 setVideoRender:
接口替换为
// 渲染本地视图
[[RCRTCEngine sharedInstance].defaultVideoStream setVideoView:@"创建的 RCRTCVideoView 视图"];
// 渲染远端视图
[(RCRTCVideoInputStream *)stream setVideoView:@"创建的 RCRTCVideoView 视图"];
摄像头管理
将原有的摄像头相关接口调用替换为
// 打开摄像头
[[RCRTCEngine sharedInstance].defaultVideoStream startCapture];
// 关闭摄像头
[[RCRTCEngine sharedInstance].defaultVideoStream stopCapture];
// 切换摄像头
[[RCRTCEngine sharedInstance].defaultVideoStream switchCamera];
麦克风管理
将原有的开关麦克风接口调用替 换为
// 设置禁用麦克风采集
[[RCRTCEngine sharedInstance].defaultAudioStream setMicrophoneDisable:YES];