使用DirectShow WinApi从麦克风获取原始数据



我正在尝试使用c++编写一个小的DirectShow应用程序。我的主要问题是从麦克风抓取原始数据并将其保存为字节。

可以使用DirectShow过滤器吗?我应该使用什么接口来获取数据?

现在,我能够使用以下图形过滤器实现编写录制的AVI文件:

麦克风->Avi Mux->文件写入器

这个图很好。

我尝试过使用SampleGrabber(已被Microsoft弃用),并且我缺乏关于如何处理此BaseFilter类型的知识。

通过设计,DirectShow拓扑需要完整,从源(麦克风)开始,以渲染器过滤器结束,DirectShow管道中的数据交换是私有的连接过滤器,没有数据暴露给控制应用程序。

这会让您感到困惑,因为您显然想要将内容从管道导出到外部世界。这并不是DirectShow设计的工作方式。

intded";DirectShow way"是开发一个自定义渲染器过滤器,它将连接到麦克风过滤器并接收其数据。由于开发自定义过滤器有点复杂,所以开发人员往往不愿意采用这种方法。

流行的解决方案是建立一个管道麦克风->采样器——>零渲染器。Sample Grabber是一个使用SampleCB回调公开数据的过滤器。即使随着时间的推移它变得越来越难,你仍然可以找到大量的代码来完成这项工作。大多数开发人员更喜欢这种方式:使用ready - to - use块来构建管道,而忘记DirectShow API。

另一个选择是根本不使用DirectShow。考虑到它的状态,这个API的选择是不幸的,您应该转而关注WASAPI捕获。

最新更新