C++ Qt实现音视频播放功能

 更新时间:2021年11月25日 17:16:03   作者:Test_233  
Qt版本 5.9 基于C++11 Qt核心组件与附加组件安装时请打钩 否则可能出现项目中缺少视频播放模块的问题,由于最近着手的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音视频播放内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++ virtual destructor虚拟析构函数

    C++ virtual destructor虚拟析构函数

    C++中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放,今天通过本文给大家介绍C++ virtual destructor虚拟析构函数的相关知识,感兴趣的朋友一起看看吧
    2021-05-05
  • 介绍C语言中tolower函数的实例

    介绍C语言中tolower函数的实例

    这篇文章主要介绍了介绍C语言中tolower函数的实例,本文列出了该函数的头文件,功能说明等,以及如何使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++类与对象的详细说明

    C++类与对象的详细说明

    这篇文章主要为大家详细介绍了C++的类与对象,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • c++基础算法动态DP解决CoinChange问题

    c++基础算法动态DP解决CoinChange问题

    这篇文章主要为大家介绍了c++基础算法如何利用动态DP来解决Coin Change的问题示例过程,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • 基于OpenCV自定义色条实现灰度图上色功能代码

    基于OpenCV自定义色条实现灰度图上色功能代码

    今天通过本文给大家分享基于OpenCV自定义色条实现灰度图上色功能代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • C++中隐式类型转换学习笔记

    C++中隐式类型转换学习笔记

    在本篇文章里小编给大家整理的是一篇关于C++中隐式类型转换学习笔记内容,有兴趣的跟着小编来学习下吧。
    2020-02-02
  • 基于Qt实现离线瓦片地图下载器

    基于Qt实现离线瓦片地图下载器

    这篇文章主要介绍了如何通过Qt实现离线瓦片地图下载器,文中的示例代码对我们学习或工作有一定的帮助,感兴趣的可以跟随小编一起学习一下
    2022-01-01
  • 用C语言求解一元二次方程的简单实现

    用C语言求解一元二次方程的简单实现

    这篇文章主要介绍了用C语言求解一元二次方程的简单实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 详解C语言的基本数据类型

    详解C语言的基本数据类型

    这篇文章主要为大家介绍了C语言的基本数据类型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 基于C语言实现静态通讯录的示例代码

    基于C语言实现静态通讯录的示例代码

    这篇文章主要为大家详细介绍了如何利用C语言实现一个简单的静态通讯录,文中的示例代码讲解详细,对我们学习C语言有一定帮助,需要的可以参考一下
    2022-07-07

最新评论