我正在尝试同步播放两个 VLC 实例。为此,我使用了 UDP 数据包。从次要玩家,我向主要玩家发送一个包含当前位置的数据包,主要玩家以当前位置回答。然后我使用这些信息来估计延迟。到目前为止,这一切正常,UDP 会话的总运行时间可以忽略不计(在同一主机上运行,大约为 0.00017 秒,在有线 LAN 连接上稍微多一点)。
当我尝试使辅助流排列时,麻烦就开始了。如果差异很大,我只是设置位置。这最终不是很精确,因为玩家需要一些时间来寻找新的位置。
因此,如果差异相对较小,我尝试将播放速率设置为稍快或稍慢,直到它们在同一帧上(即“应该”帧等于“是”帧)。问题是播放器也有点挂
media_player.set_rate()
我尝试了更大的(1.2 / 0.9)值以及更小的(1.01 / 0.99),结果相似。
我也得到了很多:
[00007f6b8d9d7ab0] main decoder error: Timestamp conversion failed (delay 1000000, buffering 100000, bound 9000000)
[00007f6b8d9d7ab0] main decoder error: Could not convert timestamp 148752813836 for FFmpeg
和这个:
[00007f548002e180] main decoder error: Timestamp conversion failed for 41083001: no reference clock
[00007f548002e180] main decoder error: Could not convert timestamp 0 for FFmpeg
后者尤其是如果我对更新频率有点疯狂。
我想知道是否有任何其他/更好的方法来实现这一目标?我想知道是否可能涉及某种计算,我可以这样做以使新费率与内部时间参考更好地对齐?第二个错误(“没有参考时钟”)让我认为内部某些东西被重新初始化,因为它暂时不可用。
非常感谢您的帮助。