iOS - 视频播放器的简单封装

本文详细介绍了如何在iOS中封装一个简单的视频播放器,使用AVFoundation框架代替MediaPlayer,实现播放、暂停、时间同步、显示隐藏工具条等功能。通过自定义CLAVPlayerView,实现了播放按钮、Slider与视频播放的同步、工具条显示隐藏的自动化。同时提供了全屏播放和重播按钮的实现,以及如何对外提供简单易用的接口。
摘要由CSDN通过智能技术生成

封装视频播放器,首先需要了解视频播放器的实现,iOS9之前可以使用MediaPlayer来进行视频的播放,iOS9之后系统推荐使用AVFoundation框架实现视频的播放。

如果仅仅是播放视频两者的使用都非常简单,但是相比MediaPlayer,AVPlayer对于视频播放的可控制性更强一些,可以通过自定义的一些控件来实现视频的播放暂停等等。因此这里使用AVPlayer的视频播放。

封装视频播放器,首先需要实现视频播放器,然后再去考虑怎样封装可以让以后自己使用起来方便快捷。

视频播放器布局首先使用xib创建CLAVPlayerView继承UIView用来承载播放器,这样我们在外部使用的时候,直接在控制器View或者Cell上添加CLAVPlayerView即可,至于播放器播放或者暂停等操作交给CLAVPlayerView来管理。下面来看一下CLAVPlayerView的结构。

CLAVPlayerView的结构

CLAVPlayerView的布局很简单,重点在于约束的添加和控件层次关系,添加约束只要自己挨个细心添加就没有问题,需要注意控件的层次关系,从上图中可以看出四个控件是分先后顺序平行添加在CLAVPlayerView上的,要注意他们的层次关系,避免相互遮挡。

视频播放器实现

布局完成之后,就是实现播放器功能,我们把播放器功能大致分为四部分来完成

1. 通过播放按钮实现视频播放。


首先CLAVPlayerView加载时需要将播放器layer添加到imageView的layer上,此时蒙版和底部工具条一定都是隐藏的,点击中间播放按钮,视频开始播放并隐藏播放按钮。因此我们需要在CLAVPlayerView的awakeFromNib方法中,在加载CLAVPlayerView时对其做一些处理。

  1. 初始化AVPlayer和AVPlayerLayer,并将AVPlayerLayer添加到imageView的layer上,在layoutSubviews中设置playerLayer的frame

// 初始化player 和playerLayer

self.player = [[AVPlayer alloc]init];

self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];

// imageView上添加playerLayer

[self.imageView.layer addSublayer:self.playerLayer];复制代码

-(void)layoutSubviews

{

[super layoutSubviews];

self.playerLayer.frame = self.imageView.bounds;

}

2.根据播放视频的url创建AVPlayerItem

NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_02.mp4"];

self.playerItem = [AVPlayerItem playerItemWithURL:url];

3.设置Slider原点以及最大点最小点图片

// 设置Slider

[self.progressSlider setThumbImage:[UIImage imageNamed:@"thumbImage"] forState:UIControlStateNormal];

[self.progressSlider setMaximumTrackImage:[UIImage imageNamed:@"MaximumTrackImage"] forState:UIControlStateNormal];

[self.progressSlider setMinimumTrackImage:[UIImage imageNamed:@"MinimumTrackImage"] forState:UIControlStateNormal];

4.给imageView添加tap手势,点击imageView则显示工具栏

//imageView添加手势

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];

[self.imageView addGestureRecognizer:tap];

注意:如果使用xib给imageVIew添加手势,则通过loadNibNamed加载xib的时候需要获取返回数组的firstObject,得到的才是xib的View,如果获取lastObject,得到是的tap手势,会报错tap手势对象没有View的方法。

5.其他控件显示以及状态的设置

// 隐藏遮盖版

self.coverView.hidden = YES;

// 设置工具栏状态

self.toolView.alpha = 0;

self.isShowToolView = NO;

// 设置工具栏播放按钮状态

self.playOrPauseBtn.selected = NO;

这盖板只有播放完毕之后显现,点击重播之后又隐藏,因此使用hidden直接隐藏即可,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值