MPMoviePlayerController 播放記憶功能(setCurrentPlaybackTime)

陳雨塵發表於2018-07-18

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];
   }
}
複製程式碼

測試發現這樣做是可行的,希望可以幫到有同樣問題的你。

相關文章