h264参考帧

时间:2012-06-08 09:44:21

标签: parsing h.264 decoding

我正在寻找一种在h264流中查找参考帧的算法。我在不同解决方案中看到的最常见的方法是查找访问单元分隔符和IDR类型的NAL。不幸的是,我检查过的大多数流都没有IDR类型的NAL。 我很感激你的帮助。 问候 杰西克

1 个答案:

答案 0 :(得分:8)

H264帧由特殊标记分割,称为起始码前缀,其为 0x00 0x00 0x01 0x00 0x00 0x00 0x01 。两个起始码之间的所有数据包括H264中的NAL单元。所以你想要做的是在你的h264流中搜索起始码前缀。 startcode前缀后面的字节是 NAL标头。 NAL标头的最低5位将为您提供NAL单元类型。如果nal_unit_type = 5,则该特定NAL单元是参考帧。

这样的事情:

void h264_find_IDR_frame(char *buf)
{
    while(1)
    {
        if (buf[0]==0x00 && buf[1]==0x00 && buf[2]==0x01)
        {
            // Found a NAL unit with 3-byte startcode
            if(buf[3] & 0x1F == 0x5)
            {
                // Found a reference frame, do something with it
            }
            break;
        }
        else if (buf[0]==0x00 && buf[1]==0x00 && buf[2]==0x00 && buf[3]==0x01)
        {
            // Found a NAL unit with 4-byte startcode
            if(buf[4] & 0x1F == 0x5)
            {
                // Found a reference frame, do something with it
            }
            break;
        }
        buf++;
    }
}