Qt 使用QMediaPlayer播放音乐无声音

您所在的位置:网站首页 win7语音包播放没有声音 Qt 使用QMediaPlayer播放音乐无声音

Qt 使用QMediaPlayer播放音乐无声音

2024-07-02 03:57| 来源: 网络整理| 查看: 265

首先,要使用Qt的媒体类,也就是QMediaPlayer对象。

QMediaPlayer是Qt提供的一个跨平台媒体播放器类。该类,在Windows下时,底层基于微软的DirectShow框架实现;在Linux下时,底层基于GStreamer框架实现。

也就是说,Qt没有直接使用解码库,而是对平台相关的播放器框架做了封装,提供了平台无关的API。

前提条件

环境:Qt5.15

要使用QMediaPlayer这个类,得在pro文件中添加

QT += multimedia 代码 相对路径播放mp3

然后,我们可以添加以下代码:

QMediaPlayer *player = new QMediaPlayer; //添加音乐列表 QMediaPlaylist *musicList = new QMediaPlaylist; //添加音乐列表 musicList->addMedia(QMediaContent(QUrl::fromLocalFile("./music/background_music.mp3"))); player->setPlaylist(musicList); player->setVolume(80); //音量 player->play();

注意,这里加载mp3音乐文件使用的是相对路径。

资源文件播放mp3

如果把mp3加入qrc资源文件的话,需要改成这样的语句才能正常播放

musicList->addMedia(QMediaContent(QUrl("qrc:/music/background_music.mp3"))); 编译运行

使用资源文件添加的朋友应该能马上听到声音。但是使用相对路径的朋友,可能没有声音。为什么呢

问题排查 问题一

编译运行,可以在应用程序输出这里看到一条信息:

DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80070003

这个是什么原因呢?

有两个原因

原因一:

因为,你没把音乐文件放到正确的路径下。

注意了,这里又有一个小坑。

如果你使用的是

musicList->addMedia(QMediaContent(QUrl::fromLocalFile("./music/background_music.mp3")));

那么你想在Qt里面能听到声音,就需要将music文件夹放到和debug,release文件夹同级路径下。如图: image-20220422113646051

如果使用的是

musicList->addMedia(QMediaContent(QUrl::fromLocalFile(QApplication::applicationDirPath() + "/music/background_music.mp3")));

那就得放到exe所在路径下。

image-20220422114211070

原因二

需要额外安装解码器,QMediaPlayer才能正常工作(我使用的是Qt 5.15,测试不需要)

建议安装LAVFilters,下载地址:https://github.com/Nevcairiel/LAVFilters/releases

安装完成后,建议重新构建一下。

问题二

如果出现以下错误,意思就是没有找到相应的库

defaultServiceProvider::requestService(): no service found for - "org.qt-project.qdiaplayer"

将Qt安装目录下的plugins下的mediaservice文件夹拷到运行目录下。比如我这里的Qt路径D:\Qt\5.15.2\msvc2019\plugins

问题三

如果使用windeployqt打包后,运行exe程序没声音,检查生成的文件中有没有mediaservice文件夹,如果没有就如问题二一样,把此文件夹拷贝到打包路径下。

如果有这个文件夹,但还是没声音,试着创建plugins文件夹,再把mediaservice文件夹放进去,如图:

image-20220422130026884

最后的最后

由于不同Qt版本,不同编译器(MSVC,MinGW),都有各种原因可能造成这些问题。这里没法一一测试。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3