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

2021-07-24 17:05:05 字數 2367 閱讀 8756

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

根據上面參考文章的說法,i幀前面需要增加ps頭+system 頭+ system map 頭+ pes 頭

非i幀前面增加ps 頭 + pes 頭

1、ps封裝頭的長度是可以變化的,不是固定長度

#define ps_hdr_len  14

#define sys_hdr_len 18

#define psm_hdr_len 24

#define pes_hdr_len 19

我們定義的長度如下:

#define ps_hdr_len  14

#define psm_hdr_len 24

#define sys_hdr_len 18

#define pes_hdr_len 14

[cpp]view plain

copy

static

void

packet_ps_header(

char

* pdestbuf, 

intlength, 

intcurrpts)  

bits_initwrite( &bits, length, pdestbuf);  

bits_write(&bits, 32, 0x000001ba);            /*start codes*/

bits_write(&bits, 2,  1);                     /*marker bits '01b'*/

bits_write(&bits, 3,  (s64scr>>30)&0x07);     /*system clock [32..30]*/

bits_write(&bits, 1,  1);                     /*marker bit*/

bits_write(&bits, 15, (s64scr>>15)&0x7fff);   /*system clock [29..15]*/

bits_write(&bits, 1,  1);                     /*marker bit*/

bits_write(&bits, 15, s64scr&0x7fff);         /*system clock [29..15]*/

bits_write(&bits, 1,  1);                     /*marker bit*/

bits_write(&bits, 9,  lscrext&0x01ff);        /*system clock [14..0]*/

bits_write(&bits, 1,  1);                     /*marker bit*/

bits_write(&bits, 22, (160001)&0x3fffff);        /*bit rate(n units of 50 bytes per second.)*/

bits_write(&bits, 2,  3);                     /*marker bits '11'*/

bits_write(&bits, 5,  0x1f);                  /*reserved(reserved for future use)*/

bits_write(&bits, 3,  0);                     /*stuffing length*/

}  

3、pes頭中,如果只包括pts時間戳,則需要修改為下面**:

修改的時候把dts去掉了,然後配套修改了第8個位元組,但沒有檢查原來參考文章中設定的是同時包括pts和dts,所以需要關注修改:第七位元組的高兩位是pts和dts指示位,00表示無pts無dts,01禁止使用,10表示pes頭部欄位會附加pts結構,11表示pts和dts都包括

[cpp]view plain

copy

static

void

gb28181_make_pes_header (unsigned 

char

*dst , int32_t dstlen, int32_t data_length, 

intpts)    

4、rtp的組包傳送上面,根據h264的rtp打包方式,有單nalu、fu-a、fu-b多種形式,根據適配需要調整。

gb28181協議 資料收集

siprfc3261 visual studio 2010下編譯osip及exosip並搭建開發環境的方法 版本3.6 使用v2008編譯libosip和libexosip 版本4.0 訪問位址 exosip2幫助文件 gbt28181開發 sip協議實踐 之windows下編譯exosip osi...

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

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

GB 28181協議解讀 報警事件通知

目錄 協議內容 訊息格式 報警通知sdp訊息體 報警響應sdp訊息體 notify訊息字段含義 response訊息字段含義 報警事件通知和分發使用ietf rfc 3428 中定義的方法 message傳送報警資訊。報警事件通知和分發流程中的請求命令採用 manscdp 協議格式定義,報警事件通知...