我为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进行基于硬件的解码。
我能够创建一个解码器(ID3D11VideoDecoder),但是我不知道如何向其提供原始的H264数据包并获取YUV或NV12数据作为输出。 (或者,因为我可以获取ID3D11Texture2D指针,如果可以将输出直接呈现到纹理上)
所以我的问题是,如何将原始的h264数据包发送到此解码器并从中获取输出?
此外,这是用于实时操作,因此我正在尝试实现最小的延迟。
提前谢谢!
答案 0 :(得分:1)
由于您已经使用FFMPEG完成了此操作,因此我建议您直接使用FFMPEG的dx11硬件解码。
查看硬件解码FFMPEG示例以获取详细信息:github.com/FFmpeg/FFmpeg/blob/master/doc/examples/hw_decode.c