Android MediaCodec:实时解码H264 NALs

5
我正在尝试使用安卓低级媒体API实时解码h264 nal。每个nal包含一个完整的帧,因此我期望在输入我的nal并调用dequeueOutputBuffer后,“立即”(当然会有一点延迟)显示我的帧,但实际上并没有。我只看到了第一帧,而当我用第二个NAL喂给解码器时,dequeueOutputBuffer才返回第一个缓冲区,此时应该呈现第二个帧。帧被使用x264的zerolatency预设编码,因此没有B帧等等。
我想也许有一种方法可以设置编码器在得到帧后立即呈现它,但我找不到任何好的文档/说明。有什么建议吗?

我也遇到了同样的问题。我的当前理论是,似乎H.264缺乏任何形式的“帧结束”标记。因此,解码器必须等待直到有下一帧的数据才能完成解码和显示当前帧。对我来说,这只增加了约25毫秒的时间,但我想要回收这25毫秒。 - Anand Mistry
我也遇到了同样的问题,即使使用I-Frames仍然无法解决。但是我还没有找到解决方案。你成功实现了“实时”渲染吗? - Soccertrash
@soccertrash,你成功了吗? - Bato-Bair Tsyrenov
2个回答

0

仅仅因为帧被编码为零延迟设置,并不意味着它们将以零延迟进行解码。这是两件不同的事情。因此,根据编解码器级别(分辨率、比特率、帧速率)和配置文件,您可能需要解码多达16帧h264视频才能获得一个帧。


1
谢谢您的回答,但是根据我的测试,当解码器接收到下一个帧时,无论这两个帧之间的延迟是20毫秒还是10秒,帧都会被显示出来,因此这与解码时间无关,但似乎是API的限制。 - Florian

0

在编程中,只有在预测帧被解码后才能解码p帧。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接