RTSP (Real Time Streaming Protocol),是一種語法和操做相似 HTTP 協議,專門用於音頻和視頻的應用層協議。 和 HTTP 相似,RTSP 也使用 URL 地址。網絡
海康網絡攝像頭的 RTSP URL 格式以下:ide
rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream
1) username 用戶名,經常使用 admin 2) password 密碼,經常使用 12345 3) ip 攝像頭IP,如 192.0.0.64
4) port 端口號,默認爲 554
5) codec 視頻編碼模式,有 h26四、MPEG-四、mpeg4 等
6) channel 通道號,起始爲1,例如通道1,則爲 ch1
7) subtype 碼流類型,主碼流爲 main,輔碼流爲 sub
大華網絡攝像頭的 RTSP URL 格式以下:函數
rtsp://[username]:[password]@[ip]:[port]/cam/realmonitor?[channel=1]&[subtype=1]
1) username、password、ip、port 同上 2) channel 通道號,起始爲1,例如通道2,則爲 channel=2 3) subtype 碼流類型,主碼流爲0(即 subtype=0),輔碼流爲1(即 subtype=1)
VideoCapture 類是 OpenCV 中用來操做視頻流的類,能夠在構造函數中打開視頻,其參數支持如下三種類型:ui
1) name of video file (eg. `video.avi`)編碼
2) image sequence (eg. `img_%02d.jpg`, which will read samples like `img_00.jpg, img_01.jpg, img_02.jpg, ...`)spa
3) URL of video stream (eg. `protocol://host:port/script_name?script_params|auth`)..net
// Open video file or a capturing device or a IP video stream for video capturing
// VideoCapture 構造函數 CV_WRAP VideoCapture(const String& filename);
也能夠構造後,再使用 open 函數來打開code
// 參數同 VideoCapture 的構造函數 CV_WRAP virtual bool open(const String& filename);
下面是以海康威視的某款網絡攝像頭爲例,使用 OpenCV 的 VideoCapture 類來顯示實時視頻視頻
#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" using namespace cv; int main(int argc, char** argv) { String rtsp_addr = "rtsp://admin:a1234567@192.168.5.186:554/MPEG-4/ch1/main/av_stream"; VideoCapture cap(rtsp_addr); // cap.open(rtsp_addr); Mat frame; for(;;) { cap >> frame; if(frame.empty()) break; imshow("Video Stream", frame); if (waitKey(10) == 'q') break; } }
附上一張園區的部分視頻截圖以下:blog
參考資料:
Multimedia Over IP: RSVP, RTP, RTCP, RTSP
海康、大華IpCamera RTSP地址和格式 xiejiashu
<Learning OpenCV3> chapter 8