摘 要: 采用DM365達芬奇視頻處理芯片開發了嵌入式網絡視頻監控系統,選擇H.264視頻數據編碼算法以提高數據編碼效率。該系統軟件包括視頻監控服務器模塊和客戶監控端模塊。運行于DM365平臺上的視頻監控服務器將采集的視頻數據經過H.264編碼器壓縮后存儲在硬盤上,并以RTP/RTCP協議傳輸給客戶監控端;運行于PC機上的客戶監控端程序可以實現攝像頭的遠程控制與實時監控現場。
關鍵詞: DM365; 視頻監控系統; H.264; 流媒體
中圖分類號:TP393.07 文獻標志碼:A 文章編號:1006-8228(2013)10-35-03
0 引言
隨著電子、計算機、通信和自動化技術的發展,嵌入式視頻監控系統已成為現代安防系統發展趨勢,并且已經引起了人們的重視。嵌入式視頻監控系統主要由嵌入式處理器、嵌入式操作系統及相關軟硬件等組成。TI公司的達芬奇技術是一種專門針對數字視頻應用、基于信號處理的解決方案,能為視頻設備制造商提供集成處理器、軟件、工具和支持,以簡化設計進程,加速產品創新[1]。本系統采用TM320DM365(簡稱DM365)視頻處理芯片開發嵌入式網絡視頻監控系統,它具有功耗低、性能高、開發周期短、可擴展等優點。
1 網絡視頻監視系統結構
DM365處理器集成了一個ARM926EJ-S內核,一個H.264高清編解碼協處理器HDVICP和一個MPEG-4/JPEG高清編解碼協處理器MJCP,可以支持H.264/MPEG-4高清視頻編解碼。本系統利用DM365的強大運算能力,在ARM926EJ-S內核上運行基于Linux操作系統的應用程序實現視頻采集、視頻顯示、網絡通信、流媒體傳輸、外圍器件控制等;在HDVICP協處理器上運行H.264算法來實現視頻編碼。
本系統所設計的網絡視頻監控系統總體結構如圖1所示,它由攝像頭、視頻服務器、網絡和客戶監控端等模塊組成。攝像頭實現對現場實時視頻的采集,由視頻服務器讀取采集到的視頻信號經H.264編碼器編碼后進行存儲和網絡實時傳輸;客戶監控端主要完成視頻信號的接收、存儲、播放和下載等功能。另外,客戶監控端可以把用戶的操作轉換成相應的控制信號發送到視頻服務器,由視頻服務器對外圍器件進行控制。
2 視頻監控服務器模塊的設計
視頻監控服務器的主要任務是監聽網絡連接,采集視頻數據,視頻數據壓縮編碼,存儲視頻數據并分發給客戶監視端[2]。在視頻數據采集方面,使用V4L2常用模型;在編碼方面,結合DM365芯片的特點采用H.264壓縮編碼標準;另外,使用RTP/RTCP協議在視頻監控服務器與客戶監控端之間進行視頻數據傳輸[3]。
2.1 視頻監視服務器模塊工作流程
視頻監控服務器包括三個子模塊,一是視頻數據處理子模塊,負責視頻數據采集與編碼;二是視頻監控控制子模塊,負責開啟、關閉視頻監控等控制操作;三是數據傳輸子模塊,負責視頻數據的實時傳輸以及備份視頻數據等工作。視頻監控服務器模塊的工作流程如下。
① 主控程序對系統初始化,主要包括ARM處理器與HDVICP協處理器的共享內存的配置,視頻采集設備的初始化等。
② 主控程序建立視頻采集線程Capture、視頻壓縮線程Video、視頻數據存儲與實時傳輸線程Trans、視頻文件備份線程BackData和監聽線程Listen。當主控程序完成初始化工作和線程創建工作后轉化為系統控制線程Ctrl。
③ Capture線程負責采集視頻信號;Video線程負責將視頻采集線程采集到的視頻信號用H.264編碼器壓縮編碼;Trans線程負責將壓縮后的視頻數據存儲在視頻服務器端的硬盤上,并實時地將視頻流傳輸給視頻監控端;Listen線程主要負責監聽客戶監控端的控制命令,并對命令進行詞法解析,執行相應的命令;BackData線程負責視頻文件的傳輸,以備客戶端備份視頻文件。
④ 如果退出系統,則所有線程結束;否則循環執行③。
2.2 視頻數據處理子模塊流程
在視頻監控服務器中涉及到的數據分為兩類:一類是攝像頭采集到的原始視頻數據,一類是壓縮后的視頻數據。這兩類數據均存放在緩沖區中,這些緩沖區被多個線程共享。共享的方法是采用管道通信,一方將緩沖區的地址送入管道,另一方從管道讀取緩沖區地址對該緩沖區共享。
2.2.1 緩沖區共享
由于運行在Linux上的應用程序調用malloc獲得的緩沖區所用地址均為虛擬地址,因此,緩沖區的物理空間不一定連續,當把緩沖區的地址傳遞給協處理器進行編碼的時候,數據完整性問題就出現了,因為編碼算法是運行在HDVICP協處理器上的,這是一個只有實地址的世界。所以,TI公司開發的編碼引擎(Codec Engine,簡稱CE)的軟件架構時提供了CMEM模塊,該模塊為ARM926EJ-S內核和協處理器之間通信提供了連續的內存。程序員可調用CMEM API申請物理上連續的共享緩沖區。
本系統設置了四個管道,其中CVInFifo和CVOutFifo這兩個管道由Capture線程和Video線程共享;VTInFifo和VTOutFifo這兩個管道由Video線程和Trans線程共享。三個線程共享四個管道的示意圖如圖2所示。在系統初始化時,Video線程和Trans線程通過調用CMEM API分別申請若干個物理地址連續的緩沖區,Video線程將其申請的緩沖區地址送入CVInFifo管道,Trans線程將其申請的緩沖區送到VTOutFifo管道。Capture、Video、Trans和Ctrl四個線程匯集在一起后,循環執行以下步驟以實現視頻數據的采集、編碼和傳輸。
[Video線程初始化時,申請若干個連續的緩沖區,并將各緩沖區地址送入管道。][⑤Video線程將廢棄的緩沖區hCapBuf送入管道,供Capture線程使用。][②Capture線程將緩沖區hCapBuf的地址送入管道。][⑥Video線程將已編碼視頻數據緩沖區hDstBuf的地址送入管道。][⑧Trans線程將廢棄的緩沖區hDstBuf送入管道供Video線程使用。][Trans線程初始化時,申請若干個連續的緩沖區,并將各緩沖區地址送入管道。][①Capture線程從管道獲取一個空緩沖區hCapBuf,并采集一幀原始視頻保存在該緩沖區中。][③Video線程獲得裝有原始視頻幀的緩沖區hCapBuf。][⑦Trans線程從管道獲取一個已編碼的緩沖區hDstBuf,將其內容寫入文件,并按RTP/RTCP協議傳輸給客戶端。][④Video線程從管道獲取一個空緩沖區hDstBuf,并對hCapBuf緩沖區中的視頻數據進行編碼,其結果存放在緩沖區hDstBuf中。] [CVInfifo] [CVOufifo] [VTInFifo] [VTOutfifo]
① Capture線程從CVInFifo管道獲取一個空緩沖區hCapBuf,采集一幀視頻并保存在該緩沖區中;
② Capture線程將緩沖區hCapBuf地址送入CVOutFifo管道;
③ Video線程從CVOutFifo管道中獲得裝有原始視頻幀的緩沖區hCapBuf;
④ Video線程從VTOutFifo管道中獲取一個空緩沖區hDstBuf,并對hCapBuf緩沖區中的視頻數據用H.264編碼器進行編碼,其結果存放在緩沖區hDstBuf中;
⑤ Video線程將廢棄的緩沖區hCapBuf送CVInFifo管道,供Capture線程循環利用;
⑥ Video線程將已編碼的視頻數據緩沖區hDstBuf的地址送入VTInFifo管道;
⑦ Trans線程從管道獲取一個已編碼的緩沖區hDstBuf,將其內容寫入文件,并按RTP/RTCP協議傳輸給客戶端;
⑧ Trans線程將廢棄的緩沖區hDstBuf送入管道供Video線程使用。
2.2.2 H.264編碼器
系統選擇先進的H.264編碼方案。H.264編碼器繼承了H.263和MPEGl/2/4視頻編碼器的優點,在吸收變換編碼和運動補償的基礎上,采用全新的幀內預測、多幀參考預測、高精度運動估計、類DCT整數變換、基于上下文的自適應熵編碼、去塊效應濾波等編碼技術,有效提高了數據壓縮效率[4]。H.264引入了面向包的編碼機制,有利于網絡中的分組傳輸,支持網絡中視頻的流媒體傳輸,能適應于不同網絡中的視頻傳輸,網絡親和性好。
在H.264標準中定義了兩個層次:視頻編碼層(VCL)和網絡抽象層(NAL)。VCL主要負責高效的數字視頻數據壓縮。VCL處理的是塊、宏塊和片的數據,并盡可能地設計成不依賴于任何網絡的特性。NAL處理的主要是片以上的數據,提供適當的接口對數據進行打包和傳送。在VCL和NAL之間定義了一個基于分組方式的接口。這樣,高編碼效率和網絡友好性的任務分別由VCL和NAL來完成。H.264的這種雙結構擴大了應用范圍,幾乎涵蓋了視頻監控、視頻點播、流媒體業務等大部分的視頻業務。
本系統采用TI達芬奇技術來實現H.264編碼器,此視頻壓縮算法運行在HDVICP協處理器端,ARM端通過引擎Codec Engine和服務器Code Server與HDVICP協處理器進行交互[5]。編碼后的H.264視頻序列是由一系列NAL單元構成。一個NAL單元就是一個變長的包括某一類型的語義元素的字節流。比如,NAL單元可以裝載一個圖像碼片、一個A/B/C的數據分割、一個序列或者圖像的參數設置等。
2.3 網絡傳輸模塊的設計
網絡傳輸模塊的主要功能是負責為客戶端的請求建立鏈接,并將經H.264編碼器編碼的視頻流傳輸給客戶端。這項工作由Listen和Trans兩個線程完成。
網絡服務器與客戶監控端采用UDP數據包進行通信。Listen線程循環監聽用戶請求,當有用戶請求實時監控視頻時,Listen線程將該用戶的IP地址及UDP端口號保存在與Trans線程共享的變量ClientUdp[]中,Trans線程根據變量ClientUdp[]創建UDP套接字,并按RTP/RTCP協議傳輸實時視頻編碼。當用戶關閉視頻監時,Listen同樣將用戶的關閉視頻請求傳遞給Trans,Trans將關閉相應的UDP套接字,停止視頻的實時傳輸。另外,Listen線程還具有接收來自客戶端的控制命令,比如實現視頻文件的下載,以及關閉和開啟實時視頻監控等功能。
2.3.1 NAL單元的提取與RTP數據包的傳輸
由于在達芬奇DM365開發平臺上的H.264編碼器的輸出碼流中,每個NAL單元前面有4個字節的前綴來標識NAL單元邊,即起始碼前綴(0x00000001)。因此,Trans線程可以根據起始碼從已編碼緩沖區中提取出各個NAL單元以備發送,即從Video線程和Trans線程共享的緩沖區中獲得H.264編碼的圖像幀的數據,并在每幀的數據里搜尋出每個NAL單元。在默認情況下,達芬奇DM365開發平臺采用的H.264編碼器每次提供一個完整的H.264視頻幀,除第一幀由三個NAL單元組成外,其他幀僅包含一個NAL單元。第一幀的三個NAL單元的類型分別為序列參數集(SPS)、圖像參數集(PPS)和IDR圖像片段。其他幀的NAL單元類型均為I圖像片段。
實時傳輸協議RTP負責提供實時數據(如交互式的音頻和視頻)的端到端傳輸服務,它可以建立在底層的面向連接或非面向連接的傳輸協議之上。通常情況下RTP數據包使用UDP來傳送,但它不能為按順序傳送數據包提供可靠的傳送機制,也不提供流量控制或擁塞控制,而是依靠實時傳輸控制協議RTCP提供這些服務。本系統按RTP數據包格式將每一幀視頻打包后,使用UDP套接字將該數據包發送給客戶監控端。
2.3.2 實時監控的實現
4 結束語
本系統基于DM365嵌入式平臺,設計了嵌入式網絡視頻監控系統。視頻服務器端主要實現視頻的采集、編碼與網絡傳輸,通過四個共享管道實現視頻數據流的共享,整個視頻服務器由五個線程相互配合完成。客戶監控端采用Davinci-VLC客戶端程序實現視頻的監控及視頻文件的備份。下一步的工作重點是研究基于WiFi+3G視頻監控,以及保證視頻數據在網絡上的安全傳輸。
參考文獻:
[1] TI. DaVinci? Technology Overview.http://focus.ti.com/lit/ml/sprb189b/sprb189b.pdf,2008.
[2] 韓慧英,潘婭.基于Davinci的嵌入式Web視頻監控系統[J]. 兵工自動化,2010.29(4):75-77
[3] 張多英,申晨,劉偉平,黃紅斌.嵌入式視頻監控傳輸系統的設計與實現[J].計算機工程與設計,2010.31(4):724-728
[4] 郭波,樊丁,彭凱.基于DaVinci技術的嵌入式視頻監控系統設計[J].安防科技,2010.1:22-24,6
[5] Texas Instruments. Codec Engine Application Developers Guide[EB/OL].http://processors.wiki.ti.com/index.php/Codec_Engine_Application_Developers_Guide,2010.