基于Linux、QT的視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)--畢業(yè)論文_第1頁
基于Linux、QT的視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)--畢業(yè)論文_第2頁
基于Linux、QT的視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)--畢業(yè)論文_第3頁
基于Linux、QT的視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)--畢業(yè)論文_第4頁
基于Linux、QT的視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)--畢業(yè)論文_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、本科學生畢業(yè)論文(設(shè)計)題目(中 文: 基于Linux 、QT 的視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn) (英 文:姓 名 學 號 院 (系) 專業(yè)、年級 指導教師XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXX2014年 5 月 8 日湖南科技學院本科畢業(yè)論文(設(shè)計)誠信聲明本人鄭重聲明:所呈交的本科畢業(yè)論文(設(shè)計),是本人在指導老師的指導下,獨立進行研究工作所取得的成果,成果不存在知識產(chǎn)權(quán)爭議,除文中已經(jīng)注明引用的內(nèi)容外,本論文不含任何其他個人或集體已經(jīng)發(fā)表或撰寫過的作品成果。對本文的研究做出重要貢獻的個人和集體均已在文中以明確方式標明。本人完全意識到本聲明的法律結(jié)果由本人

2、承擔。本科畢業(yè)論文(設(shè)計)作者簽名:年 月 日 畢業(yè)論文(設(shè)計)任務(wù)書課題名稱: 基于Linux 、QT 的視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn) 學生姓名: XXXX 系 別: XXXXXXXX 專 業(yè): XXXXXXXX 指導教師:XXX日湖南科技學院本科畢業(yè)論文(設(shè)計)任務(wù)書 A注:本任務(wù)書一式三份,由指導教師填寫,經(jīng)教研室審批后一份下達給學生,一份交指導教師,一份留系里存檔。B 湖南科技學院畢業(yè)論文(設(shè)計)中期檢查表 注:此表用于指導教師在學生畢業(yè)論文(設(shè)計)初稿完成后對學生執(zhí)行任務(wù)書情況進行中期檢查時用,由指導教師填寫。湖南科技學院畢業(yè)設(shè)計(論文)指導過程記錄表 H I 秀,8089分記為良好,7

3、079分記為中等,6069分記為及格,60分以下記為不及格。J 秀,8089分記為良好,7079分記為中等,6069分記為及格,60分以下記為不及格。K 湖南科技學院本科畢業(yè)論文(設(shè)計)答辯記錄表 L 目 錄緒論 . . 11 基于Linux 、QT 的視頻監(jiān)控系統(tǒng)概述 . . 41.1 視頻監(jiān)控系統(tǒng)的組成 . . 41.2 開發(fā)環(huán)境簡介 . . 41.2.1 Linux環(huán)境簡介 . 41.2.2 QT技術(shù)簡介 . 41.2.3 V4L2編程技術(shù)簡介 . 52 系統(tǒng)總體設(shè)計概述 . . 72.1 分析系統(tǒng)需求 . . 72.2 系統(tǒng)的軟件結(jié)構(gòu)及整體框架 . . 72.2.1 整體結(jié)構(gòu)框圖 .

4、. 72.2.2 模塊的功能分析 . . 83 系統(tǒng)中各模塊功能的具體實現(xiàn) . . 93.1 服務(wù)器:數(shù)據(jù)采集部分 . . 93.1.1 模塊功能描述 . . 93.1.2 技術(shù)概要 . . 93.1.3 邏輯概要及流程圖 . . 103.2 服務(wù)器:數(shù)據(jù)處理 . . 173.2.1 模塊功能描述 . . 173.2.2 技術(shù)概要 . . 173.2.3 邏輯概要及程序流程圖 . . 173.3 客戶端:數(shù)據(jù)獲取 . . 193.3.1 模塊功能描述 . . 193.3.2 技術(shù)概要 . . 193.3.3 邏輯概要及流程圖 . . 193.4 客戶端:QT 視頻渲染 . 213.4.1 模塊

5、功能描述 . . 213.4.2 技術(shù)概要 . . 223.4.3 邏輯概要及流程圖 . . 224 視頻監(jiān)控系統(tǒng)測試 . . 234.1 系統(tǒng)測試目標 . . 234.2 系統(tǒng)測試過程 . . 234.3 系統(tǒng)測試結(jié)果 . . 25結(jié)論 . . 26參考文獻 . . 27致 謝 . . 28插圖索引圖1 視頻監(jiān)控系統(tǒng)結(jié)構(gòu)圖 . . 7圖2 服務(wù)器(server )端視頻數(shù)據(jù)采集流程 . 10圖3 打開USB 攝像頭設(shè)備流程圖 . 11圖4 查詢視頻設(shè)備信息流程圖 . . 12圖5 設(shè)置視頻采集方式流程圖 . . 13圖6 申請緩沖區(qū)流程圖 . . 14圖7 緩沖區(qū)設(shè)置流程圖 . . 15圖8

6、 視頻數(shù)據(jù)處理流程圖 . . 16圖9 服務(wù)器端數(shù)據(jù)處理流程圖 . . 18圖10 服務(wù)器端數(shù)據(jù)幀封裝結(jié)構(gòu)圖 . . 19圖11 服務(wù)器與客戶端TCP 網(wǎng)絡(luò)編程流程圖 . . 20圖12 客戶端的數(shù)據(jù)分割流程圖 . . 21圖13 客戶端視頻渲染模塊流程圖 . . 22圖14 啟動系統(tǒng)效果圖(左:客戶端,右:服務(wù)端) . . 24圖15 客戶端準備連接時效果圖(左:客戶端,右:服務(wù)端) . . 24圖16 系統(tǒng)網(wǎng)絡(luò)連接后效果圖(左:客戶端,右:服務(wù)端) . . 25基于Linux 、QT 的視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)摘 要隨著社會的網(wǎng)絡(luò)技術(shù)的不斷更新,計算機多媒體應(yīng)用技術(shù)及網(wǎng)絡(luò)技術(shù)方面的發(fā)展之迅

7、速是有目共睹的,在銀行,商場監(jiān)控,城市交通管理,酒店等安全保衛(wèi)方面,視頻監(jiān)控系統(tǒng)的市場需求量大幅度上升,市場上出現(xiàn)了多種圖像采集和傳輸?shù)漠a(chǎn)品,視頻監(jiān)控系統(tǒng)的發(fā)展趨勢必然是數(shù)字化,網(wǎng)絡(luò)化,即采用嵌入式網(wǎng)絡(luò)攝像機,利用嵌入式監(jiān)控設(shè)備體積小巧,性能穩(wěn)定,通訊便利等特點。在我國現(xiàn)階段,流媒體技術(shù)以及嵌入式網(wǎng)絡(luò)視頻監(jiān)控技術(shù)的研發(fā)還不夠成熟,大多是針對那些大,中型工程所開發(fā)的視頻監(jiān)控系統(tǒng)。但是對于小型的場所來說,成本太高,視頻監(jiān)控系統(tǒng)的功能復(fù)雜。因此我們可以設(shè)計一種低成本的,簡便的,新型的視頻監(jiān)控系統(tǒng)針對上述用戶群。這是一項非常有意義的工程。視頻監(jiān)控系統(tǒng)的設(shè)計論文主要介紹了整個系統(tǒng)的開發(fā)流程,運用模塊化分

8、析設(shè)計的方法,采用各個模塊程序流程圖對整個系統(tǒng)的設(shè)計以及實現(xiàn)進行詳細的說明,全文共分為緒論、系統(tǒng)的總體設(shè)計、各模塊的具體功能實現(xiàn)、視頻監(jiān)控系統(tǒng)的測試以及結(jié)論這五個部分。利用v4l2進行數(shù)據(jù)采集,基于TCP 編程和多線程編程對數(shù)據(jù)進行處理,QT 技術(shù)來實現(xiàn)客戶端程序。視頻數(shù)據(jù)的發(fā)送是采用HTTP 協(xié)議,Linux 系統(tǒng)下C 語言編程實現(xiàn)的?!娟P(guān)鍵詞】:Linux QT 技術(shù) v4l2編程 http 協(xié)議Design and implementation of video monitoring system basedon Linux and QTAbstractAlong with the so

9、cial network technology unceasing renewal, computer multimedia application technology and network technology aspects of the rapid development of is be obvious to all.in banks, shopping malls monitoring, urban traffic management, security and other aspects of the hotel. Market demand for video survei

10、llance systemincreased significantly. Appeared on the market a variety of image acquisition and transmission products, the development trend of video surveillance system must be digital, network, and the use of embedded network camera. With the embedded monitoring equipment compact, stable performan

11、ce, communication facilities and so on.At the present stage of our country, research and development of streaming media technology and the embedded network video monitoring technology is not mature enough, mostly in those big, video monitoring system and medium engineering development. But for a sma

12、ll place, the cost is too high, the video monitoring system with complex functions. Therefore, we according to the user group, can design a simple, low cost, video monitoring system model. This is a very meaningful project.This paper mainly introduces the system development process, the use of the d

13、esign method of modularization analysis, the program flow chart of each module of the system design and implementation are described in detail, the full text is divided into introduction, the overall design of the system, each module of the specific function realization of video monitoring system, a

14、nd the conclusion of this test the five part. Data collection by v4l2, TCP and multi thread programming for data processing based on QT technology to realize the client program. Sending video data is using HTTP protocol, the Linux system under the C programming language.【Key words】 Linux QT Technolo

15、gy v4l2 Programming http Protocol V緒論Linux 是一個基于Unix 的操作系統(tǒng),它也是Unix 家族的一元,與Unix 不同的是,它可以運行在不同的硬件平臺上,它于1991年誕生于芬蘭的一個大學生Linus Tor v alds 手中,不過當時還只是一個雛形,為了不讓自己的這個羽翼未滿的操作系統(tǒng)夭折,Linus 將自己的作品Linux 通過Internet 發(fā)布,從此大量的一批知名的、不知名的編程人員以及電腦黑客加入到Linux 系統(tǒng)的開發(fā)過程中來,Linux 就這樣的逐漸成長起來了1。到目前為止,Linux 的內(nèi)核已經(jīng)發(fā)展到了3.14,并在次基礎(chǔ)上發(fā)展了

16、數(shù)十種發(fā)行版,其中有經(jīng)過長期發(fā)展洗禮的Redhat(Fedora,也有發(fā)展迅猛使用方便的Ubuntu 。在流媒體技術(shù)的發(fā)展中,視頻技術(shù)的發(fā)展越來越迅速,大量應(yīng)用于安防與教育事業(yè),比如在遠程視頻教育、在線遠程視頻會議、醫(yī)療、各種場所的視頻監(jiān)控以及危險區(qū)域的探測等方面。Linux 操作系統(tǒng)在發(fā)展的過程具備了很好的網(wǎng)絡(luò)性能。Linux 系統(tǒng)下提供了非常豐富的開源軟件和視頻支持,支持各種硬件平臺,因此Linux 平臺成為了視頻采集的最佳平臺。Linux 系統(tǒng)上的軟件開發(fā)具有高可靠性、低成本、高度自動化、高可配置性、及低耗費等一些優(yōu)點,同時能夠很好的完成多任務(wù)和實時性的設(shè)計需求。我國資深嵌入式系統(tǒng)專家沈

17、緒榜院士曾預(yù)言:“未來十年將會產(chǎn)生針頭大小,具有超過一億次運算能力的嵌入式智能芯片”。這些將為我們的開發(fā)提供了相當大的創(chuàng)造空間。中國應(yīng)當注意發(fā)展這一智力密集型產(chǎn)業(yè)”。綜上所述,嵌入式Linux 操作系統(tǒng)在廣泛和深入的應(yīng)用于各個領(lǐng)域,應(yīng)用的技術(shù)也越來越復(fù)雜。針對基于網(wǎng)絡(luò)傳輸?shù)囊曨l監(jiān)控系統(tǒng)的實際需求與應(yīng)用,結(jié)合視頻的圖像采集技術(shù)與編碼技術(shù),嵌入式Linux 操作系統(tǒng)和網(wǎng)絡(luò)編程技術(shù)等多方面的新興技術(shù),設(shè)計的一套Linux 網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng),用來進行視頻數(shù)據(jù)的采集、視頻數(shù)據(jù)的壓縮編碼與解碼以及視頻的網(wǎng)絡(luò)傳輸,該系統(tǒng)基于Linux 操作系統(tǒng)進行開發(fā)的,從USB 攝像頭捕捉視頻數(shù)據(jù),QT 實現(xiàn)客戶端和服務(wù)

18、器端,即可查看遠程視頻影像。論文的目的及意義:視頻監(jiān)控系統(tǒng)的設(shè)計主要說明視頻監(jiān)控系統(tǒng)的詳細設(shè)計與實現(xiàn)。介紹了系統(tǒng)中各個模塊的設(shè)計與模塊功能的實現(xiàn)以及應(yīng)用的相關(guān)技術(shù)。在論文中,我將會對每一個模塊的設(shè)計以及實現(xiàn)方法給出簡單的文字說明以及設(shè)計的流程圖。我寫這篇論文的主要是學習熟悉基于TCP/IP網(wǎng)絡(luò)的遠程視頻監(jiān)控系統(tǒng)的基本知識和相關(guān)的多媒體開發(fā)技術(shù)。隨著4G 通訊時代的到來,我們更可以將視頻監(jiān)控客戶端發(fā)展到移動終端,這將使我們更加方便。項目背景及未來發(fā)展應(yīng)用方向:縱觀視頻監(jiān)控的研究進展,從閉路電視系統(tǒng)構(gòu)建的模擬系統(tǒng)、經(jīng)歷了數(shù)字信號控制的模擬視頻監(jiān)控系統(tǒng)、過渡到數(shù)字硬盤錄像設(shè)備為核心的視頻監(jiān)控系統(tǒng)和當

19、代的數(shù)字網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)這幾大重要階段。數(shù)字網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)與其它監(jiān)控系統(tǒng)的優(yōu)點:a 、布控區(qū)域廣闊數(shù)字網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)是可以超越地域的限制的,可以延伸整個需要布控區(qū)域,這是因為它將網(wǎng)絡(luò)視頻信號采集終端直接連入網(wǎng)絡(luò),并且能夠解除信號的衰減和纜線長度的局限性,而且網(wǎng)絡(luò)是不受距離長短的影響。b 、系統(tǒng)具有幾乎無限的無縫擴展能力需要增加設(shè)備時只要將IP 地址進行擴充操作就行了,因為所有的IP 地址都在系統(tǒng)中進行了標識。c 、可組成非常復(fù)雜的監(jiān)控網(wǎng)絡(luò)監(jiān)控系統(tǒng)是以基于網(wǎng)絡(luò)視頻信號采集終端為核心,在組網(wǎng)方式上與基于PC 平臺的監(jiān)控和傳統(tǒng)的模擬監(jiān)控方式有了質(zhì)的飛躍,視頻信號采集終端輸出已完成了從模擬到數(shù)字的

20、轉(zhuǎn)換并壓縮,在網(wǎng)絡(luò)上傳輸時采用統(tǒng)一的協(xié)議,能夠?qū)崿F(xiàn)跨路由器、跨網(wǎng)關(guān)等的遠程視頻傳輸。d 、性能穩(wěn)定可靠,無需專人管理視頻監(jiān)控系統(tǒng)中采集視頻信號的終端應(yīng)用了嵌入式Linux 技術(shù),主要采用嵌入式多任務(wù)實時操作系統(tǒng),又能夠?qū)⒕W(wǎng)絡(luò)功能和視頻壓縮功能集中到一個極小體積的設(shè)備內(nèi),同時可以直接連入廣域網(wǎng)絡(luò)或者局域網(wǎng)絡(luò),即插即看,系統(tǒng)的穩(wěn)定性、可靠性、實時性得到了極大的提升,能夠運用于無人值守的環(huán)境中。e 、我們可以從視頻監(jiān)控中心同時觀看多個USB 網(wǎng)絡(luò)攝像頭視頻,但是對網(wǎng)絡(luò)帶寬是有一定的要求。目前視頻監(jiān)控系統(tǒng)應(yīng)用主要有以下應(yīng)用領(lǐng)域:·食品監(jiān)督系統(tǒng)主要是對食品的原料,和衛(wèi)生的隨時檢查等;·

21、;教育系統(tǒng)、電力系統(tǒng)、部隊系統(tǒng)、石化系統(tǒng)等的視頻監(jiān)控與安全檢測等; ·在銀行系統(tǒng)、鐵路系統(tǒng)、醫(yī)療系統(tǒng)等的視頻監(jiān)控與安全檢測;·稅務(wù)系統(tǒng)主要是報稅服務(wù)大廳監(jiān)控;·鋼鐵系統(tǒng)主要是安全生產(chǎn)管理監(jiān)控系統(tǒng);未來應(yīng)用領(lǐng)域:在不久的將來視頻監(jiān)控會出現(xiàn)在農(nóng)村及每個實體經(jīng)濟的商人手中。對農(nóng)村和農(nóng)民而言:農(nóng)產(chǎn)品是主要經(jīng)濟來源,農(nóng)產(chǎn)品的收成直接決定著農(nóng)民的收入,主要監(jiān)控糧食的生成,同時還可以做一些其他溫度和濕度的感光性能,增加農(nóng)產(chǎn)品的收成同時幫助農(nóng)民致富。未來的實體經(jīng)濟來說,視頻監(jiān)控也是很重要的。隨著科技的發(fā)展,工廠模式已經(jīng)走上了現(xiàn)代化之路,那管理上也應(yīng)該得以更近。用視頻管理,用視頻收

22、集資料,這樣不僅提高了處理速度,同時也可以收集到更多的數(shù)據(jù)參數(shù)以供以后的自身發(fā)展做參考。視頻監(jiān)控的智能化是趨勢,也是近年的熱點,大環(huán)境給了我們視頻智能化的大好空間,那就得好好利用。1 基于Linux 、QT 的視頻監(jiān)控系統(tǒng)概述該系統(tǒng)的開發(fā)是在Linux 操作系統(tǒng)上進行,采用了QT 編程技術(shù)、Socket 網(wǎng)絡(luò)編程技術(shù)、TCP/IP網(wǎng)絡(luò)協(xié)議以及Unix 系統(tǒng)高級編程技術(shù)而實現(xiàn)的。1.1 視頻監(jiān)控系統(tǒng)的組成視頻監(jiān)控系統(tǒng)大致可分為三大模塊:視頻數(shù)據(jù)信號的采集部分、網(wǎng)絡(luò)傳輸部分以及遠程客戶端視頻的渲染部分。1.2 開發(fā)環(huán)境簡介1.2.1 Linux 環(huán)境簡介該系統(tǒng)是在Linux 環(huán)境上開發(fā)的,Linu

23、x 是Unix 這個大家族中的一員。Linux 操作系統(tǒng)是一個基于POSIX 和Unix 的多CPU 、支持多線程、多任務(wù)和的多用戶操作系統(tǒng);能夠運行主要的應(yīng)用程序、網(wǎng)絡(luò)協(xié)議和Unix 工具軟件;它同時支持32位硬件和64位硬件平臺;Linux 繼承了Unix 的以網(wǎng)絡(luò)為核心的設(shè)計思想,是一個性能穩(wěn)定的多用戶、實時的網(wǎng)絡(luò)操作系統(tǒng)2。我這次使用的Linux 的桌面系統(tǒng)Ubuntu12.04 32位操作系統(tǒng)。Linux 系統(tǒng)可以運行在不同的硬件平臺,這個對于我們這些軟件開發(fā)者來說無疑是件非常好的事,可以進行各種平臺的系統(tǒng)移植。最典型的有安卓系統(tǒng),其內(nèi)核也是Linux 系統(tǒng)內(nèi)核。在Linux 環(huán)境開

24、發(fā)視頻監(jiān)控系統(tǒng)的好處就在于以后能夠很好的移植到移動終端。1.2.2 QT 技術(shù)簡介QT 是Nokia 公司開發(fā)的一個集成開發(fā)環(huán)境,它封裝有自己的一套庫,以至于能實現(xiàn)跨平臺編程。QT 是一個非常好的C+圖形用戶界面UI 設(shè)計應(yīng)用程序框架。它給應(yīng)用程序開發(fā)者提供了一套功能齊全的進行藝術(shù)級的圖形用戶界面程序設(shè)計所需的功能3。Qt 很容易擴展,并且 允許真正地組件編程?;旧螿t 和X Window 上的GTK ,Openwin ,Motif 等圖形界面庫和 Windows 平臺上的ATL ,CL ,OWL ,VMFC 是非常類似的4。QT 模塊化程度非常高是因為它有非常好的封裝機制,而且具有非常好的

25、可重用性,這將非常方便了應(yīng)用程序開發(fā)用戶進行軟件開發(fā)。QT 提供了一種安全類型來替代callback ,稱為信號和槽(signals/slots)。這些都使得不同模塊之間的協(xié)同工作變得非常簡單。QT 提供了基于模版的date/timefile、directory management、serialization 、I/O device 、collections 、類,而且還包括了多達250個以上的C+類。甚至還包括了正則表達式的處理功能。支持2D/3D/圖形渲染,支持OpenGL 。而且有大量的開發(fā)文檔。1.2.3 V4L2編程技術(shù)簡介V4L2編程主要是針對于uvc 免驅(qū)USB 設(shè)備的設(shè)計的一

26、個軟件編程框架,主要是用于采集USB 攝像頭的視頻信息等。V4L2有以下編程模式:a. 設(shè)置采集方式:打開視頻設(shè)備后,可以設(shè)置該視頻設(shè)備的屬性,例如放縮、裁剪等。這一步是可選的。在Linux 編程中實現(xiàn)對設(shè)備的I/O通道進行統(tǒng)一管理一般通過調(diào)用系統(tǒng)的ioctl ()函數(shù)。extern int ioctl(int _fd, unsigned long int _request, _THROW; _fd:USB 視頻設(shè)備的設(shè)備ID 號,例如調(diào)用了系統(tǒng)open ()函數(shù)來打開視頻通道后返回的videoFd_request:具體的命令標識符。b. 一般操作流程1 打開設(shè)備文件int fd = open

27、(“/dev/video0”, O_RDWR;2 查詢并獲取到USB 視頻設(shè)備的設(shè)備屬性,可以查看到該設(shè)備具有的一些功能,例如USB 視頻設(shè)備是否具有視頻輸入輸出的功能,或者音頻輸入輸出的功能等。VIDIOC_QUERYCAP,struct v4l2_capabilityv4l2_std_id std;doret= ioctl(fd, VIDIOC_QUERYSTD, &std;while (ret = -1 && errno = EAGAIN;switch(stdcase V4L2_STD_NTSC:/case V4L2_STD_PAL:/3 選擇USB 視頻設(shè)備的視

28、頻輸入,有些視頻設(shè)備可以有多個視頻輸入。 VIDOC_S_INPUT,struct v4l2_input4 設(shè)置視頻采集的的視頻幀格式和視頻制式,視頻制式包括幀的格式,NTSC ,PAL ,包括寬度(width )和高度(height )等。VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format5 向驅(qū)動申請緩沖,一般不超過5個。struct v4l2_requestbuffers6 申請物理內(nèi)存從內(nèi)核申請到幀緩沖空間,并將其映射到用戶空間去,然后可以直接對采集到的視頻數(shù)據(jù)幀進行操作了,不必再去進行復(fù)制緩沖區(qū)內(nèi)容了。將從內(nèi)

29、核中申請下來的緩存進行入隊列操作,存放采集到的視頻幀數(shù)據(jù)。 VIDIOC_QBUF,struct v4l2_buffer7 開始視頻的采集enum v4l2_buf_type typetype = V4L2_BUF_TYPE_VIDEO_CAPTURE;if (ioctl (fd, VIDIOC_STREAMON, &type < 0printf("VIDIOC_STREAMON errorn"/ return -1;8 進行出隊列操作從而獲取已采集數(shù)據(jù)到的視頻幀緩沖數(shù)據(jù),取得原始采集數(shù)據(jù)。VIDIOC_DQBUF將緩沖區(qū)重新入隊列尾,這樣可以循環(huán)采集VIDI

30、OC_QBUF9 停止視頻采集。VIDIOC_STREAMOFF10 關(guān)閉視頻設(shè)備。close(fd2 系統(tǒng)總體設(shè)計概述2.1 分析系統(tǒng)需求視頻監(jiān)控系統(tǒng)主要由服務(wù)端程序和客戶端程序構(gòu)成。服務(wù)器(server )端是基于Linux 系統(tǒng)環(huán)境下的網(wǎng)絡(luò)服務(wù)器程序。服務(wù)端中視頻數(shù)據(jù)的采集部分利用v4l2(video for Linux II )對網(wǎng)絡(luò)攝像頭(USB 攝像頭)進行控制和訪問并且獲取由攝像頭捕獲到的視頻數(shù)據(jù),然后由huffman 編碼進行壓縮,然后再通過網(wǎng)絡(luò)服務(wù)將獲取到的視頻數(shù)據(jù)進行封裝成http 數(shù)據(jù)幀并利用http 協(xié)議發(fā)送到客戶端。由于視頻監(jiān)控系統(tǒng)的服務(wù)器(server )端視頻數(shù)據(jù)

31、是通過http 協(xié)議發(fā)送的,所以此系統(tǒng)客戶端沒有平臺限制,只要支持HTTP1.0以上的平臺就可以訪問系統(tǒng)的服務(wù)。而且,系統(tǒng)的服務(wù)還可以直接通過web 瀏覽器訪問(對firefox 、Google Chrome瀏覽器支持最佳)。為了提高傳輸效率我們還需要進行客戶端的軟件開發(fā),由于對客戶端沒有平臺要求,即實現(xiàn)跨平臺,所以在Windows 、Linux 、android 等平臺都可以實現(xiàn)。視頻監(jiān)控系統(tǒng)的設(shè)計主要以Linux 為例用QT 實現(xiàn)一個簡易的客戶端軟件,同時還可以用瀏覽器訪問,既同時實現(xiàn)了C/S架構(gòu)與B/S架構(gòu)的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)。2.2 系統(tǒng)的軟件結(jié)構(gòu)及整體框架2.2.1 整體結(jié)構(gòu)框圖視頻監(jiān)

32、控系統(tǒng)總體結(jié)構(gòu)圖如圖1所示 圖1 視頻監(jiān)控系統(tǒng)結(jié)構(gòu)圖上圖所示,為視屏監(jiān)控系統(tǒng)的結(jié)構(gòu)總圖,其主要作用是為后續(xù)的軟件模塊設(shè)計及程序代碼的編寫打了個初略的框架,這也是視頻監(jiān)控系統(tǒng)設(shè)計的指明燈。從圖中可以看出主要的流程,以及邏輯關(guān)系。在當今社會互聯(lián)網(wǎng)、移動互聯(lián)網(wǎng)發(fā)展非常迅速,網(wǎng)絡(luò)遠程視頻監(jiān)控是必然趨勢,TCP/IP和socket 的創(chuàng)建使視頻可以融入到互聯(lián)網(wǎng)中。4G 時代的到來,使得我們可以將實時視頻監(jiān)控發(fā)展到移動終端上,這將更加方便我們的日常生活。2.2.2 模塊的功能分析服務(wù)器(server )端負責視頻數(shù)據(jù)的采集,采集可以通過v4l2編程實現(xiàn),有詳細的API 開發(fā)文檔,以及v4l2編程的相關(guān)資料

33、可以參考。客戶端(client )主要負責的是將接收到的視頻數(shù)據(jù)通過QT 編程將其渲染出來。主要用到了QT 中的信號(signal )和槽(slot )機制、以及繪圖事件,QT 是利用C+編程,而且它封裝了一套自己的庫可以實現(xiàn)跨平臺,這也就解決了前面提到的客戶端的跨平臺特性。還有連接Server 與Cclient 的就是采用Socket 網(wǎng)絡(luò)服務(wù)器的搭建,這主要采用的是Linux 環(huán)境網(wǎng)絡(luò)編程。該網(wǎng)絡(luò)的搭建主要是利用基于TCP/IP協(xié)議的HTTP 協(xié)議,將服務(wù)器(server )端采集到的視頻數(shù)據(jù)封裝成http 數(shù)據(jù)幀的形式,然后利用http 協(xié)議將視頻數(shù)據(jù)幀發(fā)送到客戶端(client )。由

34、于是實時傳輸,所以還用到多線程,使得每個客戶端(client )相互獨立,各個線程都將執(zhí)行一個死循環(huán),源源不斷的給客戶端發(fā)送視頻數(shù)據(jù)。3 系統(tǒng)中各模塊功能的具體實現(xiàn)3.1 服務(wù)器:數(shù)據(jù)采集部分3.1.1 模塊功能描述視頻數(shù)據(jù)的采集是視頻監(jiān)控系統(tǒng)中相當重要的,沒有視頻數(shù)據(jù)的采集就不可能有后面視頻的編碼、視頻的解碼、視頻數(shù)據(jù)的網(wǎng)絡(luò)傳輸,也就是說沒有視頻數(shù)據(jù)采集就沒有監(jiān)控的傳播。這一模塊需要查看、配置設(shè)備的屬性并從設(shè)備中獲取圖像數(shù)據(jù)。根據(jù)獲取到的設(shè)備信息,利用v4l2(vidoo for Linux II)通過函數(shù)ioctl ()對USB 攝像頭進行配置,打開設(shè)備,開啟視頻流功能,然后開始進行視頻數(shù)

35、據(jù)采集,采集到數(shù)據(jù)后將數(shù)據(jù)保存,采集完畢以后關(guān)閉設(shè)備功能,最后關(guān)閉視頻設(shè)備,退出整個程序。3.1.2 技術(shù)概要當前模塊需要涉及到對設(shè)備的I/O進行相關(guān)的操作,主要通過v4l2(video for Linux II)框架對視頻設(shè)備進行設(shè)置和控制。主要用到了以下幾個宏定義:1) VIDIOC_REQBUFS:分配內(nèi)存。2) VIDIOC_QUERYBUF:將分配出來的數(shù)據(jù)緩存區(qū)映射到物理地址。3) VIDIOC_S_FMT:讀取當前驅(qū)動的視頻捕獲格式。4) VIDIOC_ENUM_FMT:獲取USB 視頻設(shè)備驅(qū)動所支持的視頻格式。5) VIDIOC_QUERYCAP:查詢驅(qū)動功能。6) VIDIO

36、C_G_FMT:設(shè)置當前驅(qū)動的視頻捕獲格式。7) VIDIOC_TRY_FMT:檢驗視頻設(shè)備驅(qū)動的顯示格式是否正確。8) VIDIOC_CROPCAP:查詢驅(qū)動的修剪能力。9) VIDIOC_S_CROP:設(shè)置視頻信號的邊框。10)VIDIOC_G_CROP:讀取視頻信號的邊框。11)VIDIOC_QBUF:把視頻數(shù)據(jù)從緩存中取出來。12)VIDIOC_DQBUF:把視頻數(shù)據(jù)放回隊列。13)VIDIOC_STREAMON:開始視頻數(shù)據(jù)顯示函數(shù)。14)VIDIOC_STREAMOFF:結(jié)束視頻顯示函數(shù)。15)VIDIOC_QUERYSTD:查看USB 視頻設(shè)備支持的標準(例如: NTSC(歐洲標

37、準)、PAL (亞洲標準)。其中還可以通過查閱v4l2編程技術(shù)提供的API 文檔,熟悉一些結(jié)構(gòu)體屬性的賦值以及一些控制標記具有的實際意義。 3.1.3 邏輯概要及流程圖這一節(jié)主要介紹了服務(wù)器(server )端的如何采集視頻數(shù)據(jù)。圖2是視頻采集流程圖,描述了服務(wù)器(server )端視頻數(shù)據(jù)采集的主要編程步驟。圖2 服務(wù)器(server )端視頻數(shù)據(jù)采集流程否 下面將對沒一個步驟進行詳細的介紹: 1) 打開視頻video 設(shè)備:打開USB 視頻設(shè)備(視頻監(jiān)控系統(tǒng)的設(shè)計中指的是我們的USB 攝像頭)。我們利用Linux 系統(tǒng)提供的接口函數(shù)open 來對設(shè)備進行打開的操作。下圖(圖3)對這一過程進

38、行了詳細的描述。FD 是USB 攝像頭設(shè)備文件描述符,簡單的來說,F(xiàn)D 只是一個int 型(即整數(shù)),在調(diào)用Linux 系統(tǒng)編程中的open ()函數(shù)時的返回值。起到的是一個索引的作用,其進程通過查找文件描述符表項從而找到該FD 所指向的文件。在Linux 系統(tǒng)中,一切設(shè)備皆文件,所以不管是打開的文件還是打開設(shè)備都是通過此表中的文件描述符來引用的。圖3 打開USB 攝像頭設(shè)備流程圖 2) 獲取視頻設(shè)備信息(查詢視頻設(shè)備信息):查詢USB 攝像頭設(shè)備驅(qū)動的相關(guān)信息以及和視頻數(shù)據(jù)采集相關(guān)的參數(shù),根據(jù)查詢到的設(shè)備信息初步判斷設(shè)備類型以及將要處理的數(shù)據(jù)類型。利用ioctl ()函數(shù)以及v4l2提供的兩

39、個結(jié)構(gòu)體v4l2_capbility和v4l2_format來保存獲取到的USB 攝像頭設(shè)備驅(qū)動信息和數(shù)據(jù)幀信息。詳細流程如下圖(圖4)所示。VIDIOC_G_FMT、VIDIOC_S_FMT等需要通過查閱v4l2提供的API 來理解具體意義。圖4 查詢視頻設(shè)備信息流程圖 3) 設(shè)置USB 攝像頭采集方式:設(shè)置USB 攝像頭(視頻設(shè)備)的視頻采集方式,例如視頻數(shù)據(jù)幀的采集速率(即每秒鐘采集到的視頻幀數(shù)量)、采集圖像的分辨率等一些參數(shù)的設(shè)置。用到v4l2中的v4l2_streamparm和v4l2_format兩個結(jié)構(gòu)體以及VIDIOC_S_PARM和VIDIOC_S_FMT兩個宏,相關(guān)用法的介

40、紹請詳細查閱v4l2框架的API 文檔。具體實現(xiàn)方法參照下圖(圖5)。圖5 設(shè)置視頻采集方式流程圖 4) 向驅(qū)動申請緩存向內(nèi)核驅(qū)動申請幾塊緩沖區(qū)(此緩沖區(qū)是由內(nèi)核管理的,所以需要向內(nèi)核申請),用來存放USB 攝像頭設(shè)備采集的視頻數(shù)據(jù)。從內(nèi)核中申請緩存用到v4l2編程中的結(jié)構(gòu)體v4l2_requestbuffer和宏定義VIDIOC_REQBUFS。具體的實現(xiàn)方法參照下圖(圖6)。圖6 申請緩沖區(qū)流程圖本模塊用到的宏定義有 #define NB_BUFFER 5 表示申請緩沖區(qū)數(shù)量 5) 設(shè)置緩沖區(qū)屬性緩存申請到了后,對申請到的緩存進行必要的設(shè)置。其實緩沖區(qū)的設(shè)置是很重要的,因為緩存的作用在傳輸

41、數(shù)據(jù)上占有舉足輕重的地位,他是CPU 和內(nèi)存的中間產(chǎn)物,緩存指的是臨時文件交換區(qū),電腦經(jīng)常把常用的文件從存儲器里提取出來存放到臨時緩存里面。還要設(shè)置緩存的訪問方式以及使用內(nèi)存映射的訪問方式,對緩存進行映射,并建立緩存隊列。具體設(shè)置方法如下圖(圖7)所示。圖7 緩沖區(qū)設(shè)置流程圖 6) 視頻圖像采集到的數(shù)據(jù)處理設(shè)置視頻設(shè)備屬性時,需要用到這兩個宏定義VIDIOC_STREAMON和VIDIOC_STREAMOFF。通過對視頻設(shè)備進行設(shè)置VIDIOC_STREAMON和VIDIOC_STREAMOFF來控制視頻設(shè)備的開始和停止采集數(shù)據(jù),在設(shè)置開始和停止中間通過對緩存的輪換讀取來獲得視頻設(shè)備采集到的視

42、頻數(shù)據(jù)并對其進行數(shù)據(jù)處理(這里說的數(shù)據(jù)處理主要書對圖像進行壓縮(也就是進行huffman 編碼)和傳輸兩個部分,具體的處理方式在后面做詳細介紹)。獲得視頻設(shè)備采集到的數(shù)據(jù)需要調(diào)用VIDIOC_QBUF和VIDIOC_DQBUF兩個宏定義來控制對緩沖隊列進行進/出隊操作。詳見下圖(圖8)。圖8 視頻數(shù)據(jù)處理流程圖 3.2 服務(wù)器:數(shù)據(jù)處理3.2.1 模塊功能描述完成圖像壓縮、編碼、封裝。在此需要設(shè)計web 服務(wù)器端程序,有的是用QT 界面設(shè)計編程來建立的,并且建立web 服務(wù)器以供客戶端進行訪問。對從攝像頭設(shè)備采集到的視頻數(shù)據(jù)進行一次huffman 編碼,把圖片轉(zhuǎn)換成jpeg 或者jpg 格式的

43、。這個步驟也可以在客戶端完成,但是考慮到瀏覽器不支持這項操作。為了實現(xiàn)C/S架構(gòu)的同時,也支持B/S架構(gòu),我們就在服務(wù)器端進行這些數(shù)據(jù)的處理。建立一個基于TCP/IP協(xié)議的web 服務(wù)器,當有客戶端進行連接服務(wù)器時采用HTTP 協(xié)議的網(wǎng)絡(luò)發(fā)送經(jīng)過處理后的視頻數(shù)據(jù)幀,這些數(shù)據(jù)已經(jīng)經(jīng)過HTTP 協(xié)議進行了封裝。3.2.2 技術(shù)概要這一模塊主要涉及到對原始圖像數(shù)據(jù)進行的壓縮編碼以及基于C 語言的網(wǎng)絡(luò)和多線程的編程。關(guān)于視頻的壓縮編碼部分在視頻監(jiān)控系統(tǒng)的設(shè)計中只是簡單的調(diào)用現(xiàn)有接口(API ),不做需要深入的研究。視頻監(jiān)控系統(tǒng)通過對基于C 語言的socket 網(wǎng)絡(luò)編程和多線程編程熟悉,可以參考UNIX

44、 環(huán)境高級編程中的網(wǎng)絡(luò)編程部分,就可以實現(xiàn)網(wǎng)絡(luò)服務(wù)器的功能以及多任務(wù)的處理功能。3.2.3 邏輯概要及程序流程圖這一模塊的作用實際上是上一個模塊中提到的“數(shù)據(jù)處理”部分。由于視頻設(shè)備采集到的每一幀視頻數(shù)據(jù)經(jīng)過了huffman 編碼以后都會變成一張完整的圖片,所以我們在下面發(fā)送視頻數(shù)據(jù)的傳輸部分需要做一個簡單的數(shù)據(jù)封裝,下面分別給出了程序流程圖(圖9)和數(shù)據(jù)封裝格式(圖10)。在這個模塊中功能的實現(xiàn)是可以參照一下圖示進行程序的編寫,這里已經(jīng)給出了模塊的設(shè)計框架。圖9 服務(wù)器端數(shù)據(jù)處理流程圖 圖10 服務(wù)器端數(shù)據(jù)幀封裝結(jié)構(gòu)圖3.3 客戶端:數(shù)據(jù)獲取3.3.1 模塊功能描述客戶端獲取視頻數(shù)據(jù),主要利用socket 連接方式獲取??蛻舳耸紫认蚍?wù)器端發(fā)送視頻數(shù)據(jù)請求,根據(jù)服務(wù)器端的響應(yīng)信息,從而可以接收視頻數(shù)據(jù)??蛻舳伺c服務(wù)器端需要建立網(wǎng)絡(luò)連接必須要進行了“三次握手”,才連接成功,然后視頻監(jiān)控系統(tǒng)的客戶端向服務(wù)器端發(fā)送視頻數(shù)據(jù)??蛻舳伺c服務(wù)器建立TCP 連接,向服務(wù)器發(fā)送了http 請求,接收服務(wù)器返回的響應(yīng)信息,并且根據(jù)響應(yīng)信息按照一定的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論