0

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

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

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

任何建议如何解决这个问题?还是它的核心 AVPlayer 错误(这个问题也出现在 Quicktime 中)?

4

1 回答 1

0

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

结果是容错视频平台,在主从(第二)源之间进行透明切换,可与自动和手动质量选择一起使用。

于 2012-08-14T14:12:47.177 回答