2

我试图了解 Android MediaExtractor 如何解析 H264(包含在容器格式中)。

如果我检查 H264 流,我发现它由由序列 00 00 00 01 划分的 NAL 单元组成。

MediaExtractor 返回的样本正是那些 NAL 单元,每个都以该标记开头——除了对于特定数据源,前三个 NAL 单元是连接的。前两个 NAL 单元非常短(29 和 8 字节)。

为什么会发生这种串联?如果我要手动解析 H264,我怎么知道要进行这种连接?

对于前三个 NAL 单元,起始码前缀后面的字节是十进制的 103、104 和 101。对于以下大多数 NAL 单元,它是 65,偶尔是 101。

4

1 回答 1

0

您可以通过了解 h264 流的格式化方式来回答您的问题。

Android 需要在任何 IDR/非 IDR 帧(通常称为 iFrames 和 pFrames)之前有两个名为Sequence Parameter Set (SPS) 和Picture Parameter Set (PPS) 的配置单元。

两个NAL 单元只是为了方便而连接起来。硬件编解码器能够确定这些帧是唯一的,并根据它们的值进行自我配置。包含第三单元以允许编解码器在此配置完成后立即开始工作。

TLDR;手动解码这样的原始流不需要这种结构。相反,您只需单独分析每个 NAL 单元。

于 2017-11-02T19:53:58.747 回答