# 源代码
GitHub地址:VGPlayer
有什么意见建议可以提 issues,如果觉得不错,欢迎点star。
# 演示# 功能集成了视频播放器常有的手势,包括单击显示控制视图,双击暂停,水平滑动快进、后退,开题报告,竖直滑动亮度和音量调节。
全屏播放,开题报告,自适应手机屏幕旋转方向。
自定义控制视图
# 实现思路VGPlayerVGPlayer是一个对AVPlayer封装提供播放功能,displayView为播放器画面绘制。
主要是使用了以下几个类:
AVURLAsset是 AVAsset的子类,用来本地或者网络视频地址的初始化网络请求,也可以用来获取视频每一帧的画面来实现滑动提前预览图的功能(后续应该会版本迭代加上此功能)
AVPlayerItem 是对AVPlayer播放的视频数据管理,对播放的Asset资源进行记录,提供或者视频的时间,播放状态等。
AVPlayer 调控数据和视图
AVPlayerLayer 进行视频视图绘制
VGPlayer封装AVPlayer提供给调用者可选代理方法
// player delegate // play state func vgPlayer(_ player: VGPlayer, stateDidChange state: VGPlayerState) // playe Duration func vgPlayer(_ player: VGPlayer, playerDurationDidChange currentDuration: TimeInterval, totalDuration: TimeInterval) // buffer state func vgPlayer(_ player: VGPlayer, bufferStateDidChange state: VGPlayerBufferstate) // buffered Duration func vgPlayer(_ player: VGPlayer, bufferedDidChange bufferedDuration: TimeInterval, totalDuration: TimeInterval) // play error func vgPlayer(_ player: VGPlayer, playerFailed error: VGPlayerError)VGPlayerViewVGPlayerView负责画面的展示,,只作为展示,而绘制层则是AVPlayerLayer提供,可继承此类进行控制视图的自定义
VGPlayerView封装AVPlayerLayer提供可选代理方法
// player view delegate /// fullscreen func vgPlayerView(_ playerView: VGPlayerView, willFullscreen fullscreen: Bool) /// close play view func vgPlayerView(didTappedClose playerView: VGPlayerView) /// displaye control func vgPlayerView(didDisplayControl playerView: VGPlayerView) VGPlayerErrorVGPlayerError一个 struct 用来播放出现Error时返回
# 细节调整后端播放的实现
设置工程
设置VGPlayer的Background mode
self.player.backgroundMode = .proceedVGPlayerUtils 提供判断视频类型方法和一些通用的方法
UIButton+VGPlayer 扩展按钮点击范围
Timer+VGPlayer 解决Timer的 retain cycle问题