李文龍,袁三男
(上海電力大學(xué)電子與信息工程學(xué)院,上海 201306)
網(wǎng)絡(luò)視頻監(jiān)控設(shè)備將嵌入式設(shè)備與相應(yīng)的網(wǎng)絡(luò)視頻技術(shù)結(jié)合,可以提供視頻服務(wù),而且還大大降低了設(shè)備的價(jià)格[1]。嵌入式操作系統(tǒng)在軟件方面沒有做明顯的區(qū)分,如系統(tǒng)軟件和應(yīng)用軟件。并且在功能設(shè)計(jì)方面及功能實(shí)現(xiàn)上沒有要求過于復(fù)雜,這樣做不僅有利于控制系統(tǒng)成本,同時(shí)也實(shí)現(xiàn)了系統(tǒng)安全[2]。
Linux 系統(tǒng)的主要優(yōu)點(diǎn)之一為其是一個(gè)開放源代碼的操作系統(tǒng),與Windows 等其他操作系統(tǒng)相比,Linux 更安全。相對(duì)于其他操作系統(tǒng),其主要的優(yōu)點(diǎn)是可以自定義[3]任何功能,根據(jù)需要,添加或刪除任何功能,因?yàn)樗情_源操作系統(tǒng)[4]。Linux 提供了很高的穩(wěn)定性,這也是一個(gè)很好的優(yōu)勢(shì),即它不需要在短時(shí)間內(nèi)重啟。
H.264 是ITU-T 的VCEG(視頻編碼專家組)和ISO/IEC 的MPEG(活動(dòng)圖像編碼專家組)的聯(lián)合視頻組(Joint Video Team,JVT)開發(fā)的一個(gè)數(shù)字視頻編碼標(biāo)準(zhǔn)[5]。H.264 是ITU-T 以H.26x 系列為名稱命名的標(biāo)準(zhǔn)之一,AVC 是ISO/IEC MPEG 一方的稱呼[6]。
RTMP(Real Time Messaging Protocol)從屬于應(yīng)用層,基于TCP 的數(shù)據(jù)傳輸協(xié)議。被用來在TCP 傳輸協(xié)議上復(fù)用和打包多媒體傳輸流。RTMP 提供了一套全雙工的可靠的多路復(fù)用消息服務(wù),用來在一對(duì)結(jié)點(diǎn)之間并行傳輸帶時(shí)間戳的音頻流、視頻流、數(shù)據(jù)流[7-8]。通過RTMP 協(xié)議進(jìn)行播放需要以下步驟:握手、建立連接、建立流、播放。流程圖如圖1 所示。
圖1 RTMP協(xié)議播放流程
系統(tǒng)主要是由服務(wù)器端和客戶端組成,服務(wù)器端主要完成視頻數(shù)據(jù)采集,將采集到的原始數(shù)據(jù)進(jìn)行壓縮編碼,利用推流器將數(shù)據(jù)推送到流媒體服務(wù)器上??蛻舳藙t采用拉流器從流媒體服務(wù)器上進(jìn)行拉流播放。在該設(shè)計(jì)中,采用RTMP 協(xié)議進(jìn)行數(shù)據(jù)傳輸,從而保證視頻數(shù)據(jù)流能夠?qū)崟r(shí)傳輸。服務(wù)器端利用ARM 開發(fā)板進(jìn)行推流,客戶端利用PC 機(jī)進(jìn)行拉流,系統(tǒng)框架圖如圖2 所示。
圖2 系統(tǒng)框架圖
開發(fā)板是基于四核ARM Cortex-A7,算力NPU達(dá)到2T,并且還支持H.264/H.265 視頻編解碼技術(shù),總?cè)萘?6 GByte 的8 bitEMMC Flash,USB2.0 外接設(shè)備,千兆以太網(wǎng)RTL8211F,MIPI Camera,硬件結(jié)構(gòu)圖如圖3 所示。
圖3 硬件結(jié)構(gòu)圖
交叉編譯工具是在一個(gè)平臺(tái)上編譯生成可在其他平臺(tái)上執(zhí)行的代碼。同一個(gè)體系結(jié)構(gòu)可以運(yùn)行不同的操作系統(tǒng)[9];同一個(gè)操作系統(tǒng)也可以在不同的體系結(jié)構(gòu)上運(yùn)行。文中上位機(jī)的操作系統(tǒng)為ubuntu16.04,該系統(tǒng)安裝交叉編譯工具,用于文件系統(tǒng)和上層應(yīng)用以及U-Boot 和Linux 內(nèi)核的編譯。
內(nèi)核移植是設(shè)計(jì)系統(tǒng)的核心部分,在設(shè)計(jì)時(shí)采用的是嵌入式系統(tǒng),嵌入式操作系統(tǒng)有較好的裁剪性,可以根據(jù)自己的需求對(duì)系統(tǒng)進(jìn)行裁剪,得到最精簡(jiǎn)的系統(tǒng)后將系統(tǒng)寫入存儲(chǔ)芯片中[10]。
嵌入式開發(fā),可以根據(jù)具體的應(yīng)用需求,用不同的配置進(jìn)行開發(fā),一般的開發(fā)過程中都包括如下過程:
1)編譯開機(jī)引導(dǎo)裝載程序BootLoader;
2)編譯內(nèi)核kernel;
3)利用Busybox 或者Buildroot 制作根文件系統(tǒng);
4)建立應(yīng)用程序分區(qū);
5)程序的開發(fā);
6)燒錄開機(jī)引導(dǎo)裝載程序,內(nèi)核kernel,根文件系統(tǒng)rootfs,app。
網(wǎng)絡(luò)文件系統(tǒng)(NFS)通過掛載的方式,將遠(yuǎn)程客戶端的文件掛載到本機(jī)上,如同本地文件,也允許遠(yuǎn)程客戶端以類似的方式,來通過網(wǎng)絡(luò)進(jìn)行訪問[11]。為了方便后面文件傳輸,利用NFS 建立PC 與開發(fā)板之間的聯(lián)系,當(dāng)開發(fā)板上電并與電腦通過網(wǎng)線連接后,將設(shè)置的共享文件夾掛載到開發(fā)板上,在后面的開發(fā)中,PC 機(jī)與開發(fā)板之間便可通過該共享文件夾進(jìn)行文件傳輸[12]。
開源項(xiàng)目Ngnix 原本是不支持RTMP 協(xié)議的,所以需要移植第三方模塊nginx-rtmp-module 來實(shí)現(xiàn)RTMP 協(xié)議[13]。通過使用Buildroot 工具對(duì)Nginx 編譯,在配置編譯前需要先下載第三方模塊,最后編譯生成.img 文件,并將該文件燒錄到開發(fā)板。
服務(wù)器端完成如下功能:驅(qū)動(dòng)攝像頭采集視頻,壓縮編碼原始數(shù)據(jù),對(duì)編碼后的視頻數(shù)據(jù)進(jìn)行封裝,將封裝后的數(shù)據(jù)推送到流媒體服務(wù)器上,等待客戶端拉流請(qǐng)求[14]??蛻舳酥饕獙?shí)現(xiàn)從流媒體服務(wù)器上進(jìn)行拉流播放功能。系統(tǒng)流程框圖如圖4 所示。
圖4 系統(tǒng)流程框圖
服務(wù)器端主要工作是編寫一個(gè)簡(jiǎn)單的視頻推流器,將攝像頭采集的視頻數(shù)據(jù)經(jīng)過壓縮編碼一系列處理之后,推送到流媒體服務(wù)器[15]。攝像頭采集數(shù)據(jù)利用V4L2 技術(shù),V4L2 是專門為L(zhǎng)inux 設(shè)備設(shè)計(jì)的一套視頻框架,視頻設(shè)備被當(dāng)作一個(gè)文件[16]。打開設(shè)備,用非阻塞模式打開攝像頭設(shè)備作為推流器的輸入,將得到的視頻數(shù)據(jù)采用H.264 標(biāo)準(zhǔn)進(jìn)行視頻編碼,將編碼后的數(shù)據(jù)封裝為FLV 格式進(jìn)行傳輸[17]。流媒體服務(wù)器的地址作為輸出。程序流程圖如圖5所示。
圖5 推流器的程序流程圖
客戶端主要編寫從流媒體服務(wù)器拉取的視頻數(shù)據(jù),并進(jìn)行解碼實(shí)時(shí)視頻播放的拉流器應(yīng)用程序[18]。程序主要是根據(jù)流媒體服務(wù)器的地址,將視頻數(shù)據(jù)流拉取下來,拉取下來的視頻數(shù)據(jù)被封裝成flv 格式,所以不能直接用來播放,需要進(jìn)一步解封裝,再將解封裝后的數(shù)據(jù)通過解碼得到原始的視頻流數(shù)據(jù),對(duì)得到的原始數(shù)據(jù)進(jìn)行播放,從而能夠達(dá)到實(shí)時(shí)播放的效果[19]。程序設(shè)計(jì)流程圖如圖6 所示。
圖6 拉流器程序流程圖
測(cè)試首先進(jìn)入開發(fā)板,開啟流媒體服務(wù)器并運(yùn)行推流程序,當(dāng)服務(wù)器程序啟動(dòng)后,在PC 端打開拉流應(yīng)用程序,并在應(yīng)用程序框中輸入流媒體服務(wù)器地址,如rtmp://192.168.0.114:1935/live/test,獲取視頻服務(wù),連接成功之后,PC 端顯示器上會(huì)顯現(xiàn)出所要監(jiān)控的畫面,基本達(dá)到實(shí)時(shí)效果并且畫面基本清晰。
視頻監(jiān)控在市場(chǎng)中具有較為廣泛的應(yīng)用場(chǎng)景,在日常生活中,視頻監(jiān)控可以用于安保與預(yù)警,保障了人們?nèi)粘I畎踩?;在日常出行中,視頻監(jiān)控可以應(yīng)用于行車記錄儀以及汽車的全景環(huán)視。并且隨著行業(yè)的拓展,搭配著其他技術(shù)可以應(yīng)用于特殊的領(lǐng)域,如車牌識(shí)別、人臉識(shí)別等應(yīng)用[20]。該文研究了相關(guān)的基于嵌入式視頻監(jiān)控的系統(tǒng)架構(gòu),并簡(jiǎn)單介紹視頻編解碼的流程,通過編寫視頻推流器和拉流器來實(shí)現(xiàn)視頻流數(shù)據(jù)的實(shí)時(shí)轉(zhuǎn)發(fā)和接收,為后續(xù)的視頻監(jiān)控開發(fā)奠定了基礎(chǔ)。