繁体   English   中英

如何理解H.265的header

[英]How to understand header of H.265

有人可以解释一下 H.264 header 和 H.265 header 之间的区别吗? 我只需要解析 H265 header 但我很难找到合适的参考。

我做了第一个版本的解析器。 我需要检索 pic_width_in_luma_samples、pic_height_in_luma_samples 和 aspectRatioH、aspectRatioV。

我的代码是这样的:

while (buf->Size > 0)
{
    //forbidden bit

    flushbits(buf, 1); 

    int nNALType = showbits(buf, 6);

    if (nNALType == NAL_TYPE_SPS)
    {
        // flushbits until I retrieve desired parameter

        flushbits(buf, 4); // sps_video_parameter_set_id
    }
    else
    {
        // align bits

        buf->Size -= buf->BitsLeft & 0x7; 
    }
}

这是正确的做法吗? 有一种方法可以让我跳过位,直到找到指示我想要的 SPS NAL 类型的“开始序列”?

H.264 和 H.265 的语法相对相似。

两者都有参数集(PPS、SPS),您可以在下面的规范中找到详细信息。 对于 H.265 - 第 33 页,第 7.3 节详细描述了视频参数集。 规范是用类似伪代码的“C”语言完成的,因此将规范翻译成编译代码相对容易。

您可以随时查看一些现有代码 - 例如:

https://github.com/GStreamer/gstreamer/blob/main/subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gsth265parser.c

H.264 (AVC) 规范在这里:

https://www.itu.int/rec/T-REC-H.264-202108-I/en

H.265 (HEVC) 规范在这里:

https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-H.265-201802-S!!PDF-E&type=items

按照这些步骤解析 H265

  • 每个 NAL 单元都以 3 字节的起始码开始,值为 0x01(即 00 00 01)。 识别每个 NAL 单元;
  • 解析 header(2 字节)
  • 对于 NAL 序列的另一部分:查找 3 字节序列 00 00 03,保留前 2 个字节(00 00)并丢弃 03 字节。
  • 不丢弃字节,您可以进行解析(取决于您拥有的 NAL 单元类型)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM