MPMoviePlayerController 播放记忆功能(setCurrentPlaybackTime)

MPMoviePlayerController 播放记忆功能(setCurrentPlaybackTime)_第1张图片

最近项目反馈了一个问题,视频播放器播放记忆功能在有些情况下会失效,不能从之前的观看点继续播放,当时我给出的反馈是有时候如果网速不好缓冲不到记录点的,但是后来测试了下优酷等软件发现人家网速不好也能跳到对应的点,这!(不能老是拿网速安慰自己啊) 既然人家能实现就说明是自己的问题了于是乎就开始了探索。

之前方案

-(void)play{
  if (self.oldTime != 0 ) {
     [self setCurrentPlaybackTime:self.oldTime];
   }
  [super play];
 }

之前处理的就是在点击开始播放的时候判断有没有记忆点,如果有就跳转到记忆点,然后在开始播放,但是问题就是当网速不是很好的情况下 setCurrentPlaybackTime: 这个有可能会跳转不到记忆点或者跳转需要一段时间的缓冲,在setCurrentPlaybackTime: 的动作还没有成功之后就 play ,就会出现播放是从0开始的,不能跳转到记忆点开始播放。当时想的是 setCurrentPlaybackTime: 怎么能找到这个方法的成功回调,在成功回调里在写开始播放,后来发现没有,又尝试了在播放器初始化完成之后(MPMoviePlayerReadyForDisplayDidChangeNotification)就执行setCurrentPlaybackTime:动作,后来发现也不行也会出现跳不到的情况

可行方案

虽然 在 MPMoviePlayerReadyForDisplayDidChangeNotification 里面写不行,但是却给了一种方案,就是在
MPMoviePlayerController 里这些通知回调里面处理也许可行,对相信你也猜到了 onMPMoviePlayerPlaybackStateDidChangeNotification 播放器状态发生改变的时候

 - (void)onMPMoviePlayerPlaybackStateDidChangeNotification
 {
if (self.playbackState == MPMoviePlaybackStatePlaying) {
       [self startDurationTimer];
    if (_oldTime > 0) {
        [super setCurrentPlaybackTime:_oldTime];
        _oldTime = 0;
    }
} else {
    [self stopDurationTimer];
   }
}

测试发现这样做是可行的,希望可以帮到有同样问题的你。


如果有任何疑问可以留言咨询。也可以加我的公众号会定时推送有关技术分享!


MPMoviePlayerController 播放记忆功能(setCurrentPlaybackTime)_第2张图片

你可能感兴趣的:(MPMoviePlayerController 播放记忆功能(setCurrentPlaybackTime))