【问题标题】:How to feed video data into a DirectShow filter to compress/encode and save to file?如何将视频数据输入 DirectShow 过滤器以压缩/编码并保存到文件?
【发布时间】:2015-01-30 20:57:10
【问题描述】:

首先,这是我想要完成的任务: 我们想为我们的商业应用程序添加生成视频文件以可视化数据的功能。它应该以合理的压缩格式保存。重要的是,编码库/编解码器已获得许可,这样我们就可以不受限制地使用和销售我们的软件。客户可以轻松播放媒体格式也很重要,即无需安装编解码器包即可由 Windows Media Player 播放。

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

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

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

【问题讨论】:

    标签: c++ winapi video directshow


    【解决方案1】:

    您没有提供详细信息来帮助您修改过滤器,但是 Ball 示例会生成可以写入文件的输出。

    您选择的 WM ASF Writer 过滤器没问题 - 它是一个普通过滤器,或多或少容易处理。但是有一个警告:您需要先在过滤器上选择仅视频配置文件,然后连接视频输入。 WM ASF Writer 不会在未连接输入引脚的情况下运行,并且在默认状态下它还具有音频输入。当然这也可以通过编程来完成。

    图可以这么简单,可以运行,生成可播放的文件。

    【讨论】:

    • 是的!选择没有音频的配置文件就可以了。现在我应该能够以编程方式设置自定义无音频配置文件并连接并运行图表。感谢您的帮助 - 这让我开始头疼了。
    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多