我试图了解Android MediaExtractor如何解析H264(包含在容器格式中)。
如果我检查H264流,我看到它由按序列00 00 00 01划分的NAL单元组成。
MediaExtractor返回的样本正好是那些以该标记开头的NAL单元 - 除了对于特定数据源,前三个NAL单元是连接的。前两个NAL单元非常短(29和8字节)。
为什么要连接?如果我手动解析H264,我怎么知道要进行连接?
对于前三个NAL单元,起始码前缀后面的字节是103,104和101十进制。对于以下大多数NAL单位,它是65,有时是101。
答案 0 :(得分:0)
您可以通过了解h264流的格式化方式来回答您的问题。
Android在任何IDR /非IDR帧(通常称为iFrames)之前需要两个名为序列参数集(SPS)和图片参数集(PPS)的配置单元和pFrames)。
前两个 NAL单元仅为方便起见而连接在一起。硬件编解码器能够确定这些帧是唯一的并且根据它们的值来配置它们自己。包含第三个单元以允许编解码器在此配置完成后立即开始工作。
<强> TLDR;手动解码这样的原始流不需要这种结构。相反,您只需单独分析每个NAL单元。