1)AVPlayer
將在若干情況下緩衝視頻,克利裏沒有記載。我想說,當你初始化視頻時,以及何時替換當前項目,你可以期待緩衝。 你可以觀察currentItem.loadedTimeRanges
知道發生了什麼。該屬性將告訴你哪些視頻時間範圍已被加載。
此外,還有一些currentItem
屬性可以幫助您:playbackLikelyToKeepUp
,playbackBufferFull
和playbackBufferEmpty
。
實現完美的無間隙回放並不容易。
/* 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。
查看AVQueuePlayer進行多項連續無間隙回放。 – MikeyWard
已經使用它,它不處理流式音頻/視頻內容,我已經使用AVPlayer。謝謝 –
@OmerWaqasKhan使用Charles來觀察應用程序的網絡數據包,並且您可以看到該播放器在暫停時仍然發送網絡請求 – onmyway133