美文网首页
使用AVPlayer播放在线音乐

使用AVPlayer播放在线音乐

作者: 多来猫 | 来源:发表于2017-11-13 17:12 被阅读0次

    1、创建AVPlayer播放器

    - (AVPlayer *)audioPlayer
    {
        if (!_audioPlayer) {
            AVPlayerItem *item = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:self.introModel.url]];
            _audioPlayer = [[AVPlayer alloc] initWithPlayerItem:item];;
        }
        return _audioPlayer;
    }
    

    2、播放

    //如果上次播放失败,再次播放时就播放不出声音了,所以这里要replace一下
    AVPlayerItem *item = [[AVPlayerItem alloc] initWithURL:url];
    [self.audioPlayer replaceCurrentItemWithPlayerItem:item];
    [self.audioPlayer play];
    

    3、暂停

    [self.audioPlayer pause];
    

    4、播放状态监听

    [self.audioPlayer addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];
    

    处理状态

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
    {
        if ([object isEqual:self.audioPlayer] && [keyPath isEqualToString:@"status"]) {
            NSNumber *status = [change valueForKey:NSKeyValueChangeNewKey];
            switch (status.integerValue) {
                case AVPlayerStatusUnknown:{
                    break;
                }
                case AVPlayerStatusReadyToPlay:{
                    break;
                }
                case AVPlayerStatusFailed: {
                    break;
                }
                default:
                    break;
            }
        }
    }
    

    最后别忘了移除KVO

    [_audioPlayer removeObserver:self forKeyPath:@"status"];
    

    5、更新当前播放时间

    __weak typeof(self) weakself = self;
    self.audioObserver = [_audioPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 2) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
        __strong typeof(weakself) self = weakself;
        if (self.audioPlayer.rate == 1.0) {
            [self startPlayAnimation];
        } else if (self.audioPlayer.rate == 0.0) {
            [self stopPlayAnimation];
        }
    }];
    

    最后移除时间更新

    [_audioPlayer removeTimeObserver:self.audioObserver];
    

    6、添加视频播放通知

    //播放完成
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playFinish:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
    //播放出错
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playError:) name:AVPlayerItemFailedToPlayToEndTimeNotification object:nil];
    

    移除通知

    [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemFailedToPlayToEndTimeNotification object:nil];
    

    7、当前是否在播放

    //iOS 10添加了timeControlStatus标记播放状态,之前版本用rate是否为0来判断播放状态
    - (BOOL)isPlaying
    {
        if ([self.audioPlayer respondsToSelector:@selector(timeControlStatus)]) {
            return self.audioPlayer.timeControlStatus == AVPlayerTimeControlStatusPlaying ? true : false;
        } else {
            if (self.audioPlayer.rate == 0.0) {
                return false;
            } else {
                return true;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:使用AVPlayer播放在线音乐

          本文链接:https://www.haomeiwen.com/subject/kdizmxtx.html