王慧州,彭 宏(浙江工業(yè)大學(xué) 信息工程學(xué)院 浙江省通信網(wǎng)技術(shù)應(yīng)用研究重點實驗室,浙江 杭州 310023)
嵌入式視頻監(jiān)控系統(tǒng)終端軟件設(shè)計與實現(xiàn)
王慧州,彭宏
(浙江工業(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)方案;最后對該嵌入式終端進行測試,驗證其實際效果。
嵌入式;H.264;G711;DM365;RTP
隨著嵌入式技術(shù)、圖像處理技術(shù)、網(wǎng)絡(luò)通信技術(shù)的不斷發(fā)展以及人們的安防意識日益提高,通過實時視頻傳輸系統(tǒng)對現(xiàn)場監(jiān)控的應(yīng)用越來越廣泛。基于ARM的視頻監(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)。
整個視頻監(jiān)控系統(tǒng)[2]由三部分組成:嵌入式終端、服務(wù)器平臺和客戶端。系統(tǒng)結(jié)構(gòu)框架如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)框圖
嵌入式終端負(fù)責(zé)采集音視頻數(shù)據(jù),對音視頻數(shù)據(jù)進行壓縮編碼,并將編碼壓縮數(shù)據(jù)通過3G/WLAN網(wǎng)發(fā)送至流媒體服務(wù)器。服務(wù)器平臺由流媒體服務(wù)器、SIP信令服務(wù)器和FTP服務(wù)器三部分組成。流媒體服務(wù)器負(fù)責(zé)轉(zhuǎn)發(fā)音視頻流,SIP信令服務(wù)器負(fù)責(zé)終端與平臺、終端與客戶端之間的信息交互,F(xiàn)TP服務(wù)器負(fù)責(zé)圖像文件信息的存儲備份??蛻舳酥饕獙崿F(xiàn)實時監(jiān)控和終端控制功能,通過客戶端可對終端設(shè)備進行實時的視頻碼率幀率控制。整個系統(tǒng)為嵌入式視頻監(jiān)控提供了良好的解決方案,能夠廣泛地應(yīng)用在視頻監(jiān)控領(lǐng)域中。
嵌入式終端軟件開發(fā)基于 MontaVista Linux嵌入式操作系統(tǒng),它基于Linux內(nèi)核,具有高效、實時、穩(wěn)定、內(nèi)核可裁剪等特點[3]。同時利用 Linux系統(tǒng)提供的進程間通信機制可方便地實現(xiàn)各功能模塊之間的數(shù)據(jù)通信。嵌入式終端軟件平臺包括視頻采集編碼模塊、音頻采集編碼解碼模塊、RTP模塊、信令控制模塊以及其他的功能模塊等。終端軟件總體框架如圖2所示。
圖2 終端軟件總體框架圖
SIP信令模塊負(fù)責(zé)與服務(wù)器平臺的信令交互。信令模塊將應(yīng)用管理模塊的信息進行SIP信令封裝并發(fā)送至SIP服務(wù)器;同時解析接收的SIP信令,將控制信息通過本地socket發(fā)送至應(yīng)用管理模塊進行調(diào)度。
應(yīng)用管理模塊負(fù)責(zé)調(diào)度各個功能模塊。管理模塊收集各個功能模塊的交互信息,將交互信息進行封裝,發(fā)送至SIP信令控制模塊,從而實現(xiàn)與服務(wù)器平臺的信令交互;與此同時,管理模塊還將接收到的控制信息進行解析,根據(jù)控制信息調(diào)度相應(yīng)的功能模塊。在各功能模塊中,RTP模塊為主要模塊,負(fù)責(zé)音視頻數(shù)據(jù)的RTP封包、發(fā)送。
音視頻采集模塊負(fù)責(zé)實時的音視頻數(shù)據(jù)采集。該模塊采集音視頻數(shù)據(jù),并對其進行編碼,通過 Linux共享內(nèi)存機制實現(xiàn)與RTP模塊的數(shù)據(jù)交互。
該軟件框架中各功能模塊單獨實現(xiàn),互不影響,可根據(jù)具體需求方便地添加和刪除功能模塊,同時各個模塊均由應(yīng)用管理模塊進行調(diào)度統(tǒng)籌,便于管理。
嵌入式設(shè)備作為視頻監(jiān)控系統(tǒng)的終端,需要完成語音與視頻的數(shù)據(jù)采集和發(fā)送,一次成功的視頻監(jiān)控請求應(yīng)當(dāng)包含控制信息接收解析、數(shù)據(jù)流的發(fā)送和接收等。嵌入式終端音視頻功能模塊主要包括音視頻采集編碼模塊、RTP模塊,模塊間通過Linux進程間通信機制實現(xiàn)數(shù)據(jù)與控制信息的交互。
圖3所示為一次音視頻請求后音視頻相關(guān)模塊的處理流程。客戶端發(fā)起視頻請求后,SIP信令模塊將接收到服務(wù)器轉(zhuǎn)發(fā)的視頻請求信令,SIP信令在經(jīng)過信令模塊的解析之后,其攜帶的控制消息將到達(dá)應(yīng)用管理模塊;管理模塊解析音視頻請求控制消息,通知RTP模塊;RTP模塊開啟兩個線程用于處理音視頻數(shù)據(jù),發(fā)送線程負(fù)責(zé)從共享內(nèi)存讀取音視頻數(shù)據(jù)并進行RTP打包發(fā)送,接收線程接收流媒體服務(wù)器轉(zhuǎn)發(fā)的語音數(shù)據(jù)包并進行解碼播放。
圖3 音視頻監(jiān)控流程
本文選用TI公司采用達(dá)芬奇技術(shù)的數(shù)字媒體處理器TMS320DM365作為主芯片。為了方便音視頻采集編碼的應(yīng)用程序開發(fā),TI針對達(dá)芬奇平臺提供了達(dá)芬奇多媒體應(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],主線程負(fù)責(zé)整個流程控制,視頻采集編碼的具體實現(xiàn)在 Capture線程、Video線程和Write線程中完成,三個線程通過管道進行線程間通信。
Capture線程負(fù)責(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線程負(fù)責(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線程負(fù)責(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_get-NumBytesUsed(hOutBuf))//將編碼數(shù)據(jù)寫入共享內(nèi)存
Fifo_put(envp->hOutBuf,hOutBuf)//將緩沖指針寫回管道
3.2音頻采集解碼編碼模塊實現(xiàn)
音頻處理模塊由采集編碼和解碼播放兩部分組成,通過與上層RTP模塊的交互實現(xiàn)雙向語音功能。在接收到視頻請求信令之后,音頻處理模塊創(chuàng)建兩個線程用于處理語音數(shù)據(jù),Speech線程負(fù)責(zé)語音數(shù)據(jù)的采集、G711編碼,SpeechDec線程負(fù)責(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.3RTP模塊設(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ù)包到達(dá)的順序具有不確定性,因此需要對語音數(shù)據(jù)進行緩存排序。首先將G711語音數(shù)據(jù)包放入緩沖隊列中,通過RTP包的序號進行優(yōu)先級排序。然后取緩沖隊列音頻數(shù)據(jù),寫入共享內(nèi)存,供音頻解碼播放模塊讀取播放。合適的緩沖區(qū)大小設(shè)置尤為重要,緩沖隊列設(shè)置過小會導(dǎo)致語音包亂序,語音質(zhì)量較差;緩沖隊列設(shè)置過大,語音延時較大,用戶體驗差。需要根據(jù)實際網(wǎng)絡(luò)狀況和用戶需求設(shè)置緩沖隊列大小。
嵌入式設(shè)備、PC客戶端通過3G/WLAN網(wǎng)向服務(wù)器平臺注冊登錄,進行視頻監(jiān)控功能測試??蛻舳税l(fā)起視頻請求并成功之后,可以觀看終端設(shè)備采集的視頻,并在開啟音頻請求之后實現(xiàn)與采集設(shè)備終端的雙向語音通信。測試結(jié)果表明,視頻畫面清晰流暢,可進行雙向語音通信,語音質(zhì)量較好。視頻監(jiān)控效果如圖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