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