1.x.x 迁移指南

概述

本项目是点播 SDK 2.x.x 的示例 Demo,其 1.x.x 项目为 polyv-ios-client-demo,由于 2.x.x 并不是在 1.x.x 的继承上开发的,因此没有放在同一个项目中,也因为这样,2.x.x 接口也会与 1.x.x 不一样。

本文档通过常用的使用方式介绍如何快速从点播 1.x.x SDK 迁移到 2.x.x 中。

配置播放器

类名变化:

1.x.x
2.x.x

SkinVideoViewController

PLVVodSkinPlayerController

其详细配置可参考 PLVSimpleDetailControllerPLVCourseDetailControllerPLVVodVidTestController 中的配置。

部署

1.x.x 部署:

// 初始化
_videoPlayer = [[SkinVideoViewController alloc] initWithFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, width, width*(9.0/16.0))];
[_videoPlayer configObserver];

// 添加到视图
[self.view addSubview:self.videoPlayer.view];
[self.videoPlayer setParentViewController:self];

// 需要保留导航栏
[self.videoPlayer keepNavigationBar:YES];
[self.videoPlayer setNavigationController:self.navigationController];

2.x.x 不再使用 frame 布局,而是采用 Auto Layout 的方式布局。2.x.x 为方便开发者使用 Auto Layout,免去了自动布局的代码,取而代之的是需要事先布局一个在竖屏状态或半屏状态时的占位视图:

2.x.x 播放器部署代码如下:

2.x.x 播放器部署不需要主动调用配置方法实现配置,其 SDK 内部会在恰当的时刻完成配置。

若需要实现像 Demo 那样由播放器控制状态栏(statu bar)样式,还需实现两个 UIViewController 方法。

由于 PLVVodPlayerViewController 基类播放器基类是 UIViewController 的子类,因此你甚至可以像使用普通 UIViewController 对象一样操作播放器。

设置播放视频

1.x.x 设置播放视频:

2.x.x 设置播放视频:

2.x.x 播放给定 vid 的视频是通过获取一个 PLVVodVideo 对象,并传递给播发器实现播放视频的。虽说操作比以前复杂了,但这大大提高了数据的统一性,其体现在 SDK 的下载视频接口也是通过传递 PLVVodVideo 对象来添加下载。另一方面,也提高了视频数据的可复用性,用户根据获取的 PLVVodVideo 对象,通过访问其属性,可获得该视频的所有可用信息。

播放器功能配置与状态回调

2.x.x 播放器功能配置及其状态获取与回调可参考 播放器配置

配置下载器

类名变化:

1.x.x
2.x.x

PvUrlSessionDownload

PLVVodDownloadManager PLVVodDownloadInfo

创建下载器

1.x.x 下载器创建:

2.x.x 不需要开发者主动创建并管理下载器,取而代之的是使用 PLVVodDownloadManager 统一管理一个下载队列,开发者只需要操作队列的开始和停止即可。因而,添加下载器的操作也变成了加入队列下载:

状态监听

1.x.x 状态监听:

1.x.x 使用 PvUrlSessionDownload 下载器对象的代理方法实现状态回调与监听,开发者需要管理维护每个下载器对象,且也无法主动获取其下载状态。

2.x.x 则使用了通过 PLVVodDownloadInfo 下载信息对象把下载信息回调出来,该对象可在添加下载时候从其返回值获取。

开发者可通过 PLVVodDownloadInfo 对象属性获取其状态,并通过实现其对应的 Block 实现回调处理:

例如获取下载进度:

错误处理

1.x.x 的下载错误信息通过 PvUrlSessionDownload 的代理方法 ataDownloadFailed:withVid:reason: 回调,错误信息只包含一个字符串,比较困难定位错误的原因。

2.x.x 的下载中产生的错误信息统一通过 PLVVodDownloadManager 的回调属性把错误信息呈现给用户:

2.x.x 使用标准的 NSError 对象把错误的详细信息进行封装,开发者通过 NSError 对象可更轻松地理解、定位与解决错误。

Last updated

Was this helpful?