冉耀宗
摘 要: 由于利用有線網(wǎng)絡(luò)進(jìn)行通信以及監(jiān)控端體積過大,導(dǎo)致視頻監(jiān)控系統(tǒng)的隱蔽性差,視頻監(jiān)控的威懾力和靈活性受到影響,基于此,利用DaVinci平臺(tái)的Linux嵌入式系統(tǒng)設(shè)計(jì)了一套網(wǎng)絡(luò)視頻傳輸系統(tǒng),完成了基于DaVinci平臺(tái)的農(nóng)場視頻網(wǎng)絡(luò)傳輸系統(tǒng)設(shè)計(jì),包括H.264編碼、農(nóng)場視頻的采集以及基于RTP協(xié)議的網(wǎng)絡(luò)傳輸?shù)裙δ?。嵌入式的農(nóng)場智能監(jiān)控系統(tǒng)運(yùn)行成功后,采用本地計(jì)算機(jī)上的VLC播放器能對(duì)攝像機(jī)采集的視頻進(jìn)行實(shí)時(shí)播放,通過對(duì)系統(tǒng)測試分析證明此系統(tǒng)穩(wěn)定可靠,完全滿足視頻網(wǎng)絡(luò)傳輸?shù)男枨蟆?/p>
關(guān)鍵詞: 監(jiān)控系統(tǒng); 農(nóng)場視頻監(jiān)測; VLC播放器; 視頻網(wǎng)絡(luò)傳輸
中圖分類號(hào): TN919?34; TM417 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2017)21?0023?04
Research on farm intelligent monitoring system based on embedded system
RAN Yaozong
(Department of Physics & Electronic Information Engineering, Tongren University, Tongren 554300, China)
Abstract: The communication using wired network and oversize volume of monitoring terminal may result in the poor concealment of video surveillance system, and affect the deterrence and flexibility of video surveillance. Therefore, a network video transmission system based on Linux embedded system of DaVinci platform is designed for farm video, which can realize the functions of H.264 encoding, farm video acquisition and network transmission based on RTP protocol. After the successful operation of the embedded farm intelligent monitoring system, the VLC player in local computer can be used to play the video captured by camera in real time. The system test and analysis results verify that the system is stable and reliable, and can fully meet the reqirement of video network transmission.
Keywords: monitoring system; farm video monitoring; VLC player; video network transmission
近年來,隨著國民經(jīng)濟(jì)的快速發(fā)展,城市中植物工廠、都市菜園、智能農(nóng)場的數(shù)量迅速增加,由此帶來的監(jiān)控問題也日益凸顯,傳統(tǒng)有線網(wǎng)絡(luò)進(jìn)行通信以及監(jiān)控端體積過大,導(dǎo)致視頻監(jiān)控系統(tǒng)的隱蔽性差,視頻監(jiān)控的威懾力和靈活性受到影響[1]。本文的研究目標(biāo)是設(shè)計(jì)一套智能的農(nóng)場視頻監(jiān)控系統(tǒng),該系統(tǒng)能夠?qū)⒁曨l采集、H.264編碼以及基于RTP協(xié)議的網(wǎng)絡(luò)傳輸?shù)裙δ芎芎玫膶?shí)現(xiàn),并對(duì)農(nóng)場植物的生長情況進(jìn)行記錄和視頻分析處理,最終實(shí)現(xiàn)農(nóng)場視頻監(jiān)控的智能化。
1 系統(tǒng)總體架構(gòu)設(shè)計(jì)
嵌入式的農(nóng)場智能監(jiān)控系統(tǒng)分為視頻采集、視頻編碼、視頻顯示以及網(wǎng)絡(luò)傳輸四個(gè)模塊,可以將網(wǎng)絡(luò)攝像頭收集的農(nóng)場視頻信號(hào)經(jīng)過H.264編碼后,依照RTP/RTCP網(wǎng)絡(luò)協(xié)議通過網(wǎng)絡(luò)傳輸?shù)奖O(jiān)控主機(jī),四個(gè)模塊的具體功能如下:
視頻采集模塊:通過攝像頭將農(nóng)場的視頻信號(hào)進(jìn)行采集,并且運(yùn)用 PAL制式將信號(hào)輸入到TVP5158視頻解碼芯片中,該解碼芯片可以將信號(hào)轉(zhuǎn)換為YUV格式的數(shù)字信號(hào),DM6446處理器接收YUV格式的數(shù)字視頻信號(hào)進(jìn)行下一步的處理[2]。
視頻編碼模塊:受網(wǎng)絡(luò)帶寬的限制,數(shù)字視頻信號(hào)要想實(shí)現(xiàn)網(wǎng)絡(luò)傳輸必須經(jīng)過壓縮編碼處理,本模塊采用H.264編碼技術(shù),實(shí)現(xiàn)視頻的高效壓縮,為視頻的網(wǎng) 絡(luò)傳輸做好準(zhǔn)備。
視頻顯示模塊:為方便調(diào)試,攝像頭采集的視頻能在本地的液晶屏上顯示,從而實(shí)現(xiàn)對(duì)攝像頭采集視頻信號(hào)的實(shí)時(shí)觀察。同時(shí),應(yīng)用OSD(On?Screen Display)技術(shù),ARM核和DSP核的負(fù)載率、視頻編碼過程中的動(dòng)態(tài)參數(shù)(如分辨率、比特率、幀率等)也將顯示在本地LCD液晶屏上[3]。
網(wǎng)絡(luò)傳輸模塊:此模塊為系統(tǒng)最為關(guān)鍵的部分,通過對(duì)H.264編碼后的視頻數(shù)據(jù)流進(jìn)行分析,提取出H.264的NALU(網(wǎng)絡(luò)抽象層單元),結(jié)合RTP協(xié)議的載荷數(shù)據(jù)格式對(duì)壓縮后的視頻數(shù)據(jù)進(jìn)行打包,然后發(fā)送到以太網(wǎng)上。在本地計(jì)算機(jī)上將能夠播放攝像頭采集的實(shí)時(shí)視頻。
2 系統(tǒng)應(yīng)用程序設(shè)計(jì)
2.1 系統(tǒng)主程序
系統(tǒng)主程序由主線程main()組成,主要負(fù)責(zé)對(duì)必要的初始化任務(wù)以及其他線程的創(chuàng)建。首先,通過輸入輸出控制FBIO_GETSTD實(shí)現(xiàn)視頻標(biāo)準(zhǔn)的檢測;然后對(duì)命令行參數(shù)解析、環(huán)境變量的設(shè)置以及CodecEngine及其日志跟蹤模塊的初始化;其次,初始化Rendezvous對(duì)象和Pause對(duì)象;再次,根據(jù)前面參數(shù)的解析結(jié)果創(chuàng)建其他的4個(gè)線程;最后調(diào)用函數(shù)void*Ctrl Thread(void*arg),主線程變成控制線程[4?5]。endprint
2.2 視頻采集模塊
視頻采集模塊調(diào)用視頻采集線程void*Capture Thread(void*arg),完成原始視頻幀的采集并把它們發(fā)送給視頻顯示線程和編碼線程[6]。首先調(diào)用函數(shù)Init Capture Dev()完成對(duì)視頻捕捉設(shè)備的初始化。在此函數(shù)中,視頻輸入選擇了復(fù)合視頻輸入,并能自動(dòng)檢測視頻輸入標(biāo)準(zhǔn)(PAL或NTSC)。然后,分配三個(gè)視頻采集Buffer,并把這些Buffer映射到用戶空間。當(dāng)完成初始操作之后會(huì)等待其他線程全部完成初始化之后,再進(jìn)行視頻采集線程的主循環(huán)程序,開始采集視頻流。
2.3 視頻編碼模塊
視頻編碼模塊調(diào)用視頻編碼線程void*Video Thread(void*arg),從采集線程得到原始圖像Buffer,并應(yīng)用H.264視頻編碼算法對(duì)其進(jìn)行視頻編碼,然后,經(jīng)編碼的視頻幀被發(fā)送給網(wǎng)絡(luò)傳輸線程,發(fā)送到以太網(wǎng)上。其中,視頻編碼線程的初始化主要完成以下工作:
(1) 使用函數(shù)Engine_open()打開一個(gè)CodecEngine,此函數(shù)返回一個(gè)Codec引擎句柄。
(2) 使用函數(shù)VideoEncodeAlgCreate()創(chuàng)建H.264視頻編碼算法。
(3) 分配與網(wǎng)絡(luò)傳輸線程數(shù)據(jù)交互的Buffer。首先使用函數(shù)Memory_Alloc()分配連續(xù)的Buffer,然后使用函數(shù)FifoUtil_put()把Buffer發(fā)送到網(wǎng)絡(luò)傳輸線程。
(4) 分配與視頻采集線程數(shù)據(jù)交互的Buffer。首先應(yīng)用函數(shù)Memory_contigAlloc()分配連續(xù)的Buffer,之后通過函數(shù)FifoUtil_put()給視頻采集線程發(fā)送Buffer。
當(dāng)完成初始操作之后會(huì)等待其他線程全部完成初始化之后再進(jìn)行視頻采集線程的主循環(huán)程序,在循環(huán)的過程中,只要任意一個(gè)地方報(bào)錯(cuò)就會(huì)立即跳出循環(huán),進(jìn)行糾錯(cuò)步驟。
2.4 視頻顯示模塊
視頻顯示模塊包括實(shí)時(shí)視頻數(shù)據(jù)的本地顯示和圖像動(dòng)態(tài)參數(shù)信息的OSD顯示,分別調(diào)用視頻顯示線程void*Display Thread(void*arg)和控制線程void*CtrlThread(void*arg) [7]。
(1) 視頻顯示線程
為了在本地液晶屏幕上實(shí)時(shí)顯示攝像頭采集的視頻圖像,在原始視頻圖像被編碼之前,視頻處理子系統(tǒng)前端所采集到的原始視頻數(shù)據(jù)會(huì)進(jìn)行往視頻處理子系統(tǒng)后端復(fù)制的步驟。
線程中調(diào)用函數(shù)InitDisplayDev()初始化視頻顯示設(shè)備,設(shè)定視頻的分辨率(D1格式,720×480)以及每個(gè)像素的位數(shù)(16位)[8]。視頻顯示線程完成其初始化程序后,再通過運(yùn)用Rendezvous對(duì)象同步其他線程,等其他線程均已完成初始化程序以后,視頻顯示線程便可以進(jìn)入其主循環(huán)。
(2) 控制線程
控制線程主要負(fù)責(zé)完成OSD顯示模塊的繪制和更新。除了初始化OSD設(shè)備和在OSD上創(chuàng)建并繪制靜態(tài)文本之外,控制線程還負(fù)責(zé)從其他的線程中得到圖像的性能參數(shù)(例如,比特率、幀率等),并把它們顯示在OSD上,這些數(shù)據(jù)每秒會(huì)被更新一次。DM6446的ARM核和DSP核的負(fù)載率也會(huì)被顯示在OSD上,圖1為控制線程程序流程圖。
2.5 網(wǎng)絡(luò)傳輸模塊
網(wǎng)絡(luò)傳輸模塊調(diào)用網(wǎng)絡(luò)傳輸線程void*Internet Thread(void*arg),網(wǎng)絡(luò)傳輸線程接收從視頻編碼線程中傳過來經(jīng)H.264編碼后的視頻幀Buffer,對(duì)其解析后,應(yīng)用RTP協(xié)議把視頻幀發(fā)送到以太網(wǎng)上[9]。
Socket編程技術(shù)被用來進(jìn)行網(wǎng)絡(luò)通信程序設(shè)計(jì),Socket能夠完成不同主機(jī)進(jìn)程之間的通信。
Socket通信分為面向無連接的通信以及面向連接的通信兩種,兩者均需要通過相應(yīng)Socket對(duì)象的創(chuàng)建來實(shí)現(xiàn),不過,兩者也有區(qū)別,面向連接的TCP通信方式需要雙方建立可信的數(shù)據(jù)連接后才能通信,而面向無連接的UDP通信方式則只要將數(shù)據(jù)發(fā)送到目的主機(jī)即可。系統(tǒng)采用的是面向無連接的UDP通信方式。首先,調(diào)用函數(shù)Rtp_Init()完成Socket通信的會(huì)話初始化。此步主要目的是創(chuàng)建Socket,并完成服務(wù)器的連接,主要包括服務(wù)器的IP地址、應(yīng)用程序目的端口及網(wǎng)絡(luò)通信協(xié)議簇的設(shè)置。其次,在等待其他線程完成初始化后進(jìn)入網(wǎng)絡(luò)傳輸線程主循環(huán),從視頻編碼線程得到一個(gè)H.264編碼后的視頻圖像Buffer,并調(diào)用Rtp_H246_Send()函數(shù)進(jìn)行發(fā)送,最后將此Buffer返回到視頻編碼線程。具體的網(wǎng)絡(luò)傳輸線程程序流程如圖2所示。
在視頻傳輸線程中Rtp_H246_Send()函數(shù)的實(shí)現(xiàn)是程序的關(guān)鍵部分,此函數(shù)主要完成對(duì)H.264數(shù)據(jù)流結(jié)構(gòu)的解析,提取出NALU,并根據(jù)NALU的大小對(duì)其進(jìn)行RTP協(xié)議打包并發(fā)送。通過檢測NALU的起始碼0x000001來提取出一個(gè)完整的NALU。根據(jù)NALU的大小來判斷是否對(duì)其進(jìn)行分包發(fā)送,最后加上NALU單元頭和RTP協(xié)議的包頭信息就可以發(fā)送了。在程序中要根據(jù)實(shí)際情況分別對(duì)NALU單元頭和RTP協(xié)議包頭進(jìn)行賦值填充。
2.6 線程間的交互
視頻采集線程從視頻處理子系統(tǒng)前端設(shè)備得到原始的視頻Buffer,使用FifoUtil_put()函數(shù)把采集到的原始圖像Buffer發(fā)送到視頻顯示線程,以便在視頻編碼之前能顯示在本地屏幕上。之后視頻采集線程能夠在視頻編碼線程處得到一個(gè)原始的空白Buffer,采集到的原始視頻Buffer可以復(fù)制到這個(gè)從編碼線程得到的Buffer中,用來進(jìn)行視頻的編碼。視頻編碼線程接收到視頻采集線程捕獲的原始視頻Buffer,并使用函數(shù)FifoUtil_get()從視頻網(wǎng)絡(luò)傳輸線程取得一個(gè)Buffer,經(jīng)過編碼后的視頻數(shù)據(jù)將會(huì)被放到這個(gè)Buffer中。當(dāng)運(yùn)行在DSP核的視頻編碼器完成視頻編碼后,這個(gè)Buffer將會(huì)通過函數(shù)FifoUtil_put()被發(fā)送到網(wǎng)絡(luò)傳輸線程。最后網(wǎng)絡(luò)傳輸線程完成對(duì)H.264編碼數(shù)據(jù)的RTP網(wǎng)絡(luò)傳輸。endprint
當(dāng)視頻顯示線程復(fù)制原始視頻Buffer到前端視頻顯示設(shè)備后,視頻編碼線程開始對(duì)原始視頻Buffer進(jìn)行編碼,編碼過程調(diào)用函數(shù)VIDENC_process(),在DSP端進(jìn)行。當(dāng)運(yùn)行在DSP核的H.264視頻編碼器完成對(duì)采集圖像幀的編碼后,編碼后的Buffer將通過FifoUtil_put()函數(shù)傳送到網(wǎng)絡(luò)傳輸線程,原始的視頻Buffer將被返回到采集線程用于采集新一幀圖像。
網(wǎng)絡(luò)傳輸線程從編碼線程得到編碼后的視頻Buffer后,將會(huì)通過RTP協(xié)議發(fā)送,完成后會(huì)把此Buffer返回到視頻編碼線程。
3 系統(tǒng)測試
當(dāng)系統(tǒng)程序設(shè)計(jì)完成以后,對(duì)其編譯、鏈接,最終生成一個(gè)可執(zhí)行文件video_surveillance。把此文件拷貝到DM6446的根文件系統(tǒng)的文件目錄\home\dm6446\video_surveillance下。此文件夾下共包含如下文件:
Data/:此文件夾下存放用于OSD功能的字庫信息。
cmemk.ko,dsplinkk.ko,loadmodules.sh,unloadmodules.sh:這四個(gè)文件用于分配或釋放ARM核和DSP核的共享內(nèi)存池。
encodeCombo.x64P:此文件為運(yùn)行在DSP端的可執(zhí)行程序,里邊包含用到的H.264編解碼算法。
video_surveillance:此文件為ARM端運(yùn)行的應(yīng)用程序。運(yùn)行此程序時(shí)可設(shè)置分辨率、碼率等參數(shù)。默認(rèn)分辨率為720×480。
啟動(dòng)系統(tǒng)后,進(jìn)入/home/dm6446/video_surveillance/目錄下,依次運(yùn)行如下命令啟動(dòng)視頻的網(wǎng)絡(luò)傳輸系統(tǒng)程序:
#cd/home/dm6446/video_surveillance
#./loadmodules.sh
#./video_surveillance?vrtp.264
程序啟動(dòng)后,在客戶端就可以通過播放器來查看監(jiān)控視頻畫面了。本文設(shè)計(jì)的視頻傳輸系統(tǒng)客戶端在Windows XP系統(tǒng),采用開源播放器VLC 2.0來接收H.264視頻碼流的RTP包。經(jīng)測試當(dāng)系統(tǒng)視頻分辨率為720×480,幀率為25 f/s,比特率/碼率為1 Mb/s時(shí),視頻播放十分流暢,也沒有出現(xiàn)馬賽克或者丟包等現(xiàn)象。播放器播放的農(nóng)場監(jiān)控視頻現(xiàn)場畫面如圖3,圖4所示。
4 系統(tǒng)運(yùn)行結(jié)果分析
系統(tǒng)運(yùn)行OSD參數(shù)顯示如表1所示,其中包括視頻分辨率、視頻編碼算法、ARM和DSP負(fù)載率、視頻幀率、視頻比特率等參數(shù)。在系統(tǒng)運(yùn)行時(shí),分別設(shè)置不同視頻分辨率以完成對(duì)DSP核以及ARM核負(fù)載率的測試,測試結(jié)果如表2所示。從表2中結(jié)果能夠得出,隨著視頻分辨率以及視頻圖像處理數(shù)據(jù)量的增大,ARM和CPU的負(fù)載率會(huì)隨之增高,但離100%還有一定差距,也就是說即使分辨率達(dá)到最大,即720×480時(shí),DM6446 CPU處理速度也完全滿足系統(tǒng)要求。
5 結(jié) 論
本文完成了一個(gè)基于DaVinci平臺(tái)的嵌入式農(nóng)場智能監(jiān)控系統(tǒng)的設(shè)計(jì),該監(jiān)控系統(tǒng)由視頻采集、視頻編碼、視頻顯示以及視頻網(wǎng)絡(luò)傳輸四個(gè)模塊組成。通過攝像頭完成視頻采集模塊對(duì)農(nóng)場視頻信號(hào)的采集,并且運(yùn)用PAL制式將信號(hào)輸入到TVP5158視頻解碼芯片中,該解碼芯片可以將信號(hào)轉(zhuǎn)換為YUV格式的數(shù)字信號(hào),最后送入DM6446處理器進(jìn)行處理。
其中,采用H.264編碼技術(shù)完成視頻編碼模塊的設(shè)計(jì),實(shí)現(xiàn)視頻的高效壓縮,為視頻網(wǎng)絡(luò)傳輸做好準(zhǔn)備。視頻顯示模塊將攝像頭采集的視頻實(shí)時(shí)地顯示在本地的液晶屏上,同時(shí),應(yīng)用OSD技術(shù)顯示ARM核和DSP核的負(fù)載率、視頻編碼過程中的動(dòng)態(tài)參數(shù)(如分辨率、比特率、幀率等)等動(dòng)態(tài)信息。
網(wǎng)絡(luò)傳輸模塊通過對(duì)H.264編碼后的視頻數(shù)據(jù)流進(jìn)行分析,提取出網(wǎng)絡(luò)抽象層單元(H.264的NALU),采用RTP協(xié)議對(duì)壓縮后的視頻數(shù)據(jù)進(jìn)行打包,然后發(fā)送到以太網(wǎng)上。在本地計(jì)算機(jī)上應(yīng)用網(wǎng)絡(luò)播放器VLC 2.0將可以播放攝像頭采集的實(shí)時(shí)視頻。最后,通過對(duì)系統(tǒng)測試分析,證明此系統(tǒng)穩(wěn)定可靠,完全滿足農(nóng)場智能視頻網(wǎng)絡(luò)傳輸?shù)男枨蟆?/p>
參考文獻(xiàn)
[1] 黃凱奇,陳曉棠,康運(yùn)鋒,等.智能視頻監(jiān)控技術(shù)綜述[J].計(jì)算機(jī)學(xué)報(bào),2015,20(6):1093?1118.
[2] 屈召貴.嵌入式多源高清視頻監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2016,39(3):68?71.
[3] 張雅楠,楊璐,鄭麗敏.基于Android手機(jī)的遠(yuǎn)程視頻監(jiān)控系統(tǒng)的設(shè)計(jì)與開發(fā)[J].計(jì)算機(jī)應(yīng)用,2013,33(z1):283?286.
[4] 辛長春,婁小平,呂乃光.基于FFmpeg的遠(yuǎn)程視頻監(jiān)控系統(tǒng)編解碼[J].電子技術(shù),2013(1):3?5.
[5] 董向華,楊勇.基于網(wǎng)絡(luò)的視頻監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].通信技術(shù),2013(2):64?66.
[6] 曾欣慧.面向Android客戶端的無線視頻監(jiān)控系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2016,39(12):6?9.
[7] 陳飛玲,陳湘軍,郁建橋,等.移動(dòng)視頻監(jiān)控系統(tǒng)設(shè)計(jì)[J].電子測量技術(shù),2014,37(4):103?107.
[8] 任克強(qiáng),曹宏強(qiáng).基于Android和H.264的實(shí)時(shí)視頻監(jiān)控系統(tǒng)[J].計(jì)算機(jī)測量與控制,2013,21(9):2448?2450.
[9] 張廣,侯立剛,曹江濤.基于ARM9的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2013,21(12):161?163.
[10] 寧躍飛,李艷萍.視頻監(jiān)控設(shè)備網(wǎng)絡(luò)管理研究與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2016,39(15):70?73.endprint