以下是第三方依赖库,若需使用Demo源码且您项目中未引入,需添加
1 閱讀準備
請先下載保利威多場景 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 類別中找到。
