陳 樂,吳 蒙
(南京郵電大學(xué)通信與信息工程學(xué)院,江蘇南京 210003)
基于OMAP和Gstreamer的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)
陳 樂,吳 蒙
(南京郵電大學(xué)通信與信息工程學(xué)院,江蘇南京 210003)
隨著人們生活水平的逐漸提高,人們對安全越來越重視,視頻監(jiān)控在很多領(lǐng)域逐漸普及。在OMAP平臺上運(yùn)用Gstreamer多媒體框架,實現(xiàn)了一個集視頻采集、視頻編碼和視頻傳輸?shù)腃/S結(jié)構(gòu)網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)。視頻采集基于V4L2應(yīng)用程序接口,視頻編碼采用H.264編碼,網(wǎng)絡(luò)傳輸承載于RTP協(xié)議族之上。系統(tǒng)包含服務(wù)端和客戶端,基于插件的系統(tǒng)結(jié)構(gòu)使該系統(tǒng)具有易維護(hù)、易擴(kuò)展的特點(diǎn)。在OMAP平臺上的測試結(jié)果表明,該系統(tǒng)整體延時在1 s以下,滿足了實時監(jiān)控需求,可應(yīng)用于實際生產(chǎn)。
網(wǎng)絡(luò)視頻監(jiān)控;Gstreamer;OMAP;實時傳輸協(xié)議;H.264
視頻監(jiān)控以其直觀方便、信息內(nèi)容豐富而廣泛應(yīng)用于眾多領(lǐng)域[1]。近年來,隨著計算機(jī)網(wǎng)絡(luò)和嵌入式技術(shù)的發(fā)展,視頻監(jiān)控也逐漸向網(wǎng)絡(luò)化、嵌入式發(fā)展。文中設(shè)計了一種基于C/S結(jié)構(gòu)的網(wǎng)絡(luò)視頻監(jiān)控方案,在OMAP4460平臺上運(yùn)用Gstreamer框架,組建了集視頻采集、視頻編解碼、網(wǎng)絡(luò)傳輸于一體的視頻監(jiān)控系統(tǒng),并對系統(tǒng)進(jìn)行了測試分析。
系統(tǒng)采用基于 TI高性能 OMAP4460平臺[2]的Pandaboard ES開發(fā)板,平臺核心搭載了一顆雙核ARM Cortex-A9處理器,45 nm制程,具有較高的能效,工作頻率最高可達(dá)1.5 GHz,支持對稱多處理(Symmetrical Multi-Processing)技術(shù),每個中央處理單元附帶一個支持單指令多數(shù)據(jù)(Single Instruction Multiple Data)指令集的Neon協(xié)處理器;IVA 3硬件加速模塊支持多標(biāo)準(zhǔn)視頻編解碼器加速,最高分辨率達(dá)1 080 p;圖像信號處理器支持高質(zhì)量圖像和視頻抓取;SGX530圖形加速器提供驚人的2D/2D圖形表現(xiàn)。視頻數(shù)據(jù)交由DSP核心及GPU處理,視頻傳輸、邏輯控制處理交由ARM處理器,通過分工可以使工作效率大大提高。攝像頭采用基于 OV5640芯片的e-CAM51_44x模塊,500萬像素,支持自動對焦,支持多種幀率以及分辨率下的視頻拍攝(720 p/60 fps,1 080 p/30 fps),還集成了符合IEEE 802.11 b/g/n標(biāo)準(zhǔn)的無線網(wǎng)卡,拓展了系統(tǒng)的無線組網(wǎng)能力。
Gstreamer[3]是一個基于插件和管道的開源多媒體應(yīng)用框架。在Gstreamer下,開發(fā)人員可以很方便地創(chuàng)建各種類型的多媒體功能插件,例如:多媒體采集、多媒體回放、多媒體編輯等。再利用數(shù)據(jù)管道式處理的思想把各個功能插件的數(shù)據(jù)流串聯(lián)起來組成插件管道就可以構(gòu)成不同的多媒體應(yīng)用。Gstreamer開發(fā)有如下幾個核心概念:
2.1 元 件
元件(element)是Gstreamer中最常見的概念,它是構(gòu)成管道的基本單元,也是框架中所有可用組件的基礎(chǔ)??梢园阉闯梢粋€具有獨(dú)立功能的黑匣子,通過輸入輸出接口與其他元件進(jìn)行通信。根據(jù)元件功能上的不同可以將其分為三類:數(shù)據(jù)源元件,只有輸出端沒有輸入端,僅僅只是負(fù)責(zé)數(shù)據(jù)的生成,而不對數(shù)據(jù)進(jìn)行任何處理,通常位于應(yīng)用管道的首部;過濾器元件,既有輸入端又有輸出端,元件從管道上游的數(shù)據(jù)源獲取數(shù)據(jù)流,并將數(shù)據(jù)流經(jīng)過自身處理后傳送到輸出端;接收器元件,只有輸入端沒有輸出端,負(fù)責(zé)數(shù)據(jù)的表現(xiàn),往往處在應(yīng)用多媒體管道的尾部[4]。
在Gstreamer中創(chuàng)建GstElement對象通常使用工廠方法。Gstreamer提供了很多類型的元件工廠對象(GstElementFactory)對應(yīng)不同的元件對象,工廠對象由gst_element_factory_find(factory_name)函數(shù)獲取,獲得工廠對象后可以調(diào)用gst_element_factory_create(factory,element_name)函數(shù)來創(chuàng)建元件,當(dāng)元件不再使用時,需要對元件占用資源進(jìn)行釋放,調(diào)用函數(shù)gst_element_unref(element)。
2.2 襯 墊
襯墊[5](pad)是元件間交流的接口。數(shù)據(jù)流流經(jīng)一個元件需要通過元件的輸入襯墊和輸出襯墊。襯墊可以形象地理解為一個元件的插座,只有當(dāng)兩個襯墊允許通過的數(shù)據(jù)類型一致時,兩個插座公母才能配對,元件之間的鏈接才被建立??梢钥闯?,襯墊的功能決定了一個元件所能處理的媒體類型。利用函數(shù)gst_element_get_pad(element,dst)和gst_element_get_pad_list (element)可以獲取元件的襯墊,利用函數(shù)gst_pad_get _parent()可以獲得襯墊對應(yīng)的元件。
襯墊的功能通過GstCaps對象來描述,媒體類型由GstStructure對象描述,一個GstCaps對象通常包含一個或多個GstStructure,表示該襯墊支持哪些媒體類型[6]。襯墊功能可以由函數(shù)gst_pad_get_caps()獲取。
2.3 箱 柜
箱柜是一個可以裝載元件的容器。在一些功能較為復(fù)雜的管道中,經(jīng)常使用箱柜將多個元件組合成一個邏輯單元,通過直接操作箱柜來改變元件狀態(tài),從而簡化操作。同時箱柜會對數(shù)據(jù)流進(jìn)行優(yōu)化從而提高媒體性能。操作箱柜可以像操作普通元件一樣,使用起來十分方便。
在Gstreamer中,箱柜有兩種類型:GstPipeline和GstThread。Gstreamer應(yīng)用程序頂層必須為一個 Gst-Pipeline管道。GstThread可以提供同步處理機(jī)制,在應(yīng)用程序需要嚴(yán)格同步時可以使用。下面代碼展示了使用工廠和特定函數(shù)產(chǎn)生箱柜的方法:
GstElement*thread,*pipeline;
thread=gst_element_factory_make("thread",NULL);
pipeline=gst_pipeline_new("pipeline_name");
往箱柜中添加元件可以調(diào)用函數(shù)gst_bin_add(),刪除元件使用gst_bin_remove()函數(shù)。箱柜沒有自己獨(dú)立的輸入襯墊和輸出襯墊,但是Gstreamer為它引入了精靈襯墊的概念。精靈襯墊映射到箱柜中元件的襯墊上,具有精靈襯墊的箱柜在行為上與元件是完全相同的,所以可以像操作元件一樣操作箱柜。
3.1 V4L2
V4L(Video for Linux)為Linux下視頻設(shè)備的一個驅(qū)動程序框架,同時,它也為Linux應(yīng)用程序提供了視頻設(shè)備操作的應(yīng)用程序接口(API)。V4L2[7](Video for Linux 2)是V4L的第二個版本,修正了V4L在一些設(shè)計上的缺陷。
V4L2在結(jié)構(gòu)上可以分為兩層:上層是面向應(yīng)用程序的API,下層是面向硬件的視頻設(shè)備驅(qū)動層。從應(yīng)用層看,V4L2屏蔽了底層硬件操作細(xì)節(jié),使應(yīng)用可以在統(tǒng)一的接口下操作不同的硬件設(shè)備。從驅(qū)動程序看,V4L2提供了良好的內(nèi)存管理和數(shù)據(jù)時序性管理,很好地適應(yīng)了視頻數(shù)據(jù)的特點(diǎn)[8]。基于V4L2的視頻采集流程圖如圖1所示。
3.2 H.264
H.264編碼標(biāo)準(zhǔn)是由ITU-T和MPEG組成的聯(lián)合視頻組(Joint Video Team,JVT)開發(fā)制定,是目前代表最新技術(shù)水平的視頻編碼技術(shù)之一。與以往的標(biāo)準(zhǔn)如H.263、MPEG-4第二部分相比,H.264可以在相同質(zhì)量視頻呈現(xiàn)的前提下節(jié)約一半或更多的帶寬,計算復(fù)雜度增加幅度也比較小。H.264提出了一個網(wǎng)絡(luò)抽象層(NAL)概念,簡化了編碼內(nèi)容的封裝,對網(wǎng)絡(luò)十分友好。H.264還提供多種檔次的編碼選擇和參數(shù)定制,具有很強(qiáng)的應(yīng)用靈活性,能適配各種帶寬、分辨率條件,可以應(yīng)用于各種場景和系統(tǒng),如視頻點(diǎn)播、可視電話、視頻存儲、廣播等。
目前,開源的H.264編解碼器主要有:JM、T264和X264。JM是H.264官方提供的編解碼器參考模型,支持幾乎所有H.264特性。但是JM程序只考慮了對所有特性進(jìn)行實現(xiàn)卻忽略了其實用性,導(dǎo)致編碼復(fù)雜度非常高,實際應(yīng)用起來編解碼速度很慢,常常只用于學(xué)術(shù)研究[9]。T264是由國內(nèi)開源的H.264編解碼器實現(xiàn)。吸收了JM和X264的一些優(yōu)點(diǎn),但是其編碼碼流不兼容H.264,其他解碼器無法解碼T264的碼流,限制了它的應(yīng)用,目前T264已經(jīng)停止開發(fā)。X264是由網(wǎng)上自由組織聯(lián)合開發(fā)的兼容H.264標(biāo)準(zhǔn)碼流的編碼器。它注重實用的特性,拋棄了H.264標(biāo)準(zhǔn)中一些對編碼性能有貢獻(xiàn)卻異常復(fù)雜的編碼特性,例如任意條帶順序ASO、冗余條帶、數(shù)據(jù)分割等。使得實際編碼過程中在不明顯降低編碼性能的前提下,大幅降低了編碼復(fù)雜度。與JM相比,在比特率相差不到5%的情況下,X264的編碼速度比JM快將近50倍[10]。因此,最終選定X264作為系統(tǒng)編碼解決方案。
3.3 RTP
實時傳輸協(xié)議是一個網(wǎng)絡(luò)傳輸協(xié)議,它是由IETF的多媒體傳輸工作小組1996年在RFC 1889中公布的。它包括兩部分:實時傳輸協(xié)議(RTP)和實時傳輸控制協(xié)議(RTCP)。其中,RTP負(fù)責(zé)包裝媒體流、提供數(shù)據(jù)的實時闡述,通過提供時間戳信息來保持收發(fā)端的數(shù)據(jù)同步;RTCP為RTP媒體流提供信道外控制,為RTP的服務(wù)質(zhì)量(Quality of Service)提供反饋[11]。
RTP是一個多播協(xié)議,主要承載于UDP協(xié)議之上[12]。一般的RTCP對RTP的QoS反饋場景為:會話開始后,發(fā)送端應(yīng)用程序會周期性發(fā)送端報告(SR),接收端根據(jù)SR中的信息和自身已接收數(shù)據(jù)進(jìn)行對比,計算生成接收端反饋報告,通過接收端報告(RR)發(fā)送給被反饋的發(fā)送端,發(fā)送方根據(jù)接收方服務(wù)質(zhì)量反饋,動態(tài)調(diào)整發(fā)送速率以改善傳輸[13]。圖2展示了H.264視頻基于RTP的傳輸方案。
4.1 服務(wù)器端
服務(wù)器端通過v4l2插件從攝像頭采集原始視頻流,根據(jù)攝像頭模塊的參數(shù),設(shè)定分辨率為1 280* 720、幀率為24 fps,采集到的原始視頻流先送入數(shù)據(jù)隊列插件queue進(jìn)行緩沖,然后通過videorate插件將視頻幀進(jìn)行幀率調(diào)整,得到幀率穩(wěn)定的視頻數(shù)據(jù)。此時,視頻數(shù)據(jù)的色彩空間還是RGB模式,而x264編碼器只支持YUV模式,所以視頻數(shù)據(jù)還需要通過ffmpegcolorspace插件進(jìn)行色彩空間轉(zhuǎn)換。經(jīng)過色彩空間轉(zhuǎn)換后,在x264enc插件中使用基本檔次進(jìn)行編碼。編碼得到的NAL單元通過rtph264pay插件進(jìn)行RTP打包,之后進(jìn)入RTP箱柜進(jìn)行RTP協(xié)議封裝。最后,利用udpsink插件將RTP數(shù)據(jù)包封裝成UDP數(shù)據(jù)報發(fā)送到網(wǎng)絡(luò)。服務(wù)器端RTP箱柜在生成RTP數(shù)據(jù)包的同時收送和周期性發(fā)送RTCP包,利用客戶端發(fā)送的接收端報告動態(tài)地調(diào)節(jié)編碼和傳輸速率,同時向客戶端發(fā)送發(fā)送端報告。服務(wù)器端接收RTCP包的端口選擇為UDP端口5002。管道示意圖見圖3。
4.2 客戶端
客戶端使用udpsrc插件接收來自服務(wù)器端的RTP包和RTCP包,接收RTP包的端口設(shè)置為UDP端口5000,接收 RTCP包的端口設(shè)置為 UDP端口5002。UDP數(shù)據(jù)包在GStreamer框架下以Gstbuffer的形式傳遞給RTP箱柜,完成對RTP數(shù)據(jù)包的解封裝。接著在rtph264depay中將RTP包轉(zhuǎn)化成NAL單元序列,NAL單元序列在h264dec插件中解碼,解碼后的視頻色彩空間為YUV模式,隨后數(shù)據(jù)流流向ffmpegcolorspace插件,在ffmpegcolorspace插件中將視頻色彩空間轉(zhuǎn)換成RGB模式。最后在ximagesink插件中進(jìn)行視頻播放。客戶端RTP箱柜在接收RTP數(shù)據(jù)包的同時收送RTCP包,利用RTCP接收端報告向服務(wù)器端反饋質(zhì)量服務(wù)信息。管道示意圖見圖4。
圖4 客戶端管道示意圖
系統(tǒng)功能調(diào)試使用Gstreamer提供的調(diào)試工具gst -lauch進(jìn)行。服務(wù)器端為Pandaboard Es開發(fā)板,IP地址為192.168.199.100,客戶端為搭建好Gstreamer環(huán)境的Linux主機(jī),IP地址為192.168.199.101。
服務(wù)器端執(zhí)行調(diào)試指令:
$gst-launch–v gstrtpbin name=rtpbin
v4l2src device=/dev/video0!"video/x-raw-yuv,width= 1280 height=720 framerate=24/1"!
videorate!ffmpegcolorspace!x264enc profile=baseline bytestream=true!rtph264pay!
rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0!udpsink host= 192.168.199.101 port=5000
udpsink host=192.168.199.101 port=5002!rtpbin.send_rtcp_ sink_0
rtpbin.send_rtcp_src_0!udpsink port=5001
客戶端執(zhí)行調(diào)試指令:
$gst-launch-v gstrtpbin name=rtpbin
udpsrc caps="application/x-rtp,media=(string)video,clockrate=(int)90000,
encoding-name=(string)H264"port=5000!
rtpbin.recv_rtp_sink_0 rtpbin.recv_rtp_src_0!rtph264depay! ffdec_h264!ffmpegcolorspace!ximagesink
udpsrc port=5002!rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_ src_0!
udpsink port=5001 host=192.168.199.100
經(jīng)測試,視頻能實時穩(wěn)定傳輸,傳輸時延在0.5 s左右,滿足了實時應(yīng)用要求。視頻傳輸實時性驗證如圖5所示。
文中提出一種基于OMAP4460平臺,在Gstreamer框架下實現(xiàn)的實時視頻監(jiān)控系統(tǒng)的方案。該方案具有高效率、低能耗、適應(yīng)性強(qiáng)、易維護(hù)擴(kuò)展等特點(diǎn),為網(wǎng)絡(luò)實時視頻監(jiān)控系統(tǒng)提供了一條新思路。
[1] 駱云志,劉治紅.視頻監(jiān)控技術(shù)發(fā)展綜述[J].兵工自動化,2009,28(1):1-3.
[2] Texas Instruments.OMAP4460 multimedia device technical reference manual[M].[s.l.]:Texas Instruments,2011.
[3] Taymans W,Baker S,Wingo A,et al.GStreamer application development manual[EB/OL].2008-10-31.http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/manual. pdf.
[4] 洪承煜.基于GStreamer嵌入式多媒體系統(tǒng)的設(shè)計與實現(xiàn)[D].成都:成都理工大學(xué),2009.
[5] Boulton R J,Walthinsen E,Baker S,et al.GStreamer plugin writer’s guide[EB/OL].2010-07-27.http://www.gstreamer.net/data/doc/gstreamer/head/pwg/pwg.pdf.
[6] 劉興民,趙連軍.基于GStreamer的遠(yuǎn)程視頻監(jiān)控系統(tǒng)的關(guān)鍵技術(shù)研究[J].計算機(jī)應(yīng)用與軟件,2011,28(5):243-246.
[7] 徐 家,陳 奇.基于V4L2的視頻設(shè)備驅(qū)動開發(fā)[J].計算機(jī)工程與設(shè)計,2010,31(16):3569-3572.
[8] 劉登誠,沈蘇彬,李 莉.基于V4L2的視頻驅(qū)動程序設(shè)計與實現(xiàn)[J].微計算機(jī)信息,2011,27(10):56-58.
[9] 劉喜龍,石中鎖.基于H264的嵌入式視頻服務(wù)器的設(shè)計[J].微計算機(jī)信息,2005,21(1):133-134.
[10]李世平.H.264三大開源編碼器之評測報告[R/OL].2005. http://blog.csdn.net/sunshine1314/archive/2005/06/19/ 397895.
[11]劉 浩,胡 棟.基于RTP/RTCP協(xié)議的IP視頻系統(tǒng)設(shè)計與實現(xiàn)[J].計算機(jī)應(yīng)用研究,2002,19(10):140-143.
[12]劉尚麟,劉 軍.GStreamer RTP插件的改進(jìn)及應(yīng)用[J].信息安全與通信保密,2009(1):91-92.
[13]孫彥景,李世銀,董 楊.基于RTP的嵌入式網(wǎng)絡(luò)化視頻采集壓縮系統(tǒng)[J].計算機(jī)工程與設(shè)計,2006,27(16):2939-2942.
Network Video Surveillance System Based on OMAP and Gstreamer
CHEN Le,WU Meng
(College of Telecommunication&Information Engineering,Nanjing University of Posts and Telecommunications,Nanjing 210003,China)
With the gradual improvement of people’s living standards,people have paid more attention to security,and video surveillance is gradually spread around many fields.In this paper,a network video surveillance system with C/S structure including video capture,encoding and transmission is developed under OMAP platform based on Gstreamer multimedia framework.Video capture is based on V4L2 application program interface,video encoding is using H.264 coding standard,and network transmission is based on the RTP family.This system includes server and client,and it’s easy to maintain and expand because of the plugin-based structure.Test results on the OMAP platform show that the overall system delay of about 1 seconds or less,can meet the needs of real-time monitoring,which can be used in actual production.
network video surveillance;Gstreamer;OMAP;RTP;H.264
TP302
A
1673-629X(2016)09-0095-04
10.3969/j.issn.1673-629X.2016.09.022
2015-11-24
2016-03-04< class="emphasis_bold">網(wǎng)絡(luò)出版時間:
時間:2016-08-01
國家“973”重點(diǎn)基礎(chǔ)研究發(fā)展計劃項目(2011CB302900);江蘇省高校自然科學(xué)研究重點(diǎn)項目(10KJA510035);南京市科技發(fā)展計劃重大項目(201103003)
陳 樂(1991-),男,碩士研究生,研究方向為無線通信與信號處理;吳 蒙,教授,研究方向為無線通信與信號處理、無線網(wǎng)絡(luò)安全與通信系統(tǒng)的信息安全。
http://www.cnki.net/kcms/detail/61.1450.TP.20160801.0909.068.html