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

iOS使用AVPlayer播放音乐

作者: vicczhang | 来源:发表于2017-11-09 15:18 被阅读0次

    最近在弄一个相关播放音频的项目,网上已经有很多相关avplayer的讲解,这里就不多说了。直接上代码


    初始化

    + (instancetype)manager{

    static AVPlayerManager * manager;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

    manager = [[AVPlayerManager alloc] init];

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

    AVAudioSession *session = [AVAudioSession sharedInstance];

    [session setActive:YES error:nil];

    [session setCategory:AVAudioSessionCategoryPlayback error:nil];

    });

    return manager;

    }

    播放音频

    - (void)updateAVPlayer{

    if (isRemoveNot) {

    [self removeObserverNotify];

    isRemoveNot = NO;

    }

    MusicModel *model;

    model = self.musicList[_index];

    _playingModel = model;

    playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:_playingModel.musicURL]];

    [self.player replaceCurrentItemWithPlayerItem:playerItem];

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

    // 监听播放状态

    @weakify(self);

    @weakify(playerItem);

    _playTimeObserver = [self.player addPeriodicTimeObserverForInterval:CMTimeMake(1, 20) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {

    @strongify(self);

    @strongify(playerItem);

    float current = CMTimeGetSeconds(time);

    float total = CMTimeGetSeconds(playerItem.duration);

    if (current) {

    self.progress = current;

    self.totalProgress = total;

    notify_refresh

    }

    }];

    [[[NSNotificationCenter defaultCenter] rac_addObserverForName:AVPlayerItemDidPlayToEndTimeNotification object:nil] subscribeNext:^(NSNotification *notification) {

    DebugLog(@"music play end!");

    [self next];

    [self pause];

    }];

    isRemoveNot = YES;

    }

    调整播放速率

    //速率 rate 0.5~2.0 default 1

    - (void)setPlayerSpeed:(float)rate{

    [self.player setRate:rate];

    }

    快进快退秒速实现

    //快进15秒

    - (void)stepForward15Seconds{

    [self.player.currentItem seekToTime:CMTimeMakeWithSeconds(self.player.currentItem.currentTime.value/self.player.currentItem.currentTime.timescale + 15, self.player.currentItem.currentTime.timescale) toleranceBefore:CMTimeMake(1, self.player.currentItem.currentTime.timescale) toleranceAfter:CMTimeMake(1, self.player.currentItem.currentTime.timescale)];

    }

    //快退15秒

    - (void)stepReverse15Senconds{

    [self.player.currentItem seekToTime:CMTimeMakeWithSeconds(self.player.currentItem.currentTime.value/self.player.currentItem.currentTime.timescale - 15, self.player.currentItem.currentTime.timescale)];

    }

    播放特定时间(拖动进度条)

    - (void)setToTime:(CMTime)time{

    [playerItem seekToTime:time];

    }

    附上demo代码,各位大神自己去研究吧~~核心代码

    相关文章

      网友评论

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

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