最近在封装一个播放器 然后有一点新心得 自我感觉继承于AVPlayer的播放器 还是挺好封装的 有于1.0版本 封装的不太好 接下来我来说一下 他得属性
基本使用
使用AVPlayer一般会用到3种类,分别为AVPlayer,AVPlayerItem,AVPlayerLayer
self.playerItem = [AVPlayerItemplayerItemWithURL:videoURL];self.player = [AVPlayerplayerWithPlayerItem:_playerItem];self.playerLayer = [AVPlayerLayerplayerLayerWithPlayer:_player];
以上代码用来初始化播放器,然后调用[self.player play]开始播放视频,通过调用[self.player pause]可以用来暂停视频
AVPlayer有个属性rate,当为1时是正常播放状态,为0时是暂停状态,通过这个属性可以用来判断播放还是暂停
AVPlayerItem有个videoGravity属性,常用的2个枚举分别为AVLayerVideoGravityResizeAspectFill和AVLayerVideoGravityResizeAspect.前者是等比例填充并且会裁减掉部分区域,后者也是等比例填充但会留下黑边.
调节音量
MPVolumeView*volumeView = [[MPVolumeViewalloc] init]; _volumeViewSlider =nil;for(UIView*viewin[volumeView subviews]){if([view.class.description isEqualToString:@"MPVolumeSlider"]){ _volumeViewSlider = (UISlider*)view;break; } }
以上代码可以用来获取音量,一般2种方式调节音量,一种是添加手势调节,一种是UISlider去调节,这两种方法都是通过获取滑动的值去改变音量的
获取播放时间
AVPlayer并没有直接提供API来获取播放时间,需要我们通过计算得到
AVPlayer下有个CMTime这个属性,这个属性由value和timeScale组成,前者除以后者就可以得出秒数
通过CMTimeGetSeconds([_player currentTime]) / 60可以获得当前分钟,CMTimeGetSeconds([_player currentTime]) % 60可以获得当前秒数
通过playerItem.duration.value / _playerItem.duration.timescale / 60可以获得视频总分钟数,通过playerItem.duration.value / _playerItem.duration.timescale % 60可以获得视频总时间减分钟的秒数
通过以上几种计算方式搭配定时器就可以设置视频当前播放时长和视频总时长
Slider滑动结束视频跳转
通过seekToTime这个方法可以用来跳转到视频的某个时间点,传入的值也是CMTime类型的
通过以上方法我们也可以实现记录上次播放的时间节点,在下次播放时跳转到上次播放的地方,这里要注意的是必须要等到播放器准备好以后才可以调用seekToTime这个方法,否则会崩溃.通过KVO来监听status属性,当self.player.status == AVPlayerStatusReadyToPlay时调用seekToTime方法
全屏播放
手机应用的话需要旋转屏幕来实现,但是我项目是Pad的,使用旋转屏幕不能实现,需要在需要全屏时将播放器添加到keyWindow上,这样就可以在横屏状态下实现小屏变全屏的功能