30-13之 RTSP 傳輸協議

正文開始

本篇文章咱們將要開始介紹第一個應用層的流通訊協議 RTSP,別忘了上一篇介紹的 RTP 是傳輸層。

RTSP 協議

本篇文章將會分成幾個章節來理解 RTSP 協議:

  • RTSP 協議是要用來完成什麼事情呢 ?
  • RTSP 協議如何完成它想做的事情呢 ?
  • 建立 RTSP 的串流傳輸流程。
  • RTSP 的特點。

RTSP 協議是要用來完成什麼事情呢 ?

它是被設計出來為,為了控制串流媒體 Sever 的協議 (ex. 快轉、暫停影片之類)

RTSP 它被設計出來是為了可以控制串流媒體伺服器的協議 (所以他是 C/S 架構),例如我們先發送一個觀看影片的請求給 Server,然後它就開始以串流型式來傳輸影片,然後這時我們可以用 RTSP 所提供的一些方法,來進行影片的快轉或暫停,為了能控制串流就是它被設計出來的原理。

就如同下圖所示,RTSP 讓我們可以操控串流媒體。

RTSP 協議如何完成它想做的事情呢 ?

那它要如何控制呢串流呢 ?

它定義了控制的方法與參數

就如同 HTTP 一樣,它定義了一些方法可以給我們控制,例如 Play 這個動作,當串流 Server 看到這個動詞後,就會開始傳輸影片給請求者。

建立 RTSP 的串流傳輸流程

我們直接去使用網路上所提供的 RTSP 進行請求看看。這個連結你可以使用 ffplay 來開啟 (ffplay 之後會提)。

rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov

接下來我們下面說明,如果 client 端發送一條 rtsp 請求後,實際上的封包產生流程會長的什麼樣子 ?

1. 首先第一步 client 會發送 rtsp 的 options 方法給 client,然後 server 會回傳他可以支援什麼 RTSP 的方法。

C -> S
CSeq: 1
Request: OPTIONS rtsp://184.72.239.149:554/vod/mp4:BigBuckBunny_115k.mov RTSP/1.0

S -> C
CSeq: 1
Response: RTSP/1.0 200 OK
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD, GET_PARAMETER

2. 接下來會發送 DESCRIBE 請求來進行類似登入的動作,用來確保你可不可以建立線或加入這個會話。

C -> S
Request: DESCRIBE rtsp://184.72.239.149:554/vod/mp4:BigBuckBunny_115k.mov RTSP/1.0
Accept: application/sdp
CSeq: 2

S -> C
Response: RTSP/1.0 200 OK
CSeq: 2
Server: Wowza Streaming Engine 4.7.5.01 build21752
Cache-Control: no-cache
Expires: Sat, 25 Aug 2018 14:16:23 UTC
Content-length: 589
Content-Base: rtsp://184.72.239.149:554/vod/mp4:BigBuckBunny_115k.mov
Date: Sat, 25 Aug 2018 14:16:23 UTC
Content-type: application/sdp
Session: 1305852487;timeout=60

包在 RTSP 封包的 SDP
Session Description Protocol Version (v): 0
Owner/Creator, Session Id (o): - 1305852487 1305852487 IN IP4 184.72.239.149
Session Name (s): BigBuckBunny_115k.mov
Session Attribute (a): range:npt=0- 596.48
Time Description, active time (t): 0 0
Media Description, name and address (m): audio 0 RTP/AVP 96
Media Attribute (a): rtpmap:97 H264/90000
Media Attribute (a): fmtp:96 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1490

3. 接下來和 server 詢問要用什麼傳輸協議來進行這個資源的傳輸,如下範例它是會使用 RTP over UDP 來進行傳輸,不熟悉 RTP 的可以至筆者的『30-12之 RTP/RTCP 傳輸協議』來學習學習。

C -> S
Request: SETUP rtsp://184.72.239.149:554/vod/mp4:BigBuckBunny_115k.mov/trackID=1 RTSP/1.0
Transport: RTP/AVP/UDP;unicast;client_port=22610-22611
CSeq: 3
Session: 1305852487

S -> C
Response: RTSP/1.0 200 OK
Transport: RTP/AVP/UDP;unicast;client_port=22610-22611;source=184.72.239.149;server_port=8880-8881;ssrc=372D3B76
Session: 1305852487;timeout=60

4 . 最後就開始進行影像傳輸囉。

C ->
Request: PLAY rtsp://184.72.239.149:554/vod/mp4:BigBuckBunny_115k.mov/ RTSP/1.0\r\n
Range: npt=0.000-
CSeq: 5
Session: 1305852487

S -> C
Response: RTSP/1.0 200 OK
RTP-Info: url=rtsp://184.72.239.149:554/vod/mp4:BigBuckBunny_115k.mov/trackID=1;seq=1;rtptime=0,url=rtsp://184.72.239.149:554/vod/mp4:BigBuckBunny_115k.mov/trackID=2;seq=1;rtptime=0
CSeq: 5
Range: npt=0.0-596.48
Session: 1305852487;timeout=60

RTSP 的特點總結

最後來說明一下 RTSP 的幾個特點。

  • RTSP 是屬於雙向協議,你可以將它想成 client 與 server 雙方都可以發出請求。
  • RTSP 只處理串流的控制,但用什麼傳輸不算他管,基本上他是使用 RTP base UDP 或 UDP 來進行傳輸。
  • 目前多用於 VOD ( Video On Demand ) 與視訊會議。
  • 比較悲哀的事,目前不多東西支援它。

最後這裡問個問題。

RTSP 支援什麼 audio 或 video 的編碼呢 ?

這個問題事實上有點兒不算問題。

基本上不是看它可不可以支持,而是看傳輸層的協議可不以支持,像如果使用 RTP 那基本上大部份都可以,因為 RTP 會將這些編碼自動轉成 RTP 容器,然後接受端在收到 RTP 時就可以根據他的表頭來知道它是什麼編碼,然後在解碼播歌。

參考資料

comments powered by Disqus