參數配置檔案:/etc/ipc.ini
啟動監控指令:rtsp_server(攝像頭作為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加密轉換,具有更高的安全性
認證流程:
- 用戶端發送DESCRIBE請求到服務端
- 服務端端傳回401錯誤,提示未認證并傳回realm和nonce
- 用戶端根據使用者名、realm、密碼、nonce、RTSP方法,請求的URL生成response傳回
服務端驗證用戶端傳回的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