由于最近著手的Qt項目需要視頻播放 自己做的時候踩了很多坑 避免以后踩坑 故在此記錄實現過程。
Qt版本 5.9 基于C++11 Qt核心組件與附加組件安裝時請打鉤 否則可能出現項目中缺少視頻播放模塊的問題
1.首先創建一個新項目 并且打開.pro項目設置文件

2.在.pro文件中添加模塊 如下所示 這是我們音視頻播放的基礎模塊 其他設置根據自己的項目需求自行添加或修改 修改完成后ctrl+s保存文件
QT += multimedia multimediawidgets //QT += core gui是新項目默認帶的 不需要自己手動添加

3.接下來我們設置界面(GUI) 雙擊Forms文件夾下的.ui文件 打開GUI編輯頁面 如下


我們目前不做太復雜的功能 當前僅需要Push Button和Widget兩種控件
Push Button我們用于控制播放 Widget用于顯示視頻
4.將上述兩個控件 左鍵按住不放 拖入右側窗口界面中

對控件進行一些基礎設置 為了增強可讀性 我這里對控件名稱做了一些修改 對準需要修改的控件單擊右鍵并選擇"改變對象名稱"
左側的按鈕改名為pushButton_set 右側按鈕改名為pushButton_start
上面的框是Widget 這個控件拖進來后基本為透明狀 僅有邊框輪廓 我們改名為widget_video
ctrl+s保存文件
5.設置播放窗口

這里我們需要將Widget提升為QVideoWidget
類名和頭文件都寫為QVideoWidget 選中全局包含 然后添加并提升
6.按鈕信號設置
右鍵第一個按鈕 選擇"轉到槽"

此時我們會跳轉到代碼編輯頁面
在寫代碼之前 我們還需要引入一些需要的頭文件
#include <QMediaPlaylist> #include <QMediaPlayer>
現在我們創建一個全局的播放器變量
QMediaPlayer *player = new QMediaPlayer();
然后編寫剛剛的按鈕槽函數
void MainWindow::on_pushButton_set_clicked() { player->setMedia(QMediaContent(QUrl::fromLocalFile("C:/Users/Administrator/Music/MV/test.mp4"))); //這里的文件路徑是本地的視頻文件全路徑 根據自己的情況來設置 //player是剛剛建立的播放器變量 player->setVideoOutput(ui->widget_video); //widget_video是我們剛剛拖入的widget控件名稱 }
做完這些后你的源文件.cpp看起來應該是這樣的
注意 這里的視頻文件路徑請根據你的視頻存放位置填寫
如果你是從windows直接復制的路徑 那么應該是\ 此時可能會跟C++的字符轉義符\沖突 那么請在\前面再加上一個\ 或者將\改為/
直接復制路徑: C:\Users\Administrator\Music\MV\test.mp4 修改為: C:\\Users\\Administrator\\Music\\MV\\test.mp4 或: C:/Users/Administrator/Music/MV/test.mp4
7.同樣照上述過程 編寫第二個按鈕的槽函數
回到.ui文件 右鍵第二個按鈕 并選擇"轉到槽" 并選擇clicked()
跳轉到槽函數編寫位置 寫入以下內容:
void MainWindow::on_pushButton_start_clicked() { player->play(); }
最終完成的兩個槽函數應該是這樣的
8.編譯運行
至此主要部分已經完成 我們編譯運行軟件看看效果如何
編譯很順利 沒有Error 軟件成功運行起來了 出現我們剛剛編輯的窗口
至此基本播放功能實現完成 可以看到我下載到本地的MV已經播放出來了
9.踩坑提醒
點擊開始播放沒有反應并在Qt信息欄出現錯誤提示:DirectShowPlayerService::doRender: Unresolved error code 0x80040266
這是由于系統中不存在DirectShow解碼器 因為Qt的視頻播放控件是基于DirectShowPlayerService開發的
解決方案:安裝一個DirectShow解碼器 直接百度下載安裝一個到系統 如:LAV Filters 重新編譯運行
錯誤提示:DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80004005 ()
解決方案:將視頻文件放在全英文且無空格的路徑下 修改路徑后重新編譯運行
到此這篇關于C++ Qt實現音視頻播放的文章就介紹到這了,更多相關C++ Qt音視頻播放內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/m0_58033833/article/details/117220185