c具有恒定时间延迟的循环缓冲器,用于mpeg-ts

时间:2012-03-22 13:18:31

标签: c mpeg circular-buffer

你能说我在Linux上使用c中的输入和输出之间的恒定时间延迟实现循环缓冲的最佳方法。我在线程上写入缓冲区并在另一个线程上读取它。我需要在读写之间保持恒定的时间差,并且写入流具有可变比特率。现在我每隔几个数据包添加timpestamps来同步它们,我从另一个每1ms使用一次clock_gettime的线程中获取时间戳。

1 个答案:

答案 0 :(得分:1)

如您所说,整体方法是正确的。但是,有许多事情需要注意 -

  1. 提交给CBuf的源线程并从CBuf中删除线程。

  2. CBuf必须足够大,以免数据丢失。

  3. 两个线程必须锁定 以确保没有损坏。

  4. CBuf数据必须加盖时间戳。此时间戳必须足够准确,以免引起传输抖动。

  5. 必须延迟接收线程,以确保它不会流动。

  6. 源和宿线程必须仅从共同的时间源获得时间,以便在它们各自的前进和流出速率之间不存在漂移。

  7. 如果您考虑将其传输到外部的某个硬件系统,可能是1 ms的时间戳精度非常低,因为MPEG传输合规性需要500 ns。但是,如果您使用硬件适配器进行传输,那么通常它会处理它。