2015-11-21 100 views
2

是否可以在遠程AVPlayerItem緩衝時保持AVQueuePlayer處於活動狀態?AVQueuePlayer - 在緩衝項目時保持活動狀態

目前,當項目進入緩衝,播放停止,所有信息通過MPNowPlayingInfoCenter設置被刪除 - 鎖屏,指揮中心,外部設備等

我一直在測試AVPlayer/AVQueuePlayer一些現在時間,並且似乎是唯一的選擇就是:

  1. 觀察遠程AVPlayerItem爲playbackBufferEmpty
  2. 當觀察者觸發,插入新AVPlayerItem無線th空的mp3文件。
  3. 繼續觀察遠程物品的緩衝區,一旦碰到playbackLikelyToKeepUp,交換物品就位並前進到遠程物品。

這種方法的問題是,一旦你前進到空項目,AVQueuePlayer停止緩衝遠程。 我已經爲這兩個項目設置了強有力的參考,actionAtItemEnd設置爲AVPlayerActionAtItemEndNone。 網絡由Charles監控。

有沒有其他方法可以實現這個目標?

+0

你找到一種方法來保持緩衝遠程:

我通過延遲緩衝器更新解決了這個? – svrs

回答

0

我設法使用兩個AVPlayer實例來保持播放活動。

一審持有遠程AVPlayerItem和第二個空聲音文件,只有幾個ms長。加載時,您可以將空項目搜尋到最後。

當遠程項目進入緩衝區時,暫停它並播放空文件。由於它已經在最後,它將保持回放會話處於活動狀態。只需將actionAtItemEnd設置爲AVPlayerActionAtItemEndNone即可。

即使此功能有效,當遠程項目的緩衝區更改爲playbackLikelyToKeepUp並交換播放器時,您可以發現一些奇怪的行爲。遠程物品可以跳回到playbackBufferEmpty,玩家交換邏輯可以卡在永無止境的循環中。

-(void)setPendingBuffer:(PlayerItemBuffer)pendingBuffer { 

    _pendingBuffer = pendingBuffer; 

    if (self.bufferDispatchTimer.valid) { 
     [self.bufferDispatchTimer invalidate]; 
    } 
    self.bufferDispatchTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(bufferDispatchTimerDidFire) userInfo:nil repeats:NO]; 
}