我正在试图弄清楚如何使用
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序列)?我在这里玩弄了很多想法,但没有一个能够淘汰出局.非常感谢在这个领域的任何指导.
解决方法
就我所经历的情况而言,解码器将在dequeueOutputBuffer()上返回-1,只要您不提供sps / pps信息即可.执行此操作时,解码器应在dequeueOutputBuffer()上返回INFO_OUTPUT_FORMAT_CHANGED标志(-2),然后将正确返回已解码的帧.
如果解码器仍返回-1,请尝试使用标志BUFFER_FLAG_CODEC_CONFIG将sps / pps信息添加到解码器.