簡體   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