Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVPlayer和客户端透明源交换_Ios_Avplayer_Http Live Streaming - Fatal编程技术网

Ios AVPlayer和客户端透明源交换

Ios AVPlayer和客户端透明源交换,ios,avplayer,http-live-streaming,Ios,Avplayer,Http Live Streaming,我正在开发使用HLS的iOS应用程序。在我们的视频平台中,我们使用Nginx proxy_pass模块在其中一个源站不可用时(我们总共有两个源站)从一个源站重定向到另一个源站。在来源之间切换对于客户端是透明的,它由平衡器维护,因为客户端播放列表URI保持不变 我们面临着一个问题,AVPlayer与这样的切换工作流,它也出现在QuickTime。 根据网络日志,接下来发生的事情是: 在切换AVPlayer时,它会再次请求实时播放列表,当它播放完切换前加载的区块时,它开始播放的不是播放列表中的下一个

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

我们面临着一个问题,AVPlayer与这样的切换工作流,它也出现在QuickTime。 根据网络日志,接下来发生的事情是:

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

有什么建议可以解决这个问题吗?或者它是AVPlayer的核心缺陷(就Quicktime中出现的问题而言)?

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

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