基于QEMU視頻監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)*
*基金項(xiàng)目: 1. 浙江開放大學(xué)312人才培養(yǎng)工程課題研究成果,項(xiàng)目編號(hào):60
本文引用地址:http://cafeforensic.com/article/202305/446963.htm2. 浙江開放大學(xué)2022年專業(yè)教學(xué)團(tuán)隊(duì)建設(shè)項(xiàng)目,項(xiàng)目編號(hào):ZYJXTD202202
0 引言
嵌入式系統(tǒng)是軟硬件相結(jié)合、定制化、產(chǎn)品化相結(jié)合的復(fù)雜性系統(tǒng)工程,它涉及半導(dǎo)體、電子信息、信號(hào)處理、軟件工程等多學(xué)科的知識(shí)與技能,已經(jīng)廣泛地應(yīng)用于消費(fèi)電子、國(guó)防工業(yè)、物聯(lián)網(wǎng)、家居安防、政務(wù)教育等諸多領(lǐng)域[1],并且隨著嵌入式操作系統(tǒng)的應(yīng)用和技術(shù)的成熟,產(chǎn)品更加多樣化,迭代速度更加快速。
在設(shè)計(jì)開發(fā)某款嵌入式產(chǎn)品時(shí),業(yè)內(nèi)常見的做法通常會(huì)選用某款開發(fā)板,根據(jù)產(chǎn)品需求訂制所需CPU 型號(hào)、RAM、ROM、電源模塊、顯示模塊等硬件環(huán)境,選定操作系統(tǒng)平臺(tái)及該平臺(tái)上所使用的各項(xiàng)開發(fā)工具,例如編譯器、鏈接器等。根據(jù)廠家的硬件規(guī)格與軟件說明編譯出在目標(biāo)平臺(tái)(開發(fā)板)上運(yùn)行的鏡像文件,通過JTAG 等燒錄工具燒錄到目標(biāo)平臺(tái)上。完成軟硬件環(huán)境的搭建后,之后才進(jìn)入嵌入式應(yīng)用程序的開發(fā)環(huán)節(jié)。
然而,嵌入式系統(tǒng)開發(fā)前期過程中存在著硬件經(jīng)濟(jì)成本高、環(huán)境搭建復(fù)雜繁瑣、軟件開發(fā)周期長(zhǎng)、問題錯(cuò)誤定位難、學(xué)習(xí)者學(xué)習(xí)成本高等問題,特別對(duì)于初學(xué)者在遇到開發(fā)板硬件問題時(shí),較難判斷問題原因以及尋求一對(duì)一指導(dǎo)解決。如何解決上述諸多問題,已成為嵌入式軟件從業(yè)者迫切需要研究的問題。
1 QEMU軟件開發(fā)
QEMU最初是由法國(guó)程序員Fabrice Bellard 開發(fā)的一個(gè)開源模擬器,廣泛應(yīng)用于虛擬化和硬件仿真。QEMU能夠完成用戶程序模擬和系統(tǒng)虛擬化模擬。用戶程序模擬指的是QEMU 能夠?qū)⒁粋€(gè)平臺(tái)編譯的二進(jìn)制文件運(yùn)行在另一個(gè)不同的平臺(tái),如一個(gè)ARM 指令集的二進(jìn)制程序,通過QEMU 的TCG(Tiny CodeGenerator)引擎的處理之后,ARM 指令被轉(zhuǎn)換成TCG中間代碼,然后再轉(zhuǎn)換成目的平臺(tái)的代碼。系統(tǒng)虛擬化模擬是指QEMU 能夠模擬出一臺(tái)擁有自己的虛擬CPU、芯片組、虛擬內(nèi)存以及各種虛擬外部設(shè)備的完整系統(tǒng)虛擬機(jī),能夠?qū)⑴c物理計(jì)算機(jī)完全一致的硬件視圖呈現(xiàn)在虛擬機(jī)中運(yùn)行的操作系統(tǒng)和應(yīng)用軟件上。QEMU 能夠模擬的平臺(tái)很多,包括x86、ARM、MIPS等等,比如QEMU 可以虛擬一個(gè)基于x86 架構(gòu)PC 主機(jī)的基于ARM 架構(gòu)的開發(fā)板,運(yùn)行嵌入式的和應(yīng)用程序。
QEMU 通過支持對(duì)ARM 平臺(tái)的指令級(jí)仿真,使目標(biāo)系統(tǒng)運(yùn)行在仿真環(huán)境中,就像運(yùn)行在真實(shí)的物理環(huán)境中一樣,在嵌入式系統(tǒng)的開發(fā)過程中,通過建立虛擬硬件環(huán)境,使嵌入式軟件在沒有實(shí)體硬件環(huán)境的情況下運(yùn)行,能夠?yàn)檐浖_發(fā)者提供一個(gè)開發(fā)和測(cè)試的平臺(tái),開發(fā)效率大大提高,QEMU 可以模擬很多體系結(jié)構(gòu)以及硬件板子,包括ARM Cortex A9 系列的Vexpress 板子、支持ARM64 的Virt 板子以及RISC-V 的板子等。具體操作上只需要1 臺(tái)安裝了Linux 發(fā)行版的個(gè)人計(jì)算機(jī)即可,使用QEMU 虛擬機(jī)來打造ARM 實(shí)驗(yàn)平臺(tái),它具有如下特點(diǎn),見表1。
本文基于QEMU 虛擬機(jī)模擬4 核Cortex-A9 的Versatile Express 開發(fā)平臺(tái),完成Linux4.0 和根文件系統(tǒng)的移植工作,并在搭建的虛擬平臺(tái)上設(shè)計(jì)實(shí)現(xiàn)了嵌入式視頻監(jiān)控器,用戶可以在通過網(wǎng)絡(luò)遠(yuǎn)程訪問并拉取音視頻流媒體。通過該案例以驗(yàn)證基于QEMU 的嵌入式軟件開發(fā)方法是可行有效的,過程簡(jiǎn)化為如下步驟和內(nèi)容:
1)在開發(fā)平臺(tái)上建立開發(fā)環(huán)境。選擇Ubuntu、CentOS、Fedora 等Linux 發(fā)行版,下載安裝GCC 交叉編譯器等依賴軟件,下載安裝QEMU;
2)建立根文件系統(tǒng)。下載Busybox 進(jìn)行功能裁剪,制作一個(gè)最基本的根文件系統(tǒng);
3)下載開源操作系統(tǒng)Linux 源碼并編譯,選擇4.0版本;
4)編寫編譯應(yīng)用程序;
5)啟動(dòng)QEMU 運(yùn)行內(nèi)核、根文件系統(tǒng),在QEMU中執(zhí)行應(yīng)用程序,見圖1。
圖1 QEMU嵌入式系統(tǒng)開發(fā)流程
對(duì)比傳統(tǒng)的嵌入式軟件開發(fā)方法,基于QEMU 的嵌入式軟件開發(fā)方法流程更精簡(jiǎn)、開發(fā)更高效、成本更低廉,見表2。
2 視頻監(jiān)控系統(tǒng)設(shè)計(jì)
視頻監(jiān)控系統(tǒng)是一種電子系統(tǒng)或網(wǎng)絡(luò)系統(tǒng),通過攝像機(jī)查看所在位置的情況,同時(shí)將該位置情況的圖像、聲音傳送到中心控制系統(tǒng),便于對(duì)異常情況的及時(shí)發(fā)現(xiàn)、記錄和處置,廣泛應(yīng)用于公安、消防、交通、銀行、醫(yī)療、工廠等眾多行業(yè)的安全保衛(wèi)和現(xiàn)場(chǎng)管理,一般由前端攝像、傳輸、控制、顯示和記錄等主要部分組成,簡(jiǎn)而言之,視頻監(jiān)控系統(tǒng)主要包括對(duì)攝像頭采取實(shí)時(shí)拉流、設(shè)備控制等操作。本文設(shè)計(jì)實(shí)現(xiàn)了一款基于QEMU 的視頻控制系統(tǒng),該系統(tǒng)對(duì)外提供自定義私有協(xié)議和RTSP 協(xié)議,分別對(duì)外提供攝像頭的系統(tǒng)控制服務(wù)和RTSP 音視頻流媒體服務(wù)。
2.1 中心控制系統(tǒng)
中心控制系統(tǒng)采用平臺(tái)圖形用戶界面應(yīng)用程序開發(fā)框架QT 編程實(shí)現(xiàn),程序啟動(dòng)后創(chuàng)建線程等待視頻控制系統(tǒng)連接,視頻控制系統(tǒng)啟動(dòng)后完成USB 攝像頭初始化并啟動(dòng)流媒體服務(wù)。待雙方建立Socket 連接后,根據(jù)自定義私有協(xié)議,中心控制系統(tǒng)獲取到視頻控制系統(tǒng)的RTSP URL 地址,并調(diào)用視頻播放組件實(shí)時(shí)拉取音視頻流數(shù)據(jù),實(shí)現(xiàn)視頻監(jiān)控功能,見圖2。
圖2 中心控制系統(tǒng)和視頻監(jiān)控系統(tǒng)流程圖
2.2 視頻監(jiān)控系統(tǒng)
1)內(nèi)核環(huán)境準(zhǔn)備
選擇Ubuntu 發(fā)行版,下載安裝GCC 交叉編譯器等依賴軟件:sudo apt-get install libncurses5-dev gccarm-linux-gnueabi build-essential,下載安裝QEMU:sudo apt install qemu-system-arm。下載Busybox 進(jìn)行功能裁剪,制作一個(gè)最基本的根文件系統(tǒng)。下載Linux內(nèi)核源碼并編譯。
2)編寫應(yīng)用程序
RTSP 是一種網(wǎng)絡(luò)控制協(xié)議,被設(shè)計(jì)用于多媒體通信系統(tǒng)中建立和控制流媒體服務(wù)器。流媒體數(shù)據(jù)本身的傳輸并不是RTSP 的任務(wù),實(shí)現(xiàn)上還要搭配RTP、RTCP 來完成真正意義上的碼流傳輸及控制。協(xié)議分工如下:RTSP 負(fù)責(zé)建立和控制會(huì)話(默認(rèn)端口:554),基于TCP 實(shí)現(xiàn);RTP 負(fù)責(zé)傳輸流媒體數(shù)據(jù);RTCP 負(fù)責(zé)與RTP 控制流量統(tǒng)計(jì)。要實(shí)現(xiàn)視頻監(jiān)控系統(tǒng)的RTSP 音視頻流媒體服務(wù),需要實(shí)現(xiàn)圖像采集、圖像轉(zhuǎn)換、視頻編碼、視頻分發(fā)等環(huán)節(jié)步驟,見圖3。
圖3 視頻監(jiān)控系統(tǒng)RTSP服務(wù)流程圖
ffmpeg 有著強(qiáng)大的視頻采集、視頻格式轉(zhuǎn)換、視頻編碼、視頻解碼等功能,可用于音視頻的記錄、轉(zhuǎn)換,并能將其轉(zhuǎn)化為數(shù)據(jù)流。圖像采集模塊設(shè)置video4linux2 的采集方式,設(shè)置分辨率、圖像格式、采集幀率等參數(shù),并打開攝像頭(/dev/video0), 在循環(huán)中不斷采集圖像幀,然后進(jìn)行下一步的圖像轉(zhuǎn)換和編碼處理。圖像轉(zhuǎn)換模塊設(shè)置源圖像格式Y(jié)UV422 以及目標(biāo)圖像格式Y(jié)UV420,轉(zhuǎn)換后存放在AVFrame 中,給下一編碼環(huán)節(jié)使用。視頻編碼模塊設(shè)置分辨率、幀率、圖像格式、碼率等參數(shù)后,向編碼器添加1 幀上一環(huán)節(jié)的YUV420 圖像,讀取到H.264 視頻編碼幀之后傳遞給RTSP 服務(wù)模塊分發(fā)數(shù)據(jù)。
Live555 是1 套使用開放標(biāo)準(zhǔn)協(xié)議(RTP/RTCP,RTSP, SIP) 的用于多媒體拉流的開源C++ 庫。該開源庫能夠讀取,接收和處理MPEG, H.265, H.264, H.263+,DV 或者JPEG 視頻[],以及其他的音視頻編碼格式,也可以用于構(gòu)建基本的RTSP 客戶端和服務(wù)器。
基于live555 實(shí)現(xiàn)RTSP 協(xié)議服務(wù)功能, 包含OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TAERDOWN 等方法。在live555 中RTSP 是1 個(gè)攝像頭的RTSP 會(huì)話對(duì)應(yīng)1 個(gè)ServerMediaSession,而每個(gè)RTSP 會(huì)話需要傳輸視頻、音頻等碼流,而每一個(gè)流對(duì)應(yīng) ServerMediaSubSession,對(duì)于視頻流,常見的編碼格式有H.264、H.265 等,可將攝像頭的圖像編碼為H.264格式, 因此采用H264VideoFileServerMediaSubSession實(shí)現(xiàn)ServerMediaSubSession。最后將移植編譯成功的ffmpeg 和live555 二進(jìn)制文件拷貝至kmodules 共享目錄中,在QEMU 輸入框啟動(dòng)視頻監(jiān)控系統(tǒng)。
3)啟動(dòng)應(yīng)用程序
啟動(dòng)1 個(gè)帶有集成網(wǎng)絡(luò)攝像頭的QEMU 虛擬機(jī),設(shè)置參數(shù)-device usb-host,hostbus=1,hostaddr=3,其中1 和3 分別代表總線和設(shè)備值。同時(shí)指定硬件平臺(tái)、內(nèi)核數(shù)量、內(nèi)存大小、內(nèi)核鏡像路徑、共享目錄路徑等參數(shù):sudo qemu-system-arm -M vexpress-a...。最后啟動(dòng)中心控制系統(tǒng)QT 軟件,點(diǎn)擊“打開”按鈕成功拉取攝像頭實(shí)時(shí)監(jiān)控視頻,效果圖見圖4。
3 結(jié)束語
對(duì)比傳統(tǒng)的需要購買硬件開發(fā)板的嵌入式軟件開發(fā)方法,本文基于QEMU 虛擬機(jī)搭建了一個(gè)嵌入式硬件Versatile Express 的系統(tǒng)仿真環(huán)境,在此環(huán)境下實(shí)現(xiàn)了嵌入式Linux 內(nèi)核、根文件系統(tǒng)的編譯移植,并設(shè)計(jì)實(shí)現(xiàn)了一款嵌入式視頻監(jiān)控系統(tǒng)應(yīng)用程序,通過QT 中心控制系統(tǒng)實(shí)現(xiàn)了對(duì)目標(biāo)平臺(tái)(視頻監(jiān)控系統(tǒng))的遠(yuǎn)程訪問和視頻監(jiān)控,驗(yàn)證了該方法的可行性和高效性,可作為高校學(xué)生或行業(yè)初學(xué)者的實(shí)驗(yàn)平臺(tái),用于嵌入式軟件的開發(fā)及教學(xué)工作。
參考文獻(xiàn):
[1] 唐繼英.基于ARM的網(wǎng)絡(luò)顯示器硬件系統(tǒng)的設(shè)計(jì)[D].天津:河北工業(yè)大學(xué),2005.
[2] 劉付金.基于QEMU的嵌入式通信加密系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2020.
[3] 汪夢(mèng)云.BiToS視頻點(diǎn)播系統(tǒng)Peer端設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2012.
(本文來源于《電子產(chǎn)品世界》雜志2023年5月期)
評(píng)論