01. 引言
大家好,我是 NewPan,好久没冒泡了,去年下半年不加班的时间里,我一直在研究如何实现基于 AVPlayer
实现视频支持拖拽进度的边下载边播放。这个过程缓慢又辛酸,中途数次看不到希望,差点放弃,但是最后还是坚持了下来,于是就有了现在全新的 3.0 版本。这次会分两篇文章讲解,第一篇是 3.0 的使用介绍,是写给那些只需知道如何使用的同学,接下来按照惯例,我会介绍源码的实现。
首先,我们来看一下全新 3.0 版本的新特性。对了,GitHub 地址在这里。
02. 新版本新特性
这些特性基本涵盖了做视频播放的各方面,其中最重要的,也是这个框架价值所在,就是基于 AVPlayer
实现了边下边播,同时支持断点续传。
- 边下边播支持
- 拖拽进度支持(new)
- 断点续传支持(new)
- 假横屏 auto-layout 布局支持(new)
- 继承协议自定义播放控制界面支持(new)
- 同一 URL 不重复下载支持
- 保证不阻塞主线程
- 本地视频播放播放支持
- Swift 支持
03. 新版本使用介绍
由于这个框架最开始的时候就是为列表播放视频设计的,3.0 版本中这一点也得到了延续。框架对外提供了 3 类 UIView
的分类方法,保证不侵入你的项目。
03.1 静音播放
这个情况适合在列表中跟随用户的滑动,对应的播放某个 cell 上的视频,就像微博列表页视频播放一样。这种情况没有任何对视频的控制界面,只有一个缓冲进度条和播放进度条,就像下面这样:
要实现这个功能,只需要调用下面这个方法就可以了:
NSURL *url = [NSURL URLWithString:@"http://p11s9kqxf.bkt.clouddn.com/bianche.mp4"];
[aview jp_playVideoMuteWithURL:url
bufferingIndicator:nil
progressView:nil
configurationCompletion:nil];
复制代码
这个方法有四个参数,第一个不用说了,第二个是视频缓冲指示器,第三个是缓冲和播放进度条,第四个是配置完视频以后的一些操作回调。
但是在这个接口,除了第一个必选参数外,其他三个你都可以传空,因为框架为你实现了默认的视图,同时你也可以继承我提供的模板类进行快速的自定义。关于这点,我在下面会提到。
配套的,还有下面这个方法。
NSURL *url = [NSURL URLWithString:@"http://p11s9kqxf.bkt.clouddn.com/bianche.mp4"];
[aview jp_resumeMutePlayWithURL:url
bufferingIndicator:nil
progressView:nil
configurationCompletion:nil];
复制代码
这个方法是什么意思呢?我们在视频列表页播放,当用户选中了某一个 cell 的时候会跳转到对应的视频详情页,这个时候就轮到这个方法上场了。因为如果你直接使用上面那个方法来播放的话,视频会重头播,这样破坏了用户体验,而你调用这个方法,就可以连贯的开始播放。
同时这个方法中,你仍然可以定制自己的界面,而不是必须和上个界面的控制界面一样,小棉袄贴心吧?
03.2 带控制界面的播放
这个功能在视频详情页是必须的。这个时候除了视频图像一般还配套的有缓冲动画、播放进度以及控制视频界面。就像下面这样。
这个功能的接口是:
NSURL *url = [NSURL URLWithString:@"http://p11s9kqxf.bkt.clouddn.com/bianche.mp4"];
[aview jp_playVideoWithURL:url
bufferingIndicator:nil
controlView:nil
progressView:nil
configurationCompletion:nil];
复制代码
和上一个类型的方法没有太多不同,就是多了一个参数,多了一个 controlView
这个是和用户交互的那个界面。
配套的,还有一个恢复播放的方法,比方上面说的从视频列表进入到视频详情,在视频列表使用的是静音带缓存和播放进度的方法进行播放,当用户点击某个视频的时候,进入到视频详情页就是开始恢复播放,这个界面带有用户控制 controlView
界面,而且还有横屏按钮。就像下面这样。
这个 API 是:
NSURL *url = [NSURL URLWithString:@"http://p11s9kqxf.bkt.clouddn.com/bianche.mp4"];
[aview jp_resumePla