我为我的 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
关于unity3d - 在 UWP 的 Unity 插件中使用 DirectX11 的硬件加速 H264 解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52432738/