1、概述
英創公司推出的ESM8000主板搭載了NXP i.MX8M Mini Quad 64位處理器,主CPU為主頻1.6GHz的四核ARM Cortex-A53,并且帶有一個視頻處理單元(VPU),能夠提供硬件解碼和編碼的功能,解碼支持的格式有1080p60 HEVC/H.265,H.264,VP9,VP8等,編碼支持的格式有1080p60 H.264,VP8等。對視頻編解碼有一定需求的應用,最好選擇帶有VPU的主板進行開發。因為在沒有VPU的情況下,CPU只能通過軟件計算來進行編解碼,效率很低并且會占用大量CPU資源,而通過VPU來編解碼能夠極大的節約CPU資源,并且處理的速度也比CPU快很多。
在ESM8000主板中,已經集成了Qt-5.15,用戶可以通過Qt來實現用戶圖形界面的開發,這部分我們已經在《ESM8000主板圖形界面編程簡介》中比較詳細的介紹過了,文章在最后提到了如果要想調用VPU進行解碼,就需要通過QML界面或者Gstreamer工具。在ESM8000主板中已經集成了Gstreamer工具和一些專用插件,這些插件就提供了使用VPU進行編解碼的功能。為了支持在Qt中調用Gstreamer工具實現視頻的處理,ESM8000主板中移植了專用插件qmlsink,用戶無需進行特殊的設置或者操作,使用標準的QML語言編程即可,當涉及到視頻處理的部分,系統就會自動通過Gstreamer的插件調用vpu來處理視頻。
所以對于熟悉QML的用戶來說,可以在ESM8000主板上直接采用標準的qml語言編程來實現應用,不需要其他特殊設置,十分方便。對于QML不太熟悉的用戶來說,英創公司提供了一個基于QML語言實現的視頻顯示界面,用戶可以通過在傳統Qt C++的實現的窗口中嵌入這個現成的界面來實現對應的功能。我們想通過這種方式,讓客戶還是可以使用熟悉的Qt C++環境來編程,而不必花費更多的時間去學習QML語言的使用。下面我們以顯示網絡攝像頭監控畫面為例,來講解如何調用現成的QML界面。
2、Qt C++調用QML實現視頻顯示
英創公司提供一個現成的基于QML語言實現的視頻顯示界面ipcamera1.qml,這個界面可以顯示本地視頻或者網絡攝像頭的畫面。方案的核心就是利用了Qt提供的quickWidget類來嵌入QML界面,這個widget類專門用于顯示Qt Quick(Qt提供支持QML語言的庫以及函數)用戶界面。在Qt的官方網站中對quickWidget有詳細的說明https://doc.qt.io/qt-5/qquickwidget.html,有興趣的客戶可以參考。
首先在創建的工程中導入英創公司提供的視頻顯示界面ipcamera1.qml,在這里我們選擇導入到Qt Resource中。右鍵工程選擇添加新文件,在模板中選擇Qt Resource File,單擊下一步,然后輸入名稱,例程中輸入的名稱為qml。可參考下圖:
成功后,會自動生成一個qml.qrc文件,這時需要進行初始設置,并添加視頻顯示界面ipcamera1.qml。首先點擊添加按鈕,選擇添加前綴,在前綴中輸入想設置的路徑(在引用資源的時候會使用到),例程中設置為/,如下圖:
設置完后,再次點擊添加按鈕,選擇添加文件,在文件瀏覽框中選中復制到工程目錄下的ipcamera1.qml文件,成功后可以在qml.qrc的瀏覽窗中看到對應的文件,如下圖:
導入QML文件的部分就已經完成了,用戶只需要在程序中增加對quickWidget的初始化即可,可參考下面的代碼:
w = new QQuickWidget; w->move(0,0); w->resize(640, 360); w->setSource(QUrl(("qrc:/ipcamera1.qml")));
如果需要和QML界面中的內容進行交互,可以通過信號與槽來實現。Qt C++中發送信號,在QML界面中定義槽函數響應,或是在QML界面中發送信號,在Qt C++中定義槽函數來響應都是可以的。例程中實現了一些按鈕,對QML界面進行簡單的操作,比如開始、停止等功能。在Qt的網站上也有比較詳細的說明:https://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html。在英創公司提供的例程中,加入了開始、停止、縮放、旋轉以及切換清晰度等操作,都是通過界面上C++的控件類(pushButton、comoBox等)發送信號來實現的,具體可以參考例程中的代碼。
例程采用了比較常用的網絡攝像頭,測試效果如下:
3、總結
從程序的截圖中可以看出來,在使用VPU解碼的情況下,幾乎不會對CPU造成負載,用戶可以利用CPU資源執行其他操作。
通過這種方式,我們希望讓用戶不必花過多時間對QML語言編程進行學習,以此能夠幫助用戶提升應用程序開發的時間。感興趣的客戶可以和英創的工程師聯系獲取完整的測試代碼。
成都英創信息技術有限公司 028-8618 0660