AVPlayer缓冲,暂停通知和海报框架

我有一些与AVPlayer相关的问题:

  1. 当我们通过[player pause]暂停AVPlayerAVPlayer不会缓冲来自networking的video,还是停止播放? 在苹果的文档中,我无法得到任何与此相关的信息。 另外,是否有可能强制AVPlayer在暂停时保持缓冲,这样如果我们有暂停的video正在等待第一个video结束,那么我们不会在video之间find任何间隙?

  2. 在暂停AVPlayer时,我们可以在[player pause]上有任何事件。

  3. 我们可以在AVPlayer上显示静止图像几秒钟吗?

谢谢

1) AVPlayer会在几种情况下缓冲video,没有清晰的logging。 我会说你可以期待缓冲,当你初始化video,当你更换当前项目。 你可以观察currentItem.loadedTimeRanges知道发生了什么。 该属性将告诉你哪些video时间范围已被加载。

此外,还有一些其他currentItem属性可以帮助您: playbackLikelyToKeepUpplaybackBufferFullplaybackBufferEmpty

实现一个完美的无缝播放并不容易。

 /* 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给定长度的电影,但在播放器上使用常规UIImageView更容易。 在需要时隐藏/显示。

示例项目 :随意使用我写的代码来支持我的答案 。