在如何"smear"播放速率以同步两个播放器?



我正在尝试同步播放两个VLC实例。为此,我使用UDP数据包。从次要玩家,我用当前位置向主要玩家发送一个数据包,主要玩家用其当前位置回答。然后,我使用这些信息来估计延迟。到目前为止,这一切都很好,UDP会话的总运行时间是负的(在同一台主机上运行,大约0.00017s,在有线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

后者尤其是如果我在更新频率上有点疯狂的话。

我想知道是否还有其他/更好的方法来实现这一点?我想知道是否可能涉及到某种计算,我可以这样做,以便新的费率更好地与内部时间参考一致?第二个错误("无参考时钟"(让我认为内部的某些东西被重新初始化了,因此暂时无法使用。

非常感谢您的帮助。

我得到了同样的错误,但调用了set_position`。正如您所注意到的,在低频率下调用函数并没有产生任何错误。

我不知道您实现的细节,但您可以使用代理来限制调用的频率。

在我的情况下,我没有看到任何低于每秒30帧的错误。

最新更新