MPMoviePlayerController 播放记忆功能(setCurrentPlaybackTime)

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

之前方案

-(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];
   }
}
复制代码

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

转载于:https://juejin.im/post/5b4f0744e51d45198b6c8ca9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值