一、RTSP是什么?用來干什么?
RTSP(Real Time Streaming Protocol),RFC2326,實時流傳輸協議,是TCP/IP協議體系中的一個應用層協議,由哥倫比亞大學、網景和RealNetworks公司提交的IETF RFC標准。該協議定義了一對多應用程序如何有效地通過IP網絡傳送多媒體數據。RTSP在體系結構上位於RTP和RTCP之上,它使用TCP或UDP完成數據傳輸。HTTP與RTSP相比,HTTP請求由客戶機發出,服務器作出響應;使用RTSP時,客戶機和服務器都可以發出請求,即RTSP可以是雙向的。RTSP是用來控制聲音或影像的多媒體串流協議,並允許同時多個串流需求控制,傳輸時所用的網絡通訊協定並不在其定義的范圍內,服務器端可以自行選擇使用TCP或UDP來傳送串流內容,它的語法和運作跟HTTP 1.1類似,但並不特別強調時間同步,所以比較能容忍網絡延遲。而前面提到的允許同時多個串流需求控制(Multicast),除了可以降低服務器端的網絡用量,更進而支持多方視訊會議(Video Conference)。因為與HTTP1.1的運作方式相似,所以代理服務器〈Proxy〉的快取功能〈Cache〉也同樣適用於RTSP,並因RTSP具有重新導向功能,可視實際負載情況來轉換提供服務的服務器,以避免過大的負載集中於同一服務器而造成延遲。
可以看出,RTSP作為一個應用層協議,主要是因為它的網絡適應性、忍耐性,使得在電視電話會議,特別是在現在網絡直播上面得到非常廣泛應用。
二、圖像處理項目需要如何使用RTSP?
對於圖像處理程序來說,RTSP作為一種視頻格式,主要是作為圖像處理算法的輸入和輸出而存在的。比如從網絡上接入的(帶系統的攝像機直接生成的)實時視頻流,需要接入我們的系統;再比如算法的結果生產,如何附加到RTSP流上再傳播出去。
這個時候可能會遇到幾個問題,首先是設置的問題。在基於DShow(非常巨大而且強大)的傳統接入方式下,我們可以直接對攝像頭的輸入進行設置(基於filiter),而對於RTSP來說,可能是缺少統一的方法,而必須依據廠商自己的工具(因為它有一個操作系統在里面)。
而對於如何附件到生成結果上來,又相當於編寫RTSP服務,從而必須對它有比較深入的了解。
三、OpenCV調用RTSP的幾種方式。
1、OpenCV自己基於FFMPEG集成了調用,這是最快的方式;
# include <opencv2 /opencv.hpp >
# include <iostream >
using namespace std;
using namespace cv;
int main()
{
VideoCapturecap;
cap.open( "rtsp://0.0.0.1/stream1"); //呵呵,就這一句關鍵
MatCamera_CImg;
MatCamera_GImg;
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 768);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1024);
if ( !cap.isOpened())
return 1024;
while ( 1)
{
cap >> Camera_CImg;
if(Camera_CImg.empty())
break;
cvtColor(Camera_CImg,Camera_GImg, CV_RGB2GRAY);
imshow( "input", Camera_CImg);
if (cvWaitKey( 10) == 'q')
break;
}
system( "pause");
return 0;
}
關於那個"呵呵“一句,我估計實際使用的時候,可能還有一些新的問題。同時我也非常認為,這種默認的方法,總是不專業。
2、基於DShow,構建FILTER(沒有深入研究)
開源的實現了RTSP協議的Directshow Filter比較少,一個開源的Filter:RTSP Renderer Filter,完成了一個小型RTSP 服務器的功能。
https://blog.csdn.net/toshiba689/article/details/79410852
3、仿制專門的RTSP播放程序
這個地方,我有兩個推薦。
一個是 EasyPlayer-RTSP-Win forked from EasyDSS/EasyPlayer-RTSP-Win(https://github.com/jsxyhelu/EasyPlayer-RTSP-Win)
An elegant, simple, fast windows RTSP Player.EasyPlayer support RTSP(RTP over TCP/UDP),video support H.264/H.265,audio support G.711/G.726/AAC!EasyPlayer RTSP是一款精煉、高效、穩定的RTSP流媒體播放器,視頻支持H.264/H.265,音頻支持G.711/G.726/AAC,支持RTP over UDP/TCP兩種模式! http://www.easydarwin.org/
應該說全部中文,vs程序,而且關鍵是非常對口。下一步我將基於它來進一步研究。
一個是非常常見的VLC(https://github.com/videolan/vlc)
但是這個比較復雜,集成起來比較困難。當作軟件使用倒是不錯。
四、小結和擴展
隨着技術和需求的不斷發展,對於視頻的調用越來越迫切。RTSP是其中一個非常重要的知識節點。認真研究,一定能夠有所收獲。
感謝閱讀至此,希望有所收獲。