如何将H.264 NAL单元提供给Android MediaCodec进行解码?

我想弄清楚如何使用Android的MediaCodec类来解码H.264视频。 首先,我试图手动解析H.264文件中的NAL单元,并将它们提供给MediaCodec进行解码。 我相信我正确解析NAL单元(在文件中搜索0x00 0x00 0x01序列,指示NAL单元的开始),但MediaCodec总是超时并在每次调用dequeueOutputBuffer时返回-1 ()。 有谁知道如何将H.264 NAL单元提供给MediaCodec进行解码的具体细节? 在发送一个NAL单元之前,我应该剥离0x00 0x00 0x01序列吗? 我需要忽略/放弃某些NAL单元类型吗? 我是否需要在每个NAL单元之前预先提取SPS和PPS信息(带或不带0x00 0x00 0x01序列)? 我在这里玩弄了很多想法,而且没有一个会被淘汰。 任何指导在这个领域将非常感激。


据我所知,解码器将在dequeueOutputBuffer()上返回-1,只要你不给它提供sps / pps info。 当你这样做的时候,解码器应该返回dequeueOutputBuffer()上的INFO_OUTPUT_FORMAT_CHANGED标志(-2),然后再正确地返回解码的帧。

如果解码器仍然返回-1,请尝试使用标志BUFFER_FLAG_CODEC_CONFIG将sps / pps info添加到解码器。


AFAIK你需要把标题出来,并用SPS / PSS作为第一缓冲区来提供它,但是获得-1并不是什么大问题,这将是一个正常的行为。 如果某些设备在其他NAL之前未通过SPS / PPS供电,则某些设备会发生故障

链接地址: http://www.djcxy.com/p/69913.html

上一篇: How do I feed H.264 NAL units to Android MediaCodec for decoding?

下一篇: How to track checks in checkedListBox C#?