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

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

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

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

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

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

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

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