我正在试图弄清楚如何使用Android的MediaCodec类来解码H.264视频。首先,我尝试从H.264文件中手动解析NAL单元并将它们提供给MediaCodec进行解码。我相信我正在正确解析文件中的NAL单元(在文件中搜索0x00 0x00 0x01序列,表示NAL单元的开始),但每次调用dequeueOutputBuffer时MediaCodec总是超时并返回-1 ()。有谁知道如何将H.264 NAL单元馈送到MediaCodec进行解码?我应该在发送NAL单元之前剥离0x00 0x00 0x01序列吗?我是否需要忽略/删除某些NAL单元类型?我是否需要在每个NAL单元之前添加提取的SPS和PPS信息(带或不带0x00 0x00 0x01序列)?我在这里玩弄了很多想法,但没有一个能够淘汰出局。非常感谢在这个领域的任何指导。
答案 0 :(得分:4)
就我所经历的情况而言,解码器将在dequeueOutputBuffer()上返回-1,只要您不提供sps / pps信息即可。执行此操作时,解码器应在dequeueOutputBuffer()上返回INFO_OUTPUT_FORMAT_CHANGED标志(-2),然后将正确返回已解码的帧。
如果解码器仍然返回-1,请尝试使用标志BUFFER_FLAG_CODEC_CONFIG将sps / pps信息添加到解码器。
答案 1 :(得分:0)
AFAIK你需要把标题输出并用SPS / PSS作为第一个缓冲区来提供它,但得到-1并不是一个大问题,这将是一个正常的行为。如果在其他NAL之前没有被SPS / PPS喂养,某些设备将会崩溃