c++ - 将 DirectShow 与 Direct2D 结合使用

标签 c++ video directshow ms-media-foundation direct2d

我有一个仅限 Windows 的 Direct2D 应用程序,我想为过场动画实现一个视频播放系统。这些文件是 mp4,但如果需要,可以更改格式。

似乎 DirectShow 是在 Windows 上呈现视频/音频的推荐方式。

现在如何让 DirectShow 将视频帧渲染到我的 Direct2D 渲染目标?

VMR-9 过滤器看起来是最佳途径,但我似乎找不到将它集成到我的应用程序中的优雅方式

最佳答案

Windows 中没有 Direct2D/DirectShow 互操作层。为了适应这两种技术,您必须以一种相当低效的方式在 API 之间复制数据(这仍然需要一些时间来开发适应性)。

对于 H.264/HEVC MP4 视频文件,您最好使用 Media Foundation 来读取和解码帧,然后将它们加载到 Direct2D 位图中并在您的应用程序中显示。在性能方面,可以通过 GPU 以合理的成本和合理的开发工作将视频帧传输到 Direct2D 位图,但即使您走捷径并进行粗略和低效的集成,它也将与 DirectShow 相提并论。

我建议首先使用 Media Foundation 查看和解码视频帧 Source Reader API .熟悉拟合技术后,您将采取下一步并通过使用 GPU 容量和 interop between Direct3D and Direct2D 优化传输。 .

关于c++ - 将 DirectShow 与 Direct2D 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64633811/

相关文章:

c++ - 如果 std::call_once 已执行,获取状态吗?

HTML 对象自动播放关闭

audio - Directshow音频/视频捕获同步

windows - 如何为我的 DirectShow 过滤器制作安装程序?

c++ - DirectShow编译问题

c++ - 多线程:thread 或 process.h - C++

c++ - 使用 conan 仅安装 boost 的一部分

c++ - 如何为 a[x][y] 形式创建重载运算符?

video - ffmpeg 将字幕轨道设置为默认值

c# - FFmpeg "movflags"> "faststart"导致写入无效的 MP4 文件