楊 澤,裴海龍
(華南理工大學 自主系統(tǒng)與網(wǎng)絡控制教育部重點實驗室,廣東 廣州510640)
實時視頻傳輸技術在人們生活和工作中的應用越來越多,如遠程監(jiān)控、遠程教學、電視電話會議等。在對成本、空間、功耗和體積要求較為嚴格的工程應用中,嵌入式平臺因小巧、軟硬件可裁剪具有不可替代的優(yōu)點,這使得以嵌入式為平臺的多媒體系統(tǒng)成為當今工程實現(xiàn)及學術研究的熱點之一。但視頻信息具有信息量大、對計算資源需求高的特點[1,2],導致嵌入式實時視頻往往圖像分辨率低,幀率小,應用效果較差。因此必須對采集到的原始視頻信息進行壓縮,同時又要考慮嵌入式設備計算資源的約束。本文為解決上述問題,采用了ARM和DSP雙內核完成視頻采集和基于H.264的視頻壓縮,大大加快了圖像壓縮速度,同時減輕了ARM的計算負擔。系統(tǒng)基于實時流傳輸協(xié)議 (real time streaming protocol,RTSP)搭建流媒體服務器,將壓縮后的視頻有效傳輸至遠程計算機上解碼顯示。本系統(tǒng)目前已經(jīng)用于實驗室無人機監(jiān)控平臺,取得了很好的實驗效果。
硬件組成
本系統(tǒng)的硬件平臺主要由嵌入式核心板、底板、USB彩色攝像頭和遠程計算機組成。嵌入式核心板選用以色列Compulab公司生產(chǎn)的CM-T3530(如圖1(a)所示)。該核心板體積小,僅66mm*44m*5mm,功耗低 (0.2-2w),搭載的OMAP3530處理器集成了720MHZ的Cortex-A8 ARM內核和520MHZC64x+DSP內核,同時核心板還有NAND FLASH、WIFI模塊等,圖形計算能力強,支持運行Linux、WinCE操作系統(tǒng),并且具有硬件可擴展結構。底板 (如圖1(b)所示)為自行開發(fā),該底板提供有核心板插槽、普通USB接口、高速USB接口、調試口、串口、網(wǎng)口、核心板供電及外設供電接口等。經(jīng)測試核心板在上述底板上運行穩(wěn)定可靠,很好的滿足了系統(tǒng)開發(fā)和運行的需求,。由于Linux內核中包含UVC(USB video class)模塊及USB設備驅動,可使用V4L2(video for linux version 2)對攝像頭進行操作,因此本系統(tǒng)攝像頭設備選用支持UVC的即插即用USB攝像頭即可。這里我們選用羅技高清攝像頭C270,其最高支持分辨率為720P視頻采集,且支持自動對焦,具有較好的成像效果。系統(tǒng)的遠程計算機裝有Ubuntu操作系統(tǒng),用于調試開發(fā)工作及實時視頻的解碼顯示。整個系統(tǒng)硬件平臺如圖2所示。

圖1 核心板與底板

圖2 系統(tǒng)硬件平臺
在視頻實時傳輸過程中,嵌入式系統(tǒng)首先打開攝像頭設備并配置攝像頭參數(shù),然后創(chuàng)建采集壓縮函數(shù)供RTSP流媒體服務器循環(huán)調用。在采集壓縮函數(shù)中,采集得到的原始視頻幀放到采集傳輸進程和調用DSP壓縮的進程共享的內存空間中,經(jīng)DSP壓縮后再次放回共享內存區(qū),然后被RTSP流媒體服務器放入發(fā)送緩沖區(qū)。RTSP流媒體服務器會為該視頻流創(chuàng)建網(wǎng)絡訪問地址,供遠程計算機訪問。在遠程計算機端,使用具備H.264解碼能力的播放器訪問視頻流網(wǎng)絡地址即可實時觀看遠程攝像頭采集到的信息。系統(tǒng)整體流程如圖3所示。

圖3 系統(tǒng)軟件流程
為使本系統(tǒng)外接攝像頭可方便更換以滿足不同環(huán)境的需求,同時使代碼易于移植,系統(tǒng)采用基于V4L2(video for linux version 2)的圖像采集程序。V4L2是Linux內核中專門用于視頻設備的驅動,它為程序員提供了訪問視頻設備的通用接口[3,4],包括視頻設備的打開、設備屬性的獲取與設置、圖像的獲取等。當系統(tǒng)需要更換攝像頭時,只需要編譯相應設備的驅動模塊添加到Linux內核即可而不需要修改系統(tǒng)程序,這樣大大方便了系統(tǒng)的開發(fā)與擴展。基于V4L2的圖像采集程序流程[5]如圖4所示,具體步驟如下文所述。

圖4 圖像采集流程
(1)打開設備文件。int fd=open (“/dev/video0”,O_RDWR);Linux操作系統(tǒng)中,由V4L2驅動的視頻設備節(jié)點文件通常是/dev/videoX。
(2)取得設備屬性,ioctl(fd,VIDIOC_QUERYCAP,&cap),變量cap為struct v4l2_capability類型;設置視頻格式,ioctl(fd,VIDIOC_S_FMT,&fmt),變量fmt為struct v4l2_format類型。
(3) 向 驅 動 申 請 幀 緩 沖,ioctl(fd,VIDIOC _REQBUFS,&reqbuf),變量reqbuf為 struct v4l2_requestbuffers類型;申請物理內存 (內存映射),調用calloc函數(shù)向用戶空間申請相同數(shù)目的幀緩沖,并使用mmap內存映射方式將幀緩沖映射到用戶空間。
(4)將申請的幀緩沖放入用于存放采集到視頻幀的隊列,ioctl(fd,VIDIOC_QBUF,&buf)。然后調用ioctl(fd,VIDIOC_STREAMON,&type),type是enum v4l2_buf_type枚舉類型。
(5)出隊列以取得采集到的視頻幀,ioctl(fd,VIDIOC_DQBUF,&buf)。如果需要循環(huán),則將buf重新放入隊列并反復獲取幀緩沖中的數(shù)據(jù)。
2.2.1 H.264算法分析
H.264視頻壓縮技術是現(xiàn)在世界上最新的圖像編解碼標準,它以低碼率、高清晰的特點能夠持續(xù)提供高質量的視頻[6]。在本系統(tǒng)選擇編碼器時,調用FFMPEG軟件中的MPEG4和H.264進行了壓縮率的對比。在相同的幀間和幀內預測選擇參數(shù)情況下,H.264壓縮率是普通MPEG4的4倍左右,同時視頻圖像更加穩(wěn)定。因此系統(tǒng)選用H.264作為視頻壓縮算法,H.264壓縮流程如圖5所示。

圖5 H.264編碼流程
H.264算法包含了幀內編碼和幀間編碼。為保證系統(tǒng)圖像質量并縮短壓縮時間,本文對 H.264算法中的IntraFrameInterval參數(shù),即幀內幀間模式選擇參數(shù)進行了調試,以選擇最適合性能要求的參數(shù)值。經(jīng)過試驗,最終將IntraFrameInterval參數(shù)設置為1,即僅采用幀內編碼,這樣獲得的圖像清晰度高、圖像壓縮時間短,且壓縮率仍在35倍左右。H.264主要參數(shù)如下所示:
Params->inputHeight=480;//系統(tǒng)最大支持480,實驗調試還包括120、240;
Params->inputWidth=640;//系統(tǒng)最大支持720,實驗調試還包括160、320
Params->targetFrameRate=30000;
Params->refFrameRate=Params->targetFrameRate;
Params->targetBitRate=4000000;
Params->intraFrameInterval=1;//僅選用幀內編碼
Params->generateHeader=XDM_ENCODE_AU;
Params->captureWidth=0;//以圖像寬作為間距(寬大于高時)
Params->forceFrame=IVIDEO_NA_FRAME;//-1;
Params->interFrameInterval=1;//不支持B幀
2.2.2 調用DSP實現(xiàn)壓縮
盡管與其他編碼器相比,H.264的壓縮效率非常突出,但帶來的問題是其算法復雜度也大大提高[7],對系統(tǒng)的計算資源提出了更高的要求。本文在選用DSP實現(xiàn)H.264圖像壓縮前,首先在ARM平臺運行的Linux操作系統(tǒng)上通過調用交叉編譯的FFMPEG和X264庫實現(xiàn)H.264圖像編碼。經(jīng)實驗觀察,在壓縮分辨率僅為160*120大小的視頻流時,平均每幀仍需耗時90~105ms,視頻實時性很差。而且壓縮任務占用了大量ARM運算資源影響了系統(tǒng)其它程序的運行,因此尋求實現(xiàn)快速的H.264壓縮方法是實時視頻處理的關鍵因素之一。DSP具有強大的數(shù)字信號處理能力,在一個DSP上可以同時進行多路音視頻信號的壓縮處理。而且DSP產(chǎn)品成熟,開發(fā)周期短,可以實現(xiàn)快速技術更新和產(chǎn)品換代。所以本系統(tǒng)使用TI公司OMAP3530處理器中的DSP核實現(xiàn)視頻的H.264壓縮,這樣大大節(jié)約了視頻壓縮時間,并減輕了ARM核的運算壓力。
系統(tǒng)對DSP的調用使用TI-DVSDK (digital video software development kit)進行開發(fā)。DVSDK是TI公司推出的一款軟件,作用是建立ARM與DSP之間的聯(lián)系,它包含了引導加載 (u-boot)、編解碼器引擎多媒體堆棧、達芬奇多媒體接口 (DMAI)、多媒體編解碼器等部件,目前支持的視頻解碼格式有 H.264,MPEG-2,MPEG-4,編碼格式有H.264,MPEG-4。利用DVSDK我們能夠很快搭建出滿足系統(tǒng)要求的H.264視頻壓縮環(huán)境,本系統(tǒng)單獨編寫了基于DVSDK的程序負責完成視頻的壓縮任務,與系統(tǒng)主要進程間采用共享存儲方式進行數(shù)據(jù)共享與通信[8],兩個進程的流程圖如圖6所示。經(jīng)實驗證明,系統(tǒng)對分辨率160*120的視頻幀平均壓縮時間僅為每幀5~7ms,很好的滿足了實時性要求。

圖6 視頻壓縮流程
為完成兩個進程的通信,進程需要先調用shmget(key_t key,size_t size,int flag)來創(chuàng)建新的共享存儲段或引用一個現(xiàn)存的共享存儲段,同時獲得共享存儲ID,再調用shmat(int shmid,const void*addr,int flag)來將共享存儲段連接到自身的地址空間中。在獲取共享存儲后,調用DSP的進程就可以直接從共享存儲中讀取圖像和寫入壓縮后的圖像。
從共享存儲讀取圖像到待壓縮緩沖區(qū):

將輸入緩沖區(qū)圖像壓縮,并輸出至輸出緩沖區(qū):
retVal=VIDENC1_process(enc,&inputBufDesc,&outputBufDesc,&inArgs,&outArgs);
將壓縮后的圖像放入共享存儲:

壓縮結束后,視頻采集與傳輸?shù)倪M程會獲取壓縮后的圖像,使其經(jīng)流媒體服務器傳輸至遠端。
本系統(tǒng)最初采用基于TCP的Socket編程實現(xiàn)視頻的傳輸功能,由于TCP的可靠連接特性,視頻卡頓現(xiàn)象嚴重,無法滿足實時性要求。而簡單的UDP套接字又無法保證有效傳輸,因此系統(tǒng)選用控制聲音或視頻傳輸?shù)亩嗝襟w流協(xié)議作為服務器協(xié)議。RTSP(real time streaming protocol),實時流傳輸協(xié)議,在TCP/IP體系結構中位于RTP (realtime transport protocol)和 RTCP (RTP control protocol)之上,是一個應用層協(xié)議 (如圖7所示),其數(shù)據(jù)傳輸部分使用RTP或RTCP來完成[9]。該協(xié)議可以控制多個數(shù)據(jù)發(fā)送連接,并為連接選擇發(fā)送通道,從而保證流媒體傳輸?shù)母咝浴?/p>

圖7 RTSP體系的各層
系統(tǒng)使用開源的LIVE555項目實現(xiàn)RTSP流媒體服務器的搭建。LIVE555是一個專門為流媒體提供解決方案的跨平臺開源項目,其支持的流媒體傳輸協(xié)議有RTP/RTCP、RTSP、SIP等。該項目的源代碼包括4個基本的庫和各種測試代碼,4個基本的庫分別是:UsageEnvironment,GroupSock, LiveMedia 和 BasicUsageEnvironment[10]。UsageEnvironment模塊是對系統(tǒng)環(huán)境的抽象,包括抽象類UsageEnvironment、TaskScheduler和HashTable,前兩個類用于調度已推遲事件,配置異步讀取事件的句柄以及輸出錯誤和警告信息,HashTable類定義了一個通用的哈希表的接口供其它代碼調用。GroupSock類實現(xiàn)了對網(wǎng)絡接口和套接字的封裝,并且專門封裝了一個套接字用于發(fā)送接收廣播。LiveMedia庫定義了一系列從Medium類衍生的類,以支持多種流媒體和編碼器類型。BasicUsage-Environment是UsageEnvironment類的一個子類,用于簡單的控制臺應用程序。測試代碼的文件夾包含了利用上述基本庫編寫的多種流媒體協(xié)議客戶端與服務器實現(xiàn)程序和多個支持不同視頻格式的例子。
利用LIVE555搭建RTSP流媒體服務器主要過程是:
(1)初始化本地環(huán)境,建立RTP和RTCP套接字,將RTP套接字與本機綁定,建立sink接收器并與該RTP套接字關聯(lián)。
(2)建立于該RTP套接字、本機環(huán)境、sink接收器配套的流控RTCP實例。
(3)建立RTSP服務器 (包含與RTP/RTCP關聯(lián)的會話)。輸出該RTSP服務器的網(wǎng)絡地址 (本機地址加流名稱)。至此,向外發(fā)數(shù)據(jù) (RTP/RTCP遠程通信)所需的準備已經(jīng)完成。
(4)建立圖像數(shù)據(jù)傳遞:根據(jù) WebCamDeviceSource建立VideoSource。WebCamDeviceSource初始化時,就使Webcam負責攝像頭圖像采集、與DSP壓縮程序通信并將壓縮圖像存入fTO指向的緩沖區(qū)。VideoSource初始化時就與WebCam關聯(lián)了,因此也關聯(lián)了fTO指向的緩沖區(qū),這樣圖像經(jīng)采集壓縮后傳入VideoSource。
(5)sink調用startPlaying(),開始播放流,sink就循環(huán)的接受經(jīng)采集壓縮后的數(shù)據(jù)。
(6)事件循環(huán),當RTSP客戶端輸入訪問地址rtsp://192.168.0.xx:xxx/testStream連接服務器時,服務器就開始對客戶端對話進行處理。
系統(tǒng)使用開源的VLC播放器訪問嵌入式流媒體服務器地址,該播放器支持大量的文件格式和流媒體播放格式,可安裝在 Windows、Linux、Android平臺。本系統(tǒng)播放終端界面如圖7所示,遠程攝像頭的視頻信息成功的得到了解碼與播放。在局域網(wǎng)環(huán)境下,本文對系統(tǒng)的性能做了進一步測試。通過對不同圖像分辨率的視頻傳輸情況進行試驗,觀察系統(tǒng)的穩(wěn)定性和傳輸幀率,得到表1所示結果。結果表明,本系統(tǒng)在表中各圖像分辨率下都有較好的幀率表現(xiàn),系統(tǒng)的實時性較強,而且系統(tǒng)在低分辨率情況下能夠保證視頻的清晰流暢,滿足了大多數(shù)實時視頻應用的需求。不過隨著分辨率的提高,壓縮運算的時間消耗大大增加,網(wǎng)絡帶寬需求提高,使得系統(tǒng)延遲增大、穩(wěn)定性下降。針對這一情況,系統(tǒng)應進一步優(yōu)化壓縮算法和流媒體傳輸控制,以提高系統(tǒng)性能。

圖8 實時視頻播放界面

表1 系統(tǒng)性能分析
本系統(tǒng)利用具有ARM、DSP雙內核的處理器搭建了圖像處理能力極強的硬件平臺,并且采用H.264作為視頻壓縮算法,使得實時視頻傳輸應用中視頻壓縮時間大大縮短。系統(tǒng)基于RTSP流媒體協(xié)議搭建了流媒體服務器,使得視頻傳輸穩(wěn)定性有很大提高。該系統(tǒng)的性能滿足了監(jiān)控、視頻會議等應用的要求,同時可以靈活的加入程序進行應用的擴展,如加入圖像識別及目標跟蹤等。目前,我們已經(jīng)基于本系統(tǒng)實現(xiàn)了火點的識別及跟蹤并搭載到實驗室小型無人機上。但系統(tǒng)在視頻高分辨率情況下的傳輸穩(wěn)定性仍存在不足,需要進一步優(yōu)化以滿足高分辨率要求下的應用場合。
[1]REN Zhikao,LIU Minghua,YE Chen,et al.The real time video transmission system based on H.264[C]//International Conference on Web Information Systems and Mining.Shanghai:IEEE Press,2009:270-274.
[2]REN Zhikao,WEI Zhiqiang.Design and realization of video real time video transmission system[J].Computer Engineering and Application,2007,28 (11):2607-2610 (in Chinese).[任志考,魏志強.實時視頻傳輸系統(tǒng)的設計與實現(xiàn)[J].計算機工程與設計,2007,28 (11):2607-2610.]
[3]GUO Jian,ZHAO Jian.Image capture and display of embedded Linux[J].Modern Electronics Technique,2006 (7):129-131(in Chinese).[郭劍,趙建.嵌入式Linux的圖像采集與顯示[J].現(xiàn)代電子技術,2006 (7):129-131.]
[4]Jonathan Corbet,Alessandro Robini.Linux device drivers[M].Beijing:China Electric Power Press,2006(in Chinese).[科波特,魯賓尼.Linux設備驅動程序[M].北京:中國電力出版社,2006.]
[5]YAN Xinzhong,CHEN Yu.Design of image acquisition and transmission based on embedded ARM[J].Foreign Electronic Measurement Technology,2009 (11):57-59 (in Chinese).[嚴新忠,陳雨.基于嵌入式ARM的圖像采集與傳輸設計[J].國外電子測量技術,2009 (11):57-59.]
[6]LI Hongjing.H.264video compression based on network video monitoring system technical design[J].Hebei Journal of Industrial and Technology,2011,28 (4):236-239(in Chinese).[李紅京.基于H.264視頻壓縮技術的網(wǎng)絡視頻傳輸系統(tǒng)設計[J].河北工業(yè)科技,2011,28 (4):236-239.]
[7]WU Qiong.Video encoding and decoding based on H.264and its realization and optimization on DSP[J].Modern Electronics Technique,2010 (4):55-57(in Chinese).[吳瓊.基于H.264視頻編解碼DSP實現(xiàn)與優(yōu)化[J].現(xiàn)代電子技術,2010(4):55-57.]
[8]Richard Stevens W,Stephen A Rago.Advanced programing in the UNIX environment[M].2nd ed.YOU Jinyuan,ZHANG Yaying,transl.Beijing:Post and Telecom Press,2006(in Chinese).[Richard Stevens W,Stephen A Rago.UNIX環(huán)境高級編程[M].2版.尤晉元,張亞英,譯.北京:人民郵電出版社,2006.]
[9]GAO Jianshui,CHEN Yaowu,LI LanLan.Video order program system design baed on RTSP[J].Chinese Journal of Electron Devices,2006,29 (4):1143-1146(in Chinese).[高建水,陳耀武,李嵐嵐.基于RTSP協(xié)議的視頻點播系統(tǒng)設計[J].電子器件,2006,29 (4):1143-1146.]
[10]CHEN Liang,PEI Hailong.Programming for the server of real time based on RTSP[J].Microcomputer Information,2009,28 (5-3):65-67(in Chinese).[陳亮,裴海龍.基于RTSP協(xié)議的實時視頻服務器實現(xiàn)[J].微計算機信息,2009,28 (5-3):65-67.]