2016-11-25 116 views

回答

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设置为较短的持续时间,玩家可能频繁停顿。

您还可以使用playeritem的canUseNetworkResourcesForLiveStreamingWhilePaused属性来设置播放器处于暂停状态时播放器应该继续还是暂停缓冲。这从iOS 9开始可用。

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) { 
_player.currentItem.canUseNetworkResourcesForLiveStreamingWhilePaused = NO; 
} 

的系统版本健康检查是非常重要的。你可以用 使用上面提到的宏来做到这一点。否则,应用程序将会崩溃 。

UPDATE - SWIFT:

if #available(iOS 10.0, *) { 
      player.currentItem?.preferredForwardBufferDuration = TimeInterval(1) 
      player.automaticallyWaitsToMinimizeStalling = true; 
    } 
0

根据我的测试,preferredForwardBufferDuration应该大于或等于1.0,如果低于1.0,默认缓存时间将被使用。