王育軍
摘 要:隨著多媒體技術(shù)和網(wǎng)絡(luò)技術(shù)的發(fā)展,實(shí)時(shí)視頻監(jiān)控已經(jīng)廣泛應(yīng)用。采用Microsoft公司提供的較為成熟的MFC框架編程,提出了視頻監(jiān)控系統(tǒng)的流媒體轉(zhuǎn)發(fā)服務(wù)器的設(shè)計(jì)方案,采用C/C++語(yǔ)言實(shí)現(xiàn)功能,調(diào)用MFC中的函數(shù)提取攝像數(shù)據(jù),實(shí)現(xiàn)監(jiān)控系統(tǒng)的功能需求,設(shè)計(jì)了系統(tǒng)總體軟件方案,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的具有取視頻流,用戶優(yōu)先級(jí)認(rèn)證,以及組播傳輸功能的流媒體轉(zhuǎn)發(fā)服務(wù)器解決方案。
關(guān)鍵詞:流媒體;MFC;視頻監(jiān)控
中圖分類號(hào):TB 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3198(2015)14-0225-01
1 流媒體概念
流媒體(Streaming Media)是指視頻、語(yǔ)言和數(shù)據(jù)通過(guò)實(shí)時(shí)傳輸協(xié)議以連續(xù)流方式順序,從源端向目的地傳輸,目的地只需接收到一定數(shù)據(jù)緩存后就可以立即播放的多媒體應(yīng)用。流媒體服務(wù)器是流媒體技術(shù)的一種實(shí)現(xiàn),其基于流媒體技術(shù)應(yīng)用的系統(tǒng)主要由視頻與聲音數(shù)據(jù)信息采集、數(shù)據(jù)信息的編碼/解碼、文件服務(wù)器、流媒體服務(wù)器、視頻實(shí)時(shí)傳輸網(wǎng)絡(luò)等多個(gè)部分組成。
流媒體基礎(chǔ)的數(shù)據(jù)信息來(lái)源于監(jiān)控現(xiàn)場(chǎng)的實(shí)時(shí)采集、本地的存儲(chǔ)和文件服務(wù)器。根據(jù)監(jiān)控系統(tǒng)的應(yīng)用領(lǐng)域的不同、規(guī)模的不同和解決問(wèn)題的著重點(diǎn)不同,可以歸納有以下幾種服務(wù)器架構(gòu):
(1)基于PC的服務(wù)器:采用PC機(jī)作為服務(wù)器,服務(wù)于小型用戶。此種服務(wù)器構(gòu)架存在一些問(wèn)題,在網(wǎng)絡(luò)方面,是網(wǎng)絡(luò)傳輸和傳輸?shù)耐掏侣?;而軟件方面較簡(jiǎn)單,采用基本的流調(diào)度處理和傳輸質(zhì)量的保證。
(2)專用硬件平臺(tái)的服務(wù)器:采用專用的硬件服務(wù)器,性能優(yōu)越而且功能強(qiáng)大,面向多用戶服務(wù)對(duì)象。該類服務(wù)器對(duì)硬件的性能要求高,擁有專業(yè)的處理視頻的數(shù)字視頻引擎,是多用戶點(diǎn)播服務(wù)器的發(fā)展趨勢(shì)。
(3)分布式結(jié)構(gòu)的服務(wù)器:流媒體服務(wù)器采用分布式的思想將功能分布到網(wǎng)絡(luò)中對(duì)單個(gè)服務(wù)器的性能要求不是很高,解決了單一服務(wù)器設(shè)計(jì)上的很多瓶頸。
2 系統(tǒng)模型
實(shí)時(shí)視頻監(jiān)控的轉(zhuǎn)發(fā)的主要核心設(shè)備流媒體轉(zhuǎn)發(fā)服務(wù)器,是負(fù)責(zé)實(shí)時(shí)視頻數(shù)據(jù)信息編碼封裝,進(jìn)而通過(guò)實(shí)時(shí)傳輸技術(shù)發(fā)送到用戶接收設(shè)備;同時(shí),流媒體轉(zhuǎn)發(fā)服務(wù)器的硬件設(shè)備需要專業(yè)的處理芯片、存儲(chǔ)空間以及足夠的網(wǎng)絡(luò)帶寬,通過(guò)上述設(shè)備來(lái)完成視頻數(shù)據(jù)的實(shí)時(shí)傳輸。最后就是用戶終端,在被許可的情況下,用戶可以在本地客戶端與遠(yuǎn)程客戶端運(yùn)行特定的應(yīng)用程序或者通用瀏覽器,通過(guò)Internet查看監(jiān)控現(xiàn)場(chǎng)的實(shí)時(shí)情況及存取在媒體服務(wù)器上的音樂(lè)、影片等多媒體資源。
系統(tǒng)設(shè)計(jì)主要應(yīng)用VC++和OpenCV軟件完成,通過(guò)設(shè)計(jì)C++語(yǔ)言程序?qū)崿F(xiàn)各種功能??刂瞥绦蛟O(shè)計(jì)部分大體分為視頻采集和保存、視頻圖像處理、運(yùn)動(dòng)目標(biāo)檢測(cè)、運(yùn)動(dòng)目標(biāo)跟蹤。視頻采集是使用攝像頭調(diào)取畫(huà)面的過(guò)程,是整個(gè)視覺(jué)跟蹤系統(tǒng)設(shè)計(jì)中基礎(chǔ)部分。通過(guò)cvCaputureFromCAM函數(shù)啟動(dòng)網(wǎng)絡(luò)攝像頭,然后抓取第一幀圖像顯示到窗口中;再經(jīng)過(guò)for循環(huán)語(yǔ)句,抓取下一幀圖像顯示到創(chuàng)建的窗口。抓取前后兩幀圖像的時(shí)間差在20ms左右。這樣就可以連續(xù)不斷地獲得視頻圖像,進(jìn)而實(shí)現(xiàn)視頻采集的效果。圖像處理在這里分為圖像類型轉(zhuǎn)換,圖像二值化和濾波。使用背景差分法檢測(cè)運(yùn)動(dòng)物體,所以需要將攝像頭采集的彩色圖像轉(zhuǎn)換成灰度圖像,使用的函數(shù)是cvCvtColor(pFrame,pFrImg,CV_BGR2GRAY)。將差分圖像二值化的目的是容易在背景圖像中提取出前景圖像,根據(jù)需求分析。
3 MFC結(jié)構(gòu)及設(shè)計(jì)
3.1 MFC主要構(gòu)成
MFC是一個(gè)微軟公司提供的類庫(kù)(class libraries),以C++類的形式封裝了Windows的API,Win API與C++的結(jié)合。MFC本身不是開(kāi)發(fā)程序的應(yīng)用語(yǔ)言,是軟件編程的規(guī)范,允許用戶使用C、VC++、Java等編程語(yǔ)言對(duì)WinDOS下應(yīng)用程序的開(kāi)發(fā),提供應(yīng)用程序的編程語(yǔ)言接口,使開(kāi)發(fā)出來(lái)的各種各樣的應(yīng)用程序能在WinDOS下運(yùn)行。
MFC是微軟對(duì)API函數(shù)的專用C++封裝,遵守WinDOS操作系統(tǒng)的內(nèi)部實(shí)現(xiàn)的機(jī)制和功能,采用此種方案開(kāi)發(fā)的應(yīng)用程序,都能工作在WinDOS的消息機(jī)制和繪圖里,當(dāng)用戶開(kāi)發(fā)Win應(yīng)用程序,采用專業(yè)C++ SDK開(kāi)發(fā)應(yīng)用程序變得簡(jiǎn)單,其主要原因是在Win下用采用C++&MFC編制軟件,通過(guò)MFC是對(duì)API的進(jìn)行封裝處理,從而節(jié)約和隱藏了大量的編程環(huán)節(jié)。然而,通過(guò)上述的結(jié)合對(duì)于編程者來(lái)說(shuō)是減少了勞動(dòng),減輕了編程的復(fù)雜性,但同樣也會(huì)帶來(lái)新的問(wèn)題,這個(gè)新的問(wèn)題就是MFC對(duì)類封裝中的一定程度的冗余和迂回。
3.2 MFC程序設(shè)計(jì)流程
程序設(shè)計(jì)流程中有著四個(gè)重要的工具他們分別是:
(1)Visual C++整合開(kāi)發(fā)環(huán)境(IDE):可以明顯地或隱喻地激活其它工具如AppWizard和ClassWizard;可以設(shè)定各種工具、編譯并聯(lián)結(jié)程序、激活除錯(cuò)器、激活文字編輯器、瀏覽類別階層;
(2)AppWizard:這是一個(gè)程序代碼產(chǎn)生器?;赼pplication framework的觀念,相同類型(或說(shuō)風(fēng)格)的MFC程序一定具備相同的程序骨干,每一個(gè)project使用AppWizard的機(jī)會(huì)只有一次;
(3)Resource Editor:這是一個(gè)總合資源編輯器, RC檔內(nèi)的各種資源它統(tǒng)統(tǒng)都有辦法處理。Resource Editor做出來(lái)的各類資源與你的程序代碼之間如何維系關(guān)系,這就要靠ClassWizard;
(4)ClassWizard:AppWizard制作出來(lái)的程序骨干是不能夠修改的,接下來(lái)最重要的工作是加上自己的成員變量并改寫(xiě)虛擬函式,或搭起消息與程序代碼之間的聯(lián)系,建立Message Map;以一般文字編輯器直接修改程序代碼當(dāng)然也可以。
3.3 視頻流捕獲實(shí)現(xiàn)
首先建立一個(gè)MFC AppWizard[exe]框架工程,命名為Streamingserver。自動(dòng)生成框架所需的頭文件和框架CPP文件,本設(shè)計(jì)中捕捉顯示函數(shù)名為OnCamera。采用Preview模式顯示。通過(guò)實(shí)現(xiàn)函數(shù)OnCamera(),達(dá)到獲取視頻流的目的,有了本機(jī)的視頻流源就使視頻流能夠源源不斷的進(jìn)行讀入和相關(guān)編碼操作。
4 系統(tǒng)測(cè)試環(huán)境
對(duì)于實(shí)時(shí)視頻監(jiān)控系統(tǒng)測(cè)試需要說(shuō)明,系統(tǒng)既能進(jìn)行局域網(wǎng)內(nèi)監(jiān)控也能很好地進(jìn)行廣域網(wǎng)監(jiān)控,需要兩套設(shè)備,配有多個(gè)攝像頭,同時(shí)還需要多臺(tái)PC機(jī),測(cè)試所需設(shè)備如表1所示。
根據(jù)實(shí)時(shí)視頻流媒體轉(zhuǎn)發(fā)服務(wù)器系統(tǒng)的功能需求,結(jié)合研究的硬件設(shè)備,給出監(jiān)控基本功能測(cè)試,測(cè)試內(nèi)容包括實(shí)時(shí)視頻監(jiān)控功能測(cè)試、系統(tǒng)編碼配置調(diào)節(jié)測(cè)試。
5 結(jié)束語(yǔ)
為了達(dá)到測(cè)試監(jiān)控系統(tǒng)的目標(biāo),構(gòu)建了測(cè)試環(huán)境和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),從系統(tǒng)的基本功能和穩(wěn)定性兩個(gè)方面說(shuō)明該系統(tǒng)的整體性能。以實(shí)時(shí)視頻流媒體監(jiān)控的測(cè)試為主,對(duì)流媒體轉(zhuǎn)發(fā)服務(wù)器的功能和穩(wěn)定性進(jìn)行了測(cè)試。首先結(jié)束測(cè)試準(zhǔn)備工作,準(zhǔn)備系統(tǒng)測(cè)試的設(shè)備、設(shè)計(jì)測(cè)試方案與構(gòu)建環(huán)境,最后對(duì)測(cè)試結(jié)果進(jìn)行了分析。
參考文獻(xiàn)
[1]高旭,沈蘇彬,顧冠群.網(wǎng)絡(luò)多媒體傳輸協(xié)議淺析[J].計(jì)算機(jī)應(yīng)用研究,2000,15(2):6-8.
[2]孫學(xué)康,石方文,劉勇.多媒體通信技術(shù)[M].北京:郵電大學(xué)出版社,2006:187.
[3]蔡安妮.多媒體通信技術(shù)基礎(chǔ)[M].北京:電子工業(yè)出版社,2008:205-206.
[4]Microsoft公司.Microsoft Visual C++ 6.0 MFC Library Reference類庫(kù)參考手冊(cè)[M].希望圖書(shū)創(chuàng)作室譯.北京希望電腦公司,1999.
[5]任哲等.MFC Windows應(yīng)用程序設(shè)計(jì)(第2版)[M].北京:清華大學(xué)出版社,2007,(9).
[6]候俊杰.深入淺出MFC[M].松崗(UNALIS)發(fā)行公司,1998.