使HLS实时流跨设备同步

时间:2019-03-14 12:00:58

标签: live-streaming hls exoplayer http-live-streaming exoplayer2.x

我们当前正在其中一个应用程序中使用ExoPlayer,这与HQ Trivia应用程序非常相似,并且我们将HLS用作流协议。

由于游戏的性质,我们试图使该流的所有观看者都具有相同的延迟,基本上是使他们保持同步。

我们注意到,使用当前的后端配置,延迟大约在6到10秒之间。基于这一事实,我们认为“强制”播放器以更大的延迟(15秒,离实时边缘更远)玩游戏是安全的,这样可以在所有设备上实现相同(恒定)的延迟。 / p>

我们正在使用EXT-X-PROGRAM-DATE-TIME标记来获取当前正在播放的内容的服务器时间,并且我们还有一个带有当前时间(NTP)的主时钟。我们会不断比较这两个时钟以检查当前延迟。我们会暂停播放器,直到达到所需的延迟,然后重新开始播放。

此解决方案的问题在于,随着时间的流逝,延迟可能会变得更糟(累积延迟),并且除了延迟过大(超出指定的步数),我们没有其他选择,只能重新开始播放并重做上述步骤。阈)。在重新启动播放器之前,我们还尝试稍微提高播放速度,直到达到指定的延迟。

exoPlayer实例使用DefaultLoadControl,DefaultRenderersFactory,DefaultTrackSelector进行设置,媒体源使用DefaultDataSourceFactory。

服务器端配置如下: cupertinoChunkDurationTarget:2000(默认值:10000) cupertinoMaxChunkCount:31(默认值:10) cupertinoPlaylistChunkCount:15(默认值:3)

我的第一个问题是,是否可以使用HLS这样的协议来实现?为什么玩家会逐渐离开并积累越来越多的延迟? 考虑到我们的特定用例,exoPlayer实例是否有更好的设置? 有没有更好的方法可以在所有播放设备上实现恒定的播放延迟?服务器端的参数在尝试实现这种行为方面有多重要?

我真的很感谢任何帮助,因为我已经走到了尽头。 :)

谢谢!

1 个答案:

答案 0 :(得分:0)

唯一的解决方法是:

https://netinsight.net/product/sye/

他们的解决方案包括帧精确同步,无漂移和状态ABR。基于http的协议可能无法做到这一点,因此其解决方案基于UDP传输。