在适用于 UWP 的 Unity 插件中使用 DirectX11 进行硬件加速 H264 解码

Hardware Accelerated H264 Decode using DirectX11 in Unity Plugin for UWP

我为我的 UWP 应用程序构建了一个 Unity 插件,它将原始 h264 数据包转换为 RGB 数据并将其渲染为纹理。我用 FFMPEG 来做这个,它工作正常。

int framefinished = avcodec_send_packet(m_pCodecCtx, &packet);
framefinished = avcodec_receive_frame(m_pCodecCtx, m_pFrame);
// YUV to RGB conversion and render to texture after this

现在,我正在尝试使用 DirectX11 DXVA2.0 转向基于硬件的解码。

使用这个: https://docs.microsoft.com/en-us/windows/desktop/medfound/supporting-direct3d-11-video-decoding-in-media-foundation

我能够创建一个解码器 (ID3D11VideoDecoder),但我不知道如何向它提供原始 H264 数据包并获取 YUV 或 NV12 数据作为输出。 (或者如果可以将输出直接渲染到纹理,因为我可以获得 ID3D11Texture2D 指针)

所以我的问题是,如何将原始 h264 数据包发送到此解码器并从中获取输出?

此外,这是针对实时操作的,因此我正在努力实现最小延迟。

提前致谢!

既然你已经用FFMPEG完成了,我建议你直接使用FFMPEG的dx11硬件解码。

查看硬件解码 FFMPEG 示例了解详情:github.com/FFmpeg/FFmpeg/blob/master/doc/examples/hw_decode.‌​c