張洪濤, 胡順興, 詹云峰, 龔 力, 李奇風, 張 珠, 顏 貝
(湖北工業大學電氣與電子工程學院, 湖北 武漢 430068)
基于嵌入式S3C6410的H.264視頻采集系統設計
張洪濤, 胡順興, 詹云峰, 龔力, 李奇風, 張珠, 顏貝
(湖北工業大學電氣與電子工程學院, 湖北 武漢 430068)
[摘要]為解決視頻采集系統成本較高,耗費大量人力資源,視頻占用空間大等缺陷,設計的系統以S3C6410為硬件平臺和Linux操作系統為軟件平臺,通過外接USB攝像頭采集視頻數據,并采用H.264壓縮算法來提高了編碼效率,最后以AVI視頻格式存儲視頻。論述了V4L2的視頻采集過程,針對x264編碼速度慢、復雜耗時的特點,提出了一種改進型的率失真優化策略。最后經測試結果顯示視頻采集系統采集速度快,存儲空間小,準確,穩定,實時性強,達到預期效果。
[關鍵詞]S3C6410;視頻采集系統;H.264;V4L2 ;RDO
不經任何處理的視頻數據信息中存有各種冗余信息,如空間冗余、時間冗余和視覺冗余等[1]。由于這些冗余信息的存在,會使原始視頻數據量極大,為了解決視頻數據量過大而造成的各種問題,冗余數據能夠被很好地去除就很有必要,故視頻壓縮算法的研究就是一項很關鍵的技術。目前市場已有的嵌入式采集方案大多采用專用芯片,雖然這種方法實時性好,但是可選芯片少且算法不夠靈活;當前也有采用ARM和DSP雙處理器或者是雙核DSP處理器實現,這兩種方法都采用了DSP,這使得開發難度和成本都大大增加,而假如采用較低成本的處理器則會使系統性能降低,視頻系統采集到的圖像質量和實時性達不到要求。
根據以上問題,設計了采用ARM內核三星S3C6410處理器和嵌入式Linux操作系統的視頻采集方案,同時也利用由ITU-T和ISO/IEC聯合組建的數字視頻編碼標準H.264中性能優異的x264進行編碼運算[2]。系統最終實現了良好的幀間壓縮、較高的圖像質量以及穩定的視頻采集。
1系統總體設計
該系統主要構成:S3C6410、攝像頭和PC機。以運行Linux操作系統的S3C6410開發板作為視頻采集終端,S3C6410的USB接口外接攝像頭進行視頻數據的采集,采集到的視頻經混合編碼壓縮后以AVI格式進行存儲、預覽和播放。PC機上運行ubuntu12.04操作系統,其負責視頻采集系統的開發、調試和壓縮算法的優化驗證。而視覺信息可以通過攝像頭、攝影機等手段來捕獲,并且以視頻信息形式存儲或傳輸。采集處理的整個過程可以分為:攝像頭采集視頻信息,信息的混合壓縮編碼、存儲、解碼、播放[3]。其過程見圖1。

圖 1 視頻采集系統處理過程
2視頻采集硬件系統
2.1S3C6410
本系統的開發平臺采用了主頻為667MHz的高性能S3C6410處理器,S3C6410采用了由AXI、AHB和APB總線組成的64/32位內部總線結構[4],并通過這些總線與外圍模塊相連。為了提高整體功能和減少系統總成本,S3C6410包括很多硬件外設,如IIS總線接口,IIC總線,USB主設備,通用輸入輸出端口,系統管理器等等。處理器S3C6410內部集成的多媒體解碼器支持MPEG4、H.263、H.264的編解碼[5],因而可以廣泛應用于視頻監控系統、實時視頻會議系統等系統的開發和設計。Linux系統內核的裁剪、制定和移植,H.264編解碼庫的移植以及視頻采集系統應用程序的開發在此處理器開發平臺基礎上實現。
2.2系統硬件框架
系統硬件結構主要由天嵌公司生產的TQ S3C6410處理器核心模塊、Video4Linux2視頻采集模塊、H.264視頻編碼模塊、USB攝像頭驅動模塊,ARM TQ6410采用Samsung公司生產的S3C6410處理器,具有256MB的內存以及2GB的NANDFLASH,系統具有高速度、低功耗、體積小、處理能力強等特點,而且嵌入式Linux操作系統能夠在其上很好的運行。系統硬件架構見圖2。

圖 2 系統硬件架構
3視頻采集系統軟件設計
視頻采集系統軟件設計部分:系統軟件平臺的搭建和視頻采集應用軟件的設計,開發環境的搭建參照ARM S3C6410用戶使用手冊上的步驟即可進行bootloader、內核、文件系統和logo的裁剪和移植。應用軟件的設計可以分為三個部分,分別是視頻采集、視頻編碼和H.264的率失真優化。
3.1視頻采集
V4L2是Video For Linux Two的簡稱,是V4L的改進版。V4L2 為Linux系統的視頻設備訪問提供一套API接口和相關的標準[6],其并不直接與硬件交流,主要職責就是對視頻數據時序性的處理和數據緩沖區的內存管理,而圖片、視頻、音頻等信息的采集是通過視頻采集設備、驅動程序以及API接口來實現,V4L2模塊應用范圍廣泛[7]。在Linux系統中對USB攝像頭的操作是通過訪問視頻設備文件來實現的,因在系統中的所有外設都被視為設備文件。
Linux系統下V4L2的視頻采集流程見圖3。

圖 3 視頻采集流程
1)采用非阻塞式打開視頻設備文件
int cameraFd;
cameraFd = open("/dev/video0", O_RDWR | O_NONBLOCK, 0);
2) 設定屬性及采集方式打開視頻設備,根據需要可選擇設置該視頻設備的裁剪、縮放等屬性,檢查當前視頻設備支持的標準,并使用ioctl函數對設備的I/O通道進行管理[8]。
extern int ioctl (int _fd, unsigned long int _request, …) _THROW;
_fd:設備的ID
_request:具體的命令標志符
3)設置視頻捕獲格式
structv4l2_formatfmt;
memset(&fmt,0,sizeof(fmt));
fmt.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;
fmt.fmt.pix.width=480;
fmt.fmt.pix.height=320;
fmt.fmt.pix.pixelformat=V4L2_PIX_FMT_YUYV;
fmt.fmt.pix.field=V4L2_FIELD_INTERLACED;
if (ioctl(fd, VIDIOC_S_FMT, &fmt) == -1) {return -1;}
目前,在沒有適合替代材料的情況下,放棄使用所有有危害的傳統材料并不現實,而應對它們進行無害化管理,盡量避免危害,以符合安全及環保要求。
4)分配內存,為捕獲到的視頻信息分配內存:
structv4l2_requestbuffersreq;
if (ioctl(fd, VIDIOC_REQBUFS, &req) == -1) {return -1;}
5)獲取并記錄緩存的物理空間緩存個數-req.count通過VIDIOC_REQBUFS來獲取,接著經VIDIOC_QUERYBUF命令來獲取這些緩存的地址,然后將這些緩存地址轉換成應用程序中的絕對地址,并把緩存放入緩存隊列:
typedefstructVideoBuffer{
void*start;
size_tlength;
} VideoBuffer;
6)處理采集數據V4L2數據緩存中的req.count數量的緩存數據采用先來先服務的方式[9],這個過程需要用到兩個ioctl命令,VIDIOC_DQBUF和VIDIOC_QBUF。
7)關閉視頻設備使用close函數關閉一個視頻設備close(cameraFd);
3.2基于x264視頻編碼設計
設計中采用開源的x264編碼庫,該算法基于塊的幀內、幀間混合編碼技術,然后通過對預測值進行變換、量化、最后熵編碼。編碼幀類型為I幀(x264_type_i)、P幀(x264_type_p)、B幀(x264_type_b),在H.264中叫圖像片slice。X264把幀圖像看作一個slice,片中有slice_type_i、slice_type_p、slice_type_b之分。I幀只有slice_type_i,P幀有slice_type_i、slice_type_p,B幀三種片均有。
x264的視頻編碼過程主要有三步:首先根據規則判定當前幀的編碼類型,如果是B幀還要存放、獲取,然后對待編碼圖像采用幀內預測、幀間預測、整數DCT變換、量化和熵編碼,最后把壓縮后的碼流進行NAL層打包輸出。視頻編碼流程見圖4。

圖 4 視頻編碼流程
3.3H.264的率失真優化改進
H.264中率失真是一個很重要的技術,所謂率失真優化是指獲得最小失真以及獲取最佳編碼模式。即在限比特率為R值不能超過最大信道傳輸率,并使失真 D最小化,約束條件為:R≤Rc[10]。為了實現這目的,需在R和D之間選擇一個最佳點。RDO對應的公式:J(mode)=SSD+λ*R(ref,mode,mv,residual),SSD是指重建塊與源圖像的差值均方和;λ是拉格朗日乘子[11];R就是該模式下宏,塊編碼的實際碼流,包括對參考幀、模式、運動矢量、殘差等的比特率[12]。假如當模式是幀內模式時SSD就需重建圖像,但這一過程涉及到變換量化、
熵編碼、反變換反量化、重建等,這無疑會使運算量巨大,為解決這一問題,采用替代公式:J(mode)=SAD+λ*R(ref,mode,mv),J(mode)=SATD+λ*R(ref,mode,mv),SAD就是該模式下預測塊與源圖像的絕對誤差和。SATD:殘差經哈德曼變換的4×4塊的預測殘差絕對值總和,因此在替代公式R計算時也忽略了residual。
for (j=0;j<16;j)
{
for (i=0;i<16;i)
{
M1[ i ][j]=imgY_org[img->opix_y+j][img->opix_x+i]-img->mprr_2[k][j][ i ]; M0[i%4][i/4][j%4][j/4]=M1[ i ][j];
}
}
在H.264中,RDO代價函數不是一成不變的,而是根據運動搜索、參考幀擇優、模式決策三個方面來選擇。同時為滿足不同的需要,有時候也將非RDO代價函數列為可選模式。標準H.264只是采用簡單的遍歷算法來率失真優化,并沒有對不同分割模式與運動矢量之間的相關性等關鍵因素考慮在內,這使得率失真算法還有一定的上升空間。據此本文提出一種基于率失真優化的快速幀間宏塊編碼模式選擇算法,此算法通過對待編碼宏塊在8×8塊運動矢量的分析得到該宏塊可能采用的所有編碼模式,然后通過率失真優化計算得到最佳模式,經這一優化后的編碼效率有了很大的提高。
改進優化后的算法流程如下:1)將待編碼宏塊進行宏塊8×8分割;2)將分割后的宏塊進行8×8塊運動預測,從而獲得四個8×8塊運動矢量;3)通過對矢量完全相當、僅X或Y相當、矢量完全相當的三個不同矢量特點進行判斷分析,并采集相對應的編碼模式集合;4)根據優化算法選取宏塊最佳編碼模式。
測試結果見表1、表2。

表1 測試結果 QP=28

表2 測試結果 QP=32
實驗結果表明,視頻信息經優化算法進行壓縮后,除個別宏塊的最佳劃分模式在矢量分析后可能被誤排除而出現細微出入外,不管是背景復雜還是相對簡單的視頻信息都能不同程度地提高編碼速度。
4系統測試結果及分析
連接好視頻采集系統的所有設備,接通電源并啟動開發板,打開SecureCRT串行端口,并連接到開發板S3C6410。串行端口進入S3C6410的Linux系統配置環境,確保平臺順利運行。輸入ifconfig 命令查看設備IP地址,使用 ifconfig eth0 命令配置IP。使用ping命令來查看是否與監控主機連接成功,輸入視頻采集系統程序的命令,啟動攝像頭后便可以實現實時監控并采集視頻。通過攝像頭獲得的圖像大小為480*320像素點,格式為JPEG。圖4采用H.264壓縮算法固定的時間點抓拍到的圖像,圖5采用H.264壓縮后的采集視頻播放效果。從實驗可知,采集后的視頻以AVI格式存儲并播放,視頻實時性好,圖像清晰,存儲空間小。從主觀質量上觀察視頻播放流暢度較好,但是對劇烈抖動和較快的速度的采集表現差。由于采集、壓縮和傳輸過程的延時,觀察存在 0.5~1.5 s 左右的延時。

圖 5 H.264壓縮算法固定的時間點抓拍到的圖像

圖 6 視頻播放效果圖
5結束語
基于S3C6410的H.264視頻采集系統,使用x264編碼庫進行編碼并對率失真進行優化,將視頻編解碼庫移植到S3C6410。最終研發出的視頻采集系統穩定、可靠,運行快捷,操作簡單,開發成本低,調試方便,具有很強的實用性。測試表明,設計的系統視頻采集效率高、圖像連續性好、運行穩定,并將采集到的視頻信息進行實時壓縮,以AVI形式存儲、播放,實現了視頻圖像的實時傳輸與播放,在后續研究中,將進一步從攝像頭接口電路和核心控制板電路方面對該系統提出改進和完善。
[參考文獻]
[1]陳博明. MPEG-4視頻編解碼的數據布局優化與多任務調度策略[D].武漢:華中科技大學,2007.
[2]肖圣. 視頻壓縮編碼預處理技術的研究[D].上海:上海交通大學,2006.
[3]左明文,李鵬,張麗娟,等. 監控系統中視頻服務器的設計與實現[R].昆明: 第十五屆全國煤礦自動化學術年會和中國煤炭學會煤礦自動化專業委員會學術會議,2005.
[4]周超.Linux操作系統在ARM硬件平臺上的移植[D].成都:電子科技大學 ,2012
[5]郝俊, 孟傳良. 基于V4L2的ARM11 USB視頻采集終端的設計與實現[J].貴州大學學報(自然科學版),2011,28(04):74-18.
[6]張凱, 李臨生. 基于嵌入式ARM的視頻監控系統的實現[J].電子科技,2013,26(05):34-36
[7]付榮, 嚴建寬. 智能家居遠程視頻監控系統的設計與實現[J].計算機技術與展,2012,22(03):137-140.
[8]程少煉. 基于H.264的嵌入式視頻監控系統的研究與實現[D].武漢:武漢科技學,2011.
[9]陳少祥,李臨生. 嵌入式Linux視頻采集系統設計與研究[J].電子世界, 2013(01):14-15.
[10] Ce Zhu, Bing Xiong. Transform-exempted calculation of sum of absolute hadamard transformed differences[J]. IEEE Journals & Magazines ,2009 : 1183 - 1188.
[11] Lina Xun. Yonghua Fang. Anomaly detection based on high-order statistics in hyperspectral imagery[J].IEEE Conference Publications ,2006 : 10416 - 10419.
[12] 丁楊. H.264視頻編碼技術研究及DSP實現[D].成都:電子科技大學,2008.
[責任編校: 張巖芳]
Design of Embedded Video Surveillance System Based on S3C6410 and H.264
ZHANG Hongtao, HU Shunxing, ZHAN Yunfeng, GONG Li, LI Qifeng, ZHANG Zhu, YAN Bei
(SchoolofElectrical&ElectronicEngin.,HubeiUniv.ofTech.,Wuhan430068,China)
Abstract:In view of the large video space and the high cost of the traditional video monitoring, the system attempts to encode the data with H.264 and improve the efficiency of encoder to store video in AVI video format via an external USB camera capture video data with the S3c6410 processor. After describing the slow encoding and time consuming of x264 in the process of capturing V4L2 video, this paper proposes an improved-rate distortion optimization strategy. The test results prove that the video capture system is fast, accurate and stable with small storage space, and it achieves the expected requirements.
Keywords:S3c6410;video capture system;H.264;V4L2;RDO
[收稿日期]2015-04-20
[基金項目]武漢市十城千輛新動力汽車計劃項目(2013011801010600); 大學生創業實踐項目(201410500040)
[作者簡介]張洪濤(1963-), 男, 內蒙古包頭人,工學博士,湖北工業大學教授,研究方向為納米材料及其光電性質 [通信作者] 詹云峰(1975-),男,湖北武漢人,湖北工業大學講師,研究方向為電子信息技術
[文章編號]1003-4684(2016)02-0068-05
[中圖分類號]TP316.14
[文獻標識碼]:A