# 2 快速集成

本文档为技术文档，需要阅读者具备基本的 iOS 开发能力，且需要配置苹果的开发环境，安装有苹果官方 IDE：Xcode 10.0 以上。

## 2.1 兼容设备

点播 SDK 2.20.1 版本起，支持 iOS 11.0 以上 iOS 设备。点播 SDK 2.20.1 以下版本支持 iOS 8.0 以上 iOS 设备。

## 2.2 接入 SDK

使用 CocoaPods 将点播 SDK 和上传 SDK 集成到 Xcode 项目中。首先，在项目中新建一个 Podfile 文件，并在 Podfile 中指定：

```ruby
source 'https://github.com/CocoaPods/Specs.git' 
platform :ios, '11.0'  

target 'TargetName' do 
pod 'PolyvVodSDK' 
end
```

然后，执行如下命令：

```
$ pod install
```

## 2.3 开源组件

点播项目提供了一系列开源组件，给开发者提供了更多可选功能，如视频弹幕、播放器皮肤、问答功能等。

开源组件位于 demo 项目中的 PolyvOpenSourceModule 文件夹下，如果想使用开源组件提供的功能，需将整个文件夹添加到你的项目中。然后，在上文提到的 Podfile 文件中新增以下内容：

```ruby
pod 'PLVVodDanmu' 
pod 'PLVSubtitle'
pod 'PLVMasonry'
```

开源组件中用到了 `UIStackView`，但 iOS 8 不支持 `UIStackView`，如果需要支持 iOS 8，需要在 Podfile 文件中新增以下第三方库：

```ruby
pod 'FDStackView'
```

## 2.4 点播初始化

访问[保利威视频云平台](http://www.polyv.net/)获取账号信息。

使用 `PLVVodSettings` 进行初始化，快速集成时，可使用如下方法进行初始化（不推荐在正式环境使用该初始化方法）：

```objective-c
/**  使用加密串配置账号  
 @param configString 加密串  
 @param error 解密、配置过程的错误  
 @return 新的 PLVVodSettings 静态对象  
 */ 
 + (instancetype)settingsWithConfigString:(NSString *)configString error:(NSError **)error;
```

更安全的初始化方式在 [3.初始化](https://git.polyv.net/help-center/document-center/-/blob/master/vod/ios/3.%E5%88%9D%E5%A7%8B%E5%8C%96)【3.2 SDK 配置】一节有更详细的讲述。

## 2.5 视频播放

`PLVVodSkinPlayerController` 是开源组件提供的带有默认皮肤的播放器，继承于点播 SDK 中的 `PLVVodPlayerViewController`。首先，在页面上创建一个 `PLVVodSkinPlayerController` 对象，以及放置播放器的 `UIView` 对象。代码示例如下：

```objective-c
#import “PLVVodSkinPlayerController.h”  

@interface UIViewController () 

@property (nonatomic, strong) PLVVodSkinPlayerController *player; 
@property (nonatomic, weak) UIView *playerPlaceholder; 

@end  

@implementation UIViewController  

- (void)viewDidLoad {
    [super viewDidLoad];      

    PLVVodSkinPlayerController *player = [[PLVVodSkinPlayerController alloc] init]; 
    [player addPlayerOnPlaceholderView:self.playerPlaceholder 
    rootViewController:self]; 
    self.player = player; 
}  

@end
```

播放器 `player` 可自动在 `playerPlaceholder` 中实现自动布局，以及半屏/全屏的切换。

点播 SDK 将视频数据封装类 `PLVVodVideo` 中，通过 `PLVVodVideo` 对象将视频数据传递给播放器。`PLVVodVideo` 包含视频ID、视频标题、视频时长等数据。示例代码如下：

```objective-c
self.player.video = video; // video 为 PLVVodVideo 对象 
[self.player play]; // 开始播放 
[self.player pause]; // 暂停播放
```

## 2.6 视频下载

点播 SDK 通过 `PLVVodDownloadManager` 进行下载管理，下载视频方法声明如下：

```objective-c
/**  使用后台设置的默认画质添加至下载队列  
@param video PLVVodVideo 视频对象  
@return 下载信息  
*/ 
- (PLVVodDownloadInfo *)downloadVideo:(PLVVodVideo *)video;
```

类 `PLVVodDownloadInfo` 封装了视频的下载信息，包含了下载状态、下载速率、下载进度等。将视频添加至下载队列后，可通过方法 `-startDownload` 启动下载，通过方法 `-stopDownload` 停止下载。示例代码如下：

```objective-c
[[PLVVodDownloadManager sharedManager] downloadVideo:video]; // 将视频 video 添加到下载队列 
[[PLVVodDownloadManager sharedManager] startDownload]; // 开始下载
[[PLVVodDownloadManager sharedManager] stopDownload]; // 停止下载
```

`PLVVodDownloadManager` 使用 block 对视频下载进行监听，示例代码如下：

```objective-c
PLVVodDownloadManager *downloadManager = [PLVVodDownloadManager sharedManager];
 
downloadManager.downloadCompleteBlock = ^(PLVVodDownloadInfo *info) {
    NSLog(@"video vid %@ download success", info.vid);
};
downloadManager.stateDidChangeBlock = ^(PLVVodDownloadInfo *info) {
    NSLog(@"video vid %@ state change to %zd", info.vid, info.state);
};
downloadManager.downloadErrorHandler = ^(PLVVodVideo *video, NSError *error) {
    NSLog(@"video vid %@ download error: %@", video.vid, error);
};
downloadManager.completeBlock = ^{
    NSLog(@"all video download success");
};
```
