2012-05-18 33 views
15

我有關於AVPlayer一些問題分別是:AVPlayer緩衝,暫停通知和海報框架

  1. 當我們暫停AVPlayer通過[player pause]是否AVPlayer保持緩衝來自網絡視頻還是隻是停止?在蘋果的文檔中,我無法獲得與此相關的任何信息。另外,是否有可能強制AVPlayer在暫停時保持緩衝狀態,以便如果我們有暫停的視頻正在等待第一個視頻結束,那麼我們在視頻之間就不會發現任何間隙了?

  2. 關於暫停AVPlayer,我們可以在[player pause]上發生任何事件。

  3. 我們可以在AVPlayer上顯示幾秒鐘的靜止圖像嗎?

感謝

+0

查看AVQueuePlayer進行多項連續無間隙回放。 – MikeyWard

+0

已經使用它,它不處理流式音頻/視頻內容,我已經使用AVPlayer。謝謝 –

+0

@OmerWaqasKhan使用Charles來觀察應用程序的網絡數據包,並且您可以看到該播放器在暫停時仍然發送網絡請求 – onmyway133

回答

35

1)AVPlayer將在若干情況下緩衝視頻,克利裏沒有記載。我想說,當你初始化視頻時,以及何時替換當前項目,你可以期待緩衝。 你可以觀察currentItem.loadedTimeRanges知道發生了什麼。該屬性將告訴你哪些視頻時間範圍已被加載。

此外,還有一些currentItem屬性可以幫助您:playbackLikelyToKeepUp,playbackBufferFullplaybackBufferEmpty

實現完美的無間隙回放並不容易。

/* player is an instance of AVPlayer */ 
[player addObserver:self 
     forKeyPath:@"currentItem.loadedTimeRanges" 
      options:NSKeyValueObservingOptionNew 
      context:kTimeRangesKVO];  

observeValueForKeyPath:ofObject:change:context:

if (kTimeRangesKVO == context) { 
    NSArray *timeRanges = (NSArray *)[change objectForKey:NSKeyValueChangeNewKey]; 
    if (timeRanges && [timeRanges count]) { 
     CMTimeRange timerange = [[timeRanges objectAtIndex:0] CMTimeRangeValue]; 
     NSLog(@" . . . %.5f -> %.5f", CMTimeGetSeconds(timerange.start), CMTimeGetSeconds(CMTimeAdd(timerange.start, timerange.duration))); 
    } 
} 

2)只是盯緊player.rate

[player addObserver:self 
     forKeyPath:@"rate" 
      options:NSKeyValueObservingOptionNew 
      context:kRateDidChangeKVO]; 

然後在您的observeValueForKeyPath:ofObject:change:context:

if (kRateDidChangeKVO == context) { 
     NSLog(@"Player playback rate changed: %.5f", player.rate); 
     if (player.rate == 0.0) { 
      NSLog(@" . . . PAUSED (or just started)"); 
     } 
    } 

3),你可以build a movie of a given length using a still image,但它更容易在播放器上使用常規UIImageView。在需要時隱藏/顯示。

示例項目:隨意玩the code I wrote to support my answer

+1

thanx madmw,並且我們可以強制avplayer在暫停狀態下保持緩衝嗎? –

+0

AFAIK沒有公共API可以使用AVPlayer緩衝區。如果您想在暫停點之後繼續緩衝,您可以僞造暫停:繼續播放w/out音量並隱藏視圖,然後使用seekToTime恢復播放。 – djromero

+0

感謝您的支持!一個具體的例子幫助了很多。 – user2734823