# 3 初始化

## 3.1 项目配置

### 3.1.1 添加权限

由于点播项目中的播放器，在播放过程中进行截图后会直接保存到系统相册，用户上传视频前，也需要访问系统相册获取视频文件，因此需要在文件 Info.plist 中添加系统相册的读写权限。

另外，本项目支持后台播放，因此还需要开启后台播放权限。info.plist 文件新增内容如下：

```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    ……
    <key>NSPhotoLibraryUsageDescription</key>
    <string>允许App访问相册以保存截图或读取相册视频文件</string>
    <key>UIBackgroundModes</key>
    <array>
    <string>audio</string>
    </array>
    ……
</dict>
</plist>
```

### 3.1.2 支持横竖屏幕

本项目支持横竖屏播放，选择 Targets 的 General 菜单栏，在 Deployment Info 中按下图设置：

![初始化\_图1](https://6941759-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmV4PIbrO79lRJl9HCeLg%2Fuploads%2Fgit-blob-7fd6dc5d9efd72c7cdfa4fa9d66133f020d2a6b6%2F%E5%88%9D%E5%A7%8B%E5%8C%96_%E5%9B%BE1.png?alt=media)

## 3.2 SDK 配置

保利威点播 SDK 需要用户提供 `useId`、`readtoken`、`writetoken`、`secretkey` 这四个配置信息，关于这四个参数的作用，详见[保利威云点播-服务器API使用手册-名词解释](https://git.polyv.net/help-center/document-center/-/blob/master/vod/api/explanation/README.md)。基于安全性考虑，建议将这些参数保存在服务端，APP 在启动时从服务端获取并配置。

为防止 APP 端被嗅探这几个参数，需要对传输的内容进行加密。因此，就有了 `SDK加密串`——在服务器端对以上四个参数进行加密，APP端对应的进行解密。开发者应当设计自己的加解密方式，并且APP端应通过 **https** 协议请求服务端接口。

**为方便快速集成和调试 SDK 的功能，保利威管理后台提供了一种固定加密方式的临时SDK加密串，请勿直接在正式环境使用。**

### 3.2.1 账号配置

点播 SDK 中的类 `PLVVodSettings` 提供了以下几个方法进行 SDK 配置。

最推荐的方法，是使用 https 接口，从服务端获取加密串，APP 本地解密（开发者设计自己的加解密方式）得到 `useId`、`readtoken`、`writetoken`、`secretkey` ，再使用以下方法进行 SDK 配置。

```objective-c
/// 通过 userid、readtoken、writetoken、secretkey 配置账号
+ (instancetype)settingsWithUserid:(NSString *)userid 
    					 readtoken:(NSString *)readtoken 
                        writetoken:(NSString *)writetoken 
                         secretkey:(NSString *)secretkey;
```

其次，点播 SDK 提供了一种固定的加密方式，开发者可在开发时使用，但由于安全性不如第一种方式，不推荐使用在正式环境。加密串、加密密钥、加密向量可在[保利威视频云平台](http://www.polyv.net/)获取。注意：加密密钥、加密向量字符长度必须为16位。

```objective-c
/// 通过加密串 configString、加密密钥 key、加密向量 iv 配置账号
+ (instancetype)settingsWithConfigString:(NSString *)configString key:(NSString *)key iv:(NSString *)iv error:(NSError **)error;
```

若 `error` 为 `nil`，可通过以上方法返回的 `PLVVodSettings` 对象的只读属性 `userId`、`readtoken`、`writetoken`、`secretkey` 读取到保利威点播 SDK 的四个配置信息。

对于安全性要求较高的公司，可对 APP 进行加固，防止 APP 在越狱设备上被破解、分析导致账号及用户隐私数据的泄漏。市面上有很多对 iOS 应用进行加固的产品可以使用。

### 3.2.2 日志配置

点播 SDK 内部使用自建的日志等级系统，日志等级使用位运算符定义，因此开发者可以根据自己需要使用 `|`(位运算符：或)进行组合使用，设置个性化的日志等级。通过修改 `PLVVodSettings` 对象的属性 `logLevel` 设置日志等级，日志等级默认为

```objective-c
/// 日志等级
typedef NS_OPTIONS(NSUInteger, PLVVodLogLevel) {
    PLVVodLogLevelSilent = 0,       // 禁用日志输出
    PLVVodLogLevelError  = 1 << 0,    // 只输出错误日志
    PLVVodLogLevelWarn   = 1 << 1,    // 只输出警告日志
    PLVVodLogLevelInfo   = 1 << 2,    // 只输出信息日志
    PLVVodLogLevelDebug  = 1 << 3,    // 只输出调试日志
    PLVVodLogLevelWithoutDebug = PLVVodLogLevelError | PLVVodLogLevelWarn | PLVVodLogLevelInfo,
    PLVVodLogLevelAll    = 0xFFFFFFFF,
};
```

其次，通过修改 `PLVVodSettings` 对象的属性 `viewerId`、`viewerName`，在日志系统中加入终端用户（App 使用者）的账号 ID、账号昵称。日志配置代码示例如下：

```objective-c
[PLVVodSettings sharedSettings].logLevel = PLVVodLogLevelAll; // 禁用日志输出
[PLVVodSettings sharedSettings].viewerId = @"账号ID";
[PLVVodSettings sharedSettings].viewerName = @"账号昵称";
```

建议在进行账号配置之后就进行日志配置。
