前言
这边封装了两个类一个是播放器(WJMoviePlayerView),一个是获取本地相册的视频(WJPhotoMovieManager),这两个类一个是获取本地视频上传服务器,一个下载观看,实现朋友圈展示视频功能;
WJMoviePlayerView是支持网络视频和本地视频的播放。网络视频是先下载,再播放的,集成了下载动画,本地缓存,手势缩小和关闭。目前只支持竖屏播放。
WJPhotoMovieManager用了系统自带的UIImagePickerController来实现的,可以控制视频的播放时长
gif效果WJMoviePlayerView
WJMoviePlayerView是基于AVPlayer和AVPlayerLayer来实现的,选择AVPlayerLayer的原因是因为AVPlayerViewController有个黑色的背景view,影响到转场动画。AVPlayerLayer并不是直接添加到UIView上的,因为CALayer自带隐式动画,在下滑关闭视频的时候会出现问题(放在UIView animateWithDuration: 中关闭隐式动画会失效,当然你也可以把AVPlayerLayer单独拿到动画外面来解决问题,但是动画时间必须和隐式动画时间一致)。我这边是写了一个继承UIView的WJPlayerView类,然后重写了它的layerClass来实现的,同时为WJPlayerView添加了AVPlayer属性来解决这个问题,具体看代码。
WJPlayerViewWJMoviePlayerView还添加了通知和监听者,一个是视频播放结束回调,用来重复播放视频
回调 AVPlayerItemDidPlayToEndTimeNotification另一个则是监听了AVPlayerLayer的播放状态,用来删除转场动画的视图,同时开始播放视频
AVPlayerLayer的监听当然加了通知和监听者,必须在dealloc中remove。
在上图WJPlayerView的创建中可以看到有UIPanGestureRecognizer手势的添加,这是用来实现下拉滑动关闭视图的,包含了下拉缩小的动画,目前下拉关闭视图并不完美,只做了下拉速度大于500的时候就关闭播放器,能力有限。
手势缩小关闭视图WJProgressView
WJProgressView是下载进度条(模仿新浪微博的),具体实现
进度条实现WJMovieDownLoadManager
WJMovieDownLoadManager是通过NSURLSession实现的,用来下载视频,下载完保存到Library/Caches/wj_movie_file目录下了,下载前会先判断本地是否存在,不存在才会去下载,这里需要注意的点是拿到本地路径时,需要通过NSURL的fileURLWithPath方法去获取URL,不然播放不了。
WJMoviePlayerView的使用
WJMoviePlayerView的使用其中还有许多需要完善的地方,也存在bug,欢迎下载并提出意见,谢谢。
网友评论