C++ Qt實現音視頻播放功能
由於最近著手的Qt項目需要視頻播放 自己做的時候踩瞭很多坑 避免以後踩坑 故在此記錄實現過程
Qt版本 5.9 基於C++11 Qt核心組件與附加組件安裝時請打鉤 否則可能出現項目中缺少視頻播放模塊的問題
1.首先創建一個新項目 並且打開.pro項目設置文件
新項目目錄結構
2.在.pro文件中添加模塊
如下所示 這是我們音視頻播放的基礎模塊 其他設置根據自己的項目需求自行添加或修改 修改完成後ctrl+s保存文件
QT += multimedia multimediawidgets //QT += core gui是新項目默認帶的 不需要自己手動添加
添加模塊
3.接下來我們設置界面(GUI) 雙擊Forms文件夾下的.ui文件 打開GUI編輯頁面 如下
雙擊.ui文件
Push Button、Widget
我們目前不做太復雜的功能 當前僅需要Push Button和Widget兩種控件
Push Button我們用於控制播放 Widget用於顯示視頻
4.將上述兩個控件 左鍵按住不放 拖入右側窗口界面中
將控件拖入
對控件進行一些基礎設置 為瞭增強可讀性 我這裡對控件名稱做瞭一些修改 對準需要修改的控件單擊右鍵並選擇”改變對象名稱”
左側的按鈕改名為pushButton_set 右側按鈕改名為pushButton_start
上面的框是Widget 這個控件拖進來後基本為透明狀 僅有邊框輪廓 我們改名為widget_video
ctrl+s保存文件
5.設置播放窗口
右擊剛剛拖入的Widget控件 點擊”提升為”
這裡我們需要將Widget提升為QVideoWidget
類名和頭文件都寫為QVideoWidget 選中全局包含 然後添加並提升
6.按鈕信號設置
右鍵第一個按鈕 選擇”轉到槽”
選擇clicked()並點擊下方OK按鈕
此時我們會跳轉到代碼編輯頁面
在寫代碼之前 我們還需要引入一些需要的頭文件
#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音視頻播放內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python通過PyQt5實現登錄界面的示例代碼
- Qt timerEvent實現簡單秒表功能
- 用QT實現計時器功能
- 關於Qt6中QtMultimedia多媒體模塊的重大改變分析
- 一文帶你瞭解Qt中槽的使用