以下是第三方依赖库,若需使用Demo源码且您项目中未引入,需添加
1 阅读准备
提前下载保利威多场景Demo,请先下载Demo。
准备好一个保利威账号,Demo中登录直播需要账号直播系统中的appId(应用ID),appSecret(应用密匙),userId(账号ID),channelId(频道号),登录回放再额外需要频道号对应回放列表里的videoId(回放视频id)。
2 环境要求
| 名称 | 要求 |
|---|---|
| iOS 系统 | iOS 12.0+ |
| CocoaPods | 1.7.0+ |
| 集成工具 | Xcode 11.0+ |
3 目录结构
| 文件夹 | 内容 |
|---|---|
| Demo | 演示如何初始化 SDK、如何登录进入不同场景 |
| PolyvLiveCloudClassScene | 云课堂场景模块,包含播放、聊天、连麦、互动等功能的演示 |
| PolyvLiveEcommerceScene | 直播带货场景模块,包含播放、聊天、商品、打赏等功能的演示 |
| PolyvLiveStreamerScene | 手机开播场景模块,包含推流、连麦、聊天、文档等功能的演示 |
| PolyvLiveCommonModule | 通用模块,提供给各个场景实现所需依赖的基础库、工具类等 |
4 场景模块集成
多场景 Demo 采用的是多个场景层(PolyvLiveCloudClassScene、PolyvLiveEcommerceScene 、PolyvLiveStreamerScene文件夹)加通用逻辑层(PolyvLiveCommonModule 文件夹)的方式集成。如下图:

通用逻辑层,也叫 Common 层,本质是对保利威多场景 SDK 的封装的开源代码。旨在为客户提供更友好统一的API、实现更完整的业务功能。代码均跟多场景 SDK 一样,使用 PLV 前缀。关于 Common 层更多的介绍,详见文档 5-1至 5-7。
场景层,也叫 Scene 层,客户可以根据需要,集成具体的场景。Scene 层的代码,根据场景不同,会有不同的前缀进行区分。譬如,云课堂场景的代码前缀为 PLVLC,直播带货场景的代码前缀为 PLVEC,手机开播场景的代码前缀为 PLVLS。
4.1 导入通用模块(必须)
拷贝项目中的 PolyvLiveCommonModule 文件夹到你项目的根目录下。
4.2 云课堂场景模块集成(可选)
拷贝项目中的 PolyvLiveCloudClassScene 文件夹到你项目的根目录下。
4.3 直播带货场景模块集成(可选)
拷贝项目中的 PolyvLiveEcommerceScene 文件夹到你项目的根目录下。
4.4 手机开播场景模块集成(可选)
拷贝项目中的 PolyvLiveStreamerScene 文件夹到你项目的根目录下。
5 工程配置
5.1 配置支持系统版本
打开项目的 TARGETS - General - Deployment Info,把 iOS 系统改为 9.0 或更高。
5.2 配置 App Transport Security (ATS)
打开项目的 info.plist 文件,添加如下内容:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
5.3 配置 Bitcode
打开项目的 TARGETS - Build Settings,搜索 Enable Bitcode,并设置为 NO。
5.4 配置隐私权限
连麦及聊天室的使用,需要获取用户设备的麦克风、摄像头、相册的访问、使用权限。
打开项目的 info.plist 文件,添加如下内容:
<key>NSCameraUsageDescription</key>
<string>请允许我们访问您的摄像头,以便您使用连麦、拍照功能</string>
<key>NSMicrophoneUsageDescription</key>
<string>请允许我们访问您的麦克风,以便您使用连麦功能</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>请允许我们访问您的相册,以便您保存图片到相册中</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>请允许我们访问您的相册,以便您使用发送图片消息、保存图片到相册的功能</string>
5.5 配置设备旋转
播放器支持全屏播放,需要在 TARGETS - General - Deployment Info 中,勾选支持的横屏旋转方向。
5.6 配置 Podfile
在 Podfile 文件中,添加以下内容:
use_frameworks!
pod 'PLVLiveScenesSDK', '~> 1.0.0' # polyv 多场景 SDK
pod 'PLVImagePickerController', '~> 0.1.2' # 若不使用Demo源码,不需要添加
# 以下是第三方依赖库,若需使用Demo源码且您项目中未引入,需添加
pod 'SDWebImage', '4.4.0'
pod 'MJRefresh', '~> 3.5.0'
pod 'SVGAPlayer', '~> 2.3'
注意:
- 我们强烈建议您带上版本号,避免自动升级
- 我们建议使用最新版本SDK
- 不能遗漏 use_frameworks!
6 初始化 SDK
打开项目的 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;
}
7 登录直播/回放及进入不同场景
7.1 观看端(云课堂场景/直播带货场景)
进入不同场景的观看页前,需要先调用登录直播/回放的方法进行校验。登录校验的目的是检验参数是否正确,以及 SDK 内部会保存从登录接口获取到的一些信息。项目的通用模块提供了 PLVRoomLoginClient 进行直播/回放的登录和退登,接口定义如下:
/// 登录直播间
/// @param channelType 频道类型,若支持多种类型,可对多个频道类型枚举值使用 | 进行位或
/// @param channelId 频道号
/// @param userId 用户id
/// @param appId 应用id
/// @param appSecret 应用secret
/// @param roomUserHandler 返回带有默认值的观看用户实例对象,可在block中配置viewerId、viewerName、viewerAvatar属性
/// @param completion 登录成功,带上自定义参数对象,用户可在回调里面设置后台统计所需的自定义参数
/// @param failure 登录失败
+ (void)loginLiveRoomWithChannelType:(PLVChannelType)channelType
channelId:(NSString *)channelId
userId:(NSString *)userId
appId:(NSString *)appId
appSecret:(NSString *)appSecret
roomUser:(void(^ _Nullable)(PLVRoomUser *roomUser))roomUserHandler
completion:(void (^)(PLVViewLogCustomParam *customParam))completion
failure:(void (^)(NSString *errorMessage))failure;
/// 登录回放直播间
/// @param channelType 频道类型,若支持多种类型,可对多个频道类型枚举值使用 | 进行位或
/// @param channelId 频道号
/// @param vodList 是否请求点播列表视频,默认NO
/// @param vid 视频id(可不填,不填时加载回放/点播列表)
/// @param userId 用户id
/// @param appId 应用id
/// @param appSecret 应用secret
/// @param roomUserHandler 返回带有默认值的观看用户实例对象,可在block中配置viewerId、viewerName、viewerAvatar属性
/// @param completion 登录成功,带上自定义参数对象,用户可在回调里面设置后台统计所需的自定义参数
/// @param failure 登录失败
+ (void)loginPlaybackRoomWithChannelType:(PLVChannelType)channelType
channelId:(NSString *)channelId
vodList:(BOOL)vodList
vid:(NSString * _Nullable)vid
userId:(NSString *)userId
appId:(NSString *)appId
appSecret:(NSString *)appSecret
roomUser:(void(^ _Nullable)(PLVRoomUser *roomUser))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 roomUser) {
// 可在此处配置自定义的登录用户ID、昵称、头像,不配则均使用默认值
// roomUser.viewerId = @"用户ID";
// roomUser.viewerName = @"用户昵称";
// roomUser.viewerAvatar = @"用户头像";
} completion:^(PLVViewLogCustomParam * _Nonnull customParam) {
// 登录成功,进入云课堂直播间
PLVLCCloudClassViewController *cloudClassVC = [[PLVLCCloudClassViewController alloc] init];
[weakSelf.navigationController pushViewController:cloudClassVC animated:YES];
} failure:^(NSString * _Nonnull errorMessage) {
// 登录失败
}];
上述方法的具体用例可以在项目 Demo 文件夹中的 PLVLoginViewController 类中找到。
7.2 开播端(手机开播场景)
在进入手机开播页面前,需要先调用登录频道的方法进行校验。登录校验的目的是检验参数是否正确,以及保存从登录接口获取到的一些信息。项目的通用模块提供了 PLVRoomLoginClient 进行频道开播的登录,接口定义如下:
/// 登录三分屏开播直播间
/// @param channelType 频道类型,目前只支持 PLVChannelTypeAlone 或者 PLVChannelTypePPT
/// @param channelId 频道号
/// @param password 频道密码
/// @param completion 登录成功
/// @param failure 登录失败
+ (void)loginStreamerRoomWithChannelType:(PLVChannelType)channelType
channelId:(NSString *)channelId
password:(NSString *)password
completion:(void (^)(void))completion
failure:(void (^)(NSString *errorMessage))failure;
登录验证的结果会通过 completion 或 failure block 回调,可以在登录成功的回调中,进入手机开播场景。下面示例如何登录频道并进入手机开播场景,代码如下:
//登录手机开播
__weak typeof(self)weakSelf = self;
[PLVRoomLoginClient loginStreamerRoomWithChannelType:PLVChannelTypePPT
channelId:channelId
password:passwordString
completion:^{
// 登录成功,进入云课堂直播间
PLVLSStreamerViewController *vctrl = [[PLVLSStreamerViewController alloc] init];
vctrl.modalPresentationStyle = UIModalPresentationFullScreen;
[weakSelf presentViewController:vctrl animated:YES completion:nil];
} failure:^(NSString * _Nonnull errorMessage) {
// 登录失败
}];
上述方法的具体用例可以在项目 Demo 文件夹中的 PLVLSLoginViewController 类中找到。
