rtsp學習

一:總體瞭解
RTSP(Real-Time Stream Protocol )是一種基於文本的應用層協議,直白的講客戶端與服務器建立連接並從服務器上接收流,服務器上的流可以是採集的,文件,等等。
二:服務器模式
   1:以文件爲例,輸入到服務器的源可以做一個MediaSession, 的list來管理各各文件流,最理想的方式是這個list管理各個客戶端要請求的流,這中間就要做複製流的操作。
   2:接收客戶端請求,當每一個客戶端連接到服務器時,建立一個RtspSession, 的list, 對每一個客戶端的請求,命令做出響應。即每一個客戶端都是一個RtspSession。
三:RTSP請求消息
   服務器啓動後已經創建了TCP,listen,等待客戶端的連接,當客戶端請求和服務器連接時,要發送一個例如RTSP://*.*.*.*(ip):(端口)/文件path,的請求,這樣根據信息,客戶端和服務器就可以建立TCP連接。
   然後服務器對客戶端的請求開始做出響應。
   DESCRIBE,ANNOUNCE,GET_PARAMETER,OPTIONS,PAUSE,PLAY,RECORD,SETUP,SET_PARAMETER,TEARDOWN,這裏只說下常用的幾種請求。

    RTSP服務器(一)

   1:OPTIONS,C主動發出請求,查詢S有哪些方法可以用(這10種當中),然後S迴應給C自己有什麼處理方法可以用。
   2:DESCRIBE,C主動發出請求,要求S給出C請求媒體的描述信息(即要C要接收的媒體,音頻或視頻的描述信息SDP),S將從文件或採集時讀取的信息填寫到固定格式的SDP中發送給請求本媒體的C。
   3:SETUP,C主動發出請求,要求S創建傳輸數據的連接一般爲UDP,S創建UDP,C與之連接。
   4:PLAY,C主動發出請求,要求S開始往C傳輸數據,這時用到的就是SETUP建立的UDP連接,S開始往C傳輸數據,C接收,然後顯示,存儲等等。
   5:TEARDOWN,C主動發出請求,要求S關閉連接的會話,一個傳輸命令的TCP,一個傳輸數據的UDP,一般先停止傳輸數據(UDP),然後關閉連接。
四:會話描述協議(SDP)
   SDP用到的地方就是在DESCRIBE的,服務器將從文件或採集時讀取的信息填寫到固定格式的SDP中發送給請求本媒體的客戶端。
   SDP 信息是文本信息,採用 UTF-8 編 碼中的 ISO 10646 字符集。SDP 會話描述如下:(標註 * 符號的表示可選字段):
   v = (協議版本)
   o = (所有者/創建者和會話標識符)
   s = (會話名稱)
   i = * (會話信息)
   u = * (URI 描述)
   e = * (Email 地址)
   p = * (電話號碼)
   c = * (連接信息 ― 如果包含在所有媒體中,則不需要該字段)
   b = * (帶寬信息)
   一個或更多時間描述(如下所示):
   z = * (時間區域調整)
   k = * (加密密鑰)
   a = * (0 個或多個會話屬性行)
   0個或多個媒體描述(如下所示) 時間描述
   t = (會話活動時間)
   r = * (0或多次重複次數)
   編輯本段媒體描述m = (媒體名稱和傳輸地址)
   i = * (媒體標題)
   c = * (連接信息 — 如果包含在會話層則該字段可選)
   b = * (帶寬信息)
   k = * (加密密鑰)
   a = * (0 個或多個會話屬性行)
五:實時傳輸協議(RTP)
   RTP用到的地方就是 PLAY ,服務器往客戶端傳輸數據用UDP協議,RTP是在傳輸數據的前面加了個12字節的頭(描述信息)。
   RTP載荷封裝設計本文的網絡傳輸是基於IP協議,所以最大傳輸單元(MTU)最大爲1500字節,在使用IP/UDP/RTP的協議層次結構的時候,
   這其中包括至少20字節的IP頭,8字節的UDP頭,以及12字節的RTP頭。這樣,頭信息至少要佔用40個字節,那麼RTP載荷的最大尺寸爲1460字節。
   以H264 爲例,如果一幀數據大於1460,則需要分片打包,然後到接收端再拆包,組合成一幀數據,進行解碼播放。

RTSP服務器(一)

RTSP服務器(一)

RTSP服務器(一)


六:RTP/RTSP/RTCP的區別
   1:•RTP:實時傳輸協議(Real-time Transport Protocol) •RTP/RTCP是實際傳輸數據的協議
     •RTP傳輸音頻/視頻數據,如果是PLAY,Server發送到Client端,如果是RECORD,可以由Client發送到Server
     •整個RTP協議由兩個密切相關的部分組成:RTP數據協議和RTP控制協議(即RTCP)
   2:•RTSP:實時流協議(Real Time Streaming Protocol,RTSP) •RTSP的請求主要有DESCRIBE,SETUP,PLAY,PAUSE,TEARDOWN,OPTIONS等,
     顧名思義可以知道起對話和控制作用
     •RTSP的對話過程中SETUP可以確定RTP/RTCP使用的端口,PLAY/PAUSE/TEARDOWN可以開始或者停止RTP的發送,等等.
   3:•RTCP: •RTP/RTCP是實際傳輸數據的協議
     •RTCP包括Sender Report和Receiver Report,用來進行音頻/視頻的同步以及其他用途,是一種控制協議。(本文暫不做分析)。

RTSP服務器(一)
七:可擴展方式
   1:媒體源,可擴展爲攝像頭,麥克風,經編碼後的數據,或mux(複用後的音視頻數據),如ts,mp4等等。
   2:添加媒體源流複製功能,對多個客戶端請求一個流做處理。
   3:服務器對各個客戶端完成不同響應的處理,可以根據不同需求做擴展。

   4:局域網穿透。
   5:增加rtcp,控制。等等。
八:單播、多播(組播)和廣播的區別
   1.單播:服務器對各個客戶端的不同請求作出不同的響應(本文采取),網絡節點之間的通信就好像是人們之間的對話一樣。如果一個人對另外一個人說話,那麼用網絡技術的術語來描述就是“單播”,此時信息的接收和傳遞只在兩個節點之間進行。
    單播在網絡中得到了廣泛的應用,網絡上絕大部分的數據都是以單播的形式傳輸的,只是一般網絡用戶不知道而已。例如,你在收發電子郵件、瀏覽網頁時,必須與郵件服務器、Web服務器建立連接,
    此時使用的就是單播數據傳輸方式。但是通常使用“點對點通信”(Point to Point)代替“單播”,因爲“單播”一般與“多播”和“廣播”相對應使用。
   2.多播:一個多播地址需要的客戶端就加入,“多播”也可以稱爲“組播”,在網絡技術的應用並不是很多,網上視頻會議、網上視頻點播特別適合採用多播方式。因爲如果採用單播方式,逐個節點傳輸,有多少個目標節點,
就會有多少次傳送過程,這種方式顯然效率極低,是不可取的;如果採用不區分目標、全部發送的廣播方式,雖然一次可以傳送完數據,但是顯然達不到區分特定數據接收對象的目的。採用多播方式,
既可以實現一次傳送所有目標節點的數據,也可以達到只對特定對象傳送數據的目的。  IP網絡的多播一般通過多播IP地址來實現。多播IP地址就是D類IP地址,即224.0.0.0至239.255.255.255之間的IP地址。
Windows 2000中的DHCP管理器支持多播IP地址的自動分配。
   3.廣播:一個廣播地址只要加入就可以收到,不管需不需要,“廣播”在網絡中的應用較多,如客戶機通過DHCP自動獲得IP地址的過程就是通過廣播來實現的。但是同單播和多播相比,廣播幾乎佔用了子網內網絡的所有帶寬。拿開會打一個比方吧,
     在會場上只能有一個人發言,想象一下如果所有的人同時都用麥克風發言,那會場上就會亂成一鍋粥。集線器由於其工作原理決定了不可能過濾廣播風暴,一般的交換機也沒有這一功能,
     過現在有的網絡交換機(如全向的QS系列交換機)也有過濾廣播風暴功能了,路由器本身就有隔離廣播風暴的作用。  廣播風暴不能完全杜絕,但是只能在同一子網內傳播,
     就好像喇叭的聲音只能在同一會場內傳播一樣,因此在由幾百臺甚至上千臺電腦構成的大中型局域網中,一般進行子網劃分,就像將一個大廳用牆壁隔離成許多小廳一樣,以達到隔離廣播風暴的目的。 
    在IP網絡中,廣播地址用IP地址“255.255.255.255”來表示,這個IP地址代表同一子網內所有的IP地址:
注:1:本文所講demo傳在csdn:中 http://download.csdn.net/detail/zhuweigangzwg/5001707
    2:希望交流的可以加我QQ:379969650,互相學習。
    3:本demo可用於擴展,demo 就是demo,能完成較小,較粗糙的功能,具體應用在於項目需求擴展。
    4:本demo遺憾在於用其他機器的vlc當客戶端能收到數據但不能播放,ffplay可以,由於項目比較緊,等以後再多研究,如果有解決的請聯繫我,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章