预加载HLS流以获取playerItem列表

时间:2017-07-31 23:14:37

标签: objective-c xcode avplayer hls preload

我试图预加载playerItem列表的第一秒以防止开始时的延迟。 我使用preferredForwardBufferDuration进行预加载。

以下是预装设置的摘录:

//setup repload in advance
VURLAsset *asset = [AVURLAsset assetWithURL:m3u8URL];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
playerItem.preferredForwardBufferDuration = 1;
AVPlayer *player = [[AVPlayer alloc] init];
_playerLayer.player = player;
player.replaceCurrentItemWithPlayerItem(playerItem)

// as soon as playback begins, reset it to 0 _item.preferredForwardBufferDuration = 0;

我有两个问题:

  1. 我注意到设置完成后,从AVPlayerItemStatusUnknown到AVPlayerItemStatusReadyToPlay的playerItem状态更改大约需要1-3秒(很棒的wifi)。因此,如果我在预加载设置后1秒钟内点击播放,则必须等待状态更改为准备就绪。为什么要花费那么多时间以及导致状态发生变化的原因是什么?在伟大的无线网络下预取前1秒不应该花费那么长时间。
  2. 我想预先加载playerItem列表的第一秒。是否可以使用上述方法?或者,如果我可以使用AVAssetResourceLoader?

1 个答案:

答案 0 :(得分:1)

加速播放有几个要处理的变量。看一下这个会话https://developer.apple.com/videos/play/wwdc2016/503/它包含“加速HTTP直播流”这一节可能会有所帮助。

加载时间可能包含几个组件,例如主播放列表太长并且需要时间来加载和解析(在这种情况下建议在Web服务器上使用gzip设置http压缩)或在开始播放之前加密FairPlay流。如果您的视频流是视频,您还可以调整视频的初始质量。