你能说我在 linux 上用 c 语言在输入和输出之间实现具有恒定时间延迟的循环缓冲区的最佳方法吗?我在线程中写入缓冲区并在另一个线程中读取它。我需要保存读写之间的恒定时间差,并且写入流具有可变比特率。现在我每隔几个数据包添加时间戳以同步它们,并且我从另一个线程获取时间戳,该线程每 1 毫秒使用一次 clock_gettime。
问问题
574 次
1 回答
1
正如您所建议的,总体方法是正确的。但是,有很多事情需要注意——
提交给 CBuf 的源线程和从 CBuf 中移除的接收线程。
CBuf 必须足够大,以免数据丢失。
CBuf 必须被两个线程锁定以确保没有损坏。
CBuf 数据必须带有时间戳。该时间戳必须足够准确,不会引起传输抖动。
接收器线程必须延迟以确保它不会下流。
源线程和汇线程必须仅从公共时间源获取时间,以便它们各自的流入和流出速率之间没有漂移。
可能如果您正在考虑将其传输到外部的某些硬件系统,则 1 ms 的时间戳精度非常低,因为 MPEG 传输合规性需要 500 ns。但是,如果您使用硬件适配器进行传输,那么通常它会处理它。
于 2012-03-23T13:25:19.903 回答