【问题标题】:c circular buffer with constant time delay for mpeg-ts用于mpeg-ts的具有恒定时间延迟的c循环缓冲区
【发布时间】:2012-03-22 13:18:30
【问题描述】:

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

【问题讨论】:

  • 不清楚你在这里问什么。
  • 我在问什么是实现循环缓冲区的最佳方法,在 linux 下的 c 中写入和读取之间具有恒定的时间延迟
  • @ostryck 我建议你阅读stackoverflow.com/questions/how-to-ask 然后回来编辑你的问题。
  • @JustinDoesWork 感谢您的耐心等待,我希望我以更易于理解的方式对其进行了编辑
  • @ostryck 您仍然需要澄清您的实际问题。另请参阅stackoverflow.com/questions/827691/… 作为可能的解决方案。

标签: c mpeg circular-buffer


【解决方案1】:

按照您的建议,总体方法是正确的。但是,有很多事情需要注意 -

  1. 提交给 CBuf 的源线程和从 CBuf 中删除的接收线程。

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

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

  4. CBuf 数据必须带有时间戳。该时间戳必须足够准确,不会引起传输抖动。

  5. 必须延迟接收器线程以确保它不会处于流动状态。

  6. 源线程和接收器线程必须仅从公共时间源派生时间,以便它们各自的流入和流出速率之间没有漂移。

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

【讨论】:

  • 非常感谢您的解释,这正是我想要的
猜你喜欢
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多