首页 文章

为什么在我的DirectShow过滤器图形中添加渲染器可以平滑输出到图形的音频?

提问于
浏览
1

我在使用DSPACK组件库构建的Delphi 6应用程序中有一个DirectShow过滤器图 . 图的结构如下:

  • 自定义推送源音频过滤器

  • 样品采集器

  • Tee过滤器(但仅当我打开WAV文件编写器和渲染器时)

  • 渲染器(首选PC输出设备)

  • WAV文件编写器

只有在我打开了渲染器和WAV文件编写器过滤器的情况下,才会将Tee过滤器添加到图形中 . 否则,我只将直接打开的过滤器连接到Sample Grabber .

音频通过WiFi连接的RTSP音频服务器传送,该服务器实时传输音频 . 如果我打开Wav文件编写器,我的耳机发出的音频具有典型的泵浦和偶尔发出的与无缓冲音频流相关的咔嗒声 . 奇怪的是,只要我打开WAV文件编写器过滤器,音频就像玻璃一样变得光滑 .

我有WAV文件编写器的源代码,它基本上处理了在需要时输出正确的WAV文件头并根据需要编写音频缓冲区的任务,而不是更多 . 所以我觉得奇怪的是,打开它可以平滑传入的音频流,特别是因为它不是渲染器(过滤器)的上游,而是在渲染器旁边的Tee过滤器末端悬挂的对等过滤器 .

当我打开文件编写器过滤器时,有人能告诉我可能会发生什么事情使音频传输顺利进行吗? Tee过滤器是否进行任何固有缓冲?我想复制相同的机制,这样我就可以在没有打开文件编写器时获得流畅的音频 . 我试图避免添加自己的缓冲,因为我不想再添加任何延迟到实时音频流 .

1 回答

  • 2

    如果您有一个实时源,并且您可以同时收听它和传送的音频,您可能能够判断添加文件编写器是否会引入延迟,这可能会对差异负责 . 或者 DecideBufferSize 中的协商缓冲区的大小或数量可能会发生变化 .

    我建议在推送过滤器中引入显式缓冲,例如向媒体样本时间戳添加偏移量 . T形滤波器中的固有缓冲可能不可靠 . 交货时间的变化是不可避免的 .

    更复杂的方法,如果您需要以最小或无缓冲运行,可以在保持音高的同时拉伸/压缩音频 .

相关问题