AVPlayer缓冲,暂停通知和海报框架
我有一些与AVPlayer
相关的问题:
-
当我们通过
[player pause]
暂停AVPlayer
,AVPlayer
不会缓冲来自networking的video,还是停止播放? 在苹果的文档中,我无法得到任何与此相关的信息。 另外,是否有可能强制AVPlayer在暂停时保持缓冲,这样如果我们有暂停的video正在等待第一个video结束,那么我们不会在video之间find任何间隙? -
在暂停
AVPlayer
时,我们可以在[player pause]
上有任何事件。 -
我们可以在
AVPlayer
上显示静止图像几秒钟吗?
谢谢
1) AVPlayer
会在几种情况下缓冲video,没有清晰的logging。 我会说你可以期待缓冲,当你初始化video,当你更换当前项目。 你可以观察currentItem.loadedTimeRanges
知道发生了什么。 该属性将告诉你哪些video时间范围已被加载。
此外,还有一些其他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给定长度的电影,但在播放器上使用常规UIImageView
更容易。 在需要时隐藏/显示。
示例项目 :随意使用我写的代码来支持我的答案 。