本站小編為你精心準備了車載多媒體軟件開發思考參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
摘要:
設計了一種基于嵌入式系統的高清晰、便攜式的車載播放系統。該播放系統的軟件設計以Mplayer為后臺,實現對音視頻文件的解碼播放等工作,并以Qt的基礎類庫為基礎設計了嵌入式多媒體播放器的前端控制圖形界面,通過創建QProcess進程,實現對播放過程的控制,與后臺Mplayer進行通信,實時獲取并顯示播放信息,并在指定窗口對音視頻碼流進行輸出顯示。
關鍵詞:
汽車多媒體;車載播放;嵌入式系統;多媒體播放器
目前,國內車載電子設備市場極度缺乏多媒體綜合軟件,該軟件能有效地將車載導航、影音圖像、倒車雷達、娛樂互動等多個功能整合,方便乘客和車主的使用[1]。將多種娛樂和使用功能整合統一,使得設備簡潔美觀,同時降低了重復安裝的成本和投入。可以極大地減少車內空間消耗,降低整車油耗[2]。多媒體共屏展示也能保證駕駛員的操作強度,保證行車安全。因此,將行車信息、娛樂互動、交流通信、車載導航等功能集于一體的嵌入式綜合媒體系統符合市場和環境的發展要求[3]。
1車載嵌入式播放器總體設計
出于應用領域、自帶資源、可擴展資源、功耗等多方面的考慮,選擇Linux內核為嵌入式多媒體播放器的操作系統核心。將多媒體技術應用于嵌入式系統中面臨著諸多的技術難題,嵌入式設備的特點決定了其資源通常非常有限,而有限的資源意味著需要進行多方面技術的優化[4]。首先,嵌入式設備采用蓄電池提供能源,所以對系統的功耗要求比較嚴格;第二,嵌入式設備上通常沒有實用的圖像加速器,聲卡等硬件加速設備的支持;第三,不存在DirectX,DirectShow等高層多媒體的支持。基于上述考慮,有必要設計適用于嵌入式應用的嵌入式處理器,嵌入式操作系統。根據嵌入式多媒體播放器的功能需求及技術特點,通常將嵌入式多媒體播放器的體系結構劃分為硬件層、內核層和應用層,具體如圖1所示。系統的硬件層的硬件平臺包括嵌入式微處理器和外圍設備,通過合理選型和匹配可以完成滿意的底層硬件組合。本系統的嵌入式MCU使用三星公司的S3C2410高速微處理器,S3C2410高速微處理器作為整個硬件系統的控制核心,接收、處理相關數據并實時發出控制指令。與其配合的系統外圍設備是完成系統功能的必要組建和模塊,涉及系統存儲模塊FLASH和E2PROM,LCD輸出單元、主控外圍電路和音頻輸出模塊等。軟件部分包含應用層和內核層兩個部分。應用層包含嵌入式Linux操作系統和硬件驅動程序,包括BootLoader,Linux內核,根文件系統3部分。應用層包含嵌入式用戶應用程序、音頻解碼器和GUI。本系統選擇嵌入式Linux操作系統作為操作系統[5]。
2操作系統平臺的構建
內核是整個Linux系統的核心,根據實際情況針對內核的配置進行選擇,本質上指根據開發系統的功能需求對已有的操作系統進行選擇,保留開發需求的系統單元,刪除不需要的模塊單元。在本系統中,嵌入式Linux內核選擇ARMLinux內核。Linux內核的配置系統由Makefile、配置文件(config.in)、配置工具組成[6]。完成內核的數據參數配置后,不能將程序數據直接下載到嵌入式系統中進行調試運行,因為此時數據仍然以源代碼的形式存在。此時,為了生成最終能在嵌入式操作系統上運行的可執行代碼[7],需要進一步對內核進行編譯。過程結束后,Image和zImage兩個內核映像文件會在arch/arm/boot目錄下生成,zImage為壓縮后的映像文件,Image為正常大小的映像文件。得到內核映像文件后,首先在開發板使用的宿主機(PC)上建立一個tftp服務,使用DNW工具,在開發板上電時按任意鍵進入UBoot提示符,執行以下命令。在嵌入式操作系統正常運行時,需要使用根文件系統支持各種功能[8],在內核剛啟動運行時根文件系統需要掛載起來用于支持訪問外部設備,同時完成內核模塊應用程序的裝載和運行,避免出現Kernelpanic的情況,防止系統內核在啟動時沒有根文件的支持。在實際應用中,嵌入式操作系統使用動態隨機存取器、同步動態隨機存取器、FLASH存儲器作為存儲設備[9]。基于存儲設備,使用JFFS2,YAFFS,CRAMFS,ROMFS,RAMFS等常見系統作為存儲設備的嵌入式文件系統。在本系統中,選擇NANDFLASH作為硬件提案所使用的存儲芯片,選用NANDFLASH上使用比較廣泛的Cramfs文件系統作為嵌入式根文件系統。嵌入式Linux操作系統的啟動流程如圖2所示。系統啟動流程包括六個步驟:(1)系統復位,從地址0x00開始執行,進入步驟(2);(2)啟動Bootloader模塊,進入步驟(3);(3)判斷系統是否進入Linux,啟動Linux內核映像,不啟動則進入Uboot的命令操作環境,如果啟動內核,進入步驟(4);(4)系統從NANDFLASH加載內核到內存中,完成對硬件設備的初始化工作,進入步驟(5);(5)掛載根文件系統,執行init進程,并從/etc/inittab取得配置文件,進入步驟(6);(6)提示執行用戶應用程序或用戶登錄信息。
3視頻播放器軟件設計
3.1基于Mplayer實現多媒體播放器Mplayer是一個Linux下的電影播放器(也能運行在許多其他的Unices和非X86的CPU上)。Mplayer的邏輯結構可以分為四個層次,即:輸入層、分流層、解碼層和輸出層,其結構如圖3所示。本文選擇Mplayer作為后臺設計播放軟件。利用Qt/E為軟件平臺設計GUI圖形控制界面,對多媒體播放器的播放過程進行控制。由于條件限制,本實驗在宿主機上編譯并安裝了Mplayer,通過Qt設計基于X86的多媒體播放器。
3.2軟件總體模塊設計由于Qt/Embedded工具可以繞過XWindowsSystem協議客戶端庫,直接讀/寫幀緩存的FrameBuffer的數據信息,因此實現Qt類庫對幀緩存的直接讀/寫操作,使用基于Qt/Embedded的應用程序可以完成。本系統使用嵌入式Linux作為操作系統,通過Qt的圖形平臺和函數庫完成嵌入式多媒體綜合播放。多媒體播放系統采用模塊化設計思想,其架構如圖4所示。嵌入式多媒體播放器包含五個主要的模塊:(1)I/O(輸入/輸出模塊):用于多媒體文件的讀入和輸出。(2)UI(用戶界面單元):用戶界面單元的作用是方便用戶操作嵌入式媒體播放器的各項功能,提供良好的人機操作互動界面和使用體驗。(3)插件接口單元:讀入多媒體數據(通過輸入插件獲取I/O模塊發送過來的數據)、調用Mplayer對文件進行解碼播放、文件總的時間長度、編碼類型、比特率等信息的獲取、暫停、快進、快退、停止、輸出、輸入等的動作,輸入動作具體指將輸出插件完成解碼的數據信息傳送到系統輸出輸入單元的過程。(4)Mplayer解碼單元:為了對不同類型的多媒體文件進行解碼操作,系統選擇的Mplayer解碼單元由分離器、音視頻解碼器等部分組成。(5)GUI單元:為了方便快捷的產生讀/寫FrameBuffer以及用戶界面,GUI單元通過使用Qt/E嵌入式工具作為底層圖形庫。軟件總體模塊中各單元之間的相互連接關系是:通過輸入/輸出單元讀入音視頻信息數據,用戶界面單元在接收到播放信息指令后,調用插件模塊相應的函數,產生相應的信號,調用Mplayer完成對多媒體文件的解碼,完成解碼之后將數據送到I/O模塊輸出。
3.3控制流程設計主程序設計流程如圖5所示。當從菜單項打開視頻文件時會觸發triggered()信號,執行slotopen()槽函數,調用Qfiledialog的getOpenFileName()函數從對話框中選擇要播放的視頻文件。系統首先判斷文件格式是否為*.avi格式,如果是,則創建一個Qprocess進程,通過該進程調用Mplayer后臺對視頻文件進行播放,并在指定區域進行輸出顯示。
4交互式圖形界面設計
QImage類提供了一種與硬件訪問無關的圖片存儲方式。QPainter則主要用來完成繪圖事件。QPushButton提供了圖形用戶界面最長用到的命令按鈕部件。此GUI交互界面利用QtDesigner以QMainWindow類為基礎設計了主框架,包括菜單欄以及狀態欄等;同時,以QWidget類為基礎創建了一個對視頻播放進行控制的插件接口,并通過合理的布局與主窗體組合在一起。
5播放系統測試在指定目錄打開
avi格式視頻文件,運行效果如圖7所示。在播放過程中,通過狀態欄實時顯示當前視頻文件的播放時間。通過界面下方的按鈕對播放器的播放過程進行音量調節、暫停、快進、快退、停止等控制,基本達到了預期的效果。打開視頻文件時,終端開始輸出文件的加載路徑,開始讀取并輸出ANS_TIME_POSITION(視頻播放時間)參數值,在Qt與Mplayer之間完成了通信。當在控制臺實施各種控制操作時,在終端輸出執行的操作動作并發送該信號,調用相應的槽函數完成對視頻播放的控制動作。以上是在主機上運行播放程序執行播放控制的過程。在主機上運行的Qt程序是基于X結構的,而在實際的嵌入式開發中,需要直接通過FrameBuffer進行顯示。由于條件限制及其他因素,通過qvfb模擬程序在嵌入式開發板中運行的情況,如圖8所示。從圖8中可以看出,在qvfb中運行該程序時,菜單項的中文顯示出現了方塊型的亂碼,這說明菜單項已經得到了識別,只是qtopia中缺少相應的中文字體庫,在默認的情況下,qvfb會調用字體庫中的默認字體,這樣在顯示中文時會出現如上問題。可以在網絡上下載相應的中文字體庫并拷貝到Trolltech/Qtopiacoreopensource4.3.0/lib/fonts中。
6結論
本文通過對車載播放系統的設計,根據車載嵌入式多媒體播放器的功能需求和技術特點,選擇一款合適的嵌入式處理器,在此平臺上構建了功能完整的嵌入式Linux系統開發平臺。經過對Qt的GUI設計的研究,以Qt的基礎類庫為前端設計嵌入式多媒體播放器的前端控制圖形界面。通過創建QProcess進程,實現了對播放過程的控制,與后臺Mplayer進行通信,實時讀取并顯示播放信息,并在指定窗口對音視頻碼流進行輸出顯示。通過測試表明,本系統達到了應用于車載音視頻播放的要求,對相關開發具有重要參考價值。
作者:李飛 單位:云南工商學院 設計學院