提问人:LUN2 提问时间:6/10/2022 最后编辑:Roman R.LUN2 更新时间:6/10/2022 访问量:140
关于DirectShow源筛选器
About DirectShow source filter
问:
我创建了(C++、Win10、VS2022)一个简单的源DirectShow过滤器。它从外部源(文件-用于测试,网络-将来)获取音频流,并在输出引脚上生成音频流,我将其连接到Soundspeaker。
为此,我为过滤器的输出引脚 (CSourceStream) 实现了 FillBuffer 方法。介质类型 - MEDIATYPE_Stream/MEDIASUBTYPE_PCM。 在连接之前,引脚通过 SetMediaType (WAVEFORMATEX) 获取有关媒体类型的信息,并记住音频的参数 - wBitsPerSample;nSamplesPerSec;n通道。音频流从外部源(文件或网络)发送到 FillBuffer,参数为 - wBitsPerSample;nSamplesPerSec;n通道。它工作正常。
但是我需要处理情况,当外部源将音频流发送到滤波器时,使用另一个参数(例如,旧样本有 11025 Hz,电流 = 22050)。
你能帮我吗 - 如果我将接收带有更改的 wBitsPerSample 或 nSamplesPerSec 或 nChannels 参数的音频流,我应该在 FillBuffer() 方法中进行哪些操作和调用?
事实是,这些参数已经在我的输出引脚和扬声器的输入引脚之间达成一致,我需要正确更改这些协议。
答:
您需要改进实施和处理
动态格式更改
...
QueryAccept
(Downstream) 在以下情况下使用:如果输出引脚建议对其下游对等体进行格式更改,但前提是新格式不需要更大的缓冲区。
这可能并非微不足道,因为基线DirectShow筛选器不需要支持动态更改。也就是说,更改格式的能力取决于实际管道和其他筛选器的实现。
您还应该能够找到 SDK 帮助程序,以及 .CDynamicSourceStream
CDynamicSource
评论
FillBuffer
IMediaSample::SetMediaType
评论