即時串流協定（Real Time Streaming Protocol，RTSP）是一種網路應用協定，專為娛樂和通信系統的使用，以控制串流媒體伺服器。該協定用於建立和控制終端之間的媒體對談。媒體伺服器的客戶端發布 VCR 命令，例如播放，錄製和暫停，以便於即時控制從伺服器到客戶端（影片點播）或從客戶端到伺服器（語音錄音）的媒體流。

流資料本身的傳輸不是 RTSP 的任務。大多數 RTSP 伺服器使用即時傳輸協定（RTP）和即時傳輸控制協定（RTCP）結合媒體流傳輸。然而，一些供應商實現專有傳輸協定。例如，RealNetworks 公司的 RTSP 伺服器軟體也使用 RealNetworks 的專有即時資料傳輸（RDT）。

RTSP 由 RealNetworks 公司，Netscape 公司 和哥倫比亞大學開發，第一稿於 1996 年提交給 IETF。由網際網路工程任務組（IETF）的多方多媒體對談控制工作群組（MMUSIC WG）進行了標準化，並於 1998 年發布為 RFC 2326。 RTSP 2.0 於 2016 年發布為 RFC 7826，作為 RTSP 1.0 的替代品。RTSP 2.0 基於 RTSP 1.0，但除了基本的版本協商機制之外不向下相容。



協定指令

雖然在某些方面與 HTTP 類似，RTSP 定義了控制多媒體播放控制順序。雖然 HTTP 是無狀態的，但 RTSP 具有狀態；當需要跟蹤並行對談時使用識別碼。像 HTTP 一樣，RTSP 使用 TCP 來維護端到端連接，而大多數 RTSP 控制訊息由客戶端傳送到伺服器，一些命令沿著另一個方向（即從伺服器到客戶端）傳播。

這裡提供了基本的 RTSP 請求。一些典型的 HTTP 請求，如 OPTIONS 請求也可用。預設傳輸埠為 554 ，該埠同時應用於 TCP 和 UDP，但後者很少用於控制請求。

OPTIONS 請求
: OPTIONS 請求返回伺服器將接受的請求類型。 (C 代表客戶端 S 代表伺服器端)

```
C->S:  OPTIONS rtsp://example.com/media.mp4 RTSP/1.0
       CSeq: 1
       Require: implicit-play
       Proxy-Require: gzipped-messages

S->C:  RTSP/1.0 200 OK
       CSeq: 1
       Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
```

DESCRIBE 請求
: DESCRIBE 請求包括 RTSP URL（rtsp://...）以及可以處理的回覆資料類型。該回覆包括呈現描述，通常以對談描述協定（SDP）格式。其中，演示文稿描述列出了使用匯總網址控制的媒體流。在典型的情況下，每個音訊和影片都有一個媒體流。

```
C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 2

S->C: RTSP/1.0 200 OK
      CSeq: 2
      Content-Base: rtsp://example.com/media.mp4
      Content-Type: application/sdp
      Content-Length: 460

      m=video 0 RTP/AVP 96
      a=control:streamid=0
      a=range:npt=0-7.741000
      a=length:npt=7.741000
      a=rtpmap:96 MP4V-ES/5544
      a=mimetype:string;"video/MP4V-ES"
      a=AvgBitRate:integer;304018
      a=StreamName:string;"hinted video track"
      m=audio 0 RTP/AVP 97
      a=control:streamid=1
      a=range:npt=0-7.712000
      a=length:npt=7.712000
      a=rtpmap:97 mpeg4-generic/32000/2
      a=mimetype:string;"audio/mpeg4-generic"
      a=AvgBitRate:integer;65790
      a=StreamName:string;"hinted audio track"
```

SETUP 請求
: SETUP 請求指定如何傳輸單個媒體流。這必須在傳送 PLAY 請求之前完成。請求包含媒體流 URL 和傳輸說明符。該說明符通常包括用於接收 RTP 資料（音訊或影片）的本地埠，另一個用於 RTCP 資料（元資訊））。伺服器回覆通常會確認所選參數，並填寫缺少的部分，例如伺服器選擇的埠。必須在傳送聚合播放請求之前，使用 SETUP 組態每個媒體流。

```
C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0
      CSeq: 3
      Transport: RTP/AVP;unicast;client_port=8000-8001

S->C: RTSP/1.0 200 OK
      CSeq: 3
      Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCD
      Session: 12345678
```

Play 播放請求
: Play 播放請求 將導致播放一個或所有媒體流。可以通過傳送多個播放請求來堆疊播放請求。URL 可以是聚合 URL（播放所有媒體流）或單個媒體流 URL（僅播放該流）。可以指定範圍。如果沒有指定範圍，流將從頭開始播放，並播放到最後，或者如果流暫停，則在暫停點恢復播放。

```
C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 4
      Range: npt=5-20
      Session: 12345678

S->C: RTSP/1.0 200 OK
      CSeq: 4
      Session: 12345678
      RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012
```

PAUSE 暫停請求
: PAUSE 暫停請求 暫時停止一個或所有媒體流，因此稍後可以通過播放請求恢復。請求包含聚合或媒體流 URL。PAUSE 請求中的範圍參數指定何時暫停。當省略範圍參數時，暫停會立即無限期地發生。

```
C->S: PAUSE rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 5
      Session: 12345678

S->C: RTSP/1.0 200 OK
      CSeq: 5
      Session: 12345678
```

RECORD 記錄請求
: RECORD 該方法根據呈現描述開始記錄一系列媒體資料。時間戳反映開始和結束時間（UTC）。如果沒有給定時間範圍，請使用演示文稿描述中提供的開始或結束時間。如果對談已經開始，請立即開始錄製。伺服器決定是否將記錄的資料儲存在請求 URI 或其他 URI 下。如果伺服器不使用請求 URI，則回應應為 201，並包含描述請求狀態並參照新資源的實體以及 Location 頭。

```
C->S: RECORD rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 6
      Session: 12345678

S->C: RTSP/1.0 200 OK
      CSeq: 6
      Session: 12345678
```

ANNOUNCE 發布請求
: ANNOUNCE 發布方法有兩個目的：

從客戶端傳送到伺服器時，ANNOUNCE 將請求 URL 標識的演示文稿或媒體物件的描述發布到伺服器。當從伺服器傳送到客戶端時，ANNOUNCE 會即時更新對談描述。如果新的媒體流被添加到演示文稿中（例如，在即時演示中），則應該再次傳送整個演示文稿描述，而不僅僅是附加的組件，以便可以刪除組件。(下面電子信箱 '#' 號替換成 '@')

```
C->S: ANNOUNCE rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 7
      Date: 23 Jan 1997 15:35:06 GMT
      Session: 12345678
      Content-Type: application/sdp
      Content-Length: 332

      v=0
      o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4
      s=SDP Seminar
      i=A Seminar on the session description protocol
      u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
      e=mjh#isi.edu (Mark Handley)
      c=IN IP4 224.2.17.12/127
      t=2873397496 2873404696
      a=recvonly
      m=audio 3456 RTP/AVP 0
      m=video 2232 RTP/AVP 31

S->C: RTSP/1.0 200 OK
      CSeq: 7
```

TEARDOWN 停止發布流請求
: TEARDOWN 請求用於終止對談。它停止所有媒體流，並釋放所有與對談相關的資料在伺服器上。

```
C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 8
      Session: 12345678

S->C: RTSP/1.0 200 OK
      CSeq: 8
```

GET\_PARAMETER 取得參數請求
: GET\_PARAMETER 請求檢索在 URI 中指定的呈現或流的參數的值。答覆和回覆的內容留給實施。沒有實體的 GET\_PARAMETER 可能用於測試客戶端或伺服器活動（「ping」）。

```
S->C: GET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 9
      Content-Type: text/parameters
      Session: 12345678
      Content-Length: 15

      packets_received
      jitter

C->S: RTSP/1.0 200 OK
      CSeq: 9
      Content-Length: 46
      Content-Type: text/parameters

      packets_received: 10
      jitter: 0.3838
```

SET\_PARAMETER 設定參數請求
: SET\_PARAMETER 此方法請求設定由 URI 指定的演示文稿或流的參數值。

```
C->S: SET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 10
      Content-length: 20
      Content-type: text/parameters

      barparam: barstuff

S->C: RTSP/1.0 451 Invalid Parameter
      CSeq: 10
      Content-length: 10
      Content-type: text/parameters

      barparam
```

REDIRECT 重新導向請求
: REDIRECT 請求通知客戶端它必須連接到另一個伺服器位置。它包含強制性標頭檔位置，表示客戶端應發出該 URL 的請求。它可能包含參數 Range，它指示重新導向何時生效。如果客戶端希望繼續傳送或接收此 URI 的媒體，則客戶端必須向指定的主機發出針對當前對談的 TEARDOWN 請求和新對談的 SETUP。

```
S->C: REDIRECT rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 11
      Location: rtsp://bigserver.com:8001
      Range: clock=19960213T143205Z-
```

嵌入式（交錯式）二進位資料
: 某些防火牆設計和其他情況可能會強制伺服器交叉 RTSP 方法和流資料。通常應避免這種交錯，除非有必要，因為它會使客戶端和伺服器操作複雜化，並增加額外的開銷。交叉二進位資料只能在 RTSP 通過 TCP 傳輸時使用。諸如 RTP 封包之類的流資料由 ASCII 碼符號（24 個十六進位）封裝，後跟一個位元組的信道識別碼，後面是封裝二進位資料的長度，以二進位位元組為單位，以網路位元組順序排列。流資料緊隨其後，沒有 CRLF，但包括上層協定頭。每個 $ 塊只包含一個上層協定資料單元，例如一個 RTP 包。

```
C->S: SETUP rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 3
      Transport: RTP/AVP/TCP;interleaved=0-1

S->C: RTSP/1.0 200 OK
      CSeq: 3
      Date: 05 Jun 1997 18:57:18 GMT
      Transport: RTP/AVP/TCP;interleaved=0-1
      Session: 12345678

C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 4
      Session: 12345678

S->C: RTSP/1.0 200 OK
      CSeq: 4
      Session: 12345678
      Date: 05 Jun 1997 18:59:15 GMT
      RTP-Info: url=rtsp://example.com/media.mp4;
      seq=232433;rtptime=972948234

S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}
S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}
S->C: $\001{2 byte length}{"length" bytes  RTCP packet}
```



速率適配

使用 RTP 和 RTCP 的 RTSP 允許實現速率適配。



已經成功實現的

伺服器端


* Darwin Streaming Server: Open-sourced version of QuickTime Streaming Server maintained by Apple.

* Erlyvideo has RTSP client and can restream video to other protocols.

* Feng: Lean and mean streaming server with focus on rfc compliance.

* FFmpeg: includes ffserver a GPL or LGPL RTSP streaming server.

* GStreamer based RTSP Server and client.

* Helix DNA Server: RealNetworks' streaming server. Comes in both open-source and proprietary flavors.

* Helix Universal Server: RealNetworks commercial streaming server for RTSP, RTMP, iOS, Silverlight and HTTP streaming media clients

* LEADTOOLS Media Streaming Server SDK from LEAD Technologies supports RTSP/RTP, RTSP/RTP (MPEG-2 Transport), RTSP/RTP over HTTP.

* LIVE555 liveMedia / openRTSP: Open source C++ server and client libraries used in well-known clients like VLC and mplayer.

* Managed Media Aggregation （頁面存檔備份，存於網際網路檔案館）: .NET C# RFC compliant implementation of RTSP written in completely managed code.

* Nimble Streamer supports RTSP pull and announce input with TCP interleaved playback output.

* pvServer: Formerly called PacketVideo Streaming Server, this is Alcatel-Lucent's streaming server product.

* QuickTime Streaming Server: Apple's closed-source streaming server that ships with Mac OS X Server.

* SharpRTSP （頁面存檔備份，存於網際網路檔案館）: Open sourceC# RTSP streaming server.

* ViaMotion: Integrated RTSP server for Video On Demand by Anevia

* VideoLAN: Open source media player and streaming server.

* VX30: Streaming video server and embedded Java client from Maui X-Stream.

* Windows Media Services: Microsoft streaming server previously included with Windows Server that uses RTSP modified with Windows Media extensions （頁面存檔備份，存於網際網路檔案館）

* Wowza Streaming Engine: Multi-format streaming server for RTSP/RTP, RTMP, MPEG-TS, ICY, HTTP (HTTP Live Streaming, HTTP Dynamic Streaming, Smooth Streaming, MPEG-DASH), WebRTC

* Xenon Streaming Server: 來自 Vidiator Technology（US）Inc. 的移動流伺服器

* YouTube: 在桌面上通過移動 HTTPS 版本檢視網站時，可以使用串流媒體選項。

客戶端


* Astra

* cURL (從 7.20.0 版本 2010 年 2 月 9 日)

* FFmpeg

* GStreamer

* JetAudio

* LIVE555 liveMedia /openRTSP: 開源，C++ 伺服器和客戶端庫，如 VLC 和 mplayer 等知名客戶端使用。

* Media Player Classic

* MPlayer

* MythTV via Freebox

* Managed Media Aggregation （頁面存檔備份，存於網際網路檔案館）: .NET C# RFC compliant implementation of RTSP written in completely managed code.

* omxplayer

* QuickTime

* RealPlayer

* SharpRTSP （頁面存檔備份，存於網際網路檔案館）: 開源，C＃ 編寫的 RTSP 流客戶端。

* Skype

* Spotify

* VLC media player

* Winamp

* Windows Media Player

* xine



參考



外部連結


* 有關 RTSP 更詳細的介紹 （頁面存檔備份，存於網際網路檔案館）

* 關於 RTSP 的 RFC 檔案

* RTSP RTP RTCP 相關資料 （頁面存檔備份，存於網際網路檔案館）