王洪偉
民航黑龍江空管分局技術(shù)保障部,黑龍江哈爾濱 150001
基于DM3730和GStreamer的網(wǎng)絡(luò)視頻傳輸技術(shù)設(shè)計(jì)與實(shí)現(xiàn)
王洪偉
民航黑龍江空管分局技術(shù)保障部,黑龍江哈爾濱 150001
提出一種低帶寬通用的網(wǎng)絡(luò)傳輸視頻數(shù)據(jù)的方法,該方法的硬件采用德州儀器ARM+DSP雙核的視頻處理平臺;軟件使用基于流水線方式的多媒體框架GStreamer技術(shù),實(shí)現(xiàn)了視頻采集、H.264壓縮與網(wǎng)絡(luò)傳輸?shù)墓δ?;最后通過服務(wù)器將視頻顯示出來,服務(wù)器在Linux操作系統(tǒng)和Windows XP操作系統(tǒng)下都可以將攝像頭采集的視頻信息播放出來,達(dá)到遠(yuǎn)程傳輸實(shí)時(shí)監(jiān)控的效果。
。DM3730;GStreamer;H.264編碼;網(wǎng)絡(luò)傳輸;視頻處理
在社會生活中,人類對視頻服務(wù)需求越來越高,研究出一種既占用帶寬少又可以實(shí)時(shí)傳輸視頻數(shù)據(jù)的技術(shù)是非常必要的。尤其在民航行業(yè)內(nèi),外部偏遠(yuǎn)臺站較多,如果可以實(shí)現(xiàn)實(shí)時(shí)監(jiān)控,對民航的保障將起到良好的輔助效果。
DM3730是德州儀器公司開發(fā)的一款達(dá)芬奇技術(shù)的雙核系統(tǒng)芯片[1-3],達(dá)芬奇技術(shù)是一種專門為高效的數(shù)字視頻系統(tǒng)而設(shè)計(jì)的解決方案,軟件上通過H.264壓縮技術(shù)和GStreamer插件技術(shù)實(shí)現(xiàn)音視頻的開發(fā),H.264壓縮技術(shù)減少了數(shù)據(jù)量,降低了帶寬的使用,GStreamer技術(shù)是采用基于插件和管道的體系結(jié)構(gòu)[4-5],該技術(shù)中所有功能模塊都被實(shí)現(xiàn)成可以插拔的組件,能夠便捷地安裝到任意管道上,減少了代碼的重復(fù)編寫,從而提高了調(diào)試程序效率。
如圖1所示,視頻傳輸系統(tǒng)總體是由2大部分構(gòu)成:一是攝像頭采集視頻,通過DM3730對視頻數(shù)據(jù)進(jìn)行H.264壓縮,再打包成UDP格式轉(zhuǎn)發(fā)到網(wǎng)絡(luò)上;二是服務(wù)器端經(jīng)過UDP接收數(shù)據(jù),然后解壓縮,最后通過顯示器顯示圖像信息。
圖1 系統(tǒng)結(jié)構(gòu)
視頻傳輸系統(tǒng)的軟件基于Linux嵌入式操作系統(tǒng)[6-7]開發(fā),它的源碼公開,節(jié)省成本,另外還具有實(shí)時(shí)性強(qiáng)、安全性好、穩(wěn)定性高、廣泛的網(wǎng)絡(luò)和文件系統(tǒng)的支持等優(yōu)點(diǎn)。
2.1 嵌入式視頻采集的設(shè)計(jì)
嵌入式視頻采集系統(tǒng)是由視頻采集、H.264壓縮[8-9]和UDP傳輸3部分組成,如圖2所示。
圖2 嵌入式視頻采集過程
視頻采集使用的是TVP5146M2視頻編解碼芯片,該芯片將視頻模擬信號轉(zhuǎn)換成數(shù)字信號,大大降低了嵌入式控制器對數(shù)據(jù)處理的時(shí)間;視頻壓縮方面,DM3730處理器的ARM端發(fā)出視頻數(shù)據(jù)壓縮的開始和結(jié)束命令,而DSP端做H.264壓縮,它們之間的數(shù)據(jù)可以通過共享內(nèi)存分別獲??;傳輸方面,將壓縮后的數(shù)據(jù)打包成UDP格式傳輸?shù)揭蕴W(wǎng)中。
該部分程序是采用GStreamer軟件框架來實(shí)現(xiàn)視頻網(wǎng)絡(luò)傳輸?shù)模珿Streamer采用基于插件和管道的體系結(jié)構(gòu),在該體系結(jié)構(gòu)中所有的功能模塊都是獨(dú)立的,可以任意進(jìn)行插拔,因此可以很方便地接到任意的管道上運(yùn)行。
在該傳輸管道中,視頻流要由源元件、修改視頻窗口尺寸元件、H.264壓縮元件和UDP傳輸元件等4個(gè)元件構(gòu)成,完成整個(gè)視頻采集壓縮網(wǎng)絡(luò)傳輸?shù)倪^程。首先,TVP5146M2視頻編碼解碼芯片將模擬信號變成數(shù)字信號,源元件從該芯片中得到視頻數(shù)據(jù),然后將視頻的窗口尺寸調(diào)整到需要的大小,再經(jīng)過H.264壓縮編碼,將數(shù)據(jù)量壓縮到帶寬可以接受的大小,最后傳給下游的UDP傳輸插件,指定目的IP地址和端口號,將視頻數(shù)據(jù)傳輸?shù)骄W(wǎng)絡(luò)上。
傳輸管道插件的實(shí)現(xiàn)主要體現(xiàn)在以下幾個(gè)方面:1)使用v4l2src做視頻采集的插件;2)使用TIV-idResize插件修改視頻窗口大小;3)使用TIVidenc1插件進(jìn)行H.264壓縮編碼;4)使用udpsink插件進(jìn)行UDP傳輸。
在DM3730嵌入式平臺上鍵入如下命令,實(shí)現(xiàn)以上的視頻傳輸過程:
gst-launch-v v4l2src device =/dev/video0 !queue?。ideo/x-raw-y uv,width=720,height=576,format=
(fourcc)UYVY'!queue!TIVidResize?。 ideo/x-raw-yuv,width=320,height=240'!queue!TIVidenc1 codecName=H264enc engineName=codec- Server!queue!rtpH264pay pt=96!queue!udp-sink host=192.168.1.106 port=5 000。
其中,rtpH264pa,是對H.264壓縮后的數(shù)據(jù)封包成rtp格式;host=192.168.1.106,是目標(biāo)主機(jī)的IP地址;port=5 000,是目標(biāo)主機(jī)的UDP端口號;TIV-idResize和TIVidenc1是本系統(tǒng)針對DM3730開發(fā)的插件,TIVidResize主要實(shí)現(xiàn)流程如圖3所示。
圖3 修改窗口大小主體函數(shù)流程
TIVidResiz插件用于對輸入的視頻窗口大小做修改,主要編寫gst_tividresize_transform函數(shù),流程如下:
1)開辟輸入輸出緩沖區(qū)。
hInBuf=GST_TIDMAIBUFFERTRANSPORT_ DMAIBUF(src),hOutBu
f=GST_TIDMAIBUFFERTRANSPORT_ DMAIBUF(dst);
2)獲取上游元件的視頻數(shù)據(jù)。
memcpy(Buffer_getUserPtr
(hInBuf),GST_BUFFER_DATA(src),GST_ BUFFER_SIZE(src));
3)創(chuàng)建修改窗口大小的句柄。
vidresize->hRe
size=Resize_create(&rszAttrs);
4)執(zhí)行修改窗口大小函數(shù)。
Resize_execute(vidresize->hResize,
hInBuf,hOutBuf)。
TIVidenc1主要實(shí)現(xiàn)流程如圖4所示。
TIVidenc1插件用于對輸入的視頻數(shù)據(jù)進(jìn)行H.264壓縮編碼,主要編寫gst_tividenc1_chain函數(shù),流程為:
1)初始化視頻編碼參數(shù),gst_tividenc1_init_vid-eo,獲取命令行中的引擎名稱engineName,編碼名稱codecName等參數(shù);
2)獲取上游元件的視頻數(shù)據(jù),qBuf=gst_adapter_t ake_buffer(videnc1->sink Adapter,vi-denc1->upstream BufSize),將分配好的輸入緩沖區(qū)qBuf指向獲取上游的視頻數(shù)據(jù);
3)H.264編碼,填入輸出緩沖區(qū),gst_tividenc1_ encode(vid enc1qBuf,&outBuf),在該函數(shù)中會調(diào)用接口函數(shù)Venc1_process將獲取的數(shù)據(jù)傳遞給DSP進(jìn)行H.264壓縮,然后將處理后的數(shù)據(jù)返回到ARM端的輸出緩沖區(qū)outBuf;
4)將輸出緩沖區(qū)的數(shù)據(jù)傳送到下游的元件;gst_tividenc1_parse_and_push(videnc1,outBuf)。
圖4 H.264壓縮編碼主體函數(shù)流程圖
2.2 服務(wù)器接收顯示的設(shè)計(jì)
服務(wù)器接收視頻過程框圖如圖5所示。通過在Ubuntu10.04 Linux操作系統(tǒng)和Windows XP操作系統(tǒng)上安裝 GStreamer插件[10-11],然后鍵入命令接收視頻數(shù)據(jù),經(jīng)過H.264解碼,最后顯示到顯示器上。
圖5 服務(wù)器接收視頻過程
在Ubuntu的超級終端下鍵入如下命令,可以實(shí)現(xiàn)上述過程:
gst-launch-0.10-v udpsrc port=5000 caps="ap-plication/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,payload=(int)96"!rtpH264depay!ffdec_H264!ffmpegcol-orspace!ximagesink sync=false。
其中:port=5000表示本地 UDP端口 500;rt-pH264depay表示對rtp解包處理;ffdec_H264,表示對H.264壓縮數(shù)據(jù)進(jìn)行解壓;ffmpegcolorspace是對視頻格式校正,以適應(yīng)下游元件的顯示插件;ximag-esink是將視頻圖像顯示出來。
在Windows XP操作系統(tǒng)中的DOS環(huán)境下鍵入如下命令,可以實(shí)現(xiàn)上述過程:
gst-launch-v udpsrc port=5000caps="applica-tion/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,payload=(int)96"!rtph264depay!ffdec_h264!ffmpegcolorspace!autovideosink。
其中:port=5000表示本地UDP端口5000;rt-pH264depay表示對rtp解包處理;ffdec_H264表示對H.264壓縮數(shù)據(jù)進(jìn)行解壓;ffmpegcolorspace是對視頻格式校正,以適應(yīng)下游元件的顯示插件;au-tovideosink是將視頻圖像顯示出來。
本實(shí)驗(yàn)是在實(shí)驗(yàn)室環(huán)境下,使用的DM3730硬件平臺如圖6所示。
圖6 DM3730硬件平臺
服務(wù)器端使用百兆網(wǎng)卡測試,Ubuntu10.04 Linux操作系統(tǒng)是在VMware Workstation虛擬機(jī)下安裝,使用橋接的方式虛擬出一個(gè)網(wǎng)卡,使其與DM3730平臺和Windows XP同處于一個(gè)局域網(wǎng)中。
由于該系統(tǒng)采用的是GStreamer插件的形式,因此在2個(gè)操作系統(tǒng)中都安裝了GStreamer的相關(guān)軟件包,均支持 GStreamer的命令操作。圖 7是Linux系統(tǒng)下測試的效果,左側(cè)是視頻接收的執(zhí)行代碼,右側(cè)的是顯示的大小為320×240的實(shí)時(shí)視頻窗口;圖8是Windows XP系統(tǒng)下測試的效果,左側(cè)是采集視頻鍵入的執(zhí)行代碼,右上角是視頻接收的執(zhí)行代碼,右下角是顯示的大小為320×240的實(shí)時(shí)視頻窗口。
圖7 Ubuntu10.04 Linux平臺下圖像實(shí)時(shí)顯示
圖8 Windows XP平臺下視頻實(shí)時(shí)顯示
文中實(shí)現(xiàn)了一種基于DM3730平臺和GStreamer插件的視頻網(wǎng)絡(luò)傳輸系統(tǒng)設(shè)計(jì),描述了該系統(tǒng)的總體架構(gòu)、硬件和軟件的實(shí)現(xiàn)方法,重點(diǎn)分析了攝像頭對信息的實(shí)時(shí)采集、修改視頻窗口大小,通過H.264壓縮編碼、UDP封包傳輸。實(shí)驗(yàn)結(jié)果表明本系統(tǒng)具有良好的實(shí)時(shí)性和可靠性,能夠滿足民航在偏遠(yuǎn)臺站的要求。
[1]彭啟琮.達(dá)芬奇技術(shù)——數(shù)字圖像/視頻信號處理新平臺[M].北京:電子工業(yè)出版社,2008:9-50.
[2]沈沛意,張亮,周夢.DAVINCI技術(shù)剖析及實(shí)戰(zhàn)應(yīng)用開發(fā)指南[M].西安:西安電子科技大學(xué)出版社,2012:15-100.
[3]趙勇,袁譽(yù)樂,丁銳.DAVINCI技術(shù)原理與應(yīng)用指南[M].南京:東南大學(xué)出版社,2008:19-120.
[4]劉尚麟,劉軍.Gstreamer RTP插件的改進(jìn)及應(yīng)用[J].信息安全與通信保密,2009(1):91-92.
[5]陳洪敏.基于RTP/RTCP協(xié)議流媒體傳輸?shù)难芯浚跩].福建電腦,2010(2):8-14.
[6]楊宗德,鄧玉春,曾慶華.Linux高級程序設(shè)計(jì)[M].北京:人民郵電出版社,2008:20-56.
[7]陳立偉,王桐,楊蕾.零基礎(chǔ)學(xué)嵌入式Linux C編程[M].北京:機(jī)械工業(yè)出版社,2010:34-168.
[8]王永剛.3G視頻監(jiān)控系統(tǒng)中的H.264編碼實(shí)現(xiàn)與應(yīng)用軟件開發(fā)[D].杭州:杭州電子科技大學(xué),2011:74-156.
[9]李紹榮.H.264編碼器的研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2011:25-69.
[10]賀志強(qiáng).基于 GStreamer媒體播放器的研究與設(shè)計(jì)[D].成都:電子科技大學(xué),2009:58-162.
[11]劉陽.基于GStreamer的機(jī)頂盒多媒體播放管理模塊的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2012:20-158.
Design and implementation of network video transmission based on DM3730 and GStreamer technology
WANG Hongwei
Department of Technology Security,Air Traffic Management Bureau Heilongjiang Branch,Harbin 150001,China
A general low bandwidth network transmission video data method was put forward in this paper.The hard-ware of the method is based on the platform of Texas instruments with dual core of ARM+DSP.The software em-ploys multimedia framework GStreamer technology based on the assembly line way,achieving the functions of video acquisition,H.264 compression and network transmission,and displaying video images by server.The video infor-mation collected by camera can be displayed by server on both Linux and Windows XP OS,achieving the goal of remote transmission and real-time monitoring.
DM3730;GStreamer;H.264 encode;network transmit;video processing
TP393
A
1009-671X(2014)03-0019-04
10.3969/j.issn.1009-671X.201403014
http://www.cnki.net/kcms/doi/10.3969/j.issn.1009-671X.201403014.html
2014-03-24.
日期:2014-06-05.
王洪偉(1970-),男,工程師.
王洪偉,E-mail:hwmb3215@163.com.