天天看點

攝像頭RTSP播放流程封包分析

在這裡并不講解rtp/rtcp、rtsp、264等協定,隻是分析記錄一下rtsp流程封包,也不對封包進行過多的解析,因為已經被Wireshark分析的很徹底了。

本文更多的是做一個備忘錄使用,圖檔堆疊而成。

1.基本描述

一個攝像頭IPC,ip 192.168.1.88

PC的ip 192.168.1.2

PC上VLC軟體,在網絡串流輸入:

攝像頭RTSP播放流程封包分析

然後Wireshark抓封包來分析吧。

  • 首先當然是TCP的三次握手建連接配接了
  • 然後開始rtsp的互動流程,從Option到Play
  • 然後開始rtp傳音視訊資料,rtcp做控制
  • 最後VLC上停止播放,也就是發個TearDown,停止傳輸,RTCP的goodbye,還有TCP的斷開連接配接
攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析

2.RTSP細節 下面開始具體分析一下RTSP具體流程:

Opiton---Describe--Setup-Play--------.............-------Teardown

C表示RTSP用戶端即PC,S表示RTSP服務端即攝像頭

2.1 Option

 C->S: OPTION request            //詢問S有哪些方法可用

S->C: OPTION response        //S回應資訊中包括提供的所有可用方法

攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析

這裡提供的方法有如上。

2.2 Describe

 C->S: DESCRIBE request      //要求得到S提供的媒體初始化描述資訊

S->C: DESCRIBE response      //S回應媒體初始化描述資訊,主要是sdp,這裡面有個簡單的SDP協定

攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析

2.3 Setup

C->S: SETUP request         //設定會話屬性,以及傳輸模式,提醒S建立會話

S->C: SETUP response         //S建立會話,傳回會話辨別符及會話相關資訊

這裡的setup有兩個,即分别對應前面的trackID=1、trackID=2,也就是Describe中的視訊與音頻了。

攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析

2.4 Play

C->S: PLAY request          //C請求播放

S->C: PLAY response          //S回應請求資訊

攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析

2.5 發送資料

S->C: 發送流媒體資料

在上面的play指令後将開始流傳輸,這塊與rtp/rtcp相關,單獨摘出來在後面介紹。

2.6 Teardown

C->S: TEARDOWN request     //C請求關閉會話

S->C: TEARDOWN response     //S回應請求

攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析

這之後還會有:rtcp發送goodbye、tcp斷開連接配接。

2.6  其他

在這裡補充一個get_parameter:

攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析

3.流傳輸

在上面RTSP細節第4步攝像頭回應了Play Response後,将會開始傳輸流資料,這裡包括了視訊流與音頻流,在Describe中看到為:

攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析

3.1視訊傳輸

在H264協定裡定義了三種幀,完整編碼的幀叫I幀,參考之前的I幀生成的隻包含差異部分編碼的幀叫P幀,還有一種參考前後的幀編碼的幀叫B幀,對定義的了解以及264的處理方法可以在網上進一步了解。

于是剛開始傳輸的是第一個I幀,而I幀資料前會有一個參數集傳輸:

攝像頭RTSP播放流程封包分析

這三條具體為:

攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析

  根據本RTP荷載規範, 大于00的NRI值訓示相對傳輸優先級, 象編碼器決定的一樣。 MANE可以使用本資訊保護更重要的NAL單元。最高的傳輸優先級是11, 依次是 10, 01;00 最低。H.264編碼器必須根據H.264規範設定NRI值(subclause 7.4.1)當nal_unit_type 範圍的是1到12. 特别是, H.264規範要求對于nal_unit_type為6,9,10,11,12的NAL單元的NRI的值應該為0。對于nal_unit_type等于7,8 (訓示順序參數集或圖像參數集)的NAL單元,H.264編碼器應該設定NRI為11 (二進制格式)對于nal_unit_type等于5的主編碼圖像的編碼片NAL單元(訓示編碼片屬于一個IDR圖像), H.264編碼器應設定NRI為11。這也就對上面做出了解釋。

後面開始真正的圖像資料傳輸,I幀分片傳輸,P幀分片傳輸。

I幀的第一片:

攝像頭RTSP播放流程封包分析

I幀的中間片:

攝像頭RTSP播放流程封包分析

I幀的最後一片:

攝像頭RTSP播放流程封包分析

然後開始P幀,同樣列舉開始中間結尾三片:

攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析

再看第一幀與第二幀,也就是上面提到的第一個I幀,和緊跟其後的第一個P幀,這兩幀的Timestamp相差360,也就是9000/25。

随後圖像大變動後會有新的一個I幀開始,然後再尾随一串P幀:

攝像頭RTSP播放流程封包分析

3.2音頻傳輸

攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析

3.2 RTCP控制

攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析
攝像頭RTSP播放流程封包分析