如何在Windows中使用H264视频编码器MFT对位图进行编码

3

我的应用程序会对从GDI或DXGI方法捕获的帧进行编码。目前我正在使用x264库进行编码。
据我所知,x264是基于软件的库,我想利用GPU进行编码,这样可以节省CPU周期,并且希望速度也会更快。
搜索后,我发现了一个H.264视频编码器 MFT,可以进行h264编码。
但是还有一些问题需要回答。
1)它比x264编码库更快吗?
2)位图帧是否可以用这个MFT进行编码?
- 我只看到支持MFVideoFormat_I420、MFVideoFormat_IYUV、MFVideoFormat_NV12、MFVideoFormat_YUY2、MFVideoFormat_YV12这些格式
3)它是否具有硬件加速(即它是使用CPU还是GPU)?
- 最初我的理解是它使用GPU,但在阅读了这篇文章MFT编码器(h264)高CPU利用率之后,我感到困惑。
4)H.264视频编码器MFT是否可以独立使用而不使用sink writer,因为我必须将数据发送到网络上?
5)在Windows中是否有其他替代品?

也许有些问题很幼稚,请随意编辑。


我在其他问题中发现,要使用硬件编码器必须设置标志MFT_ENUM_FLAG_HARDWARE。我希望它能自动检测到硬件。 - anurudh
我发现了一种备选方案,但它是第三方实现。我正在寻找类似于 Windows 的 H.264/AVC Wrapper 库。 - anurudh
1个回答

2

媒体基础 H.264 视频编码器是一种软件编码器。从我的[主观]经验来看,它比 x264 慢,而且在选择速度和质量范围的模式时,x264 提供了更广泛的设置,这可能更为重要。无论哪种方式,股票 MS 编码器都没有硬件加速。

然而,可能会有其他可用的 MFT(通常随相关硬件驱动程序安装)进行硬件加速的 H.264 编码。您可以通过枚举 MFTs 来发现它们,其中最流行的可能是英特尔快速同步视频(QSV)编码器。

HardwareVideoEncoderTransform 应用程序 进行枚举并提供相关详细信息:

enter image description here

典型输入是 NV12,有些提供其他输入选择(例如 32 位 RGB)。如果您需要其他格式,则必须预先转换输入。

硬件支持的编码器 CPU 消耗低,其效率取决于硬件实现。是的,您可以将它们作为独立的完全独立使用,也可以将其包装为 DirectShow 过滤器并包含在正常的 DirectShow 管道中。

备用 H.264 编码器通常是基于 SDK 或封装在 DirectShow/MFT 形式因素中的这些 SDK 的包装器,因为供应商已经将其实现打包成熟悉的形式,这对多媒体开发人员来说已经很熟悉了。


谢谢@Roman R。实际上,我感到困惑,因为我在许多地方读到H264编码器是硬件加速的。请参考http://stackoverflow.com/questions/31236646/how-to-use-hardware-h-264-encoder-in-windows-media-foundation,http://stackoverflow.com/questions/23251666/where-is-the-clsid-for-media-foundation-h264-encoder和[使用硬件MFTs编码H.264视频](http://alax.info/blog/1586)。 - anurudh
“Media Foundation sees the MFT choices and picks a suitable one”这句话是什么意思,由谁来执行呢?假设我正在使用我的应用程序,它只是调用X264 API,那么我们必须编写逻辑来选择硬件MFT而不是软件MFT,或者在Windows中已经实现了这样的逻辑。这可能是一个愚蠢的问题,但我有点困惑。 - anurudh
请问您能否提供一些替代方案的名称? - anurudh
我的意思是,当你直接处理MFT时,你可以使用软件MFT或硬件MFT - 由你决定选择哪一个。然而,当H.264编码是Media Foundation拓扑结构的一部分并且它自己选择编码器时,它会自行进行选择:它会看到编码器的优点并选择“最合适”的工作方式。在这里,你正在尝试使用MFT,如果你使用H.264视频编码器MFT,那么你只能进行软件编码。你需要另一个MFT来通过硬件进行编码。 - Roman R.
Intel、Nvidia和AMD的备用MFT分别是:Intel® Quick Sync Video H.264编码器MFT、NVIDIA H.264编码器MFT、AMDh264Encoder。 - Roman R.
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接