将DirectShow与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优化传输。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...