是否可以暂停和恢复AVPlayer的缓冲?

时间:2016-11-25 14:57:00

标签: ios avplayer

是否可以暂停和恢复AVPlayer的缓冲?

3 个答案:

答案 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中启用autoplayautowait功能的属性。因为如果将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