1

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

  • 自定义推送源音频过滤器
  • 样品采集器
  • Tee 过滤器(但仅当我同时打开 WAV 文件编写器和渲染器时)
  • 渲染器(首选 PC 输出设备)
  • WAV 文件编写器

仅当我同时打开了 Renderer 和 WAV File Writer 过滤器时,才会将 Tee 过滤器添加到图表中。否则,我只将直接打开的过滤器连接到 Sample Grabber

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

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

当我打开 File Writer 过滤器时,谁能告诉我会发生什么以使音频传输顺畅?三通过滤器是否有任何固有的缓冲作用?我想复制相同的机制,以便在未打开文件写入器时获得流畅的音频。我试图避免添加我自己的缓冲,因为我不想给实时音频流增加任何延迟。

4

1 回答 1

2

如果您有一个实时源并且您可以同时收听它和交付的音频,您可能能够判断添加 File Writer 是否会引入延迟,这可能是造成差异的原因。或者DecideBufferSize.

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

如果您需要以最少缓冲或无缓冲运行,则更复杂的方法可能是在保留音高的同时拉伸/压缩音频。

于 2012-01-13T23:02:18.853 回答