Directshow 音频捕获过滤器每秒仅生成 1 个样本

Directshow audio capture filter generates only 1 sample per second

我正在使用 Directshow 制作一个小型实时音频-视频应用程序。我使用 SampleGrabber 从 Audio Capture 过滤器中获取样本。 SampleGrabber 的回调每秒调用一次,每个样本的大小为 88200 字节。我打印了 WAVEFORMATEX:
WAVE_FORMAT_PCM: 真
n 频道:2
nSamplesPerSec:44100
nAvgBytesPerSec:176400
nBlockAlign: 4
wBitsPerSample: 16
cbSize: 0

所以我有两个问题:

  1. Directshow方面的'sample'和录音方面的'sample'有区别吗?因为据我所知,每秒有 44100 个样本(每个样本占用 16 位),而 directshow 的 SampleGrabber 每秒仅抓取 1 个样本(每个样本占用 88200 字节)。看起来很多样本被聚合并放入 'buffer' ?

  2. 如果将大量音频样本放入缓冲区,则缓冲区的大小应为每秒 176400 字节。为什么每个缓冲区只有 88200 字节?是否只使用了 1 个通道?

Directshow“样本”是一个术语,用于表示包含数据的缓冲区:

When a pin delivers media data to another pin, it does not pass a direct pointer to the memory buffer. Instead, it delivers a pointer to a COM object that manages the memory. This object, called a media sample, exposes the IMediaSample interface.

然后

... size should be 176400 bytes per sec. Why it is only 88200 bytes per buffer?

不应该。您看到捕获过滤器的默认行为是生成 500 毫秒的缓冲区。您可以使用 IAMBufferNegotiation interface (related questions 并搜索其他) 来覆盖此行为。