天天看點

Hi3518ev200:RTSP傳輸流過程分析

參數配置檔案:/etc/ipc.ini

啟動監控指令:rtsp_server(攝像頭作為RTSP伺服器)

Hi3518ev200:RTSP傳輸流過程分析

RTSP介紹

1)RTSP是一個應用層的實時傳輸流協定。

通常說的RTSP

包括RTSP協定、RTP協定、RTCP協定

。它們的職責分工如下:

RTSP協定負責伺服器和用戶端之間的請求與響應;

RTP協定負責實際資料的傳輸。通常使用UDP來傳送資料,但RTP也可以在TCP或ATM等其他協定之上工作。

RTCP本身并不傳輸資料,但和RTP一起協作将多媒體資料打包和發送,為RTP傳輸提供回報資訊。
           

2)RTSP資料格式

①用戶端的請求格式

method url vesion\r\n
CSeq: x\r\n
xxx\r\n
...
\r\n
           

第一行:method為此次請求方法,url一般為rtsp://ip:port/session,vesion表示rtsp版本,目前為RTSP/1.0。

RTSP請求的常用方法有:

OPTIONS, 擷取服務端提供的可用方法

DESCRIBE, 擷取對應會話的媒體描述資訊

SETUP, PLAY, TEARDOWN, PAUSE, 分别表示建立連接配接會話請求,播放請求,關閉會話請求,暫停請求。

第二行:CSeq表示序列号,每個RTSP請求和響應都對應一個序列号,CSeq是遞增的。

②服務端的響應格式

vesion 200 OK\r\n
CSeq: x\r\n
xxx\r\n
...
\r\n
           

RTSP傳輸流過程

0)初始化視訊輸入,設定攝像頭屬性和工作模式

=============SAMPLE_COMM_VI_SetMipiAttr enWDRMode: 0
linear mode
=========================================================
===ominivision ov9732 sensor 720P30fps(Parallel port) init success!=====
=========================================================
Ai(0,0) bind to AencChn:0 ok!
SRDK SCENUAUTO Module has been inited successfully!
SRDK SCENEAUTO Module has been started successfully!
start get venv Stream
rtsp://127.0.0.1:1935/live
Set night mode
           

1)連接配接VLC用戶端

client connection from: ::ffff:192.168.1.116 : 11301(IP : port) client = 26
rtsplist add a client:26
Add new clientfd = 26 to rtsp

#vlc用戶端向服務端請求可用方法
---------------C->S--------------26
OPTIONS rtsp://192.168.1.168:1935/live RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.14 (LIVE555 Streaming Media v2016.11.28)

---------------S->C--------------26
RTSP/1.0 200 OK
CSeq: 2
Public: OPTIONS, DESCRIBE, SETUP, PLAY, TEARDOWN, PAUSE
           

2)請求媒體描述與摘要認證

①用戶端向伺服器請求媒體描述檔案,格式為sdp;但服務端認為該請求沒有通過認證,發出

WWW-Authenticate:Digest

認證響應。

②用戶端再次請求媒體描述檔案,并附帶認證資訊;服務端回複sdp檔案,這個檔案描述了音視訊流資訊。

---------------C->S--------------26
DESCRIBE rtsp://192.168.1.168:1935/live RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.14 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp

---------------S->C--------------26
RTSP/1.0 401 Unauthorized
CSeq: 3
WWW-Authenticate:Digest realm="rtsp_server", nonce="3f5c90f7ba0276d58fedd098403c16b9"


---------------C->S--------------26
DESCRIBE rtsp://192.168.1.168:1935/live RTSP/1.0
CSeq: 4
Authorization: Digest username="admin", realm="rtsp_server", nonce="3f5c90f7ba0276d58fedd098403c16b9", uri="rtsp://192.168.1.168:1935/live", response="1a62f3f37f2d4d2dc3e2d04cbd0b551d"
User-Agent: LibVLC/3.0.14 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp

ret:0, 1a62f3f37f2d4d2dc3e2d04cbd0b551d
---------------S->C--------------26
RTSP/1.0 200 OK
CSeq: 4
Content-Length: 209
Content-Type: application/sdp

v=0
o=- 91623485126 1 IN IP4 192.168.1.168
t=0 0
a=control:*
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=framerate:30
a=control:track0
m=audio 0 RTP/AVP 0
a=rtpmap:0 PCMU/16000/1
a=control:track1
           

摘要認證:其消息經過MD5加密轉換,具有更高的安全性

認證流程:
  1. 用戶端發送DESCRIBE請求到服務端
  2. 服務端端傳回401錯誤,提示未認證并傳回realm和nonce
  3. 用戶端根據使用者名、realm、密碼、nonce、RTSP方法,請求的URL生成response傳回
  4. 服務端驗證用戶端傳回的response,驗證成功傳回OK,響應DESCRIBE

    之後的用戶端請求同樣需要通過response驗證,服務端才會傳回OK,進行響應

3)建立會話

---------------C->S--------------26
SETUP rtsp://192.168.1.168:1935/live/track0 RTSP/1.0
CSeq: 5
Authorization: Digest username="admin", realm="rtsp_server", nonce="3f5c90f7ba0276d58fedd098403c16b9", uri="rtsp://192.168.1.168:1935/live", response="666de16cf867d87bb2bede9295bdb4e4"
User-Agent: LibVLC/3.0.14 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=51948-51949

---------------S->C--------------26
RTSP/1.0 200 OK
CSeq: 5
Transport: RTP/AVP;unicast;client_port=51948-51949;server_port=12344-12345
Session: 00148940

# 第二次SETUP,音頻視訊各一個會話
---------------C->S--------------26
SETUP rtsp://192.168.1.168:1935/live/track1 RTSP/1.0
CSeq: 6
......
Transport: RTP/AVP;unicast;client_port=51950-51951
Session: 00148940

---------------S->C--------------26
RTSP/1.0 200 OK
CSeq: 6
Transport: RTP/AVP;unicast;client_port=51950-51951;server_port=12344-12345
Session: 00148940
           

Transport: RTP/AVP; 表示RTP使用UDP發送資料,如果是RTP/AVP/TCP則表示RTP使用TCP發送。

unicast; 表示單點傳播

client_port=51948-51949,分别表示用戶端的RTP和RTCP端口。

4)播放視訊

---------------C->S--------------26
PLAY rtsp://192.168.1.168:1935/live RTSP/1.0
CSeq: 7
Authorization: Digest username="admin", realm="rtsp_server", nonce="3f5c90f7ba0276d58fedd098403c16b9", uri="rtsp://192.168.1.168:1935/live", response="4cf1069586cc59700b462bc22d4dd130"
User-Agent: LibVLC/3.0.14 (LIVE555 Streaming Media v2016.11.28)
Session: 00148940
Range: npt=0.000-

---------------S->C--------------26
RTSP/1.0 200 OK
CSeq: 7
Range: npt=0.000-
Session: 00148940; timeout=60
           

媒體描述檔案sdp

格式介紹:sdp檔案

由一個會話級描述和多個媒體級描述組成

會話級描述由

v=

開頭,媒體級描述由

m=

開頭。

v=0
o=- 91623485126 1 IN IP4 192.168.1.168
t=0 0
a=control:*

m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=framerate:30
a=control:track0

m=audio 0 RTP/AVP 0
a=rtpmap:0 PCMU/16000/1
a=control:track1
           

會話級描述

# sdp版本	
v=0	

# origion項,對會話發起者進行描述
# 格式為o=<使用者名><會話id><會話版本><網絡類型><位址類型><位址>
# 91623485126表示會話rtsp://192.168.1.168:1935/live
# IN表示internet
o=- 91623485126 1 IN IP4 192.168.1.168

# 略
t=0 0	
a=control:*
           

媒體級描述

# 格式為 m=<媒體類型> <端口号> <傳輸協定> <媒體格式>
m=video 0 RTP/AVP 96	# 96表示H.264格式
a=rtpmap:96 H264/90000	# 90000表示時基
a=framerate:30			# 幀率
a=control:track0		# 視訊流在會話中的編号

m=audio 0 RTP/AVP 0
a=rtpmap:0 PCMU/16000/1
a=control:track1
           

繼續閱讀