最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

嵌入式Qt開發(fā)一個視頻播放器

2023-02-20 22:43 作者:碼農(nóng)愛學(xué)習-B站  | 我要投稿

上篇文章:嵌入式 Qt開發(fā)一個音樂播放器,使用Qt制作了一個音樂播放器,并在OK3568開發(fā)板上進行了運行測試,實際測試效果還不錯。

本篇繼續(xù)來實現(xiàn)一個Qt視頻播放器軟件,可以實現(xiàn)視頻列表的顯示與選擇播放等,先來看下最終的效果:

本篇的Qt代碼從野火開發(fā)板的例程中移植修改而來,下面分析下程序的代碼結(jié)構(gòu)。

1 視頻播放器開發(fā)總體結(jié)構(gòu)

整個Qt視頻播放器項目的代碼結(jié)構(gòu)如下:

  • 主代碼中是視頻播放器相關(guān)的代碼,包括:

    • 視頻播放器主界面

    • 視頻名列表界面:在視頻播放時可以查看視頻列表并切換視頻

    • Qt視頻播放界面:實現(xiàn)單純的視頻播放

    • 操作按鈕界面:實現(xiàn)播放、暫停、繼續(xù)、上一個、下一個、進度調(diào)節(jié),音量調(diào)節(jié)

    • 播放預(yù)覽列表界面:在進入視頻播放之前的視頻預(yù)覽列表界面

  • Ui代碼中使用一些Qt的基本功能,包括:

    • 一個Qt界面基類

    • 滑條功能類

    • 圖標按鈕顯示類

    • 列表功能類

    • 工具類

    • 視頻幀解析

    • 頁面列表類

  • Skin中是一些圖片資源和字體/皮膚定義

  • 最后是編譯的中間文件和編譯結(jié)果存儲的目錄

下面分類介紹了程序的主要代碼實現(xiàn)。

2 通用界面代碼

上篇介紹音樂播放器時,介紹過一些自定義控件的代碼,本篇的視頻播放器,可以復(fù)用這些代碼:

  • qtwidgetbase:窗口基類,該類的一個主要功能是可以向窗口內(nèi)添加圖片形式的按鈕

  • qtsliderbar:用于實現(xiàn)自定義滑條控件,分為水平滑條與豎直滑條

  • qtpixmapbutton:圖片按鈕,支持未按下和按下后的兩種樣式的圖片顯示

  • qtlistwidget :基礎(chǔ)的列表顯示

相比于音樂播放器,視頻播放器還需要其它額外的功能,如下:

2.1 qttoolbar

工具條的基類,通過創(chuàng)建一個QPropertyAnimation屬性動畫對象,主要實現(xiàn)工具條的顯示與隱藏的動畫效果。

例如,在用戶無操作一段時間后,將上方的標題欄和下方的播放工具欄隱藏。

主要代碼如下:

2.2 qtvideowidgetsurface

視頻幀解析類,繼承自QAbstractVideoSurface類,這是一個抽象基類,通過實現(xiàn)它的派生類可以獲取來自QMediaPlayer或QCamera視頻的幀。

  • supportedPixelFormats 用于向Qt返回幀流的圖像類型

  • present 用于獲取到每一幀

2.3 qtpagelistwidget

頁面形式的預(yù)覽排布以及左右頁面的滑動切換

2.3.1 QtPageListWidgetItem

該類用于表示列表中的每一個項,可以是字符,并且可以帶有圖片(圖標):

2..3.2 QtPageListWidget

注意,該類和qtlistwidget類的功能比較相似

3 視頻播放器代碼

首先是整體的主界面部分,進行各項功能的初始化顯示,主要包括:

  • 播放列表初始化(視頻預(yù)覽列表界面)

  • 視頻播放界面初始化(先隱藏播放界面)

界面效果如下:

主要代碼邏輯:

初始化各個界面后,還要連接對應(yīng)的槽函數(shù),如切換視頻播放列表中的視頻時的處理等。

3.1 視頻播放

視頻播放部分,主要有兩部分功能:

  • 視頻解碼播放:使用Qt自帶的媒體播放器組件進行音頻播放

  • 播放時的按鈕操作:實現(xiàn)播放、暫停、繼續(xù)、上一個、下一個、進度調(diào)節(jié),音量調(diào)節(jié)

3.1.1 QMediaPlayer播放視頻

這里使用Qt自帶的QMediaPlayer組件進行視頻的播放,QMediaPlayer播放視頻于播放音頻的步驟類似。

本項目的視頻播放初始化部分:

3.1.2 播放操作按鈕

視頻播放時,需要用到播放、暫停、繼續(xù)、上一個、下一個、進度調(diào)節(jié)、音量調(diào)節(jié)等操作按鈕,這里的對應(yīng)按鈕使用圖標顯示為對應(yīng)的按鈕,通過加載QPixmap來實現(xiàn):

3.2 播放列表

播放列表功能用來實現(xiàn)視頻文件的顯示,以及手動指定切換要播放的視頻。

3.2.1 讀取視頻文件

通過讀取指定目錄下的文件,查找類型為mp4的視頻文件,構(gòu)造視頻播放列表。

3.2.2 視頻列表界面

視頻列表的具體界面實現(xiàn),主要是在對應(yīng)的矩形位置,顯示各個視頻文件的名稱:

3.3 視頻預(yù)覽列表

在進入正式的視頻播放前,會先有一個視頻預(yù)覽列表界面,在這個界面會列出指定搜索目錄下的所有視頻,點擊任意視頻圖標即可進入播放界面。


此部分的列表繪制代碼邏輯如下:


4 編譯與測試

4.1 在Windows平臺編譯

Qt程序編寫好后,可以先在Windows電腦上編譯查看效果,在運行時,可能會遇到如下問題:

DirectShowPlayerService::doRender: Unresolved error code 0x80040266 (IDispatch error #102)

編譯的時候沒問題,但運行的時候報錯:

這是因為Qt 中的多媒體播放,底層是使用DirectShowPlayerService,所以Windows電腦上需要先安裝一個DirectShow解碼器,例如LAV Filters??梢缘竭@里(https://github.com/Nevcairiel/LAVFilters/releases)下載并安裝 LAVFilters:

下載exe安裝包安裝即可,安裝后,再運行就不會報錯了,在Windows系統(tǒng)上運行視頻播放器的效果如下:

4.2 交叉編譯并在板子上運行

通過交叉編譯,來測試視頻播放器在OK3568-C板子上的播放效果。

使用編譯音樂播放器時編寫my3568build.sh的編譯腳本編譯即可,無需修改:

執(zhí)行該腳本即可編譯:

./my3568build.sh

將編譯成功的可執(zhí)行文件VIdeoPlayer復(fù)制到OK3568-C板子中,然后在其同目錄下創(chuàng)建一個video文件夾,里面放入若干個mp4視頻文件,然后就可以測試了,此外,代碼中,還指定了/userdata/media這個搜索目錄,這里有板子自帶的一些視頻:

文件復(fù)制到板子,我這里仍然使用的ADB無線傳輸?shù)姆绞剑容^方便,具體ADB操作演示,可參考之前這篇文章(RK3568源碼編譯與交叉編譯環(huán)境搭建)最后的Qt交叉編譯與測試部分

需注意的是,板子里的這個Linux系統(tǒng),不支持中文的顯示,視頻名不要有中文。

實測效果見文末視頻,整體體驗播放流暢,視頻切換流程,進度條調(diào)整播放進度沒有音樂播放器調(diào)整的順暢,另外不知道怎么原因,視頻播放的聲音外放聲音特別小,用耳機插孔聽是正常的。

5 總結(jié)

本篇介紹了使用Qt開發(fā)一個視頻播放器,一些功能代碼是復(fù)用上篇的音樂播放器的代碼,使用Qt Creator編寫視頻播放器的代碼,首先在Windows電腦上編譯運行測試,然后交叉編譯,在OK3568-C開發(fā)板上進行實際測試。

該視頻播放器實現(xiàn)的功能包括基礎(chǔ)的播放功能、暫停與繼續(xù),音量調(diào)節(jié),視頻列表顯示,下一個、下一個切換,進度條調(diào)節(jié)播放進度等。





嵌入式Qt開發(fā)一個視頻播放器的評論 (共 條)

使用qq登录你需要登录后才可以评论。
彰化市| 日喀则市| 东光县| 徐闻县| 讷河市| 泗水县| 安丘市| 台江县| 利津县| 桐柏县| 昌吉市| 金山区| 沅陵县| 新泰市| 博罗县| 楚雄市| 昆明市| 南溪县| 内黄县| 新蔡县| 丹棱县| 响水县| 高州市| 崇阳县| 肇东市| 铜鼓县| 云林县| 东山县| 太仓市| 柳江县| 岳阳市| 册亨县| 鲁甸县| 威信县| 湛江市| 西峡县| 河南省| 滁州市| 嘉兴市| 渝中区| 云霄县|