溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++?Qt如何實現音視頻播放功能

發布時間:2021-11-25 21:09:27 來源:億速云 閱讀:630 作者:柒染 欄目:開發技術

這篇文章將為大家詳細講解有關C++ Qt如何實現音視頻播放功能,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

由于最近著手的Qt項目需要視頻播放 自己做的時候踩了很多坑 避免以后踩坑 故在此記錄實現過程 

Qt版本 5.9 基于C++11 Qt核心組件與附加組件安裝時請打鉤 否則可能出現項目中缺少視頻播放模塊的問題

1.首先創建一個新項目 并且打開.pro項目設置文件

C++?Qt如何實現音視頻播放功能
新項目目錄結構

2.在.pro文件中添加模塊 如下所示 這是我們音視頻播放的基礎模塊 其他設置根據自己的項目需求自行添加或修改 修改完成后ctrl+s保存文件

QT += multimedia multimediawidgets
//QT += core gui是新項目默認帶的 不需要自己手動添加
C++?Qt如何實現音視頻播放功能
添加模塊

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

C++?Qt如何實現音視頻播放功能
雙擊.ui文件
C++?Qt如何實現音視頻播放功能
Push Button、Widget

我們目前不做太復雜的功能 當前僅需要Push Button和Widget兩種控件

Push Button我們用于控制播放 Widget用于顯示視頻

4.將上述兩個控件 左鍵按住不放 拖入右側窗口界面中 

C++?Qt如何實現音視頻播放功能
將控件拖入

對控件進行一些基礎設置 為了增強可讀性 我這里對控件名稱做了一些修改 對準需要修改的控件單擊右鍵并選擇"改變對象名稱"

左側的按鈕改名為pushButton_set 右側按鈕改名為pushButton_start

上面的框是Widget 這個控件拖進來后基本為透明狀 僅有邊框輪廓 我們改名為widget_video

ctrl+s保存文件

5.設置播放窗口

C++?Qt如何實現音視頻播放功能
右擊剛剛拖入的Widget控件 點擊"提升為"

這里我們需要將Widget提升為QVideoWidget

類名和頭文件都寫為QVideoWidget 選中全局包含 然后添加并提升

C++?Qt如何實現音視頻播放功能

6.按鈕信號設置

C++?Qt如何實現音視頻播放功能

右鍵第一個按鈕 選擇"轉到槽"

C++?Qt如何實現音視頻播放功能
選擇clicked()并點擊下方OK按鈕

此時我們會跳轉到代碼編輯頁面

C++?Qt如何實現音視頻播放功能

在寫代碼之前 我們還需要引入一些需要的頭文件

#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看起來應該是這樣的

C++?Qt如何實現音視頻播放功能注意 這里的視頻文件路徑請根據你的視頻存放位置填寫 

如果你是從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();
}

最終完成的兩個槽函數應該是這樣的

C++?Qt如何實現音視頻播放功能

8.編譯運行

至此主要部分已經完成 我們編譯運行軟件看看效果如何

C++?Qt如何實現音視頻播放功能

編譯很順利 沒有Error 軟件成功運行起來了 出現我們剛剛編輯的窗口

C++?Qt如何實現音視頻播放功能

至此基本播放功能實現完成 可以看到我下載到本地的MV已經播放出來了

9.踩坑提醒

點擊開始播放沒有反應并在Qt信息欄出現錯誤提示:DirectShowPlayerService::doRender: Unresolved error code 0x80040266

這是由于系統中不存在DirectShow解碼器 因為Qt的視頻播放控件是基于DirectShowPlayerService開發的

解決方案:安裝一個DirectShow解碼器 直接百度下載安裝一個到系統 如:LAV Filters 重新編譯運行

錯誤提示:DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80004005 ()

解決方案:將視頻文件放在全英文且無空格的路徑下 修改路徑后重新編譯運行

關于C++ Qt如何實現音視頻播放功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女