關 閉

        新聞中心

        EEPW首頁 > 安全與國防 > 設計應用 > 基于QEMU視頻監控系統的設計與實現*

        基于QEMU視頻監控系統的設計與實現*

        作者:連赟(浙江開放大學,杭州 310012) 時間:2023-05-25 來源:電子產品世界 收藏
        編者按:從嵌入式的發展背景以及產品開發過程中出現的開發周期時間長、軟硬件錯誤難定位等問題出發,基于QEMU虛擬化技術,通過模擬硬件+軟件的方式設計實現了一種基于QEMU的嵌入式軟件開發方法,最后設計實現了一款視頻監控系統驗證該方案的可行性。通過實驗表明,基于QEMU的嵌入式軟件開發方法可在脫離硬件產品約束的情況下快速進行軟件的功能開發和系統測試,提高嵌入式軟件開發效率。

        *基金項目: 1. 浙江開放大學312人才培養工程課題研究成果,項目編號:60

        本文引用地址:http://www.104case.com/article/202305/446963.htm

        2. 浙江開放大學2022年專業教學團隊建設項目,項目編號:ZYJXTD202202

        0 引言

        系統是軟硬件相結合、定制化、產品化相結合的復雜性系統工程,它涉及半導體、電子信息、信號處理、軟件工程等多學科的知識與技能,已經廣泛地應用于消費電子、國防工業、物聯網、家居安防、政務教育等諸多領域[1],并且隨著操作系統的應用和技術的成熟,產品更加多樣化,迭代速度更加快速。

        在設計開發某款產品時,業內常見的做法通常會選用某款開發板,根據產品需求訂制所需CPU 型號、RAM、ROM、電源模塊、顯示模塊等硬件環境,選定操作系統平臺及該平臺上所使用的各項開發工具,例如編譯器、鏈接器等。根據廠家的硬件規格與軟件說明編譯出在目標平臺(開發板)上運行的鏡像文件,通過JTAG 等燒錄工具燒錄到目標平臺上。完成軟硬件環境的搭建后,之后才進入嵌入式應用程序的開發環節。

        然而,嵌入式系統開發前期過程中存在著硬件經濟成本高、環境搭建復雜繁瑣、軟件開發周期長、問題錯誤定位難、學習者學習成本高等問題,特別對于初學者在遇到開發板硬件問題時,較難判斷問題原因以及尋求一對一指導解決。如何解決上述諸多問題,已成為嵌入式軟件從業者迫切需要研究的問題。

        1 軟件開發

        最初是由法國程序員Fabrice Bellard 開發的一個開源模擬器,廣泛應用于虛擬化和硬件仿真。能夠完成用戶程序模擬和系統虛擬化模擬。用戶程序模擬指的是QEMU 能夠將一個平臺編譯的二進制文件運行在另一個不同的平臺,如一個ARM 指令集的二進制程序,通過QEMU 的TCG(Tiny CodeGenerator)引擎的處理之后,ARM 指令被轉換成TCG中間代碼,然后再轉換成目的平臺的代碼。系統虛擬化模擬是指QEMU 能夠模擬出一臺擁有自己的虛擬CPU、芯片組、虛擬內存以及各種虛擬外部設備的完整系統虛擬機,能夠將與物理計算機完全一致的硬件視圖呈現在虛擬機中運行的操作系統和應用軟件上。QEMU 能夠模擬的平臺很多,包括x86、ARM、MIPS等等,比如QEMU 可以虛擬一個基于x86 架構PC 主機的基于ARM 架構的開發板,運行嵌入式的和應用程序。

        QEMU 通過支持對ARM 平臺的指令級仿真,使目標系統運行在仿真環境中,就像運行在真實的物理環境中一樣,在嵌入式系統的開發過程中,通過建立虛擬硬件環境,使嵌入式軟件在沒有實體硬件環境的情況下運行,能夠為軟件開發者提供一個開發和測試的平臺,開發效率大大提高,QEMU 可以模擬很多體系結構以及硬件板子,包括ARM Cortex A9 系列的Vexpress 板子、支持ARM64 的Virt 板子以及RISC-V 的板子等。具體操作上只需要1 臺安裝了Linux 發行版的個人計算機即可,使用QEMU 虛擬機來打造ARM 實驗平臺,它具有如下特點,見表1。

        1684990676167417.png

        本文基于QEMU 虛擬機模擬4 核Cortex-A9 的Versatile Express 開發平臺,完成Linux4.0 和根文件系統的移植工作,并在搭建的虛擬平臺上設計實現了嵌入式視頻監控器,用戶可以在通過網絡遠程訪問并拉取音視頻流媒體。通過該案例以驗證基于QEMU 的嵌入式軟件開發方法是可行有效的,過程簡化為如下步驟和內容:

        1)在開發平臺上建立開發環境。選擇Ubuntu、CentOS、Fedora 等Linux 發行版,下載安裝GCC 交叉編譯器等依賴軟件,下載安裝QEMU;

        2)建立根文件系統。下載Busybox 進行功能裁剪,制作一個最基本的根文件系統;

        3)下載開源操作系統Linux 源碼并編譯,選擇4.0版本;

        4)編寫編譯應用程序;

        5)啟動QEMU 運行內核、根文件系統,在QEMU中執行應用程序,見圖1。

        1684990736214055.png

        圖1 QEMU嵌入式系統開發流程

        對比傳統的嵌入式軟件開發方法,基于QEMU 的嵌入式軟件開發方法流程更精簡、開發更高效、成本更低廉,見表2。

        1684990809321988.png

        2 設計

        是一種電子系統或網絡系統,通過攝像機查看所在位置的情況,同時將該位置情況的圖像、聲音傳送到中心控制系統,便于對異常情況的及時發現、記錄和處置,廣泛應用于公安、消防、交通、銀行、醫療、工廠等眾多行業的安全保衛和現場管理,一般由前端攝像、傳輸、控制、顯示和記錄等主要部分組成,簡而言之,主要包括對攝像頭采取實時拉流、設備控制等操作。本文設計實現了一款基于QEMU 的視頻控制系統,該系統對外提供自定義私有協議和RTSP 協議,分別對外提供攝像頭的系統控制服務和RTSP 音視頻流媒體服務。

        2.1 中心控制系統

        中心控制系統采用平臺圖形用戶界面應用程序開發框架QT 編程實現,程序啟動后創建線程等待視頻控制系統連接,視頻控制系統啟動后完成USB 攝像頭初始化并啟動流媒體服務。待雙方建立Socket 連接后,根據自定義私有協議,中心控制系統獲取到視頻控制系統的RTSP URL 地址,并調用視頻播放組件實時拉取音視頻流數據,實現視頻監控功能,見圖2。

        1684990951318859.png

        圖2 中心控制系統和視頻監控系統流程圖

        2.2 視頻監控系統

        1)內核環境準備

        選擇Ubuntu 發行版,下載安裝GCC 交叉編譯器等依賴軟件:sudo apt-get install libncurses5-dev gccarm-linux-gnueabi build-essential,下載安裝QEMU:sudo apt install qemu-system-arm。下載Busybox 進行功能裁剪,制作一個最基本的根文件系統。下載Linux內核源碼并編譯。

        2)編寫應用程序

        RTSP 是一種網絡控制協議,被設計用于多媒體通信系統中建立和控制流媒體服務器。流媒體數據本身的傳輸并不是RTSP 的任務,實現上還要搭配RTP、RTCP 來完成真正意義上的碼流傳輸及控制。協議分工如下:RTSP 負責建立和控制會話(默認端口:554),基于TCP 實現;RTP 負責傳輸流媒體數據;RTCP 負責與RTP 控制流量統計。要實現視頻監控系統的RTSP 音視頻流媒體服務,需要實現圖像采集、圖像轉換、視頻編碼、視頻分發等環節步驟,見圖3。

        1684991022468626.png

        圖3 視頻監控系統RTSP服務流程圖

        ffmpeg 有著強大的視頻采集、視頻格式轉換、視頻編碼、視頻解碼等功能,可用于音視頻的記錄、轉換,并能將其轉化為數據流。圖像采集模塊設置video4linux2 的采集方式,設置分辨率、圖像格式、采集幀率等參數,并打開攝像頭(/dev/video0), 在循環中不斷采集圖像幀,然后進行下一步的圖像轉換和編碼處理。圖像轉換模塊設置源圖像格式YUV422 以及目標圖像格式YUV420,轉換后存放在AVFrame 中,給下一編碼環節使用。視頻編碼模塊設置分辨率、幀率、圖像格式、碼率等參數后,向編碼器添加1 幀上一環節的YUV420 圖像,讀取到H.264 視頻編碼幀之后傳遞給RTSP 服務模塊分發數據。

        Live555 是1 套使用開放標準協議(RTP/RTCP,RTSP, SIP) 的用于多媒體拉流的開源C++ 庫。該開源庫能夠讀取,接收和處理MPEG, H.265, H.264, H.263+,DV 或者JPEG 視頻[],以及其他的音視頻編碼格式,也可以用于構建基本的RTSP 客戶端和服務器。

        基于live555 實現RTSP 協議服務功能, 包含OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TAERDOWN 等方法。在live555 中RTSP 是1 個攝像頭的RTSP 會話對應1 個ServerMediaSession,而每個RTSP 會話需要傳輸視頻、音頻等碼流,而每一個流對應 ServerMediaSubSession,對于視頻流,常見的編碼格式有H.264、H.265 等,可將攝像頭的圖像編碼為H.264格式, 因此采用H264VideoFileServerMediaSubSession實現ServerMediaSubSession。最后將移植編譯成功的ffmpeg 和live555 二進制文件拷貝至kmodules 共享目錄中,在QEMU 輸入框啟動視頻監控系統。

        3)啟動應用程序

        啟動1 個帶有集成網絡攝像頭的QEMU 虛擬機,設置參數-device usb-host,hostbus=1,hostaddr=3,其中1 和3 分別代表總線和設備值。同時指定硬件平臺、內核數量、內存大小、內核鏡像路徑、共享目錄路徑等參數:sudo qemu-system-arm -M vexpress-a...。最后啟動中心控制系統QT 軟件,點擊“打開”按鈕成功拉取攝像頭實時監控視頻,效果圖見圖4。

        1684991180475087.png

        3 結束語

        對比傳統的需要購買硬件開發板的嵌入式軟件開發方法,本文基于QEMU 虛擬機搭建了一個嵌入式硬件Versatile Express 的系統仿真環境,在此環境下實現了嵌入式Linux 內核、根文件系統的編譯移植,并設計實現了一款嵌入式視頻監控系統應用程序,通過QT 中心控制系統實現了對目標平臺(視頻監控系統)的遠程訪問和視頻監控,驗證了該方法的可行性和高效性,可作為高校學生或行業初學者的實驗平臺,用于嵌入式軟件的開發及教學工作。

        參考文獻:

        [1] 唐繼英.基于ARM的網絡顯示器硬件系統的設計[D].天津:河北工業大學,2005.

        [2] 劉付金.基于QEMU的嵌入式通信加密系統設計與實現[D].西安:西安電子科技大學,2020.

        [3] 汪夢云.BiToS視頻點播系統Peer端設計與實現[D].武漢:華中科技大學,2012.

        (本文來源于《電子產品世界》雜志2023年5月期)



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 台江县| 山阳县| 岳普湖县| 横山县| 商水县| 安化县| 巨野县| 沛县| 恩施市| 呼图壁县| 开鲁县| 达拉特旗| 彭泽县| 于都县| 永福县| 蒲城县| 三都| 阿克| 布尔津县| 镇安县| 昌宁县| 灵山县| 资兴市| 屏南县| 东阳市| 北川| 上犹县| 德惠市| 金塔县| 绥化市| 阿合奇县| 固始县| 林芝县| 门源| 厦门市| 汉源县| 屏东县| 兴安盟| 余干县| 姜堰市| 湟中县|