你能说我在Linux上使用c中的输入和输出之间的恒定时间延迟实现循环缓冲的最佳方法。我在线程上写入缓冲区并在另一个线程上读取它。我需要在读写之间保持恒定的时间差,并且写入流具有可变比特率。现在我每隔几个数据包添加timpestamps来同步它们,我从另一个每1ms使用一次clock_gettime的线程中获取时间戳。
答案 0 :(得分:1)
如您所说,整体方法是正确的。但是,有许多事情需要注意 -
提交给CBuf的源线程并从CBuf中删除线程。
CBuf必须足够大,以免数据丢失。
两个线程必须
CBuf数据必须加盖时间戳。此时间戳必须足够准确,以免引起传输抖动。
必须延迟接收线程,以确保它不会流动。
源和宿线程必须仅从共同的时间源获得时间,以便在它们各自的前进和流出速率之间不存在漂移。
如果您考虑将其传输到外部的某个硬件系统,可能是1 ms的时间戳精度非常低,因为MPEG传输合规性需要500 ns。但是,如果您使用硬件适配器进行传输,那么通常它会处理它。