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音视频播放内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-11-24

C/C++&nbsp;Qt&nbsp;QChart绘图组件的具体使用

QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts 组件基于GraphicsView模式实现,其核心是QChartView和QChart的二次封装版. 在使用绘图模块时需要在pro文件中包含QT += charts来引入绘图类库. 然后还需在头文件中定义QT_CHARTS_USE_NAMESPACE宏,这样才可以正常的使用绘图功能. 一般情况下我们会在mainwindows.h头文件中增加如下代码段. #include <QMainWindow>

C/C++&nbsp;Qt&nbsp;QThread线程组件的具体使用

QThread库是QT中提供的跨平台多线程实现方案,使用时需要继承QThread这个基类,并重写实现内部的Run方法,由于该库是基本库,默认依赖于QtCore.dll这个基础模块,在使用时无需引入其他模块. 实现简单多线程 QThread库提供了跨平台的多线程管理方案,通常一个QThread对象管理一个线程,在使用是需要从QThread类继承并重写内部的Run方法,并在Run方法内部实现多线程代码. #include <QCoreApplication> #include <iostre

详解C/C++ QT QChart 绘制组件应用

QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts 组件基于GraphicsView模式实现,其核心是QChartView和QChart的二次封装版. 在使用绘图模块时需要在pro文件中包含QT += charts来引入绘图类库. 然后还需在头文件中定义QT_CHARTS_USE_NAMESPACE宏,这样才可以正常的使用绘图功能. 一般情况下我们会在mainwindows.h头文件中增加如下代码段. #include <QMainWindow>

C/C++ Qt 选择夹TabWidget组件实现导航栏切换

目录 在Qt中通过使用选择夹组件可以实现在一个页面中集成多种功能,我们以TabWidget选择夹组件为例,实现在单个页面中集成多个功能,并给每一个子夹增加对应的Ico图标. 如果我们使用选择夹组件,必须提前拖入UI界面中(无法代码生成),如下我们找到TabWidget并将其拖入UI界面中. 其次需要增加与美化代码对应的子夹数量,这里我们分别增加三个子夹,此处只需要增加不需要重命名. 接着我们需要增加三个子夹对应的图标组,插入图标组需要执行以下步骤. 选择Forms → 右键(AddNew) →

C/C++&nbsp;Qt&nbsp;ToolBar菜单组件的具体使用

ToolBar工具栏在所有窗体应用程序中都广泛被使用,使用ToolBar可以很好的规范菜单功能分类,用户可根据菜单栏来选择不同的功能,Qt中默认自带ToolBar组件,当我们以默认方式创建窗体时,ToolBar就被加入到了窗体中,一般是以QToolBar的方式存在于对象菜单栏,如下所示. QToolBar组件在开发中我遇到了以下这些功能,基本上可以应对大部分开发需求了,这里就做一个总结. 顶部工具栏ToolBar组件的定义有多种方式,我们可以直接通过代码生成,也可以使用图形界面UI拖拽实现,但使

C++的QT项目打包成独立可执行和发布的exe文件(项目构建过程)

目录 一.通过release方式构建项目 二.使用windeployqt工具添加依赖项 三.使用Enigma Virtual Box打包 四.附一个修改软件图标的简易方法 以Demo项目为例,使用Qt creator构建,使用Enigma Virtual Box打包 一.通过release方式构建项目 构建套件中选择release选项后,重新run一遍项目 即可在原项目目录下找到构建项目的文件夹 进入release文件夹就可以看到exe文件,这个就是代码打包出来的文件,但是缺少QT对应的依赖,所

详解Java Project项目打包成jar,并生成exe文件

初衷: 工作中写一些辅助工作的小工具时,将其打成exe,方便使用 准备工作: Eclipse,jdk,net.sf.fjep.fatjar_0.0.32.jar,exe4j.exe 1 将项目打包成jar文件: 1.1 用Eclpise的Export功能生成jar(单纯生成jar包时推荐) 目录结构 右击项目,选择Export 只留java文件 默认next到finish,有两种处理方式 方式一:自动生成MANIFEST.MF(默认的) 方式二:自己写MANIFEST.MF(可以写一些自己想要的

AndroidStudio项目打包成jar的简单方法

首先备注一下 JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件.为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件). 什么是AAR,与JAR区别 *.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件. *.aar:包含所有资源,class以及res资源文件全部包含 Android Studio 如何打JAR包 在eclipse中我们知道如何将一个项目导出为jar包,供

使用electron将vue-cli项目打包成exe的方法

如果你已经做好了一个vue的项目,并且想要将他打包成exe,那么请继续阅读. 首先你可以下载一个demo了解一下. git clone https://github.com/electron/electron-quick-start cd electron-quick-start npm install npm start 这个demo主要就是main.js和package.json 打开main.js const {app, BrowserWindow} = require('electron

详解eclipse将项目打包成jar文件的两种方法及问题解决方法

第一种:利用eclipse中自带的export功能 第一种方法分两种情况先来看第一种情况:没有引用外部jar的项目打包 步骤一:右键点击项目选择导出(export),选择java>jar文件(不是选择可运行jar文件) 步骤二:选择你要导出的项目以及文件,指定文件导出路径.连续点击两个下一步后到第四步. 步骤三:选择主类. 按照以上步骤即可完成对一个不引用外部jar项目的打包. 第二种情况:没有引用外部jar的项目打包 当我们引用了外部jar后,使用eclipse自带的export打包略显繁琐.

解决cordova+vue 项目打包成APK应用遇到的问题

公司前端界面用的是vue,我要嵌入到Android中生成App 第一步:安装node node安装:直接进入官网https://nodejs.org/zh-cn/,下载最新版本安装.安装之后在命令行中使用"node -v" 检查安装是否成功. npm安装:由于新版的nodejs已经集成了npm,所以node安装时npm也一并安装好了.同样可以通过输入 "npm -v" 来测试是否成功安装. 第二步:安装cordova 1. 打开cmd 输入命令:npm instal

Spring Boot将项目打包成war包的操作方法

1 修改项目打包类型 在pom.xml里,项目打包类型将jar设置成war: <packaging>war</packaging> 2 移除内置tomcat容器 在pom.xml里设置: <dependencies> <!--web启动器依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-s

将Java项目打包成可执行的jar包

一.通过 eclipse 自带打包 测试项目: Main.java package com.bug; import org.junit.Test; public class Main { public static void main(String[] args) { test(); } @Test public static void test() { System.out.println("HelloWorld"); System.out.println("HelloWo

java项目打包成可执行jar用log4j将日志写在jar所在目录操作

开发一个demo时想将日志输出到最终打包的jar所在目录,从网上学习实验整理之后的配置如下, log4j.properties log4j.rootLogger = INFO,console,logFile log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Threshold=INFO log4j.appender.console.ImmediateFlush=true log4j.app

IDEA 将 SpringBoot 项目打包成jar的方法

新建SpringBoot项目:IDEA 创建 SpringBoot 项目 一.打包配置 1.File -> Project Structure 2.Project Structure 3.设置启动类及META-INF 根据 modules 创建 jar.如图所示,选择项目,入口类等.最后一项 META-INF 默认放到 src\main\java 目录里,如果使用默认值,没有进行其他配置,生成的 jar 有可能不会包含 META-INF 目录,导致运行 jar 出错,正确的是将 META-INF

详解vue项目打包后通过百度的BAE发布到网上的流程

经过两天的研究终于将VUE打包后的项目通过BAE发布到了网上.虽然接口方面还有一下问题但是自己还是很高兴的. 首先说一下这个项目需要用到的技术,vue+express+git+百度的应用引擎BAE. 继续编辑终于将自己写的JSON文件模拟的数据也传上去了. 具体的步骤: 1,首先讲写好的vue项目打包(具体的打包过程我就不在说了,直接npm run build,就会在VUE项目文件中重新创建一个dist文件,这个就是打包好的项目) 2,在百度的应用引擎BAE部署一个项目,一天才2毛钱很便宜.自己