我有一台计算机,每隔5毫秒发送一个包含测量数据的UDP数据包。
另一台配有高速线扫描相机的计算机接收这些数据包,并将数据包数据作为附加数据填充到无尽的相机图像中。
问题是数据包没有每5毫秒到达一次。没关系。我知道网络数据包有抖动。有时10毫秒延迟,有时两个数据包之间没有延迟。因此,在它们到达时将UDP数据填充到无限图像中并不是一个好主意。
Time -------------------------------------------------------------------->
UDP Packets: A B C D E F G H I J K ....
Cam Lines: 012345678901234567890123456789012345678901234567890 ...
Optimal: A B C D E F G H I J K ...
有没有人知道goot同步算法来解决这个问题? 一个难点是这是一个无休止的运行系统,同步必须是自我调整。
答案 0 :(得分:4)
对于像这样的任何流媒体系统,你有数据包间的抖动,你想要实现一个抖动缓冲区,并将数据接收的重放解耦。在缓冲区中接收数据包(大小取决于您可能有多少抖动)。在缓冲区半满(或您选择的其他阈值)之前,不要开始播放任何数据。然后你有一个只需每5ms从抖动缓冲区读取一次的回放线程并输出。