Windows 基于媒体基础的硬件H264编码ID3D11TraceUR2D

Windows 基于媒体基础的硬件H264编码ID3D11TraceUR2D,windows,encoding,h.264,directx-11,ms-media-foundation,Windows,Encoding,H.264,Directx 11,Ms Media Foundation,我正在做一个项目,捕捉屏幕和编码它。我已经可以使用桌面复制API(Win8+)捕获屏幕。使用API,我可以获得ID3D11Texture2D纹理,并将它们从GPU传输到CPU,然后使用libx264对它们进行编码 然而,将纹理从GPU拉到CPU可能是一个瓶颈,这可能会降低fps。另外,libx264需要占用CPU周期(取决于质量)来编码帧。我希望在GPU本身中编码ID3D11Texture2D纹理,而不是使用CPU进行编码作为优化 我已经检查了文档和一些示例代码,但没有成功。如果有人能给我指出一

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

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


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

视频编码器,硬件和软件,可能有不同的形式。Windows本身提供了可扩展的API,可以选择编码器,然后其他编码器可能作为库和SDK提供。您已经在使用其中一个库(x264)。硬件编码器通常是特定于供应商的,取决于编码过程中直接涉及的可用硬件。若您对特定硬件的解决方案感兴趣,那个么检查相应的SDK可能是有意义的

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

  • 英特尔快速同步视频H.264编码器MFT
  • NVIDIA H.264编码器MFT
  • AMDH264编码器
由不同的供应商提供,它们提供类似的功能,您可以使用这些MFT对H.264进行编码,这是一个很好的方法,可以利用硬件视频编码和各种硬件

另见:


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

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

使用Nvidia,您可以执行以下操作:Nvidia解码->GPU中的DirectX显示

检查DirectX显示->Nvidia加密是否可行(知道Nvidia提供互操作)

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

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