《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 嵌入式視頻監(jiān)控系統(tǒng)終端軟件設(shè)計與實現(xiàn)
嵌入式視頻監(jiān)控系統(tǒng)終端軟件設(shè)計與實現(xiàn)
2015年微型機與應(yīng)用第6期
王慧州,彭 宏
(浙江工業(yè)大學(xué) 信息工程學(xué)院 浙江省通信網(wǎng)技術(shù)應(yīng)用研究重點實驗室,浙江 杭州 310023)
摘要: 設(shè)計并實現(xiàn)了基于嵌入式Linux和TSM320DM365處理器平臺的實時視頻監(jiān)控系統(tǒng)終端。首先介紹了視頻監(jiān)控系統(tǒng)的總體框架,從可擴展性以及實用性上設(shè)計了嵌入式終端軟件的總體框架;接著闡述了終端軟件上音視頻采集發(fā)送模塊的設(shè)計與實現(xiàn)方案;最后對該嵌入式終端進行測試,驗證其實際效果。
關(guān)鍵詞: 嵌入式 H.264 G711 DM365
Abstract:
Key words :

  摘  要: 設(shè)計并實現(xiàn)了基于嵌入式Linux和TSM320DM365處理器平臺的實時視頻監(jiān)控系統(tǒng)終端。首先介紹了視頻監(jiān)控系統(tǒng)的總體框架,從可擴展性以及實用性上設(shè)計了嵌入式終端軟件的總體框架;接著闡述了終端軟件上音視頻采集發(fā)送模塊的設(shè)計與實現(xiàn)方案;最后對該嵌入式終端進行測試,驗證其實際效果。

   關(guān)鍵詞: 嵌入式;H.264;G711;DM365;RTP

0 引言

  隨著嵌入式技術(shù)、圖像處理技術(shù)、網(wǎng)絡(luò)通信技術(shù)的不斷發(fā)展以及人們的安防意識日益提高,通過實時視頻傳輸系統(tǒng)對現(xiàn)場監(jiān)控的應(yīng)用越來越廣泛?;贏RM的視頻監(jiān)控系統(tǒng)因其體積小、功能強、功耗低、性價比高等特點,被廣泛地應(yīng)用在交通道路、學(xué)校、小區(qū)、機場等場所。因此,對基于嵌入式的網(wǎng)絡(luò)監(jiān)控系統(tǒng)終端的研究具有很重要的社會和實際應(yīng)用價值[1]。本文根據(jù)實際需求,設(shè)計并實現(xiàn)了基于DM365的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)終端,它是網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)中的音視頻獲取源,集成了音視頻采集編碼、語音解碼播放、實時傳輸和信令控制等功能。本文主要闡述了終端系統(tǒng)軟件框架的設(shè)計與主要功能模塊的實現(xiàn)。

1 系統(tǒng)結(jié)構(gòu)介紹

  整個視頻監(jiān)控系統(tǒng)[2]由三部分組成:嵌入式終端、服務(wù)器平臺和客戶端。系統(tǒng)結(jié)構(gòu)框架如圖1所示。

001.jpg

  嵌入式終端負責(zé)采集音視頻數(shù)據(jù),對音視頻數(shù)據(jù)進行壓縮編碼,并將編碼壓縮數(shù)據(jù)通過3G/WLAN網(wǎng)發(fā)送至流媒體服務(wù)器。服務(wù)器平臺由流媒體服務(wù)器、SIP信令服務(wù)器和FTP服務(wù)器三部分組成。流媒體服務(wù)器負責(zé)轉(zhuǎn)發(fā)音視頻流,SIP信令服務(wù)器負責(zé)終端與平臺、終端與客戶端之間的信息交互,F(xiàn)TP服務(wù)器負責(zé)圖像文件信息的存儲備份。客戶端主要實現(xiàn)實時監(jiān)控和終端控制功能,通過客戶端可對終端設(shè)備進行實時的視頻碼率幀率控制。整個系統(tǒng)為嵌入式視頻監(jiān)控提供了良好的解決方案,能夠廣泛地應(yīng)用在視頻監(jiān)控領(lǐng)域中。

2 嵌入式終端軟件框架設(shè)計

  嵌入式終端軟件開發(fā)基于MontaVista Linux嵌入式操作系統(tǒng),它基于Linux內(nèi)核,具有高效、實時、穩(wěn)定、內(nèi)核可裁剪等特點[3]。同時利用Linux系統(tǒng)提供的進程間通信機制可方便地實現(xiàn)各功能模塊之間的數(shù)據(jù)通信。嵌入式終端軟件平臺包括視頻采集編碼模塊、音頻采集編碼解碼模塊、RTP模塊、信令控制模塊以及其他的功能模塊等。終端軟件總體框架如圖2所示。

002.jpg

  SIP信令模塊負責(zé)與服務(wù)器平臺的信令交互。信令模塊將應(yīng)用管理模塊的信息進行SIP信令封裝并發(fā)送至SIP服務(wù)器;同時解析接收的SIP信令,將控制信息通過本地socket發(fā)送至應(yīng)用管理模塊進行調(diào)度。

  應(yīng)用管理模塊負責(zé)調(diào)度各個功能模塊。管理模塊收集各個功能模塊的交互信息,將交互信息進行封裝,發(fā)送至SIP信令控制模塊,從而實現(xiàn)與服務(wù)器平臺的信令交互;與此同時,管理模塊還將接收到的控制信息進行解析,根據(jù)控制信息調(diào)度相應(yīng)的功能模塊。在各功能模塊中,RTP模塊為主要模塊,負責(zé)音視頻數(shù)據(jù)的RTP封包、發(fā)送。

  音視頻采集模塊負責(zé)實時的音視頻數(shù)據(jù)采集。該模塊采集音視頻數(shù)據(jù),并對其進行編碼,通過Linux共享內(nèi)存機制實現(xiàn)與RTP模塊的數(shù)據(jù)交互。

  該軟件框架中各功能模塊單獨實現(xiàn),互不影響,可根據(jù)具體需求方便地添加和刪除功能模塊,同時各個模塊均由應(yīng)用管理模塊進行調(diào)度統(tǒng)籌,便于管理。

3 音視頻功能模塊的設(shè)計與實現(xiàn)

  嵌入式設(shè)備作為視頻監(jiān)控系統(tǒng)的終端,需要完成語音與視頻的數(shù)據(jù)采集和發(fā)送,一次成功的視頻監(jiān)控請求應(yīng)當(dāng)包含控制信息接收解析、數(shù)據(jù)流的發(fā)送和接收等。嵌入式終端音視頻功能模塊主要包括音視頻采集編碼模塊、RTP模塊,模塊間通過Linux進程間通信機制實現(xiàn)數(shù)據(jù)與控制信息的交互。

003.jpg

  圖3所示為一次音視頻請求后音視頻相關(guān)模塊的處理流程。客戶端發(fā)起視頻請求后,SIP信令模塊將接收到服務(wù)器轉(zhuǎn)發(fā)的視頻請求信令,SIP信令在經(jīng)過信令模塊的解析之后,其攜帶的控制消息將到達應(yīng)用管理模塊;管理模塊解析音視頻請求控制消息,通知RTP模塊;RTP模塊開啟兩個線程用于處理音視頻數(shù)據(jù),發(fā)送線程負責(zé)從共享內(nèi)存讀取音視頻數(shù)據(jù)并進行RTP打包發(fā)送,接收線程接收流媒體服務(wù)器轉(zhuǎn)發(fā)的語音數(shù)據(jù)包并進行解碼播放。

  本文選用TI公司采用達芬奇技術(shù)的數(shù)字媒體處理器TMS320DM365作為主芯片。為了方便音視頻采集編碼的應(yīng)用程序開發(fā),TI針對達芬奇平臺提供了達芬奇多媒體應(yīng)用程序接口(Davinci Multimedia Application Interface,DMAI),DMAI封裝了底層的驅(qū)動,并且提供了易于程序開發(fā)的編程接口[4]。這使得應(yīng)用程序不再關(guān)心底層硬件對于某個操作的具體實現(xiàn),大大簡化了應(yīng)用程序的開發(fā)。本文音視頻采集編碼模塊的大部分就是調(diào)用DMAI接口實現(xiàn)的。

  3.1 視頻采集編碼模塊實現(xiàn)

  嵌入式終端接收到視頻請求信令之后,視頻采集編碼模塊進行視頻數(shù)據(jù)的采集,將采集的視頻數(shù)據(jù)進行H.264編碼,寫入共享內(nèi)存,供RTP模塊讀取。視頻采集模塊采用多線程工作機制[5],主線程負責(zé)整個流程控制,視頻采集編碼的具體實現(xiàn)在Capture線程、Video線程和Write線程中完成,三個線程通過管道進行線程間通信。

  Capture線程負責(zé)采集原始視頻數(shù)據(jù),關(guān)鍵代碼如下:

  hCapture=Capture_create(hBufTab,&cAttrs)

  //創(chuàng)建一個視頻采集設(shè)備實例

  Capture_get(hCapture,&hCapBuf)

  //從視頻采集設(shè)備獲取采集到的一幀原始數(shù)據(jù)

  Fifo_put(envp->hOutFifo,hBuf)//將存有原始數(shù)據(jù)的

  //緩沖指針寫入hOutFifo管道中,供video線程讀取

  Fifo_get(envp->hInFifo,&hDstBuf)

  //從hInFifo管道讀取由Video線程寫回的緩存指針

  Capture(hCapture,hCapBuf)//告知hCapture,Capture

  //線程已經(jīng)完成一次操作,等待hCapture句柄再次捕獲

  //一幀原始數(shù)據(jù)

  Video線程負責(zé)對采集的原始視頻數(shù)據(jù)進行H.264編碼,關(guān)鍵代碼如下:

  hVe1=Venc1_create(hEngine,envp->videoEncoder,params,dynParams)//創(chuàng)建H.264視頻編碼器

  Fifo_get(envp->hCaptureOutFifo,&hCapBuf)

  //從管道讀取存有原始數(shù)據(jù)的緩沖指針

  Fifo_get(envp->hWriterOutFifo,&hDstBuf)

  //從管道讀取Write線程寫入的緩沖指針

  Venc1_process(hVe1,hCapture,hDstBuf)

  //將一幀原始視頻數(shù)據(jù)進行H.264編碼

  Fifo_put(envp->hWriterInFifo,hDstBuf)

  //將編碼數(shù)據(jù)緩沖指針寫入管道,供write線程讀取

  Fifo_put(envp->hCaptureInFifo,hCapBuf)

  //將緩沖指針寫回管道,供capture線程使用

  Write線程負責(zé)將編碼的視頻數(shù)據(jù)寫入共享內(nèi)存,由RTP模塊讀取打包發(fā)送。關(guān)鍵代碼如下:

  shm_pn=createShm(SHM_DIR,SHARE_SIZE)

  //創(chuàng)建共享內(nèi)存

  Fifo_get(envp->hInFifo,&hOutBuf)

  //從管道讀取一幀編碼的視頻數(shù)據(jù)

  wirteShm(shm_pn,Buffer_getUserPtr(hOutBuf),Buffer_getNumBytesUsed(hOutBuf))//將編碼數(shù)據(jù)寫入共享內(nèi)存

  Fifo_put(envp->hOutBuf,hOutBuf)//將緩沖指針寫回管道

  3.2 音頻采集解碼編碼模塊實現(xiàn)

  音頻處理模塊由采集編碼和解碼播放兩部分組成,通過與上層RTP模塊的交互實現(xiàn)雙向語音功能。在接收到視頻請求信令之后,音頻處理模塊創(chuàng)建兩個線程用于處理語音數(shù)據(jù),Speech線程負責(zé)語音數(shù)據(jù)的采集、G711編碼,SpeechDec線程負責(zé)對G711數(shù)據(jù)進行解碼、播放。兩功能模塊獨立工作,互不影響。

  Speech線程主要代碼如下:

  Shm_audio=createShm(AUDIO_SHM_DIR,AUDIO_SHARE _SIZE)//創(chuàng)建共享內(nèi)存

  hSe1=Senc1_create(hEngine,envp->speechEncoder,params,dynParams)//創(chuàng)建g711編碼器

  hSound=Sound_create(&sAttrs)

  //創(chuàng)建一個音頻捕捉設(shè)備實例

  Sound_read(hSound,hInbuf)//讀取音頻數(shù)據(jù)到緩沖區(qū)

  Senc1_process(hInbuf,hOutBuf)

  //將PCM音頻數(shù)據(jù)進行G711編碼

  writeShm(shm_audio,Buffer_getUserPtr(hOutBuf),Buffer_

  getNumBytesUsed(hOutBuf)//將音頻數(shù)據(jù)寫入共享內(nèi)存

  SpeechDec線程實現(xiàn)過程與Speech線程類似,這里不再贅述。

  3.3 RTP模塊設(shè)計與實現(xiàn)

  RTP模塊實現(xiàn)RTP數(shù)據(jù)包的發(fā)送和接收功能,通過與信令控制模塊的信息交互來完成發(fā)送、接收線程的創(chuàng)建與結(jié)束。發(fā)送線程從共享內(nèi)存讀取H.264數(shù)據(jù)和G711數(shù)據(jù),并將編碼音視頻數(shù)據(jù)進行RTP打包發(fā)送。

  音頻接收線程在接收到RTP數(shù)據(jù)后,由于網(wǎng)絡(luò)傳輸導(dǎo)致數(shù)據(jù)包到達的順序具有不確定性,因此需要對語音數(shù)據(jù)進行緩存排序。首先將G711語音數(shù)據(jù)包放入緩沖隊列中,通過RTP包的序號進行優(yōu)先級排序。然后取緩沖隊列音頻數(shù)據(jù),寫入共享內(nèi)存,供音頻解碼播放模塊讀取播放。合適的緩沖區(qū)大小設(shè)置尤為重要,緩沖隊列設(shè)置過小會導(dǎo)致語音包亂序,語音質(zhì)量較差;緩沖隊列設(shè)置過大,語音延時較大,用戶體驗差。需要根據(jù)實際網(wǎng)絡(luò)狀況和用戶需求設(shè)置緩沖隊列大小。

4 視頻監(jiān)控測試

  嵌入式設(shè)備、PC客戶端通過3G/WLAN網(wǎng)向服務(wù)器平臺注冊登錄,進行視頻監(jiān)控功能測試??蛻舳税l(fā)起視頻請求并成功之后,可以觀看終端設(shè)備采集的視頻,并在開啟音頻請求之后實現(xiàn)與采集設(shè)備終端的雙向語音通信。測試結(jié)果表明,視頻畫面清晰流暢,可進行雙向語音通信,語音質(zhì)量較好。視頻監(jiān)控效果如圖4所示。

004.jpg

5 結(jié)論

  本文介紹了一種嵌入式視頻監(jiān)控系統(tǒng)終端軟件的設(shè)計與實現(xiàn)方案,并且通過實際的傳輸測試實現(xiàn)了音視頻數(shù)據(jù)的流暢傳輸和播放。整個終端系統(tǒng)具有通用、安裝方便、穩(wěn)定、可靠和成本低等優(yōu)點,適用于視頻監(jiān)控系統(tǒng)領(lǐng)域,具有很好的應(yīng)用前景。

參考文獻

  [1] 張云.視頻監(jiān)控系統(tǒng)的發(fā)展趨勢[J].中國科技博覽,2011(11):32-35.

  [2] 劉繼超.基于DM355的嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)設(shè)計[D].青島:青島科技大學(xué),2009.

  [3] 宋經(jīng)瑋.嵌入式網(wǎng)絡(luò)視頻監(jiān)控設(shè)備的驅(qū)動設(shè)計與開發(fā)[D].杭州:浙江工業(yè)大學(xué),2013.

  [4] 宋建勛,劉峰.基于TMS320DM365多平臺實時視頻傳輸系統(tǒng)的設(shè)計與實現(xiàn)[J].電視技術(shù),2011,35(7):32-35,40.

  [5] 馮國進.嵌入式Linux驅(qū)動程序設(shè)計從入門到精通[M].北京:清華大學(xué)出版社,2008.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。