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