尝试在 iPad Pro OS v14.3 上解码帧时,我遇到了与此处描述的相同的问题(我也在使用Olivia Stork 的示例):
25%的图片数据被正确解码,剩下的图片只是绿色。
iPad Pro OS v14.3 上的解码图像如下所示(图像被转换并保存在解码器回调中,如此处所述,因此不仅仅是显示问题)。
原始图像看起来像这样。
图像在 Windows10 上使用 NVIDIA NVENC (Media Foundation) 进行编码。
如链接中所述,我在帧图片数据中搜索了额外的 4 字节 NALU 起始代码,但对于 SPS、PPS 和 IDR 图片数据,只有三个预期的。
我在 Windows10 上运行了另一个 Media Foundation 解码器应用程序,它可以正确解码来自完全相同源的帧。
我现在正在努力寻找问题的原因..有人有什么想法吗?
提前致谢。抢
- 编辑 2021-01-11:
我发现在 NALU 类型 5 的 IDR 图片数据块中实际上还有三个额外的 3 字节起始码(0x000001)。
我试图用以下数据块的长度(大端)替换这些起始代码,如此处所述,但结果相同。
我还尝试按照此处所述添加仿真预防字节(0x000001 => 0x000301),但这也没有什么区别。
也许我被误导了,这些起始代码与问题无关..至少它们不仅仅是随机图像数据,因为它们总是出现在图片数据块中的相同位置(索引)。目前我的想法已经不多了..有人提示吗?
- 编辑 2021-01-14:
我想出了更多的东西:
出于完全缺乏想法,我复制了块开头最后一个起始码之后的图片数据(紧跟在 4 字节 NALU 起始码之后)。我曾期望——如果这能奏效的话——在解码图像的顶部看到原始图像的最后四分之一,但令我惊讶的是,解码图像看起来像这样。
我对第二个和第三个起始码之后的图片数据进行了同样的尝试,解码后的图像看起来像这样:图像数据被正确解码,甚至在正确的位置(与原始图像相比)。
即使我剥离所有 3 字节起始码并复制 4 字节起始码后连接的图片数据,结果也是一样的,只有 25% 的图像被解码。所以额外的 3 字节起始码显然不是问题。必须有一些设置告诉解码器只解码图像的 25%。我会提示 CMVideoFormatDescription,但据我所知,它看起来还不错。
我也想知道解码器如何知道在哪里显示不同的图片数据块。要么在图片数据中的某处定义了偏移量,要么编码器以某种方式添加了每个像素的 xy 位置。