【发布时间】:2019-08-05 07:40:02
【问题描述】:
我们目前正在将 ExoPlayer 用于我们的一个应用程序,它与 HQ Trivia 应用程序非常相似,并且我们使用 HLS 作为流协议。
由于游戏的性质,我们试图让该流的所有观众都具有相同的延迟,基本上是为了让他们保持同步。
我们注意到,在当前的后端配置下,延迟在 6 到 10 秒之间。基于这一事实,我们假设“强制”玩家以更大的延迟(15 秒,离直播边缘更远)进行游戏是安全的,这样可以在所有设备上实现相同的(恒定)延迟。
我们使用 EXT-X-PROGRAM-DATE-TIME 标签来获取当前播放内容的服务器时间,并且我们还有一个带有当前时间 (NTP) 的主时钟。我们不断比较 2 个时钟以检查当前延迟。我们会暂停播放器,直到它达到所需的延迟,然后我们会恢复播放。
这个解决方案的问题是延迟可能会随着时间的推移而变得更糟(累积延迟),如果延迟太大(超过指定的步数),我们别无选择,只能重新开始播放并重做上述步骤临界点)。在重新启动播放器之前,我们还尝试稍微提高播放速度,直到达到指定的延迟。
exoPlayer 实例使用 DefaultLoadControl、DefaultRenderersFactory、DefaultTrackSelector 设置,媒体源使用 DefaultDataSourceFactory。
服务器端配置如下: cupertinoChunkDurationTarget:2000(默认值:10000) CupertinoMaxChunkCount:31(默认:10) cupertinoPlaylistChunkCount:15(默认:3)
我的第一个问题是,这是否可以通过 HLS 之类的协议实现?为什么玩家漂移的延迟越来越多? 考虑到我们的特定用例,是否有更好的 exoPlayer 实例设置? 有没有更好的方法可以在所有播放设备上实现恒定的播放延迟?在尝试实现这种行为时,服务器端的参数有多重要?
我非常感谢任何形式的帮助,因为我已经走到了死胡同。 :)
谢谢!
【问题讨论】:
标签: live-streaming http-live-streaming exoplayer exoplayer2.x