如何使用MFVideoFormat_H264解码数据?

问题描述 投票:0回答:1

我想使用媒体基础解码数据。

我读过这篇文章:H.264解码器

当我创建解码器时如何放置输入字节数据并获取输出字节数据?

我不希望它从文件中读取。我有从套接字获取的字节数组,我可以使用 vlc 播放它如何解码字节数据?然后我就可以显示它了。

我搜索到每个帧都以 0x00 0x00 0x00 0x01 开头,我可以读取每个帧字节并将其发送到解码器以获得正确的数据吗?

现在根据 @Romain.R 的示例,我可以获得 IMFMediaBuffer 但我无法直接使用位图。我需要将其转换为 RGB,因为它是 NV12。如何在媒体基础或 direct2D 中做到这一点,以便我可以使用 GPU 来加速它?

winapi directx ms-media-foundation
1个回答
0
投票

H.264 视频解码器 Media Foundation Transform 解码带或不带硬件加速编码的 H.264。

使用 Media Foundation 解码 H.264 ES 展示了如何用 100 行 C++ 代码管理 MFT。

在硬件加速的情况下,转换利用 DXVA 在 GPU 上进行解码,您将获得由带有视频帧的 DirectX 纹理支持的

IMFSample
IMFMediaBuffer
输出。

我不能直接使用它。我需要将其转换为 RGB,因为它是 NV12。如何在媒体基础或 direct2D 中做到这一点,以便我可以使用 GPU 来加速它?

如文档所述,解码器输出为

MFVideoFormat_NV12
或接近 YUV 4:2:0 像素格式。您可以使用另一个 MFT 视频处理器 MFT 在格式之间进行转换,包括转换为 RGB 以及使用 GPU 加速。

很多时候,您不需要链接转换并直接管理它们,例如,您可以使用 Source Reader 从媒体源或字节流中读取(我想您可以为 H. 264/AVC ES),然后设置所需的输出格式,并从读卡器中拉出,让它管理下面所需的 MFT 链。

© www.soinside.com 2019 - 2024. All rights reserved.