AVPlayer和客户端透明原点切换

时间:2012-08-02 09:47:51

标签: ios avplayer http-live-streaming

我正在开发使用HLS的iOS应用。在我们的视频平台中,我们使用Nginx proxy_pass模块从一个源重定向到另一个源,当其中一个变得不可用时(根本就有2个来源)。对于客户端来说,在起源之间切换是透明的,它由平衡器维护,因为客户端播放列表URI保持不变。

我们遇到了AVPlayer的问题,这种切换工作流程也出现在QuickTime中。 根据网络日志,接下来会发生一些事情:

在切换时,AVPlayer再次请求实时播放列表,当它在切换之前完成播放块时,它开始播放不是播放列表中的下一个块,而是第一个! 并且AVPlayer currentTime属性没有变化,它继续改变,就像没有切换第一个块一样(在播放列表currentTime开始时正常搜索将为0),没有播放器项状态发生变化,没有通知被抛出,没有特殊的访问日志,错误日志是空的。 因此,我们无法更新用户界面(即搜索栏)并更改用户他被重定向到另一个直播时间。在上下文中问题更加严重,我们不应该向用户显示超出特定广播界限的实时流。

有任何建议如何解决这个问题?或者它是核心AVPlayer错误(只要此问题也出现在Quicktime中)?

1 个答案:

答案 0 :(得分:0)

解决方案是: 1)对不同来源的播放列表使用不同的名称, 2)尝试从禁用来源更新播放列表时发送回客户端404或其他错误, 3)在播放列表中使用后备 - 在多比特播放列表中添加第二个来自第二个来源的替代播放列表。它在HLS文档中说明。当AVPlayer在更新播放列表时收到错误时,它会尝试从后备播放列表进行更新 4)为了提供手动质量选择,我们还要在播放列表和后备播放列表的中间变体播放列表中包含播放列表以获得特定品质。我们用于从livestream生成播放列表的FMS无法做到这一点,因此我们需要在Nginx一侧生成变体播放列表

结果是容错视频平台,主从和第二个来源之间透明切换,可以自动和手动选择质量。