【发布时间】:2013-11-08 07:18:27
【问题描述】:
动机: 我目前正在尝试在两个联网的 raspis 上同步两个视频。我尝试从桌面(http 和 udp)实时流式传输,但每个 raspi 仍然以明显的延迟打开流。接下来我尝试在 raspi 上安装 vlc 并与桌面 vlc 同步,但这也不起作用。我尝试使用 shell 脚本在两个 raspis 上几乎同时启动 omxplayer,但也失败了。最后,我使用 C 脚本在几乎相同的时间启动了两个 omxplayer,但也失败了。最终,我认为无法控制 omxplayer 何时开始实际播放视频文件。
当前进度:
因此,现在,我正在修改 omxplayer 的代码以使用套接字同步两个 omxplayer,但我想知道在同步其视频客户端时,像 vlc 之类的方法是什么,以免重新发明轮子。我可能是错的,但我注意到,通过查看详细的输出和调试语句,一个播放器相对于另一个播放器会浪费时间,因此随着视频的播放,这种差异会增加,并且在 2-3 分钟后超过 200小姐。我觉得这非常令人不安。这意味着 2 小时后,差异将是 60*200ms=12000ms 或大约 12s。我认为现代计算的精度会更像原子钟,在 1000 小时的镜头后可能会丢失 1 秒,因此我认为只需同步一次提要就足够了。
问题: 如果需要不断地同步不同的播放器,那么像vlc这样的东西是如何做到的呢?
- 是否等到出现明显延迟并快进/快退?
- 是否在有任何差异时快进/快退?
- 纠正这种差异(即套接字信号)本身是否会导致进一步的延迟?
- 由于在视频中移动到较远的时间比连续播放需要更长的时间,它如何预测快进/快退的秒数?
- 我听到很多人在谈论 ticks(不是昆虫),以及主 vlc 如何发出 ticks。但是,我不明白这些滴答声是如何解释的:您是暂时暂停所有其他播放器直到下一个滴答声,还是以某种方式调节视频的 速度(如果可能的话)即时)?
注意:我没有流式传输实际的视频文件,因为它们都是通过每个 raspis 上的 NFS 远程访问的。
【问题讨论】:
-
您是否使用
ntp在主机之间同步时间? vlc 提供了几个选项来允许在多个主机上同步播放。您尝试了哪些选项,哪些选项不起作用? -
@J.F.Sebastian 我正在使用 ntp,但 TBH 更容易使用 TCP 消息向服务器发出信号,表明您已准备好并让服务器广播所有客户端以启动。此外,我正在努力让服务器广播其本地电影位置(即 105.5 秒),并让客户端根据偏差量在本地更新其播放速度。这,IMO,是更容易,因为没有叉子和管道。现在我只需要让我该死的交叉编译器工作来测试我的代码。
-
@JFSebastian 另外,我不能使用 VLC,因为 raspi 的功能不足以运行它(我知道它已经为 raspi 进行了硬件加速,但 raspi 仍然需要为流畅播放超频)
-
您是否尝试过查看 vlc 提供了哪些选项以及如何实施它们:实施者遇到了哪些问题、未解决的问题是什么等?
-
@J.F.Sebastian 不...不是我懒惰,只是我一天的时间只有这么多。我选择从简单的解决方案开始,当这些解决方案不起作用时,转向更复杂的解决方案。目前,我的工作重点是理解和修改 omxplayer C++ 代码,并让这个 [疯狂挑剔的] 交叉编译器工作
标签: algorithm video media-player