陳 樂,吳 蒙
(南京郵電大學通信與信息工程學院,江蘇南京 210003)
基于OMAP和Gstreamer的網絡視頻監控系統
陳 樂,吳 蒙
(南京郵電大學通信與信息工程學院,江蘇南京 210003)
隨著人們生活水平的逐漸提高,人們對安全越來越重視,視頻監控在很多領域逐漸普及。在OMAP平臺上運用Gstreamer多媒體框架,實現了一個集視頻采集、視頻編碼和視頻傳輸的C/S結構網絡視頻監控系統。視頻采集基于V4L2應用程序接口,視頻編碼采用H.264編碼,網絡傳輸承載于RTP協議族之上。系統包含服務端和客戶端,基于插件的系統結構使該系統具有易維護、易擴展的特點。在OMAP平臺上的測試結果表明,該系統整體延時在1 s以下,滿足了實時監控需求,可應用于實際生產。
網絡視頻監控;Gstreamer;OMAP;實時傳輸協議;H.264
視頻監控以其直觀方便、信息內容豐富而廣泛應用于眾多領域[1]。近年來,隨著計算機網絡和嵌入式技術的發展,視頻監控也逐漸向網絡化、嵌入式發展。文中設計了一種基于C/S結構的網絡視頻監控方案,在OMAP4460平臺上運用Gstreamer框架,組建了集視頻采集、視頻編解碼、網絡傳輸于一體的視頻監控系統,并對系統進行了測試分析。
系統采用基于 TI高性能 OMAP4460平臺[2]的Pandaboard ES開發板,平臺核心搭載了一顆雙核ARM Cortex-A9處理器,45 nm制程,具有較高的能效,工作頻率最高可達1.5 GHz,支持對稱多處理(Symmetrical Multi-Processing)技術,每個中央處理單元附帶一個支持單指令多數據(Single Instruction Multiple Data)指令集的Neon協處理器;IVA 3硬件加速模塊支持多標準視頻編解碼器加速,最高分辨率達1 080 p;圖像信號處理器支持高質量圖像和視頻抓取;SGX530圖形加速器提供驚人的2D/2D圖形表現。視頻數據交由DSP核心及GPU處理,視頻傳輸、邏輯控制處理交由ARM處理器,通過分工可以使工作效率大大提高。攝像頭采用基于 OV5640芯片的e-CAM51_44x模塊,500萬像素,支持自動對焦,支持多種幀率以及分辨率下的視頻拍攝(720 p/60 fps,1 080 p/30 fps),還集成了符合IEEE 802.11 b/g/n標準的無線網卡,拓展了系統的無線組網能力。
Gstreamer[3]是一個基于插件和管道的開源多媒體應用框架。在Gstreamer下,開發人員可以很方便地創建各種類型的多媒體功能插件,例如:多媒體采集、多媒體回放、多媒體編輯等。再利用數據管道式處理的思想把各個功能插件的數據流串聯起來組成插件管道就可以構成不同的多媒體應用。Gstreamer開發有如下幾個核心概念:
2.1 元 件
元件(element)是Gstreamer中最常見的概念,它是構成管道的基本單元,也是框架中所有可用組件的基礎。可以把它看成一個具有獨立功能的黑匣子,通過輸入輸出接口與其他元件進行通信。根據元件功能上的不同可以將其分為三類:數據源元件,只有輸出端沒有輸入端,僅僅只是負責數據的生成,而不對數據進行任何處理,通常位于應用管道的首部;過濾器元件,既有輸入端又有輸出端,元件從管道上游的數據源獲取數據流,并將數據流經過自身處理后傳送到輸出端;接收器元件,只有輸入端沒有輸出端,負責數據的表現,往往處在應用多媒體管道的尾部[4]。
在Gstreamer中創建GstElement對象通常使用工廠方法。Gstreamer提供了很多類型的元件工廠對象(GstElementFactory)對應不同的元件對象,工廠對象由gst_element_factory_find(factory_name)函數獲取,獲得工廠對象后可以調用gst_element_factory_create(factory,element_name)函數來創建元件,當元件不再使用時,需要對元件占用資源進行釋放,調用函數gst_element_unref(element)。
2.2 襯 墊
襯墊[5](pad)是元件間交流的接口。數據流流經一個元件需要通過元件的輸入襯墊和輸出襯墊。襯墊可以形象地理解為一個元件的插座,只有當兩個襯墊允許通過的數據類型一致時,兩個插座公母才能配對,元件之間的鏈接才被建立。可以看出,襯墊的功能決定了一個元件所能處理的媒體類型。利用函數gst_element_get_pad(element,dst)和gst_element_get_pad_list (element)可以獲取元件的襯墊,利用函數gst_pad_get _parent()可以獲得襯墊對應的元件。
襯墊的功能通過GstCaps對象來描述,媒體類型由GstStructure對象描述,一個GstCaps對象通常包含一個或多個GstStructure,表示該襯墊支持哪些媒體類型[6]。襯墊功能可以由函數gst_pad_get_caps()獲取。
2.3 箱 柜
箱柜是一個可以裝載元件的容器。在一些功能較為復雜的管道中,經常使用箱柜將多個元件組合成一個邏輯單元,通過直接操作箱柜來改變元件狀態,從而簡化操作。同時箱柜會對數據流進行優化從而提高媒體性能。操作箱柜可以像操作普通元件一樣,使用起來十分方便。
在Gstreamer中,箱柜有兩種類型:GstPipeline和GstThread。Gstreamer應用程序頂層必須為一個 Gst-Pipeline管道。GstThread可以提供同步處理機制,在應用程序需要嚴格同步時可以使用。下面代碼展示了使用工廠和特定函數產生箱柜的方法:
GstElement*thread,*pipeline;
thread=gst_element_factory_make("thread",NULL);
pipeline=gst_pipeline_new("pipeline_name");
往箱柜中添加元件可以調用函數gst_bin_add(),刪除元件使用gst_bin_remove()函數。箱柜沒有自己獨立的輸入襯墊和輸出襯墊,但是Gstreamer為它引入了精靈襯墊的概念。精靈襯墊映射到箱柜中元件的襯墊上,具有精靈襯墊的箱柜在行為上與元件是完全相同的,所以可以像操作元件一樣操作箱柜。
3.1 V4L2
V4L(Video for Linux)為Linux下視頻設備的一個驅動程序框架,同時,它也為Linux應用程序提供了視頻設備操作的應用程序接口(API)。V4L2[7](Video for Linux 2)是V4L的第二個版本,修正了V4L在一些設計上的缺陷。
V4L2在結構上可以分為兩層:上層是面向應用程序的API,下層是面向硬件的視頻設備驅動層。從應用層看,V4L2屏蔽了底層硬件操作細節,使應用可以在統一的接口下操作不同的硬件設備。從驅動程序看,V4L2提供了良好的內存管理和數據時序性管理,很好地適應了視頻數據的特點[8]。基于V4L2的視頻采集流程圖如圖1所示。
3.2 H.264
H.264編碼標準是由ITU-T和MPEG組成的聯合視頻組(Joint Video Team,JVT)開發制定,是目前代表最新技術水平的視頻編碼技術之一。與以往的標準如H.263、MPEG-4第二部分相比,H.264可以在相同質量視頻呈現的前提下節約一半或更多的帶寬,計算復雜度增加幅度也比較小。H.264提出了一個網絡抽象層(NAL)概念,簡化了編碼內容的封裝,對網絡十分友好。H.264還提供多種檔次的編碼選擇和參數定制,具有很強的應用靈活性,能適配各種帶寬、分辨率條件,可以應用于各種場景和系統,如視頻點播、可視電話、視頻存儲、廣播等。
目前,開源的H.264編解碼器主要有:JM、T264和X264。JM是H.264官方提供的編解碼器參考模型,支持幾乎所有H.264特性。但是JM程序只考慮了對所有特性進行實現卻忽略了其實用性,導致編碼復雜度非常高,實際應用起來編解碼速度很慢,常常只用于學術研究[9]。T264是由國內開源的H.264編解碼器實現。吸收了JM和X264的一些優點,但是其編碼碼流不兼容H.264,其他解碼器無法解碼T264的碼流,限制了它的應用,目前T264已經停止開發。X264是由網上自由組織聯合開發的兼容H.264標準碼流的編碼器。它注重實用的特性,拋棄了H.264標準中一些對編碼性能有貢獻卻異常復雜的編碼特性,例如任意條帶順序ASO、冗余條帶、數據分割等。使得實際編碼過程中在不明顯降低編碼性能的前提下,大幅降低了編碼復雜度。與JM相比,在比特率相差不到5%的情況下,X264的編碼速度比JM快將近50倍[10]。因此,最終選定X264作為系統編碼解決方案。
3.3 RTP
實時傳輸協議是一個網絡傳輸協議,它是由IETF的多媒體傳輸工作小組1996年在RFC 1889中公布的。它包括兩部分:實時傳輸協議(RTP)和實時傳輸控制協議(RTCP)。其中,RTP負責包裝媒體流、提供數據的實時闡述,通過提供時間戳信息來保持收發端的數據同步;RTCP為RTP媒體流提供信道外控制,為RTP的服務質量(Quality of Service)提供反饋[11]。
RTP是一個多播協議,主要承載于UDP協議之上[12]。一般的RTCP對RTP的QoS反饋場景為:會話開始后,發送端應用程序會周期性發送端報告(SR),接收端根據SR中的信息和自身已接收數據進行對比,計算生成接收端反饋報告,通過接收端報告(RR)發送給被反饋的發送端,發送方根據接收方服務質量反饋,動態調整發送速率以改善傳輸[13]。圖2展示了H.264視頻基于RTP的傳輸方案。
4.1 服務器端
服務器端通過v4l2插件從攝像頭采集原始視頻流,根據攝像頭模塊的參數,設定分辨率為1 280* 720、幀率為24 fps,采集到的原始視頻流先送入數據隊列插件queue進行緩沖,然后通過videorate插件將視頻幀進行幀率調整,得到幀率穩定的視頻數據。此時,視頻數據的色彩空間還是RGB模式,而x264編碼器只支持YUV模式,所以視頻數據還需要通過ffmpegcolorspace插件進行色彩空間轉換。經過色彩空間轉換后,在x264enc插件中使用基本檔次進行編碼。編碼得到的NAL單元通過rtph264pay插件進行RTP打包,之后進入RTP箱柜進行RTP協議封裝。最后,利用udpsink插件將RTP數據包封裝成UDP數據報發送到網絡。服務器端RTP箱柜在生成RTP數據包的同時收送和周期性發送RTCP包,利用客戶端發送的接收端報告動態地調節編碼和傳輸速率,同時向客戶端發送發送端報告。服務器端接收RTCP包的端口選擇為UDP端口5002。管道示意圖見圖3。
4.2 客戶端
客戶端使用udpsrc插件接收來自服務器端的RTP包和RTCP包,接收RTP包的端口設置為UDP端口5000,接收 RTCP包的端口設置為 UDP端口5002。UDP數據包在GStreamer框架下以Gstbuffer的形式傳遞給RTP箱柜,完成對RTP數據包的解封裝。接著在rtph264depay中將RTP包轉化成NAL單元序列,NAL單元序列在h264dec插件中解碼,解碼后的視頻色彩空間為YUV模式,隨后數據流流向ffmpegcolorspace插件,在ffmpegcolorspace插件中將視頻色彩空間轉換成RGB模式。最后在ximagesink插件中進行視頻播放。客戶端RTP箱柜在接收RTP數據包的同時收送RTCP包,利用RTCP接收端報告向服務器端反饋質量服務信息。管道示意圖見圖4。

圖4 客戶端管道示意圖
系統功能調試使用Gstreamer提供的調試工具gst -lauch進行。服務器端為Pandaboard Es開發板,IP地址為192.168.199.100,客戶端為搭建好Gstreamer環境的Linux主機,IP地址為192.168.199.101。
服務器端執行調試指令:
$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
客戶端執行調試指令:
$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
經測試,視頻能實時穩定傳輸,傳輸時延在0.5 s左右,滿足了實時應用要求。視頻傳輸實時性驗證如圖5所示。
文中提出一種基于OMAP4460平臺,在Gstreamer框架下實現的實時視頻監控系統的方案。該方案具有高效率、低能耗、適應性強、易維護擴展等特點,為網絡實時視頻監控系統提供了一條新思路。
[1] 駱云志,劉治紅.視頻監控技術發展綜述[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嵌入式多媒體系統的設計與實現[D].成都:成都理工大學,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的遠程視頻監控系統的關鍵技術研究[J].計算機應用與軟件,2011,28(5):243-246.
[7] 徐 家,陳 奇.基于V4L2的視頻設備驅動開發[J].計算機工程與設計,2010,31(16):3569-3572.
[8] 劉登誠,沈蘇彬,李 莉.基于V4L2的視頻驅動程序設計與實現[J].微計算機信息,2011,27(10):56-58.
[9] 劉喜龍,石中鎖.基于H264的嵌入式視頻服務器的設計[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協議的IP視頻系統設計與實現[J].計算機應用研究,2002,19(10):140-143.
[12]劉尚麟,劉 軍.GStreamer RTP插件的改進及應用[J].信息安全與通信保密,2009(1):91-92.
[13]孫彥景,李世銀,董 楊.基于RTP的嵌入式網絡化視頻采集壓縮系統[J].計算機工程與設計,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">網絡出版時間:
時間:2016-08-01
國家“973”重點基礎研究發展計劃項目(2011CB302900);江蘇省高校自然科學研究重點項目(10KJA510035);南京市科技發展計劃重大項目(201103003)
陳 樂(1991-),男,碩士研究生,研究方向為無線通信與信號處理;吳 蒙,教授,研究方向為無線通信與信號處理、無線網絡安全與通信系統的信息安全。
http://www.cnki.net/kcms/detail/61.1450.TP.20160801.0909.068.html