设为首页收藏本站

安徽论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 78373|回复: 0

C++ Qt实现音视频播放

[复制链接]

76

主题

0

回帖

240

积分

中级会员

Rank: 3Rank: 3

积分
240
发表于 2022-3-26 10:25:49 | 显示全部楼层 |阅读模式
网站内容均来自网络,本站只提供信息平台,如有侵权请联系删除,谢谢!
由于最近着手的Qt项目需要视频播放 自己做的时候踩了很多坑 避免以后踩坑 故在此记录实现过程 
Qt版本 5.9 基于C++11 Qt核心组件与附加组件安装时请打钩 否则可能出现项目中缺少视频播放模块的问题
1.首先创建一个新项目 并且打开.pro项目设置文件
     新项目目录结构 2.在.pro文件中添加模块 如下所示 这是我们音视频播放的基础模块 其他设置根据自己的项目需求自行添加或修改 修改完成后ctrl+s保存文件
  1. 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按钮 此时我们会跳转到代码编辑页面

在写代码之前 我们还需要引入一些需要的头文件
  1. #include #include
复制代码
现在我们创建一个全局的播放器变量
  1. QMediaPlayer *player = new QMediaPlayer();
复制代码
然后编写刚刚的按钮槽函数
  1. 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++的字符转义符\冲突 那么请在\前面再加上一个\ 或者将\改为/
  1. 直接复制路径:C:\Users\Administrator\Music\MV\test.mp4修改为:C:\\Users\\Administrator\\Music\\MV\\test.mp4或:C:/Users/Administrator/Music/MV/test.mp4
复制代码
7.同样照上述过程 编写第二个按钮的槽函数
回到.ui文件 右键第二个按钮 并选择"转到槽" 并选择clicked()
跳转到槽函数编写位置 写入以下内容:
  1. 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 ()
解决方案:将视频文件放在全英文且无空格的路径下 修改路径后重新编译运行
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
免责声明
1. 本论坛所提供的信息均来自网络,本网站只提供平台服务,所有账号发表的言论与本网站无关。
2. 其他单位或个人在使用、转载或引用本文时,必须事先获得该帖子作者和本人的同意。
3. 本帖部分内容转载自其他媒体,但并不代表本人赞同其观点和对其真实性负责。
4. 如有侵权,请立即联系,本网站将及时删除相关内容。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表