Я пытаюсь определить лучший способ узнать, буферизуется ли AVPlayerItem до конца потока. Не только то, что буфер заполнен, но и то, что буфер содержит все необходимое для воспроизведения остальной части элемента без дополнительной буферизации. AVPlayerItem предлагает вызов isPlaybackBufferFull, но это не говорит мне, нужна ли какая-либо дополнительная буферизация до завершения воспроизведения элемента.
Мой текущий план состоит в том, чтобы совместить это с selectedForwardBufferDuration, чтобы проверить, нужно ли элементу когда-либо буферизовать больше, но лучший ли это способ?
Например:
- (void)observeValueForKeyPath:(NSString*)aKeyPath ofObject:(id)aObject change:(NSDictionary*)aChange context:(void*)aContext
{
if( [aKeyPath isEqualToString:@"playbackBufferFull"] )
{
CMTime theBufferTime = CMTimeMakeWithSeconds( self.currentItem.preferredForwardBufferDuration, 1 );
CMTime theEndBufferTime = CMTimeAdd( self.currentItem.currentTime, theBufferTime );
if( CMTimeCompare( theEndBufferTime, self.currentItem.duration ) >= 0 )
{
// Buffered to the end
}
}
}