1. 程式人生 > >木棉花開時,鳳凰涅槃日!

木棉花開時,鳳凰涅槃日!

RTSP是由Real network 和Netscape共同提出的如何有效地在IP網路上傳輸流媒體資料的應用層協議。 實時流協議(RTSP)建立並控制一個或幾個時間同步的連續流媒體,如音訊和視訊。儘管連續媒體流與控制流交叉是可能的,RTSP 本身並不傳送連續媒體流。換言之,RTSP 充當多媒體伺服器的網路遠端控制。RTSP 提供了一個可擴充套件框架,實現實時資料(如音訊與視訊)的受控、按需傳送。資料來源包括實況資料與儲存的剪輯。RTSP 用於控制多個數據傳送會話,提供了選擇傳送通道(如 UDP、組播 UDP 與 TCP 等)的方式,並提供了選擇基於 RTP 的傳送機制的方法。

目前還沒有 RTSP 連線的概念;伺服器維護由識別符標識的會話。RTSP 會話不會繫結到傳輸層連線,如 TCP。在 RTSP 會話期間,RTSP 客戶端可開啟或關閉多個對伺服器的可靠傳輸連線以發出 RTSP 請求。它也可選擇使用無連線傳輸協議,如 UDP。

RTSP 控制的流可能用到 RTP,但 RTSP 操作並不依賴用於傳輸連續媒體的傳輸機制。RTSP 在語法和操作上與 HTTP/1.1 類似,因此 HTTP 的擴充套件機制在多數情況下可加入 RTSP。然而,在很多重要方面 RTSP 仍不同於 HTTP :

  • RTSP 引入了大量新方法並具有一個不同的協議識別符號:
  • 在大多數情況下,RTSP 伺服器需要保持預設狀態,與 HTTP 的無狀態相對;
  • RTSP 中客戶端和伺服器都可以發出請求;
  • 在多數情況下,資料由不同的協議傳輸;
  • RTSP 使用 ISO 10646 (UTF-8)而並非 ISO 8859-1,與當前的國際標準 HTML 相一致;
  • URI 請求總是包含絕對 URI。為了與過去的錯誤相互相容,HTTP/1.1 只在請求過程中傳送絕對路徑並將主機名置於另外的頭欄位。

該協議支援如下操作:

  • 從媒體伺服器上檢索媒體:使用者可通過 HTTP 或其它方法提交一個演示描述請求;
  • 媒體伺服器邀請進入會議: 媒體伺服器可被邀請參加正進行的會議,或回放媒體,或記錄部分或全部演示;
  • 將新媒體加到現有演示中:如伺服器能告訴客戶端接下來可用的媒體內容,對現場直播顯得尤其有用

    RTSP 是一種文字協議,採用 UTF-8 編碼中的 ISO 10646 字符集。一行可通過 CRLF 終止,但接收端需要做好解釋 CR 和 LF 作為一行終止符的準備。關於頭欄位概述如下:

    Header Type Support Methods
    Accept R opt. entity
    Accept-Encoding R opt. entity
    Accept-Language R opt. all
    Allow R opt. all
    Authorization R opt. all
    Bandwidth R opt. all
    Blocksize R opt. All but OPTIONS, TEARDOWN
    Cache-Control G opt. SETUP
    Conference R opt. SETUP
    Connection G req. all
    Content-Base E opt. entity
    Content-Encoding E req. SET_PARAMETER
    Content-Encoding E req. DESCRIBE, ANNOUNCE
    Content-Language E req. DESCRIBE, ANNOUNCE
    Content-Length E req. SET_PARAMETER, ANNOUNCE
    Content-Length E req. entity
    Content-Location E opt. entity
    Content-Type E req. SET_PARAMETER, ANNOUNCE
    Content-Type R req. entity
    CSeq G req. all
    Date G opt. all
    Expires E opt. DESCRIBE, ANNOUNCE
    From R opt. all
    If-Modified-Since R opt. DESCRIBE, SETUP
    Last-Modified E opt. entity
    Proxy-Authenticate
    Proxy-Require R req. all
    Public R opt. all
    Range R opt. PLAY, PAUSE, RECORD
    Range R opt. PLAY, PAUSE, RECORD
    Referer R opt. all
    Require R req. all
    Retry-After R opt. all
    RTP-Info R req. PLAY
    Scale Rr opt. PLAY, RECORD
    Session Rr req. All but SETUP, OPTIONS
    Server R opt. all
    Speed Rr opt. PLAY
    Transport Rr req. SETUP
    Unsupported R req. all
    User-Agent R opt. all
    Via G opt. all
    WWW-Authenticate R opt. all

型別 "g" 表示請求和響應中的通用請求頭;型別 "R" 表示請求頭;型別 "r" 表示響應頭;型別 "e" 表示實體頭欄位。在 "support" 一欄中 標有 "req." 的欄位 必須由接收者以特殊的方法實現;而 "opt." 的欄位是可選的。注意,不是所有 "req." 欄位在該型別的每個請求中都會被髮送。 "req." 只表示客戶機(支援響應頭)和伺服器(支援請求頭)必須執行該欄位。最後一欄列出了關於頭欄位產生作用的方法;其中 "entity" 針對於返回一個資訊主體的所有方法。

RTSP訊息格式:

RTSP的訊息有兩大類 --- 請求訊息(request), 迴應訊息(response)。

請求訊息:
方法 URI RTSP版本 CR LF 
訊息頭 CR LF CR LF 
訊息體 CR LF 

其中方法包括OPTION迴應中所有的命令,URI是接受方的地址,例如:rtsp://192.168.20.136。RTSP版本一般都是 RTSP/1.0。每行後面的CR LF表示回車換行,需要接受端有相應的解析,最後一個訊息頭需要有兩個CR LF

迴應訊息:
RTSP版本 狀態碼 解釋 CR LF 
訊息頭 CR LF CR LF 
訊息體 CR LF 

其中RTSP版本一般都是RTSP/1.0, 狀態碼是一個數值, 200表示成功, 解釋是與狀態碼對應的文字解釋.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

簡單的rtsp互動過程: 

C表示rtsp客戶端, S表示rtsp服務端

1. C->S:OPTION request //詢問S有哪些方法可用
1. S->C:OPTION response //S迴應資訊中包括提供的所有可用方法

2. C->S:DESCRIBE request //要求得到S提供的媒體初始化描述資訊
2. S->C:DESCRIBE response //S迴應媒體初始化描述資訊,主要是sdp

3. C->S:SETUP request //設定會話的屬性,以及傳輸模式,提醒S建立會話
3. S->C:SETUP response //S建立會話,返回會話識別符號,以及會話相關資訊

4. C->S:PLAY request //C請求播放
4. S->C:PLAY response //S迴應該請求的資訊

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

5. C->S:TEARDOWN request //C請求關閉會話
5. S->C:TEARDOWN response //S迴應該請求

上述的過程是標準的、友好的rtsp流程,但實際的需求中並不一定按部就班來。 其 中第3和4步是必需的!第一步,只要伺服器客戶端約定好,有哪些方法可用,則option請求可以不要。第二步,如果我們有其他途徑得到媒體初始化描述信 息(比如http請求等等),則我們也不需要通過rtsp中的describe請求來完成。第五步,可以根據系統需求的設計來決定是否需要。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

rtsp中常用方法: 

1. OPTION
目的是得到伺服器提供的可用方法:
OPTIONS rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
CSeq: 1 //每個訊息都有序號來標記,第一個包通常是option請求訊息
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

伺服器的迴應資訊包括提供的一些方法,例如:
RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1
Cseq: 1 //每個迴應訊息的cseq數值和請求訊息的cseq相對應
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE,GET_PARAMETER //伺服器提供的可用的方法

2. DESCRIBE 
C向S發起DESCRIBE請求,為了得到會話描述資訊(SDP):
DESCRIBE rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
CSeq: 2
token: 
Accept: application/sdp
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10) 

伺服器迴應一些對此會話的描述資訊(sdp):
RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 2 
x-prev-url: rtsp://192.168.20.136:5000 
x-next-url: rtsp://192.168.20.136:5000 
x-Accept-Retransmit: our-retransmit 
x-Accept-Dynamic-Rate: 1 
Cache-Control: must-revalidate 
Last-Modified: Fri, 10 Nov 2006 12:34:38 GMT 
Date: Fri, 10 Nov 2006 12:34:38 GMT 
Expires: Fri, 10 Nov 2006 12:34:38 GMT 
Content-Base: rtsp://192.168.20.136:5000/xxx666/ 
Content-Length: 344 
Content-Type: application/sdp 

v=0 //以下都是sdp資訊
o=OnewaveUServerNG 1451516402 1025358037 IN IP4 192.168.20.136 
s=/xxx666 
u=http:/// 
[email protected] 
c=IN IP4 0.0.0.0 
t=0 0 
a=isma-compliance:1,1.0,1 

a=range:npt=0- 
m=video 0 RTP/AVP 96 //m表示媒體描述,下面是對會話中視訊通道的媒體描述
a=rtpmap:96 MP4V-ES/90000 
a=fmtp:96 profile-level-id=245;config=000001B0F5000001B509000001000000012000C888B0E0E0FA62D089028307 a=control:trackID=0 //trackID=0表示視訊流用的是通道0

3.SETUP 
客戶端提醒伺服器建立會話,並確定傳輸模式:
SETUP rtsp://192.168.20.136:5000/xxx666/trackID=0 RTSP/1.0 
CSeq: 3 
Transport: RTP/AVP/TCP;unicast;interleaved=0-1 
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
//uri中 帶有trackID=0,表示對該通道進行設定。Transport引數設定了傳輸模式,包的結構。接下來的資料包頭部第二個位元組位置就是 interleaved,它的值是每個通道都不同的,trackID=0的interleaved值有兩個0或1,0表示rtp包,1表示rtcp包,接 受端根據interleaved的值來區別是哪種資料包。

伺服器迴應資訊:
RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 3 
Session: 6310936469860791894 //伺服器迴應的會話識別符號
Cache-Control: no-cache 
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=6B8B4567

4.PLAY 
客戶端傳送播放請求:
PLAY rtsp://192.168.20.136:5000/xxx666 RTSP/1.0 
CSeq: 4 
Session: 6310936469860791894 
Range: npt=0.000- //設定播放時間的範圍
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

伺服器迴應資訊:
RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 4 
Session: 6310936469860791894 
Range: npt=0.000000- 
RTP-Info: url=trackID=0;seq=17040;rtptime=1467265309 
//seq和rtptime都是rtp包中的資訊

5.TEARDOWN 
客戶端發起關閉請求:
TEARDOWN rtsp://192.168.20.136:5000/xxx666 RTSP/1.0 
CSeq: 5 
Session: 6310936469860791894 
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10) 

伺服器迴應:
RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 5 
Session: 6310936469860791894 
Connection: Close 

相關推薦

木棉花鳳凰涅槃

RTSP是由Real network 和Netscape共同提出的如何有效地在IP網路上傳輸流媒體資料的應用層協議。 實時流協議(RTSP)建立並控制一個或幾個時間同步的連續流媒體,如音訊和視訊。儘管連續媒體流與控制流交叉是可能的,RTSP 本身並不傳送連續媒體流。換言之,RTSP 充當多媒體伺服器的網路遠

如何使瀏覽器打默認的文檔模式就是標準模式

frame ie8 ie10 默認 ram html5 comm jsp 寫上 請看下方: 第一步,將代碼設置成html5的模式,那麽用戶打開項目之後,文檔模式就是標準的;即不會是ie5Qurik模式;但有可能是ie7標準模式; 第二步, 2.1 在html head中寫上

Xshell 打初始運行卡慢優化方法

tsar html 重新 for xshell 打開 其他 title htm 我使用的是Xshell 6免費版,有需要的同學可以去這個地址下載:https://www.netsarang.com/download/down_form.html?code=622 一開始

MyBatis入門介紹鳳凰涅槃:從 iBatis 到 MyBatis

       對於從事 Java EE 的開發人員來說,iBatis 是一個再熟悉不過的持久層框架了,在 Hibernate、JPA 這樣的一站式物件 / 關係對映(O/R Mapping)解決方案盛行之前,iBaits 基本是持久層框架的不二選擇。即使在持久層框架層出不

博之謹此銘記

ctx ~~ 風中 一聲 col 方向 恢復 font 憂傷 一心集·染脂梨花 雲遮住皎潔的月光 找不到你離開的方向 草叢間七八只蟋蟀 又奏起不知名的憂傷 桌上余溫尚存的紙杯 卻被胭脂掩蓋了茶香 你無情的離去還叫我把你遺忘 可滴在我手心的淚又叫我如何遺忘 石子墜入我門

【fifan的專欄】夫君子之行靜以修身儉以養德。非淡泊無以明志非寧靜無以致遠。夫學須靜也才須學也非學無以廣才非志無以成學。淫慢則不能勵精險躁則不能治性。年與意與遂成枯落多不接世悲守窮廬將復何及

夫君子之行,靜以修身,儉以養德。非淡泊無以明志,非寧靜無以致遠。夫學須靜也,才須學也,非學無以廣才,非志無以成學。淫慢則不能勵精,險躁則不能治性。年與時馳,意與日去,遂成枯落,多不接世,悲守窮廬,將復...

使用windows打一個文本鼠標右鍵找不到notepad

windows 右鍵 找不到 【出現問題】:notepad++已經安裝在Windows中,但是當要打開一個文件時,鼠標右鍵卻找不到notepd++【解決辦法】:打開notepad++後記事本,輸入:Windows Registry Editor Version 5.00 [HKEY_CLASSES

5月20重點:當請求的參數是動態的形式原生app與h5頁面之間數據交互的方法

post方法 註意 data 不能 images 動態 構建 parse 拼接 方案一: 1.app在打開H5頁面的時候,把需要給的參數,以get的形式,放在H5的url中。 2.然後H5的js從url中獲取到需要的參數,拼接到ajax請求的url中。 3.H5ajax請求

低谷請讀書

我想 所有 我不 解決問題 便是 還要 如何 情況 感覺   這段時期總感覺不太對勁,被敵人追擊、緊盯、蹲守和騷擾,整個戰局打的都不是很好,如同MF時總有個疾風步的劍聖在一旁等待吃我的經驗,心裏總是慌慌的。   雖然我也常常自勉,認為這才是年輕時候的磨練,但是總覺得這種磨練

PLSQL 打出現"動態執行表不可訪問本會話的自動統計被禁止"

訪問權限 app 對話 導航 如果 name 局限 方式 點擊 這個報錯信息在不同的PL/SQL Developer版本都會出現,從上面詳細的報錯提示信息中我們可以判斷得到,報錯原因不在工具本身。在此,詳細記錄一下這個小問題的三種處理方法。1.第一種處理方法(不推薦)就是在

IE打https網站取消證書問題提示

設置 完成 手動 進入 bubuko src 界面 找到 alt 上面介紹了,調用IE來打開對應的網頁問題,但是在實際測試中,有些網站是采用https協議的,這時候IE瀏覽器會彈出如下窗口,一般手動選擇後,才可進入登錄界面,那麽該如何解決呢? 1、點擊【繼續瀏覽此網頁】

SetProcessWorkingSetSize() 方法使內存降低了很多(把內存放到交換區其實會降低性能)——打後長時間不使用軟件會有很長時間的加載過程原來是這個

相關 opera UNC 情況下 縮小 ole careful however guarantee 在項目中對程序性能優化時,發現用SetProcessWorkingSetSize() 方法使內存降低了很多,於是查閱了相關的資料如下: 我的程序為什麽能夠將占用的內存

當面試官問這些基礎的Python問題竟然還有80%的人不會

核心 變量 字符 進制數 基礎 技術分享 run 但是 http 怎樣才能開始一個交互式解釋器的會話? 在Windows下可以通過點擊開始按鈕,選擇“程序”,點擊“Python”,然後選擇“Python(command line)”菜單選項來開始一個交互會話。 你應該在哪

安裝兩個版本的python安裝包後安裝的python程序打閃退

bsp 卸載 雙擊 python的安裝 環境變量 系統默認 電腦 3.6 路徑 1.環境變量的問題 (Win7)右鍵打開“計算機”的屬性設置→高級系統設置→環境變量。 在系統變量中的path中,編輯,在末尾加入Python的安裝路徑“F:\Python27”, 路徑與

input屬性type為file打文件資源管理器如何限制多次選取或只能一次選取的行為

esc image object ttr itl 文件 ctu 轉化 idt 1、input標簽沒有設置multiple屬性,文件資源管理器默認一次選取 <!doctype html> <html lang="en"> <head>

蘋果手機如何上YouTube看視頻怎麽打YouTube最有效解決方法

cisco term out ado nag 使用 sha -o .com 現在這個時代還有多少人不知道YouTube這個軟件呢 ?YouTube已經成為現在年輕人的主流看視頻使用工具的。但是還是有很多人不懂的怎麽去使用如何打開YouTube軟件。可以說這個款軟件是被國.內

正確生成浮點型的方法解決sqlachemy Float浮點型的坑生成float類型長度和精度均為0導致查詢不到結果

依然 tab 圖片 control 選擇 分享 ice mod ble 問題描述 在使用flask_sqlachemy時,給price字段選擇了Float類型,數據庫用的mysql,生成數據庫表後,發現 from sqlalchemy import Float

火狐瀏覽器中設置打新地址不會覆蓋原頁面的方法

希望 技術 col 有效 book 覆蓋 圖片 bsp 頁面 近期使用火狐瀏覽器發現打開新標簽頁時總是會覆蓋原頁面,百度了好多方法都是在選項中-設置標簽頁, 然而,在我用的瀏覽器版本裏均無此項可設置,一直百度總算找到一種辦法,親試絕對有效! 1、本人用的是火狐瀏覽器62.0

正確生成浮點型的方法解決sqlachemy Float浮點型的坑生成float型別長度和精度均為0導致查詢不到結果

問題描述 在使用flask_sqlachemy時,給price欄位選擇了Float型別,資料庫用的mysql,生成資料庫表後,發現   from sqlalchemy import Float,Column price = Column(Float,default=0.00) &

STM32除錯DEBUG需要知道的知識

學習STM32開發,肯定少不了DEBUG除錯這一步驟。那麼,本文帶你瞭解一下這個除錯相關的知識。 本文以STM32F1、Cortex-M3為例,其它系列晶片或核心,原理相同或類似。 1概況 在STM32中,有很多除錯元件。使用它們可以執行各種除錯功能,包括