基础功能:
暂停 [_player pause];
播放 [_player play];
注意:下一曲,上一曲时,一定要移除kvo不然会报错!!!
初始化:
@property (nonatomic,strong) AVPlayer * player;
-(AVPlayer *)player{
if (_player == nil) {
_player = [[AVPlayer alloc] init];
_player.volume = 1.0; // 默认最大音量
}
return _player;
}
播放URL 的方法,传入URL
- (void)P_musicPlayerWithURL:(NSURL *)playerItemURL{
// 移除监听
// [self p_currentItemRemoveObserver];
// 创建要播放的资源
AVPlayerItem *playerItem = [[AVPlayerItem alloc]initWithURL:playerItemURL];
// 播放当前资源
[self.player replaceCurrentItemWithPlayerItem:playerItem];
// 添加观察者
// [self p_currentItemAddObserver];
}
// 播放 本地音频,将本地文件 转成 url 传入
NSString * audioPath = [[NSBundle mainBundle]pathForResource:@"小苹果" ofType:@".mp3"];
[self p_musicPlayerWithURL:[NSURL fileURLWithPath:audioPath]];
进度条跟随播放时间 改变进度 方法:
1.创建一个 全局的 定时器 timer ,重复调用定时器
self.avTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timer) userInfo:nil repeats:YES];
2.在定时器调用方法里设置滑块的值
- (void)timer{
_progress.value = CMTimeGetSeconds(self.player.currentItem.currentTime) / CMTimeGetSeconds(self.player.currentItem.duration);
// 显示播放时间的Label
_timeLabel_Play.text = [self changeTimeToCurrentDate:CMTimeGetSeconds(self.player.currentItem.currentTime)];
//显示歌曲总长度的Label
_timeLabel_End.text = [self changeTimeToCurrentDate:CMTimeGetSeconds(self.player.currentItem.duration)];
}
拖动滑块,改变 播放进度
/滑块滑动方法
-
(void) sliderValueChanged:(UISlider*)sender{
//暂停定时器
[_avTimer setFireDate:[NSDate distantFuture]];
// 拖动改变音乐播放进度
if (_player.status == AVPlayerItemStatusReadyToPlay) {
// 总秒数
CGFloat total = (CGFloat)_playerItem.duration.value / _playerItem.duration.timescale;
// 已经拖动到了现在的秒数了。
NSInteger dragedSeconds = floorf(total * sender.value);
//转换成CMTime才能给player来控制播放进度---这个类用来控制时间的。
CMTime dragedCMTime = CMTimeMake(dragedSeconds, 1);
[_player pause];
//改变显示时间方法
_timeLabel_Play.text = [self changeTimeToCurrentDate:dragedSeconds];
[_player seekToTime:dragedCMTime completionHandler:^(BOOL finished) {[_player play]; }];
}
NSLog(@"滑块拖动调用这个方法");
}