楊建國 蔡立志 鄭 紅
1(華東理工大學計算機科學與工程系 上海 200237)2(上海計算機軟件技術開發(fā)中心 上海 200235)
視頻監(jiān)控技術廣泛應用于安防、人防等領域,如何更好地獲得監(jiān)控現(xiàn)場的圖像數(shù)據(jù)一直是熱點研究問題之一。傳統(tǒng)的采用電荷耦合元件CCD(Charge-coupled Device)攝像機獲取現(xiàn)場視頻信息的方案易于實現(xiàn),但存在成本較高、布線隨意、維護比較困難、設備體積大、系統(tǒng)擴展困難、智能化程度低等問題。
相比較之下,憑借內(nèi)核可裁剪、實時性強、擴展功能多、網(wǎng)絡功能強等方面的諸多優(yōu)點,ARM和嵌入式Linux系統(tǒng)實現(xiàn)圖像的采集與傳輸?shù)膽镁哂械锰飒毢竦膬?yōu)勢。與其他數(shù)據(jù)相比,一般的視頻信息具有直觀、形象、準確和信息容量大等特點。視頻的原始數(shù)據(jù)量非常大,但是如果不經(jīng)過壓縮,這樣的視頻數(shù)據(jù)很難在實際的嵌入式系統(tǒng)中應用實現(xiàn)。
嵌入式Linux系統(tǒng)的應用程序可以通過網(wǎng)絡進行更新,數(shù)據(jù)可通過串口向上位機傳輸,也可以通過以太網(wǎng)向上傳遞,用戶可通過網(wǎng)絡客戶端實現(xiàn)監(jiān)控。
本文所設計的系統(tǒng),是基于S3C2440 ARM9平臺和嵌入式Linux系統(tǒng)之上的。系統(tǒng)的主要流程如下:
(1) 在S3C2440 ARM9開發(fā)板連接USB攝像頭。
(2) 利用Linux操作系統(tǒng)下的V4L2編程接口采集視頻信息。
(3) 利用x264對原始信息進行壓縮編碼。
(4) 對壓縮后的碼流包成實時傳輸RTP數(shù)據(jù)包。
(5) 將數(shù)據(jù)包封裝,通過以太網(wǎng)實時發(fā)送到PC客戶端VLC Media Player進行播放。
系統(tǒng)視頻監(jiān)控模塊的劃分如圖1所示。

圖1 視頻監(jiān)控模塊劃分
視頻監(jiān)控系統(tǒng)分為視頻采集、視頻壓縮和視頻傳輸三部分。
系統(tǒng)視頻設備使用的是V4L2。V4L2支持兩種方式來采集圖像:內(nèi)存映射方式和直接讀取方式。系統(tǒng)通過V4L2接口,采取內(nèi)存映射方式進行視頻數(shù)據(jù)采集,流程如圖2所示。

圖2 視頻采集部分流程圖
視頻信息與其他數(shù)據(jù)相比,視頻的原始數(shù)據(jù)量非常大。按照電視標準委員會NTSC標準的幀速率30幀/s,視頻信號的傳輸率約為26.4 MB/s,遠遠高于計算機的數(shù)據(jù)傳輸速率,原始視頻信息很難直接存儲到存儲媒體上去。因此,必須進行數(shù)據(jù)壓縮。系統(tǒng)編譯安裝x264源代碼,對顏色編碼方法YUV格式進行編碼。
首先用init_encoder()進行編碼參數(shù)設置,包括設置幀率分子和幀率分母(它們的比值作為幀率),顯示的寬度和高度,采用的編碼方式等。接著對編碼器初始化,本文定義了一個結構體如下:
typedef struct{
x264_param_t *param;
x264_t *handle;
x264_picture_t *picture;
x264_nal_t *nal;
}Encoder;
其中:param記錄設置好的各項參數(shù);handle為句柄;picture說明每一幀序列中的特點;nal為編碼后封裝好的單元。
系統(tǒng)采用實時傳輸協(xié)議RTP來傳輸視頻數(shù)據(jù),在傳輸數(shù)據(jù)時將視頻數(shù)據(jù)和RTP頭信息打包成RTP包。每個封裝好的RTP包由頭部和負載兩部分組成,其中頭部的長度是12個字節(jié),負載是具體的多媒體數(shù)據(jù)。系統(tǒng)定義了RTP固定頭部的結構體如下:
typedef struct
{
u_char csrc_len:4;
u_char extension:1;
u_char padding:1;
u_char version:2;
u_char payload:7;
u_char marker:1;
u_short seq_no;
u_long timestamp;
u_long ssrc;
}RTP_FIXED_HEADER
通過定義RTP固定頭結構后,可設置負載類型、時間戳等信息。
基于ARM的監(jiān)控系統(tǒng)實現(xiàn)客戶端一般采用個人計算機,服務端采用ARM9 S3C2440處理器。在開發(fā)階段,在虛擬機所建立的集成開發(fā)環(huán)境下進行編程和交叉編譯。通過RS232串口線與ARM的SecureCRT進行通信,傳遞控制信息。
在監(jiān)控系統(tǒng)實現(xiàn)階段,首先在客戶端安裝VLC Player,建立會話描述協(xié)議文件并播放;然后,通過終端仿真程序SecureCRT運行服務端程序,讓ARM通過網(wǎng)絡接口向PC客戶端VLC Media Player傳遞視頻數(shù)據(jù)。
打開VLC Player的“工具”選項,選擇“編解碼器信息”,可以看到如下實驗結果:編碼:H264-MPEG-4 AVC;分辨率:320×240;幀率:20。再打開“統(tǒng)計”欄,顯示如圖3的實驗結果。其中:已解碼:841塊;已顯示:1 088幀;內(nèi)容位率:166 KB/s。

圖3 基于ARM的視頻監(jiān)控系統(tǒng)實驗解碼統(tǒng)計
作為比較,如果直接用攝像頭作為捕獲設備,對視頻進行本地抓取,實驗效果如圖4所示。可得到以下實驗結果:編碼:Packed YUV 4∶2∶2,YU∶Y∶V(YUY2);分辨率:320×240;幀率:20。其中:已解碼:869塊;已顯示:3 014幀;內(nèi)容位率:8 677 KB/s。

圖4 編碼器信息圖
圖5是利用VLC Media Player和攝像頭捕捉本地視頻數(shù)據(jù)的顯示截圖。在對結果進行比較時,“內(nèi)容位率”是一個關鍵參數(shù),內(nèi)容位率又稱為“碼率”,指單位時間內(nèi),單個錄像通道所產(chǎn)生的數(shù)據(jù)量。

圖5 本地視頻監(jiān)控系統(tǒng)實驗解碼統(tǒng)計
用三組數(shù)據(jù)實驗,原始視頻均采用YUY2方式、320×240像素的分辨率、20幀/s的情況下進行采集。在同一情況下,對于每一幀,x264解碼的塊數(shù)與原始視頻處理的塊數(shù)基本相同,顯示幀數(shù)與原視頻幀數(shù)內(nèi)容位率比為0.02、0.02、0.02。
從圖6中可以看到,在基于ARM的視頻監(jiān)控系統(tǒng)中,采用x264壓縮編碼后,內(nèi)容位率分別從8 677 KB/s降至166 KB/s,從13 243 KB/s降至208 KB/s,從9 782 KB/s降至187 KB/s,平均降低到2%,有效地提高了x264編碼效率。同時視頻傳輸時占據(jù)的網(wǎng)絡帶寬非常低,視頻播放流暢,基本可以滿足實際應用中的實時監(jiān)控的要求。

圖6 原視頻和x264壓縮后內(nèi)容位率對比
在同一情況下,在基于ARM的視頻監(jiān)控系統(tǒng)中,x264壓縮視頻幀數(shù)與原視頻的幀數(shù)對比依次為0.36、0.33、0.35。如圖7所示,由于采用有損編碼,基于ARM的視頻監(jiān)控的視頻清晰度有所下降。

圖7 原視頻和x264壓縮視頻數(shù)對比
本文討論基于ARM的嵌入式視頻監(jiān)控系統(tǒng)的設計,給出了視頻系統(tǒng)中的視頻圖像采集方案和視頻壓縮方案。在視頻系統(tǒng)中,用戶可以在客戶端播放實時視頻信息,以達到實時監(jiān)控的目的。實驗表明,該系統(tǒng)采用x264壓縮編碼后,有效降低了內(nèi)容位率。系統(tǒng)開發(fā)成本低、體積小、功耗低、使用方便,可用于安防領域,如社會安全監(jiān)控;醫(yī)療領域,如特護病房視頻監(jiān)控;校園安全領域,如安全監(jiān)控等,具有較好的市場前景。