王慧州,彭 宏(浙江工業大學 信息工程學院 浙江省通信網技術應用研究重點實驗室,浙江 杭州 310023)
嵌入式視頻監控系統終端軟件設計與實現
王慧州,彭宏
(浙江工業大學 信息工程學院 浙江省通信網技術應用研究重點實驗室,浙江 杭州 310023)
設計并實現了基于嵌入式Linux和TSM320DM365處理器平臺的實時視頻監控系統終端。首先介紹了視頻監控系統的總體框架,從可擴展性以及實用性上設計了嵌入式終端軟件的總體框架;接著闡述了終端軟件上音視頻采集發送模塊的設計與實現方案;最后對該嵌入式終端進行測試,驗證其實際效果。
嵌入式;H.264;G711;DM365;RTP
隨著嵌入式技術、圖像處理技術、網絡通信技術的不斷發展以及人們的安防意識日益提高,通過實時視頻傳輸系統對現場監控的應用越來越廣泛。基于ARM的視頻監控系統因其體積小、功能強、功耗低、性價比高等特點,被廣泛地應用在交通道路、學校、小區、機場等場所。因此,對基于嵌入式的網絡監控系統終端的研究具有很重要的社會和實際應用價值[1]。本文根據實際需求,設計并實現了基于DM365的網絡視頻監控系統終端,它是網絡視頻監控系統中的音視頻獲取源,集成了音視頻采集編碼、語音解碼播放、實時傳輸和信令控制等功能。本文主要闡述了終端系統軟件框架的設計與主要功能模塊的實現。
整個視頻監控系統[2]由三部分組成:嵌入式終端、服務器平臺和客戶端。系統結構框架如圖1所示。

圖1 系統結構框圖
嵌入式終端負責采集音視頻數據,對音視頻數據進行壓縮編碼,并將編碼壓縮數據通過3G/WLAN網發送至流媒體服務器。服務器平臺由流媒體服務器、SIP信令服務器和FTP服務器三部分組成。流媒體服務器負責轉發音視頻流,SIP信令服務器負責終端與平臺、終端與客戶端之間的信息交互,FTP服務器負責圖像文件信息的存儲備份。客戶端主要實現實時監控和終端控制功能,通過客戶端可對終端設備進行實時的視頻碼率幀率控制。整個系統為嵌入式視頻監控提供了良好的解決方案,能夠廣泛地應用在視頻監控領域中。
嵌入式終端軟件開發基于 MontaVista Linux嵌入式操作系統,它基于Linux內核,具有高效、實時、穩定、內核可裁剪等特點[3]。同時利用 Linux系統提供的進程間通信機制可方便地實現各功能模塊之間的數據通信。嵌入式終端軟件平臺包括視頻采集編碼模塊、音頻采集編碼解碼模塊、RTP模塊、信令控制模塊以及其他的功能模塊等。終端軟件總體框架如圖2所示。

圖2 終端軟件總體框架圖
SIP信令模塊負責與服務器平臺的信令交互。信令模塊將應用管理模塊的信息進行SIP信令封裝并發送至SIP服務器;同時解析接收的SIP信令,將控制信息通過本地socket發送至應用管理模塊進行調度。
應用管理模塊負責調度各個功能模塊。管理模塊收集各個功能模塊的交互信息,將交互信息進行封裝,發送至SIP信令控制模塊,從而實現與服務器平臺的信令交互;與此同時,管理模塊還將接收到的控制信息進行解析,根據控制信息調度相應的功能模塊。在各功能模塊中,RTP模塊為主要模塊,負責音視頻數據的RTP封包、發送。
音視頻采集模塊負責實時的音視頻數據采集。該模塊采集音視頻數據,并對其進行編碼,通過 Linux共享內存機制實現與RTP模塊的數據交互。
該軟件框架中各功能模塊單獨實現,互不影響,可根據具體需求方便地添加和刪除功能模塊,同時各個模塊均由應用管理模塊進行調度統籌,便于管理。
嵌入式設備作為視頻監控系統的終端,需要完成語音與視頻的數據采集和發送,一次成功的視頻監控請求應當包含控制信息接收解析、數據流的發送和接收等。嵌入式終端音視頻功能模塊主要包括音視頻采集編碼模塊、RTP模塊,模塊間通過Linux進程間通信機制實現數據與控制信息的交互。
圖3所示為一次音視頻請求后音視頻相關模塊的處理流程。客戶端發起視頻請求后,SIP信令模塊將接收到服務器轉發的視頻請求信令,SIP信令在經過信令模塊的解析之后,其攜帶的控制消息將到達應用管理模塊;管理模塊解析音視頻請求控制消息,通知RTP模塊;RTP模塊開啟兩個線程用于處理音視頻數據,發送線程負責從共享內存讀取音視頻數據并進行RTP打包發送,接收線程接收流媒體服務器轉發的語音數據包并進行解碼播放。

圖3 音視頻監控流程
本文選用TI公司采用達芬奇技術的數字媒體處理器TMS320DM365作為主芯片。為了方便音視頻采集編碼的應用程序開發,TI針對達芬奇平臺提供了達芬奇多媒體應用程序接口 (Davinci Multimedia Application Interface,DMAI),DMAI封裝了底層的驅動,并且提供了易于程序開發的編程接口[4]。這使得應用程序不再關心底層硬件對于某個操作的具體實現,大大簡化了應用程序的開發。本文音視頻采集編碼模塊的大部分就是調用DMAI接口實現的。
3.1視頻采集編碼模塊實現
嵌入式終端接收到視頻請求信令之后,視頻采集編碼模塊進行視頻數據的采集,將采集的視頻數據進行H.264編碼,寫入共享內存,供RTP模塊讀取。視頻采集模塊采用多線程工作機制[5],主線程負責整個流程控制,視頻采集編碼的具體實現在 Capture線程、Video線程和Write線程中完成,三個線程通過管道進行線程間通信。
Capture線程負責采集原始視頻數據,關鍵代碼如下:
hCapture=Capture_create(hBufTab,&cAttrs)//創建一個視頻采集設備實例
Capture_get(hCapture,&hCapBuf)//從視頻采集設備獲取采集到的一幀原始數據
Fifo_put(envp->hOutFifo,hBuf)//將存有原始數據的//緩沖指針寫入hOutFifo管道中,供 video線程讀取
Fifo_get(envp->hInFifo,&hDstBuf)//從hInFifo管道讀取由Video線程寫回的緩存指針
Capture(hCapture,hCapBuf)//告知 hCapture,Capture
//線程已經完成一次操作,等待 hCapture句柄再次捕獲//一幀原始數據
Video線程負責對采集的原始視頻數據進行 H.264編碼,關鍵代碼如下:
hVe1=Venc1_create(hEngine,envp->videoEncoder,params,dynParams)//創建H.264視頻編碼器
Fifo_get(envp->hCaptureOutFifo,&hCapBuf)//從管道讀取存有原始數據的緩沖指針
Fifo_get(envp->hWriterOutFifo,&hDstBuf)//從管道讀取 Write線程寫入的緩沖指針
Venc1_process(hVe1,hCapture,hDstBuf)//將一幀原始視頻數據進行 H.264編碼
Fifo_put(envp->hWriterInFifo,hDstBuf)//將編碼數據緩沖指針寫入管道,供write線程讀取
Fifo_put(envp->hCaptureInFifo,hCapBuf)//將緩沖指針寫回管道,供 capture線程使用
Write線程負責將編碼的視頻數據寫入共享內存,由RTP模塊讀取打包發送。關鍵代碼如下:
shm_pn=createShm(SHM_DIR,SHARE_SIZE)//創建共享內存
Fifo_get(envp->hInFifo,&hOutBuf)//從管道讀取一幀編碼的視頻數據
wirteShm(shm_pn,Buffer_getUserPtr(hOutBuf),Buffer_get-NumBytesUsed(hOutBuf))//將編碼數據寫入共享內存
Fifo_put(envp->hOutBuf,hOutBuf)//將緩沖指針寫回管道
3.2音頻采集解碼編碼模塊實現
音頻處理模塊由采集編碼和解碼播放兩部分組成,通過與上層RTP模塊的交互實現雙向語音功能。在接收到視頻請求信令之后,音頻處理模塊創建兩個線程用于處理語音數據,Speech線程負責語音數據的采集、G711編碼,SpeechDec線程負責對 G711數據進行解碼、播放。兩功能模塊獨立工作,互不影響。
Speech線程主要代碼如下:
Shm_audio=createShm(AUDIO_SHM_DIR,AUDIO_SHARE _SIZE)//創建共享內存
hSe1=Senc1_create(hEngine,envp->speechEncoder,params,dynParams)//創建g711編碼器
hSound=Sound_create(&sAttrs)//創建一個音頻捕捉設備實例
Sound_read(hSound,hInbuf)//讀取音頻數據到緩沖區
Senc1_process(hInbuf,hOutBuf)//將PCM音頻數據進行G711編碼
writeShm(shm_audio,Buffer_getUserPtr(hOutBuf),Buffer_ getNumBytesUsed(hOutBuf)//將音頻數據寫入共享內存
SpeechDec線程實現過程與Speech線程類似,這里不再贅述。
3.3RTP模塊設計與實現
RTP模塊實現RTP數據包的發送和接收功能,通過與信令控制模塊的信息交互來完成發送、接收線程的創建與結束。發送線程從共享內存讀取H.264數據和G711數據,并將編碼音視頻數據進行RTP打包發送。
音頻接收線程在接收到RTP數據后,由于網絡傳輸導致數據包到達的順序具有不確定性,因此需要對語音數據進行緩存排序。首先將G711語音數據包放入緩沖隊列中,通過RTP包的序號進行優先級排序。然后取緩沖隊列音頻數據,寫入共享內存,供音頻解碼播放模塊讀取播放。合適的緩沖區大小設置尤為重要,緩沖隊列設置過小會導致語音包亂序,語音質量較差;緩沖隊列設置過大,語音延時較大,用戶體驗差。需要根據實際網絡狀況和用戶需求設置緩沖隊列大小。
嵌入式設備、PC客戶端通過3G/WLAN網向服務器平臺注冊登錄,進行視頻監控功能測試。客戶端發起視頻請求并成功之后,可以觀看終端設備采集的視頻,并在開啟音頻請求之后實現與采集設備終端的雙向語音通信。測試結果表明,視頻畫面清晰流暢,可進行雙向語音通信,語音質量較好。視頻監控效果如圖4所示。
Design and im plementation of a video monintoring term inal softw are based on embedded system
Wang Huizhou,Peng Hong
(Zhejiang Provincial Key Laboratory of Communication Networks and Application,College of Information Engineering,Zhejiang Univerisity of Technology,Hangzhou 310023,China)
Thispaper designsandimplementsareal-timevideomonintoringsystemterminal basedonLinuxand TSM320DM365.Firstly,it introduces the system framework.According to the scalability and usability,it designs a general framework for embedded terminal software.Then it describes the design and implementation of programs on the terminal software to send audio and video.Finally,the embedded terminal is test to verify its practical effect.
embedded;H.264;G711;DM365;RTP
TP37
A
1674-7720(2015)06-0072-03