之前方案
-(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];
}
}
复制代码
测试发现这样做是可行的,希望可以帮到有同样问题的你。