工控網(wǎng)首頁
>

應用設計

>

嵌入式Linux基于QML開發(fā)QtMultimedia應用

嵌入式Linux基于QML開發(fā)QtMultimedia應用

1). 簡介

使用QML語言進行QT應用程序開發(fā)可以將界面開發(fā)和邏輯控制分開,提高應用的開發(fā)周期和靈活性;另外對于多媒體應用非常重要的一點是,基于QML/QT Quick 的應用程序可以直接調(diào)用GPU進行加速,這大大提高了多媒體應用在嵌入式系統(tǒng)環(huán)境下的處理效率和資源占用,因此本文就基于QML和QT Multimedia組件介紹多媒體應用開發(fā)。

本文所演示的平臺來自于Toradex Apalis iMX6 ARM嵌入式平臺,這是一個基于NXP iMX6ARM處理器,支持雙核/四核Cortex-A9。

2). 準備

a). ApalisiMX6 ARM核心版配合Ixora載板,連接調(diào)試串口UART1到開發(fā)主機方便調(diào)試。

b). Apalis iMX6系統(tǒng)使用基于OpenEmbedded框架重新編譯的集成Qt5.9支持的ToradexLinux image release V2.8b2 版本以及對應的SDK。可以結(jié)合這里的說明自行編譯,需要修改的local.conf 文件如下,image更新方法請參考這里。

-------------------------------

IMAGE_INSTALL_append = "gstreamer1.0-plugins-bad-* gstreamer1.0-plugins-ugly-* gstreamer1.0-libav"

PACKAGECONFIG_append_pn-qtmultimedia =" gstreamer"

-------------------------------

c). 關于開發(fā)主機SDK安裝和Qt creator開發(fā)環(huán)境的配置請參考這里。

d). 演示程序使用的LCD為10inch 18bitLVDS屏幕,請參考這里修改配置uboot顯示分辨率。

e). 如果需要,可以打開QT debuglogging

./ 打開所有 debug logging

-------------------------------

$ export QT_LOGGING_RULES=*.debug=true

-------------------------------

./ 打開 multimedia 相關debuglogging

-------------------------------

$ export QT_LOGGING_RULES=*.debug=true

-------------------------------

f). 本文演示應用程序分為兩個部分,對應為兩個頁面;應用啟動后默認頁面為視頻播放(Video Player)頁面,通過點擊按鈕可以切換為攝像頭捕獲頁面(Camera Capture)頁面。下面就逐一進行一些說明。

3). QT演示程序開發(fā) – Video Player

a). 源代碼和運行效果如下:

./ 代碼

main.qml - https://github.com/simonqin09/QtQMLMultimedia/blob/master/main.qml

main.cpp - https://github.com/simonqin09/QtQMLMultimedia/blob/master/main.cpp

b). 具體要點說明如下

./ 由于QT Multimedia組件在底層也是調(diào)用GstreamerPlaybin元件進行媒體播放操作,因此在編程之前,首先可以直接使用Gstreamer pipeline在嵌入式系統(tǒng)先驗證下,確保媒體可以正常播放,沒有解碼器缺失的情況。

-------------------------------

$ gst-launch-1.0 playbin uri=file:///home/root/ready-player-one-trailer-2_h720p.mov

-------------------------------

./ main.cpp 文件用于識別輸入變量并通過下面代碼將其傳遞給QML來指定媒體文件位置。

-------------------------------

QQmlApplicationEngine engine;

engine.rootContext()->setContextProperty("mysource",source);

-------------------------------

./ main.qml 文件用于實現(xiàn)video player界面以及媒體播放。

-         媒體播放主要由 ”Mediaplayer”元素和 ”VideoOutput” 元素來配合實現(xiàn)。然后將其顯示在定義好的640x480分辨率的rectangle中。

-         定義了一些控制播放和音量的按鍵,當點擊時候會有顏色的變化指示。

-         使用了 Connections 用于信號觸發(fā)操作,這里對應為當發(fā)現(xiàn)媒體播放停止的時候自動將 Play 按鍵的顏色變更為初始狀態(tài)。

-         在頁面切換按鍵處,使用了loader功能來加載 Camera Capture 頁面,需要注意的是同時也需要在main.qml 中創(chuàng)建一個 CameraMode.qml 的實例以便于操作。

  -------------------------------

   CameraMode {

              id: cameramode1

              anchors.fill: parent

              z: 1

          }

  -------------------------------

4). QT演示程序開發(fā) – Camera Capture

a). 源代碼和運行效果如下:

./ 代碼

CameraMode.qml - https://github.com/simonqin09/QtQMLMultimedia/blob/master/CameraMode.qml

b). 具體要點說明如下

./ QML文件首先通過Item和Component組合,并通過定義函數(shù)show 來加載Component 也就是Camera Capture主頁面。這里為了控制CameraMode.qml不在程序一啟動就自動加載,增加了一個從main.qml傳遞過來的變量 camera_mode_visible。

./ 攝像頭的capture功能由 Camera 元素和Videooutput 元素配合實現(xiàn),同樣將camera capture畫面顯示到預定義好的 640x480 分辨率的 rectangle 中。

./ 使用 ListView 來顯示目前系統(tǒng)所連接的所有可用camera id,當點擊時候?qū)崿F(xiàn)camera id的切換以及重點顯示。

./ 定義了 start 和 stop 按鍵,用于開始和停止所選定camera id的圖像捕獲。

./ 定義截圖按鍵,通過 Camera 元素里面的 imageCapture屬性實現(xiàn)將所保存的圖片顯示在圖像捕獲窗口的下方區(qū)域。

./ 定義了 pagedestroy 函數(shù),用于從當前頁面返回video player 頁面。

5). 程序部署配置

a). 將編譯好的可執(zhí)行程序 “videotest”和所需要的視頻文件“ready-player-one-trailer-2_h720p.mov” 復制到ApalisiMX6模塊“/home/root” 目錄下。

b). 配置程序開機自啟動

./ 修改 /usr/bin/x-window-manager文件為如下

-------------------------------

RET=1

while [ $RET -ne 0 ]; do

       cd/home/root

      /home/root/videotest -urlfile:///home/root/ready-player-one-trailer-2_h720p.mov

      RET=$?

done

-------------------------------

6). 程序運行演示

a). 開機后,系統(tǒng)自動啟動程序,如下所示

./ video player

 

./ camera capture

系統(tǒng)上面一共連接了兩個攝像頭,第一個目前正在cpature的是MIPI CSI OV5640 攝像頭模塊,第二個是一個Logitech 720P USB 攝像頭。

b). CPU占用率,通過 top 命令查看

./ video player 播放視頻狀態(tài),約為20% 左右。

-------------------------------

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                          

640 root      20   0  384796  45628  34032 S  19.8  4.4   2:15.30 videotest                                                                        

554 root     19  -1  174652  12404   8684 S   3.3  1.2   0:20.38 Xorg                                                                            

678 root     20   0    4796   2352   1920 R   1.2  0.2  0:00.19 top

-------------------------------

./ camera capture 開始捕獲圖像狀態(tài),約為21% 左右。

-------------------------------

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                          

640 root      20   0  435508  45092  34012 S  21.6  4.4   1:46.03 videotest                                                                        

554 root     19  -1  174652  12404   8684 S   3.3  1.2   0:16.26 Xorg                                                                            

676 root     20   0    4796   2368   1936 R   1.5  0.2  0:01.80 top

-------------------------------

6). 總結(jié)

本文基于NXP iMX6嵌入式平臺在嵌入式linux系統(tǒng)下測試基于QML和QT Multimedia的多媒體應用,通過代碼說明和程序運行結(jié)果可見,QML和QT multimedia的結(jié)合確實可以快速高效的構建一個界面化的多媒體應用,同時得益于QML的GPU加速以及針對NXP iMX系列的對應加速優(yōu)化,其執(zhí)行效率也非常之高。當然,在進行開發(fā)過程中也發(fā)現(xiàn)了一些問題,比如不夠靈活,不能像直接使用Gstreamer框架一樣自行定義pipeline元件,另外QML和C++的配合也需要一些學習和經(jīng)驗才能靈活掌握,因此具體采用哪種方式還是要根據(jù)實際需要來決定。

審核編輯(
王靜
)
投訴建議

提交

查看更多評論
其他資訊

查看更多

Verdin AM62 LVGL 移植

基于 NXP iMX8MM 測試 Secure Boot 功能

隆重推出 Aquila - 新一代 Toradex 計算機模塊

Verdin iMX8MP 調(diào)試串口更改

NXP iMX8MM Cortex-M4 核心 GPT Capture 測試