之前有说到在播放器中一点点小技巧,现在正式记录一下AVPlayer

这里主要是说明用AVPlayer做音乐播放器的功能实现,所以不介绍AVPlayer中那个图层类。

首先我们要声明一下播放器,这里有个小坑如果不是全局变量有时候不能播放,网上有一篇文章对这个BUG有个深入研究可以去百度一下,这里不做深入探讨。 @property (nonatomic ,strong) AVPlayer *avPlayer; @property (nonatomic ,strong) AVPlayerItem *avPlayerItem;   -(void)viewDidLoad{   [super viewDidLoad];   self.avPlayerItem = [[AVPlayerItem alloc] initWithURL:url];   self.avPlayer = [[AVPlayer alloc]initWithPlayerItem:self.avPlayerItem];   [self.avPlayer play]; }

然后监听playerItemstatusloadedTimeRange属性,status有三种状态:

AVPlayerStatusUnknown,

AVPlayerStatusReadyToPlay,

AVPlayerStatusFailed

status等于AVPlayerStatusReadyToPlay时代表音频已经可以播放了,我们就可以调用play方法播放了。

loadedTimeRange属性代表已经缓冲的进度,监听此属性可以在UI中更新缓冲进度,也是很有用的一个属性。

AVPlayer没有像AVAUdioPlayer里面的播放完成的代理方法,因此我们可以自己创建一个监听者去监听这个状态,当一首歌曲播放完毕就执行下一曲的方法。

//监听是否播放完毕

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];

在playend方法里面执行下一曲方法就可以了,但要注意如果播放网络资源就要设置task,这个之前是有说过不再啰嗦。

还有一些必要的属性这里介绍一下:

//获取当前播放时间

    dur = CMTimeGetSeconds([self.avplayer currentTime]);

//总时间

    time  = self.avplayerItem.duration.value/self.avplayerItem.duration.timescale;

至于设置后台播放想必这个随手都能百度到就不再赘述。

转载于:https://www.cnblogs.com/SunnyOMGi/p/5578152.html