我们当前正在其中一个应用程序中使用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实例是否有更好的设置? 有没有更好的方法可以在所有播放设备上实现恒定的播放延迟?服务器端的参数在尝试实现这种行为方面有多重要?
我真的很感谢任何帮助,因为我已经走到了尽头。 :)
谢谢!
答案 0 :(得分:0)
唯一的解决方法是:
https://netinsight.net/product/sye/
他们的解决方案包括帧精确同步,无漂移和状态ABR。基于http的协议可能无法做到这一点,因此其解决方案基于UDP传输。