手撕RTSP協議系列(12)——RTP包格式


點擊上方「藍字」關注咱們html


前面咱們花了較多的篇幅來介紹了RTSP協議的一些細節,可是rtsp傳輸,本質上涉及三種協議,RTSP、RTP以及RTCP。RTSP主要負責鏈接創建,銷燬及一些其餘的控制。而實際涉及媒體數據傳輸使用的是RTP協議,本節咱們來介紹一下RTP協議。




RTP概覽 web




RTP是一種應用層協議,傳輸層協議能夠是TCP或者UDP(UDP多一些)!
RTP數據包由兩部分組成,一部分是RTP Heaeder,一部分是RTP body,RTP Header佔用最少12個字節,最多72個字節;另外一部分是RTP Payload,用來封裝實際的數據負載,如封裝h264編碼的視頻數據!下面咱們來仔細看下RTP Header和RTP Body的組織形 式!





RTP包格式示意圖 算法








RTP Header格式微信




   0               1                 2               3             4
    
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |V=2|P|X|  CC |M|     PT          | sequence number             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | timestamp                                                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | synchronization source (SSRC) identifier                      |
   +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
   | contributing source (CSRC) identifiers                        |
   | ....                                                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      V : 2bits,表示版本號,
      P : 1bit,表示是否支持填充,置爲1的時候,表示在packet的末尾進行填充,方便一些針對固定長度算法的封裝
      X : 1bit, 表示是否支持Rtp頭擴展,置爲1的時候,RtpHeader以後會跟1個header extension
      CC (CSRC count): 4bits,表示頭部以後contributing sources identifiers的個數
      M : 1bit;對於視頻,標記一幀的結束;對於音頻,標記會話的開始
      PT : 7bits,表示傳輸的多媒體類型,https://tools.ietf.org/html/rfc3551
      sequence number :16bits(2字節),表示RTP包序號 
      timestamp :32bits(4字節),表示時間戳, 必須使用90 kHz 時鐘頻率
      SSRC :32bits(4字節),用於標識同步信源,參加同一視頻會議的兩個同步信源不能有相同的SSRC
      CSRC :特約信源標識符,每一個CSRC佔用4個字節,能夠有0~15個。每一個CSRC標識了包含在該RTP報文有效載荷中的全部特約信源
      PT (多媒體類型)
        音頻多媒體類型
        視頻多媒體類型
說明:
GB28181中對PT的定義


負載類型ide

編碼名稱flex

時鐘頻率ui

通道數編碼

SDD描述中m字段的media項

4url

G.723spa

8k HZ

1

audio

8

PCMA(G.711 A)

8k HZ

1

audio

9

G722

8k HZ

1

audio

18

G.729

8k HZ

1

audio

20

SVACA(SVAC音頻)

8k HZ

1

audio

96

PS

90k HZ


video

97

MPEG-4



video

98

H.264




99

SAVC(SVAC視頻)








    Rtp 數據包拆解




根據PT類型的不一樣,Payload有不一樣的組織方式。

讓咱們來看一個實際的RTP數據包的抓包


紅色框中的部分爲RTP Header;綠色框中的部分爲RTP Payload! 咱們來詳細來看下:

該數據包中RtpHeader的16進製表示爲:

將其用二進制表示以下:

Version




值爲10,版本號爲2,咱們與wireshark的抓包解析對比一下:


Padding



值爲0,表示不填充。wireshark的抓包以下:


X(擴展)



值爲0。表示不支持擴展RTP頭!wireshark的抓包以下


CC(CSRC計數)



CSRC計數器,值爲09,表示沒有RTP頭信息中沒有CSRC!wireshark的解析:


M(marker)



值爲0,表示該數據包非一幀數據的最後一幀!wireshark的解析:

ps:當該值爲1時,表示該數據包是一幀數據的最後一個數據包!

PT(payload type)



PT值爲96,根據payload type,得知該rtp數據包的負載數據爲自定義的數據類型!而抓包是一個從攝像頭拉取視頻數據,因此遵循GB28181標準,因此是一個ps類型的數據包。wireshark的解以下:


sequence number



值爲0x 12 ed,十進制爲4845,表示rtp包的序列號爲4845。


wireshark的解析以下:


timestamp



值爲0x4b cf fa 46, 表示時間戳,wireshark解析爲:

SSRC



同步信源標識符,此數據包的值爲0x6b 2f dd 87,wireshark的解析爲:

CSRC


因爲RTP Header中CC的值爲0,因此表示CSRC在本數據包中的個數爲0,在此處沒有,RTP HEADER中容許有0-15個CSRC。

RTP Payload


藍色陰影部分爲Rtp Payload,咱們能夠看到第一個字節爲0x67,比較容易想到該數據爲視頻幀的SPS,也說明了RTP Payload中的數據就是傳輸的媒體數據,至於SPS的細節,在這裏就不詳細展開了!
    好了,RTP數據包的格式被咱們通過肢解,圖解後,咱們對其也有了比較詳盡的瞭解,本篇的介紹也就到這裏了!咱們下一講再見吧!

往期推薦

手撕RTSP協議系列(1)——Rtsp基本流程

手撕RTSP協議系列(2)——Rtsp消息格式

手撕RTSP協議系列(3)——sdp格式詳解

手撕RTSP協議系列(4)——OPTION

手撕RTSP協議系列(5)——DESCRIBE

手撕RTSP協議系列(6)——SETUP

手撕RTSP協議系列(7)——PLAY

手撕RTSP協議系列(8)——PAUSE

手撕RTSP協議系列(9)——TEARDOWN

手撕RTSP協議系列(10)——GET_PARAMETER

手撕RTSP協議系列(11)——RTSP_SET_PARAMETER






 

掃碼關注瞭解更多



交流羣已開啓,有須要的朋友,公衆號後臺回覆「交流羣」,獲取入羣方式!


 




點點 在看 行不行




本文分享自微信公衆號 - 視界音你而不一樣(WorldOfVideoAndAudio)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索