999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于X264的嵌入式視頻監控系統設計

2013-11-30 05:28:48江俊杰王志明
計算機工程與設計 2013年12期
關鍵詞:嵌入式系統

江俊杰,王志明

(南京理工大學 機械工程學院,江蘇 南京210094)

0 引 言

視頻編解碼技術和電子技術的飛速發展使視頻技術越來越多的被應用到了計算機和智能手機終端的視頻通信等領域,視頻監控技術也伴隨著這個過程逐步發展,并出現了許多數字視頻監控系統,許多基于ARM、DSP等平臺的視頻監控系統陸續出現了[1]。目前,市場已有的嵌入式視頻采集方案多采用專用的芯片。采用專用處理芯片的系統實時性好,但是可選芯片少且算法不夠靈活。采用基于TI雙核芯片的系統開發周期端,但成本偏高,適用于高端市場[2]。文獻[2]采用的是ARM和DSP的雙處理器,文獻[3]采用的是雙核DSP處理器,這兩種方式均采用了DSP實現,開發難度大且成本較高,而采用低端處理器將會使系統性能大大降低,圖像實時性或視頻質量達不到要求。

基于以上問題,本文設計了一種基于S3C6410硬件平臺和Linux操作系統的視頻監控方案。H.264編碼算法能在相同視頻質量的情況下節約30%的網絡帶寬[4]。本方案通過USB攝像頭進行數字圖像采集,利用符合H.264標準且性能優異的X264進行編碼運算,通過RTP協議實時發送,并通過客戶端實時解碼播放接收到的視頻信息,實現了實時監控。本文設計的監控系統開發流程短,具有廣泛的應用前景。

1 系統方案及硬件平臺

本系統運行S3C6410硬件平臺上的Linux系統之中,系統主要工作流程如下:USB攝像頭獲取圖像一幀后,該一幀圖像經過X264編碼器編碼后,采用RTP協議通過以太網發送給客戶端主機上,客戶端主機解碼播放,如此循環便達到實時監控的目的。考慮到在實際監控過程中,需要調用監控錄像,因此該方案會將采集到的數據保存到SD卡中,方便隨時調用。

系統方案如圖1所示。

圖1 系統方案

X264的運算復雜度比較高,因此對硬件平臺有一定的要求,這也是X264盡管性能優異,但早期在嵌入式平臺得不到廣泛采用的原因之一。S3C6410是一款高性能32位的RISC微處理器,主頻高達667MHz,它采用64/32位內部總線架構,具有視頻處理、二維圖形顯示和縮放等硬件加速器功能[5]。另具有存儲器設備、UART串口,USB及以太網等特性。符合本系統的硬件要求。USB攝像頭采用了環宇飛揚數碼科技有限公司的5200A型高清攝像頭,內部集成了一款高性能圖像處理芯片ZC301P,可以輸出YUV2等格式的視頻幀數據,類似設備在市場上可以廣泛獲得且成本低廉。

2 軟件平臺設計

2.1 操作系統平臺的制作

Linux系統除了具有開源、穩定和良好的移植性外,還具有優秀的網絡功能。因此系統采用Linux操作系統作為軟件的開發和調試平臺。從軟件的角度分析,嵌入式Linux系統通常包括引導加載程序、Linux內核、文件系統和用戶應用程序這4個層次[6]。

BootLoader(引導加載程序)是在系統加電后執行的第一段代碼[7]。本系統的BootLoader采用的是U-boot,源代碼可以在網絡上下載,但是移植之前需要根據本系統的硬件平臺進行修改和配置編譯。內核移植需要注意的地方是在配置內核選項時,要根據所需的硬件資源添加所需驅動程序,主要包括網卡、USB、大容量存儲設備等,使最后編譯的內核能夠支持S3C6410硬件平臺。在Linux2.6.30以后的版本中,其編譯配置選項中已包括大部分常用硬件的驅動程序,只需在配置時選中,然后編譯即可。Linux是一種類Unix操作系統[1],幾乎支持所有的Unix類的文件系統,本系統選用的yaffs2文件系統遵守FHS(filesystem hierarchy standard)[8],掛載時間短,對內存的占用小,可讀寫,且嚴格適合嵌入式系統。制作工具選用的是BusyBox。

2.2 基于V4L2的視頻采集程序設計

V4L2是Linux下開發視頻采集設備驅動程序的一套規范,為Linux的視頻驅動提供了統一的接口,使應用程序可以使用統一的API函數進行操作。極大的簡化了視頻系統的的開發和維護[9]。本文基于V4L2規范設計的圖像捕捉程序流程圖如圖2所示。

圖2 視頻捕捉程序流程

在圖像捕捉程序中,設計了多線程以提高處理器的效率,其中的mmap線程將捕捉的一幀視頻數據通過mmap映射的方式將內存映射到X264編碼緩存中,避免在用戶空間和內核空間之間不斷拷貝數據而大量占用用戶內存空間,浪費寶貴的內存資源。

2.3 X264編碼器移植

X264編碼器是針對X86平臺的,移植到嵌入式平臺程需要對源代碼進行修改,本文選取幾處加以說明:

從網絡上下載解壓源代碼后,進入X264目錄進行配置。參考配置命令:

[root@localhost x264_arm]#./configure--host=arm-linux --prefix=/x264 --extra-cflags=-mtune=arm1176jzf-s--enable-shared--disable-arm

在配置選項中注明了cpu內核類型,否則即使編譯成功,arm平臺上的X264編碼器仍將無法正常運行。配置完成后,會在當前目錄生成一個config.mak文件,還需要對該文件中的幾個選項進行修改。找到其中的ARCH、CC、LD、AR、RANLIB以及STRIP項,將它們分別改為:ARCH=ARM、CC=arm-linux-gcc、LD=arm-linux-gcc-o、AR=arm-linux-ar rc、RANLIB=arm-linux-ranlib 、STRIP=arm-linux-strip。代碼修改完成之后,執行 make命令,至此,X264移植完成。

2.4 X264編碼程序設計

本文選用的H.264編碼器選用了X264,相比其他編碼器,X264更注重實用,去除了一些對編碼性能影響很低但計算復雜度很高的新算法,降低運算復雜度[10]。X264編碼器的編碼流程如下:

(1)設置默認參數:

x264_param _default_preset(x264_param _t*,const char*preset,const char*tune);

(2)設置其他編碼參數,根據實際情況進行設置,需要注意的參數有:

(3)參數修正并初始化:

x264_encoder_open(x264_param_t*);

(4)編碼一幀參數:

x264_encoder_encode(x264_t*,x264_nal_t**pp_nal,int*pi_nal,x264_picture_t*pic_in,x264_picture_t*pic_out);

(5)關閉編碼器:

x264_encoder_close(x264_t*);

目前的X264編碼器輸入圖像格式只支持YUV2格式,而本文所選用的USB攝像頭輸出格式為YUV422格式,因此需要進行格式轉換之后才可以被編碼器正常編碼。編碼完一幀后的數據儲存在pp_nal.p_payload中,需要在下一次調用x264_encoder_encode編碼函數前將數據取出。在最新版的X264編碼器中,上述編碼函數已經調用NALU打包,編碼后的數據在經過簡單的處理后就可以進行RTP打包。

2.5 基于RTP協議的發送程序設計

對于H.264視頻的實時傳輸應用來說,TCP的重傳機制引入的時延和抖動是無法容忍的。基于UDP只上的高層協議 實 時 傳 輸 協 議 (real-time transport protocol)RTP/RTCP是目前解決流媒體實時傳輸問題的最理想方法[1]。RTP能夠提供端到端傳輸服務,位于TCP和UDP協議只上,適合通過組播和點播傳送實時數據[11]。該協議還提供了流量控制和擁塞控制服務。典型的基于RTP/UDP/IP的H.264視頻傳輸框圖如圖3所示。

圖3 H.264視頻傳輸框架

對于H.264的數據流打包協議,最新的RFC3984標準中提供了針對H.264媒體流的RTP打包方法。X264編碼器編碼出的一幀數據并不能直接打包發送,在編碼函數中,除了寫入NALU頭,也加入了前綴用來區分各個NALU,在打包發送前,需要將前綴去除。最后根據RFC3984標準,本文基于RTP協議的發送程序中的數據打包算法流程如圖4所示 (圖中MTU即最大傳輸單元)。

圖4 數據打包算法流程

RTP協議基于UDP之上,因此在實現RTP打包發送前,需要創建一個Socket,并且需要指定接收端的IP地址及接收端端口號,完成UDP初始化之后,RTP發送的數據才會被客戶端接收到。在設定RTP的參數中,需要設定RTP負載類型以及時戳,根據RFC3984,對于H.264視頻格式,并沒有規定一個默認的值,選用一個大于95的值即可,但與時戳相應的時鐘頻率必須為90000Hz。

2.6 X264編碼器優化思路

針對x264編碼器運算復雜的特點,本文主要從以下3種思路優化編碼器源代碼以減小編碼耗時,提高編碼的實時性:

(1)源代碼精簡。

X264源代碼中,有許多變量及函數語句與編碼并無直接關系,這些被定義的變量和結構體會占用一部分內存空間。此外大部分的調試信息輸出語句都可以被刪除。

(2)設定合適的X264編碼參數。

X264支持多種類型的編碼框架,即Baseline,Main和多種更高等級。其中,Baseline方式針對交互式應用,復雜度低,低延時,適合實時編碼。參數設定命令如下:

x264_param_apply_profile(param,x264_profile_names[0]);//使用baseline

X264有3種碼率控制方式,對于實時編碼傳輸的情況,一般采用固定碼率方式。參數設定命令如下:

param->rc.i_rc_method=X264_RC_CRF;

(3)算法優化

運動估計是H.264標準中最重要且最耗時的一部大約占用這個視頻編碼的60%~80%的時間,也是H.264標準中最重要的環節[12],嚴重影響了X264的實時編碼性。算法優化復雜繁瑣,將作為后期主要優化方向。

3 系統測試

3.1 系統測試平臺:

系統的嵌入式平臺選用的是飛凌公司的OK6410開發系統,嵌入式系統采用的Linux內核為2.6.36,交叉編譯器版本為arm-linux-gcc 4.3.2,X264編譯器版本為 x264-snapshot-20120315-2245,接收端是PC機 (windows)。

為方便開發階段的調試工作,在主機端建立了基于NFS的根文件系統,并將其掛載到嵌入式系統中,NFS根文件系統的主機端是運行于VMware Vorkstation下的Red Hat Enterprise Linux 5系統。ARM板與PC機通過RS232串口傳遞調試信息,通過網絡接口傳遞視頻數據。

3.2 測試結果與分析

將系統的硬件平臺連接之后,為了掛載NFS根文件系統方便調試,需要將ARM端和PC端的IP置于同一網段中,并使用ping命令檢查,測試結果如下:

[root@localhost rtp]# ping 10.10.40.39

PING 10.10.40.39 (10.10.40.39)56 (84)bytes of data.

64bytes from 10.10.40.39:icmp_seq=1ttl=64time=4.84ms

64bytes from 10.10.40.39:icmp_seq=2ttl=64time=0.358ms

……

程序運行前,應當確保系統能加載USB攝像頭驅動,正常情況下,當插入USB攝像頭時,會出現以下調試信息:

usb 1-1:new full speed USB device using s3c2410-ohci and address 2

usb 1-1:New USB device found,idVendor=058f,id-Product=3880

……

uvcvideo:Found UVC 1.00device USB 2.0PC Camera(058f:3880)

input:USB 2.0PC Camera as/class/input/input1

以上檢查工作完成后,表明網絡及硬件可以在嵌入式平臺上正常運行。

啟動監控系統,出現以下關于X264的調試信息:

x264[info]:using cpu capabilities:none!

x264[info]:profile Constrained Baseline,level 3.2

上述表明了設定的X264編碼類型等信息。

接著出現的是發送的NALU包的信息,如圖5所示。

圖5 調試信息

從輸出的調試信息中可以看到,前兩個NALU的類型是7和8,對應著的NALU類型是序列參數集 (sequence parameter set,SPS)和圖像參數集 (picture parameter set,PPS),H.264的SPS和PPS串包含了初始化H.264解碼器所需要的信息參數,包括編碼所用的圖像的高和寬,profile,level等信息。

出現調試信息后,用VLC播放器打開編寫好的SDP文件,可觀察到實時播放效果如圖6所示。

圖6 實時播放畫面

經過多次實驗比對,在QCIF分辨率,X264編碼器未優化的前提下,ARM端的最大編碼速度能夠滿足實時播放編碼 (15fps)的要求。在經過簡單的編碼器源代碼裁減等優化后,最大幀率還能增加,實時性較好,且延時很低。

雖然在實驗過程中的實際幀率能夠達到實時編碼的要求,但是也能看到,即使設定合適的編碼參數以及精簡部分源代碼,編碼器的效率仍未能得到有效提高,這是因為X264編碼器大部分的時間都在做運動估計相關方面的函數運算,所以運動估計算法的優化將是編碼器優化的主要方向。

4 結束語

本系統采用了高性能處理器S3C6410為主控芯片,設計了一種基于X264的嵌入式監控系統方案,系統運行于該硬件平臺,通過移植Linux操作系統和X264編碼器,使用RTP協議,充分發揮了X264編碼器高壓縮率的特性和RTP協議良好的實時傳輸品質,實現了QCIF分辨率下的實時編碼發送,并將編碼后的文件保存在SD卡中。實驗過程中發現,隨著壓縮比的提高,編碼器編碼幀率將會下降,這主要是由于處理器性能的限制和編碼器本身較高的計算復雜度決定的。如何對編碼器進行合理化裁剪和算法優化仍將是以后學習中的主要工作。此外,ARM架構處理器發展迅速,使用性能更好的ARM芯片也是發揮H.264優良的編碼功能,提升系統性能的一個重要方向。

[1]PENG Tiegang,LIU Guofan,CAO Shaokun,et al.Design of embedded video surveillance system based on ARM[J].Computer Engineering & Design,2010,31 (6):1191-1194 (in Chinese).[彭鐵鋼,劉國繁,曹少坤,等.基于ARM的嵌入式視頻監控系統設計[J].計算機工程與設計,2010,31(6):1191-1194.]

[2]MA Yongjun,GUO Lei.Design of embedded digital home security video capture system[J].Journal of Tianjing University of Science & Technology,2011,26 (2):65-69 (in Chinese).[馬永軍,郭磊.嵌入式數字家庭安防視頻采集系統設計[J].天津科技大學學報,2011,26 (2):65-69.]

[3]ZHENG Hui,YANG Fumin,TU Gang.Embedded video supervisory terminal based on dual-cores DSP[J].Computer Engineering & Design,2007,28 (9):2092-2095(in Chinese).[鄭輝,陽富民,涂剛.基于雙核DSP的嵌入式視頻監控終端[J].計算機工程與設計,2007,28 (9):2092-2095.]

[4]ZHANG Hongtao,WANG Yang,MAO Hongfei,et al.Design of embedded video surveillance system based on H.264[J].Journal of Hubei University of Technology,2010,25 (5):11-13(in Chinese).[張洪濤,王洋,毛洪飛,等.基于H.264的嵌入式視頻監控系統的設計[J].湖北工業大學學報,2010,25 (5):11-13.]

[5]SAMSUNG Electronics.S3C6410x32-bit RISC microprocessor user's manual(revision1.2)[EB/OL].http://www.samsung.com,2011.

[6]GAO Wenhui,SHI Yibing,ZHANG Wei.Implementation of double boot in U-BOOT based on S3C2440[J].Measurement&Control Technology,2012,31 (2):87-91 (in Chinese).[高文輝,師奕兵,張偉.基于S3C2440的U-Boot雙啟動實現[J].測控技術,2012,31 (2):87-91.]

[7]DU Haixing.Analysis and porting of embedded bootloader based on ARM[J].Mircocomputer Information,2010,26(29):58-59 (in Chinese).[杜海星.基于 ARM 的嵌入式Bootloader分析與移植[J].微計算機信息,2010,26 (29):58-59.]

[8]Rusty Russell,Daniel Quinlan,Christopher Yeoh.Filesystem hierarchy standard[EB/OL].http://www.pathname.com/fhs/,2004.

[9]LIU Sheng,ZHAO Jingjing,FAN Xiuli.The embedded video surveillance system based on V4L2[J].Microcomputer Applications,2011,32 (1):37-42 (in Chinese).[劉升,趙晶晶,范秀麗.基于V4L2的嵌入式視頻監控系統[J].微計算機應用,2011,32 (1):37-42.]

[10]WU Ping,CHEN Xiuhong,ZHANG Ping.Design of video monitoring system based on embedded X264[J].Video Engineering,2011,35 (7):108-110 (in Chinese).[吳平,陳秀宏,張平.基于X264的嵌入式視頻監控系統設計[J].電視技術,2011,35 (7):108-110.]

[11]Connie A,Nasiopoulos T,Leung PVCM,et al.Video paeketization techniques for enhancing H.264video transmission over 3GNetworks[J].Consumer Communications and Networking Conference,2008 (12):800-804.

[12]HUANG Chunqing,QIU Xiaobin.Optimization on fastmotion estimation algorithm base on X264[J].Control Enginerring of China,2010,17 (6):821-823 (in Chinese).[黃春慶,邱曉彬.基于x264的快速運動估計算法優化[J].控制工程,2010,17 (6):821-823.]

猜你喜歡
嵌入式系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
搭建基于Qt的嵌入式開發平臺
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
主站蜘蛛池模板: 国产区91| 自拍偷拍一区| 国产精品七七在线播放| 欧美日韩亚洲综合在线观看| 欧洲日本亚洲中文字幕| 亚洲男女天堂| 欧美中文字幕在线二区| 永久免费AⅤ无码网站在线观看| 久久婷婷人人澡人人爱91| 性喷潮久久久久久久久| 亚洲av无码成人专区| 成人亚洲天堂| 国产91蝌蚪窝| 91精品啪在线观看国产| 午夜性刺激在线观看免费| 东京热av无码电影一区二区| 广东一级毛片| 毛片一区二区在线看| 国外欧美一区另类中文字幕| 中国毛片网| 日韩成人在线网站| 99一级毛片| 亚洲无码免费黄色网址| 亚洲午夜福利精品无码| 国产香蕉在线| 狠狠躁天天躁夜夜躁婷婷| 亚洲黄色网站视频| 国产在线一区视频| 91在线日韩在线播放| 亚洲有码在线播放| 六月婷婷激情综合| 欧美成人日韩| 在线观看国产小视频| 一级毛片在线播放| 爱色欧美亚洲综合图区| 免费AV在线播放观看18禁强制| 日韩福利在线观看| julia中文字幕久久亚洲| 欧美激情综合| 成人欧美日韩| 国产成人麻豆精品| 黄色网页在线观看| 久久国产拍爱| 99久久精品国产综合婷婷| 亚洲天堂首页| 欧美激情,国产精品| 久久国产乱子| 久久久无码人妻精品无码| 色妞永久免费视频| 久草网视频在线| AV无码无在线观看免费| 国产免费高清无需播放器| 亚洲日本中文字幕乱码中文| 国产精品三级专区| 久久国产精品麻豆系列| 黄色福利在线| 高清视频一区| 宅男噜噜噜66国产在线观看| 91精品伊人久久大香线蕉| 欧美高清国产| 天堂成人av| 无码AV日韩一二三区| 国产精品免费入口视频| 国产精品观看视频免费完整版| 19国产精品麻豆免费观看| 亚卅精品无码久久毛片乌克兰| 少妇高潮惨叫久久久久久| 日韩欧美高清视频| 成年A级毛片| 亚洲精品黄| 四虎永久免费网站| 欧美一级在线看| 国产永久在线观看| 好吊日免费视频| 无码人中文字幕| 免费网站成人亚洲| 直接黄91麻豆网站| 欧美成人午夜影院| 色网站免费在线观看| 97在线免费| 国产人前露出系列视频| 免费在线视频a|