1. 程式人生 > >【4OpenCV】OpenCV和RTSP的綜合研究

【4OpenCV】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是其中一個非常重要的知識節點。認真研究,一定能夠有所收穫。

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






 



來自為知筆記(Wiz)