我试图弄清楚如何使用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序列)?我在这里玩了很多主意,但都没有一个主意。在这个领域的任何指导将不胜感激。
最佳答案
据我所知,只要您不输入sps/pps信息,解码器就会在dequeueOutputBuffer()上返回-1。这样做时,解码器应在dequeueOutputBuffer()上返回INFO_OUTPUT_FORMAT_CHANGED标志(-2),然后正确返回解码的帧。
如果解码器仍返回-1,请尝试将带有sps/pps info的信息与标志BUFFER_FLAG_CODEC_CONFIG相加。