如何将视频数据提供给DirectShow过滤器以压缩/编码并保存到文件?

时间:2015-01-30 20:57:10

标签: c++ winapi video directshow

首先,这是我正在努力实现的目标: 我们希望将这项功能添加到我们的商业应用程序中,以生成可视化数据的视频文件。它应以合理压缩的格式保存。重要的是,编码库/编解码器是许可的,这样我们就可以不受限制地使用和销售我们的软件。同样重要的是,客户可以轻松播放媒体格式,即可以由Windows Media Player播放而无需安装编解码器包。

我正在尝试在c ++中使用DirectShow,方法是创建一个带有一个生成视频输出引脚的源过滤器。我正在密切关注名为Bouncing Ball和Push Source的DirectShow示例。在GraphEdit中,我可以成功连接到视频渲染器并查看视频播放。我还设法连接到AVI Mux,然后文件编写器写一个未压缩的AVI文件。唯一的问题是文件大小。但是,我无法以压缩格式保存视频。 Ball和Push Source样本也会出现此问题。

我可以将输出引脚连接到WM ASF Writer,但是当我点击播放时,我得到“此图表无法播放。未指定错误(返回代码:0x80004005)。” 我甚至无法弄清楚如何连接到WMVideo9编码器DMO(“这些过滤器无法就连接达成一致”)。我可以成功保存到mjpeg,但压缩不是很大。

如果我在GraphEdit中做错了或者我的源过滤器代码需要修改,请告诉我。或者,如果有另一个(非DirectShow)选项对我有用,我愿意接受建议。感谢。

1 个答案:

答案 0 :(得分:1)

您不会提供有助于修改过滤器的详细信息,但Ball样本会生成可写入文件的输出。

您选择的WM ASF Writer过滤器是可以的 - 它是一个库存过滤器,它或多或少易于处理。但是有一点需要注意:您需要先在过滤器上选择仅视频配置文件,然后连接视频输入。 WM ASF Writer不会使用未连接的输入引脚运行,并且在默认状态下它还具有音频输入。当然,这也可以通过编程方式完成。

图表可以像这样简单,它可以运行并生成可播放的文件。