提前下载保利威多场景Demo,请先下载Demo。
准备好一个保利威账号,Demo中登录直播需要账号直播系统中的appId
(应用ID),appSecret
(应用密匙),userId
(账号ID),channelId
(频道号),登录回放再额外需要频道号对应回放列表里的videoId
(回放视频id)。
名称 | 要求 |
---|---|
iOS 系统 | iOS 9.0+ |
CocoaPods | 1.7.0+ |
集成工具 | Xcode 11.0+ |
文件夹 | 内容 |
---|---|
Demo | 演示如何初始化 SDK、如何登录进入不同场景 |
PolyvLiveCloudClassScene | 云课堂场景模块,包含播放、聊天、连麦、互动等功能的演示 |
PolyvLiveEcommerceScene | 直播带货场景模块,包含播放、聊天、商品、打赏等功能的演示 |
PolyvLiveCommonModule | 通用模块,提供给各个场景实现所需依赖的基础库、工具类等 |
多场景 Demo 采用的是多个场景层(PolyvLiveCloudClassScene
、PolyvLiveEcommerceScene
文件夹)加通用逻辑层(PolyvLiveCommonModule
文件夹)的方式集成。如下图:
通用逻辑层,也叫 Common 层,本质是对保利威多场景 SDK 的封装的开源代码。旨在为客户提供更友好统一的API、实现更完整的业务功能。代码均跟多场景 SDK 一样,使用 PLV
前缀。关于 Common 层更多的介绍,详见文档 5-1至 5-7。
场景层,也叫 Scene 层,客户可以根据需要,集成具体的场景。Scene 层的代码,根据场景不同,会有不同的前缀进行区分。譬如,云课堂场景的代码前缀为 PLVLC
,直播带货场景的代码前缀为 PLVEC
。
拷贝项目中的 PolyvLiveCommonModule
文件夹到你项目的根目录下。
拷贝项目中的 PolyvLiveCloudClassScene
文件夹到你项目的根目录下。
拷贝项目中的 PolyvLiveEcommerceScene
文件夹到你项目的根目录下。
打开项目的 TARGETS - General - Deployment Info,把 iOS 系统改为 9.0 或更高。
打开项目的 info.plist
文件,添加如下内容:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
打开项目的 TARGETS - Build Settings,搜索 Enable Bitcode
,并设置为 NO。
连麦及聊天室的使用,需要获取用户设备的麦克风、摄像头、相册的访问、使用权限。
打开项目的 info.plist
文件,添加如下内容:
<key>NSCameraUsageDescription</key>
<string>请允许我们访问您的摄像头,以便您使用连麦、拍照功能</string>
<key>NSMicrophoneUsageDescription</key>
<string>请允许我们访问您的麦克风,以便您使用连麦功能</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>请允许我们访问您的相册,以便您保存图片到相册中</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>请允许我们访问您的相册,以便您使用发送图片消息、保存图片到相册的功能</string>
播放器支持全屏播放,需要在 TARGETS - General - Deployment Info 中,勾选支持的横屏旋转方向。
在 Podfile 文件中,添加以下内容:
use_frameworks!
pod 'PLVLiveScenesSDK', '~> 1.0.0' # polyv 多场景 SDK
# 以下是第三方依赖库,若本身未引入,则需添加(若不使用Demo源码,可不Pod以下依赖库)
pod 'SDWebImage', '4.4.0'
pod 'MJRefresh', '~> 3.5.0'
注意:
- 我们强烈建议您带上版本号,避免自动升级
- 不能遗漏 use_frameworks!
打开项目的 AppDelegate
文件,在 -application:didFinishLaunchingWithOptions:
方法中进行 SDK 功能配置:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// HttpDNS默认开启,如需关闭,解开注释
// [PLVLiveVideoConfig sharedInstance].enableHttpDNS = NO;
// 如需启用IPV6,解开注释,启用IPV6之后,将自动选择IP,取消HttpDNS
// [PLVLiveVideoConfig sharedInstance].enableIPV6 = YES;
return YES;
}
进入不同场景的直播间前,需要先调用登录直播/回放的方法进行校验。登录校验的目的是检验参数是否正确,以及 SDK 内部会保存从登录接口获取到的一些信息。项目的通用模块提供了 PLVRoomLoginClient
进行直播/回放直播间的登录和退登,接口定义如下:
/// 登录直播间
/// @param channelType 频道类型,若支持多种类型,可对多个频道类型枚举值使用 | 进行位或
/// @param channelId 频道号
/// @param userId 用户id
/// @param appId 应用id
/// @param appSecret 应用secret
/// @param roomUserHandler 为登陆提供观看用户的实例对象,可用来配置viewerId、viewerName等参数
/// @param completion 登录成功,带上自定义参数对象,用户可在回调里面设置后台统计所需的自定义参数
/// @param failure 登录失败
+ (void)loginLiveRoomWithChannelType:(PLVChannelType)channelType
channelId:(NSString *)channelId
userId:(NSString *)userId
appId:(NSString *)appId
appSecret:(NSString *)appSecret
roomUser:(PLVRoomUser *(^ _Nullable)(void))roomUserHandler
completion:(void (^)(PLVViewLogCustomParam *customParam))completion
failure:(void (^)(NSString *errorMessage))failure;
/// 登录回放直播间
/// @param channelType 频道类型,若支持多种类型,可对多个频道类型枚举值使用 | 进行位或
/// @param channelId 频道号
/// @param vid 视频id
/// @param userId 用户id
/// @param appId 应用id
/// @param appSecret 应用secret
/// @param roomUserHandler 为登陆提供观看用户的实例对象,可用来配置viewerId、viewerName等参数
/// @param completion 登录成功,带上自定义参数对象,用户可在回调里面设置后台统计所需的自定义参数
/// @param failure 登录失败
+ (void)loginPlaybackRoomWithChannelType:(PLVChannelType)channelType
channelId:(NSString *)channelId
vid:(NSString *)vid
userId:(NSString *)userId
appId:(NSString *)appId
appSecret:(NSString *)appSecret
roomUser:(PLVRoomUser *(^ _Nullable)(void))roomUserHandler
completion:(void (^)(PLVViewLogCustomParam *customParam))completion
failure:(void (^)(NSString *errorMessage))failure;
/// 离开直播间时调用
+ (void)logout;
登录过程中,观看者的相关信息可以通过回调 roomUserHandler 进行配置,登陆的结果(成功跟失败)会通过 block 回调,可以在登录成功的回调中,选择进入所需的场景页。下面的例子展示了如何登录并进入云课堂场景的直播间页面,代码如下:
//登录直播
__weak typeof(self)weakSelf = self;
[PLVRoomLoginClient loginLiveRoomWithChannelType:PLVChannelTypePPT | PLVChannelTypeAlone
channelId:channelId
userId:userId
appId:appId
appSecret:appSecret
roomUser:^PLVRoomUser * _Nonnull{
// 配置观看用户相关信息
PLVRoomUser *roomUser = [[PLVRoomUser alloc] initWithViewerId:viewerId viewerName:viewerName viewerAvatar:viewerAvatar viewerType:PLVRoomUserTypeSlice];
return roomUser;
} completion:^(PLVViewLogCustomParam * _Nonnull customParam) {
// 登陆成功,进入云课堂直播间
PLVLCCloudClassViewController *cloudClassVC = [[PLVLCCloudClassViewController alloc] init];
[weakSelf.navigationController pushViewController:cloudClassVC animated:YES];
} failure:^(NSString * _Nonnull errorMessage) {
// 登陆失败
}];
上述方法的具体用例可以在项目 Demo 文件夹中的 PLVLoginViewController
类中找到。