1 阅读准备
提前下载保利威多场景Demo,请先下载Demo。
准备好一个保利威账号,Demo中登录直播需要账号直播系统中的appId
(应用ID),appSecret
(应用密匙),userId
(账号ID),channelId
(频道号),登录回放再额外需要频道号对应回放列表里的videoId
(回放视频id)。
2 环境要求
3 目录结构
文件夹 | 内容 |
---|
| |
| 云课堂场景模块,包含播放、聊天、连麦、互动等功能的演示 |
| 直播带货场景模块,包含播放、聊天、商品、打赏等功能的演示 |
| 手机开播场景模块,包含推流、连麦、聊天、文档等功能的演示 |
| 通用模块,提供给各个场景实现所需依赖的基础库、工具类等 |
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
文件夹到你项目的根目录下。
4.5 互动学堂场景模块集成(可选)
拷贝项目中的 PolyvLiveHiClassScene
文件夹到你项目的根目录下。
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'
注意:
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
类中找到。
7.3 互动学堂场景
互动学堂通过token
验证机制进行用户身份识别,在进入互动学堂前,需要调用相应登录方法以获取 token。
PLVLiveVClassAPI
分别提供了讲师和学生角色的登录方法进行互动学堂的登录,接口定义如下:
/// 互动学堂讲师登录接口
/// @param mobile 讲师11位手机号
/// @param password 讲师密码
/// @param code 区号,可为空,默认+86
/// @param userId 机构Id,可为空,讲师重复时不可为空
/// @param mutipleCompanyHandler 讲师重复时,触发该block,返回讲师所属机构列表
/// @param success 登录成功时,触发该block
/// @param failure 登录失败时,触发该block
+ (void)teacherLoginWithMobile:(NSString *)mobile
password:(NSString *)password
code:(NSString * _Nullable)code
userId:(NSString * _Nullable)userId
mutipleCompany:(void (^)(NSArray *responseArray))mutipleCompanyHandler
success:(void (^)(NSDictionary *responseDict, NSArray *lessonArray))success
failure:(void (^)(NSError *error))failure;
/// 互动学堂讲师登录接口
/// 无条件观看接口,课程号与课节ID必须一个不为空
/// @param courseCode 课程号
/// @param lessonId 课节ID
/// @param name 昵称
/// @param successHandler 调用成功时,触发该block
/// @param failureHandler 调用失败时,触发该block
+ (void)watcherVerifyNoneWithCourseCode:(NSString * _Nullable)courseCode
lessonId:(NSString * _Nullable)lessonId
name:(NSString *)name
success:(void (^)(NSDictionary *responseDict, NSArray *lessonArray))successHandler
failure:(void (^)(NSError *error))failureHandler;
/// 验证码观看接口,课程号与课节ID必须一个不为空
/// @param courseCode 课程号
/// @param lessonId 课节ID
/// @param name 昵称
/// @param code 验证码
/// @param successHandler 调用成功时,触发该block
/// @param failureHandler 调用失败时,触发该block
+ (void)watcherVerifyCodeWithCourseCode:(NSString * _Nullable)courseCode
lessonId:(NSString * _Nullable)lessonId
name:(NSString *)name
code:(NSString *)code
success:(void (^)(NSDictionary *responseDict, NSArray *lessonArray))successHandler
failure:(void (^)(NSError *error))failureHandler;
/// 白名单观看接口,课程号与课节ID必须一个不为空
/// @param courseCode 课程号
/// @param lessonId 课节ID
/// @param studentCode 学生码
/// @param successHandler 调用成功时,触发该block
/// @param failureHandler 调用失败时,触发该block
+ (void)watcherVerifyWhiteListWithCourseCode:(NSString * _Nullable)courseCode
lessonId:(NSString * _Nullable)lessonId
studentCode:(NSString *)studentCode
success:(void (^)(NSDictionary *responseDict, NSArray *lessonArray))successHandler
failure:(void (^)(NSError *error))failureHandler;
上述方法的具体用例可以在PolyvLiveHiClassDemo项目中PLVHCTeacherLoginViewController
和PLVHCStudentLoginViewController
类找到。