gb28181之rtp負載之h264

2021-09-03 02:23:35 字數 1479 閱讀 5866

我們知道國標中支援的**流格式不止一種,其中最常見的就數ps和h264(es流中的其中一種)了,ps流我們之前的博文中已經分享過了,本篇博文我們來一起聊聊國標中**流的負載為h264的細節。

我們知道h264為了方便網路傳輸,把原始資料分裝成了多個nalu,而nalu包大小是不固定的,因此有時候乙個rtp包中可以負載多個nalu,有時候乙個rtp包中只負載乙個nalu,有時候多個rtp包中包含的是某乙個nalu的切片。

對於乙個rtp包中包含多個nalu,又可以分為四種情況:

single-time aggregation packet type a (stap-a);

single-timeaggregation packet type b (stap-b);

multi-time aggregation packet(mtap) with 16-bit offset (mtap16);

and multi-time aggregation packet(mtap) with 24-bit offset (mtap24);

對於多個rtp包中包含乙個nalu的分片可以分為兩種情況:

fragmentation unit a(fu-a);

fragmentation unit b(fu-b);

以上描述更詳細參見rfc3984:

對上圖做一點補充:在h264的官方文件中,指定了nal unit type 為"0~23"的情況,在此文件,也就是rfc3984對其做了擴充套件,指定了nal unit type為"24~29"的情況。也就說,只要nal unit type的值為"0~23", 使用的負載載入方式都是乙個rtp包包含乙個nalu資料報。

對於fu-a的分包方式,第乙個位元組表示"fu indicator",第二個位元組表示"fu header", "fu header"的前三位有特殊意義,第一位為1時代表該分片是nal unit的第乙個分片,第二位為1時,代表該分片是nal unit的最後乙個分片,第三位必須置0,接收者不需要對該位分析,詳見如下截圖:

乙個具體示例如下:

上圖抓包中,我們可以看出rtp的mark標記位為"1",說明這是一幀的結束,我們再看負載前兩個位元組為7c41,其中7c的後5位的十進位制值為28,說明採用fu-a分片方式,之後的41也說明該包是nal unit的最後一包資料。

PS封裝格式 GB28181協議RTP傳輸

在安防行業,有個協議是無論如何都要適配的,因為公安監控網路用的就是它,它就是 gb28181。而這份協議主要由海康制定,所以除了海康其他廠商想要適配都會少許有點兒麻煩。題主前東家便是海康,這裡稍微分析下該協議幾個容易搞混的細節,記錄在此,方便以後自己查閱,也方便諸位。1.gb28181要求的rtp流...

協議域GB28181 規範之閘道器 模組

供給 gb 28181閘道器及整體解決方案。實現 sip 監控域與非sip 監控域互聯。sip 監控域與非sip 監控域通過閘道器停止互聯結構見圖。閘道器長短sip 監控域接入sip監控域的口接備設,在多個次層上春聯網系統息信據數停止轉換。根據轉換的息信據數型別,閘道器邏輯上分為制控協議閘道器和 閘...

GB28181協議支援的H264的PS封裝實現

1 寫在前面 最開始接觸h264的ps封裝的時候,參考的是 關於對h264碼流的ps的封裝的相關 實現 2 封裝需要基本了解的概念 rtp 是流 實時傳輸協議,rtp頭有12個位元組 非i幀 00 00 00 01 41 sps 00 00 00 01 67 pps 00 00 00 01 68 根...