首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当生成音频数据时,如何创建一个线程来模拟捕获过滤器的精确定时?

当生成音频数据时,如何创建一个线程来模拟捕获过滤器的精确定时?
EN

Stack Overflow用户
提问于 2011-11-19 16:46:24
回答 1查看 55关注 0票数 0

我有一个DirectShow推送源过滤器,它从自定义音频流中积累数据,而这些音频流没有时间戳。它缓存它们,然后将它们发送到外部音频输出设备,该设备通过设备提供的HTTP服务器接受音频缓冲区(您通过HTTP提交音频缓冲区)。不幸的是,音频输出设备是计时敏感的。一次发送太多数据或(自然)一次发送太少的数据会混淆它,并导致诸如“口吃”之类的播放问题。

我需要以精确的时间间隔通过HTTP连接发送缓冲区,就像捕获设备在发布捕获数据时使用基于硬件的采样和时钟的精度一样。我想我必须创建一个实时的关键线程并使用它。以下是我的问题:

  1. ,我该怎么做时间?我使用什么Windows调用和数据结构来正确地完成这个任务?使用特性的东西?当我还没有准备好在我的推送源过滤器的

()方法中发布任何数据时,如何阻止

  1. ?穆特克斯?信号量?
  2. 如何避免漂移?例如,如果我需要生成一个50毫秒的缓冲区,并且我正在模拟8000的采样速率,我如何确保我没有低估或超过计算的发布时间,这种方式会随着时间的推移而累积,可能会导致音频中的空白?

EN

回答 1

Stack Overflow用户

发布于 2011-11-20 09:42:12

关于时间和漂移,您可以这样做:

当您开始流时,每次发送50 ms时,将当前时间存储在StreamingPos.

  • Now中,将StreamingPos增加50 ms。

  • ,并且在当前时间到达StreamingPos.

之前不再发送任何进一步的数据。

这样,您就可以将数据同步到本地系统时间。这不需要与播放器设备的时钟完全匹配。但这不应该是个问题。解决这一问题的唯一方法是让两个设备与同一个时间源同步。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8195572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档