由于最近着手的Qt项目需要视频播放自己做的时候踩了很多坑避免以后踩坑 故在此记录实现过程 Qt版本 5.9基于C++11Qt核心组件与附加组件安装时请打钩否则可能出现项目中缺少视频播放
由于最近着手的Qt项目需要视频播放 自己做的时候踩了很多坑 避免以后踩坑 故在此记录实现过程 Qt版本 5.9 基于C++11 Qt核心组件与附加组件安装时请打钩 否则可能出现项目中缺少视频播放模块的问题
新项目目录结构
如下所示 这是我们音视频播放的基础模块 其他设置根据自己的项目需求自行添加或修改 修改完成后ctrl+s保存文件 QT += multimedia multimediawidgets 添加模块
双击.ui文件 Push Button、Widget 我们目前不做太复杂的功能 当前仅需要Push Button和Widget两种控件 Push Button我们用于控制播放 Widget用于显示视频
将控件拖入 对控件进行一些基础设置 为了增强可读性 我这里对控件名称做了一些修改 对准需要修改的控件单击右键并选择"改变对象名称" 左侧的按钮改名为pushButton_set 右侧按钮改名为pushButton_start 上面的框是Widget 这个控件拖进来后基本为透明状 仅有边框轮廓 我们改名为widget_video ctrl+s保存文件 5.设置播放窗口右击刚刚拖入的Widget控件 点击"提升为" 这里我们需要将Widget提升为QVideoWidget 类名和头文件都写为QVideoWidget 选中全局包含 然后添加并提升 6.按钮信号设置右键第一个按钮 选择"转到槽" 选择clicked()并点击下方OK按钮 此时我们会跳转到代码编辑页面 在写代码之前 我们还需要引入一些需要的头文件 #include 现在我们创建一个全局的播放器变量 QMediaPlayer *player = new QMediaPlayer(); 然后编写刚刚的按钮槽函数 void MainWindow::on_pushButton_set_clicked() 做完这些后你的源文件.cpp看起来应该是这样的 注意 这里的视频文件路径请根据你的视频存放位置填写 如果你是从windows直接复制的路径 那么应该是 此时可能会跟C++的字符转义符冲突 那么请在前面再加上一个 或者将改为/ 直接复制路径:
回到.ui文件 右键第二个按钮 并选择"转到槽" 并选择clicked() 跳转到槽函数编写位置 写入以下内容: void MainWindow::on_pushButton_start_clicked() 最终完成的两个槽函数应该是这样的
至此主要部分已经完成 我们编译运行软件看看效果如何 编译很顺利 没有Error 软件成功运行起来了 出现我们刚刚编辑的窗口 至此基本播放功能实现完成 可以看到我下载到本地的MV已经播放出来了
点击开始播放没有反应并在Qt信息栏出现错误提示:DirectShowPlayerService::doRender: Unresolved error code 0x80040266 这是由于系统中不存在DirectShow解码器 因为Qt的视频播放控件是基于DirectShowPlayerService开发的 解决方案:安装一个DirectShow解码器 直接百度下载安装一个到系统 如:LAV Filters 重新编译运行 错误提示:DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80004005 () 解决方案:将视频文件放在全英文且无空格的路径下 修改路径后重新编译运行 |
2022-05-13
2022-03-10
2021-07-02
2021-08-14
2021-05-17