OpenCV和RTSP的綜合研究


一、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  "stdafx.h"
# 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是其中一個非常重要的知識節點。認真研究,一定能夠有所收獲。

感謝閱讀至此,希望有所收獲。

 

 

 

 

 

 

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM