windows 如何使用 H264 视频编码器 MFT 编码位图
how encode bitmap with H264 video encoder MFT in windows
我的应用程序对从 GDI 或 DXGI 方法捕获的帧进行编码。目前我正在使用 x264 库进行编码。
AFAIK x264 是基于软件的库,我想在 GPU 的帮助下进行编码,因此它可以节省 CPU 周期并希望速度也会更快。
经过搜索,我找到了一个H.264 Video Encoder MFT,它正在做h264编码。
但是我回答了几个问题。
1)它比x264编码库快吗?
2) 位图帧可以用这个 MFT 编码吗?
- 我只看到 MFVideoFormat_I420、MFVideoFormat_IYUV、MFVideoFormat_NV12、MFVideoFormat_YUY2、MFVideoFormat_YV12 支持这些格式
3) 它是硬件加速的吗(意味着它使用 CPU 或 GPU)?
- 最初我的理解是它使用 GPU,但在阅读此 post MFT Encoder (h264) High CPU utilization.
后我感到困惑
4) H.264 Video Encoder MFT 是否可以单独使用而不使用 sink writer,因为我必须在网络上发送数据?
5) windows 还有其他选择吗?
可能有些问题很傻,欢迎大家指正。
Media Foundation H.264 Video Encoder 是软件编码器。从我的 [主观] 经验来看,它比 x264 慢,也许更重要的是,x264 提供了更广泛的设置,特别是在选择速度超过质量范围的模式时。无论哪种方式,库存 MS 编码器都不是硬件加速的。
但是,可能还有其他可用的 MFT(通常与相应的硬件驱动程序一起安装)执行硬件加速 H.264 编码。您可以通过枚举 MFT 来发现它们,也许最受欢迎的是英特尔快速同步视频 (QSV) 编码器。
HardwareVideoEncoderTransform
app进行枚举并为您提供相关详情:
典型的输入是 NV12,一些提供其他输入选择(例如 32 位 RGB)。如果您需要其他格式,则必须预先转换输入。
硬件支持的编码器CPU消耗低,其效率取决于硬件实现。是的,您可以单独使用它们、完全独立使用它们或将它们包装为 DirectShow 过滤器并包含在普通 DirectShow 管道中。
替代的 H.264 编码器通常基于 SDK,或者以 DirectShow/MFT 形式对这些 SDK 进行包装,因为供应商以多媒体开发人员已经熟悉的众所周知的形式打包他们的实现。
我的应用程序对从 GDI 或 DXGI 方法捕获的帧进行编码。目前我正在使用 x264 库进行编码。
AFAIK x264 是基于软件的库,我想在 GPU 的帮助下进行编码,因此它可以节省 CPU 周期并希望速度也会更快。
经过搜索,我找到了一个H.264 Video Encoder MFT,它正在做h264编码。
但是我回答了几个问题。
1)它比x264编码库快吗?
2) 位图帧可以用这个 MFT 编码吗?
- 我只看到 MFVideoFormat_I420、MFVideoFormat_IYUV、MFVideoFormat_NV12、MFVideoFormat_YUY2、MFVideoFormat_YV12 支持这些格式
3) 它是硬件加速的吗(意味着它使用 CPU 或 GPU)?
- 最初我的理解是它使用 GPU,但在阅读此 post MFT Encoder (h264) High CPU utilization.
后我感到困惑
4) H.264 Video Encoder MFT 是否可以单独使用而不使用 sink writer,因为我必须在网络上发送数据?
5) windows 还有其他选择吗?
可能有些问题很傻,欢迎大家指正。
Media Foundation H.264 Video Encoder 是软件编码器。从我的 [主观] 经验来看,它比 x264 慢,也许更重要的是,x264 提供了更广泛的设置,特别是在选择速度超过质量范围的模式时。无论哪种方式,库存 MS 编码器都不是硬件加速的。
但是,可能还有其他可用的 MFT(通常与相应的硬件驱动程序一起安装)执行硬件加速 H.264 编码。您可以通过枚举 MFT 来发现它们,也许最受欢迎的是英特尔快速同步视频 (QSV) 编码器。
HardwareVideoEncoderTransform
app进行枚举并为您提供相关详情:
典型的输入是 NV12,一些提供其他输入选择(例如 32 位 RGB)。如果您需要其他格式,则必须预先转换输入。
硬件支持的编码器CPU消耗低,其效率取决于硬件实现。是的,您可以单独使用它们、完全独立使用它们或将它们包装为 DirectShow 过滤器并包含在普通 DirectShow 管道中。
替代的 H.264 编码器通常基于 SDK,或者以 DirectShow/MFT 形式对这些 SDK 进行包装,因为供应商以多媒体开发人员已经熟悉的众所周知的形式打包他们的实现。