unity3d - 在 UWP 的 Unity 插件中使用 DirectX11 的硬件加速 H264 解码

标签 unity3d ffmpeg uwp directx-11 hololens

我为我的 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/

相关文章:

c++ - AVFrame 宽度、高度和线条大小之间的混淆

c# - 来自 RGB 的颜色不正确 Unity C#

c# - Unity相机起始位置

c# - Unity 2018.3 HDRP - 以编程方式更改 Material 颜色?

node.js - 使用 ffmpeg 录制实时音频流的 15 分钟片段

c - AVCodec PTS 时间戳不从 0 开始

c# - 当集合为空时,UWP XAML 抛出未处理的异常

xaml - 在 UWP 中使用 VisualStates 的 App-Wide Styling(因为不支持样式触发器)

c# - 使用MVVM Light和PCL创建UWP应用程序

animation - 在不重置 Animator 的情况下设置 Unity3D AnimationClip 属性