是否可以暂停和恢复AVPlayer的缓冲?
答案 0 :(得分:4)
是的,这在一定程度上是可能的!
您可以使用playerItem的preferredForwardBufferDuration
属性来决定玩家应该预取当前播放时间的持续时间。但遗憾的是,这只能从iOS 10版本中获得。
检查系统版本的宏:
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
您现在可以设置要预取的持续时间(以秒为单位)。
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
NSTimeInterval interval = 1; // set to 0 for default duration.
_player.currentItem.preferredForwardBufferDuration = interval;
_player.automaticallyWaitsToMinimizeStalling = YES;
}
automaticallyWaitsToMinimizeStalling
是另一个在avplayer中启用autoplay
或autowait
功能的属性。因为如果将preferredForwardBufferDuration
设置为较小的持续时间,播放器可能会频繁停止。
您还可以使用播放项目的canUseNetworkResourcesForLiveStreamingWhilePaused
属性来设置玩家是否应该在播放器处于暂停状态时继续或暂停缓冲。这可以从iOS 9开始提供。
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
_player.currentItem.canUseNetworkResourcesForLiveStreamingWhilePaused = NO;
}
系统版本的状态检查非常重要。您可以 使用上面提到的宏来做到这一点。否则应用程序将 崩溃。
更新 - 快速:
if #available(iOS 10.0, *) {
player.currentItem?.preferredForwardBufferDuration = TimeInterval(1)
player.automaticallyWaitsToMinimizeStalling = true;
}
答案 1 :(得分:1)
根据我的测试,ggplot(data=df, aes(x=Demand_Supply,fill=time_slot),position = 'stack') +
geom_bar() + facet_wrap(~`Pickup.point`) +
geom_text(stat='count',aes(label=abs(..count..)))
应该大于或等于1.0,如果它低于1.0,将使用默认的缓冲持续时间。
答案 2 :(得分:0)
AV播放器在几种情况下缓冲视频,但没有明确的文档。您可以查看currentItem.loadedTimeRanges以了解可以在此主题上找到更多信息AVPlayer buffering, pausing notification, and poster frame