【问题标题】:Hardware H264 encoding ID3D11Texture2D with Media Foundation使用 Media Foundation 对 ID3D11Texture2D 进行硬件 H264 编码
【发布时间】:2016-03-29 00:54:54
【问题描述】:

我正在开发一个捕获屏幕并对其进行编码的项目。我已经可以使用桌面复制 API (Win8+) 捕获屏幕。使用 API,我可以获得ID3D11Texture2D 纹理并将它们从 GPU 传输到 CPU,然后使用 libx264 对其进行编码。

但是,将纹理从 GPU 拉到 CPU 可能是一个瓶颈,可能会降低 fps。 libx264 也占用 CPU 周期(取决于质量)来编码帧。我正在寻找在 GPU 本身中编码 ID3D11Texture2D 纹理,而不是使用 CPU 进行编码作为优化。

我已经检查了文档和一些示例代码,但没有成功。如果有人能向我指出一些可以可靠地完成我想要的资源,我将不胜感激。

【问题讨论】:

    标签: windows encoding h.264 directx-11 ms-media-foundation


    【解决方案1】:

    视频编码器、硬件和软件可能以不同的形式提供。 Windows 本身提供带有编码器选择的可扩展 API,然后可能会以库和 SDK 的形式提供其他编码器。您已经在使用其中一个此类库 (x264)。硬件编码器通常是特定于供应商的,并且取决于可用的硬件,这些硬件直接参与编码过程。如果您对特定硬件的解决方案感兴趣,检查相应的 SDK 可能是有意义的。

    否则,Windows 中硬件支持的视频编码的典型通用接口是Media Foundation Transform (MFT)。 Microsoft 仅提供股票软件 H.264 视频编码器,它不太可能比 x264 提供任何优势,除了它与其他选项共享 MFT 接口这一事实。然而,视频硬件驱动程序通常会为可用的硬件安装额外的 MFT,这会添加更多由硬件实现支持的 MFT。例如:

    • 英特尔® 快速同步视频 H.264 编码器 MFT
    • NVIDIA H.264 编码器 MFT
    • AMDh264编码器

    由不同的供应商提供,它们提供类似的功能,您使用这些 MFT 对 H.264 进行编码是利用各种硬件的硬件视频编码的好方法。

    另见:

    【讨论】:

      【解决方案2】:

      您必须检查是否可以在 GPU 编码器和 DirectX 之间共享纹理。

      我知道可以在 Nvidia Decoder 和 DirectX 之间共享纹理,因为我已经成功地做到了。 Nvidia 有一些互操作能力,所以首先,看看你是否可以共享纹理以在 GPU 中做所有事情。

      使用 Nvidia,您可以这样做:Nvidia Decoding->DirectX Display in GPU。

      检查 DirectX Display->Nvidia Enconding 是否可行(知道 nvidia 提供互操作)

      对于 Intel 和 ATI,我不知道他们是否提供与 DirectX 的互操作。

      要知道的主要事情是检查您是否可以将 DirectX 纹理与 GPU 编码器纹理互操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-29
        • 1970-01-01
        • 1970-01-01
        • 2017-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        相关资源
        最近更新 更多