Qt 使用QMediaPlayer播放音乐无声音 |
您所在的位置:网站首页 › win7语音包播放没有声音 › Qt 使用QMediaPlayer播放音乐无声音 |
首先,要使用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文件夹同级路径下。如图: 如果使用的是 musicList->addMedia(QMediaContent(QUrl::fromLocalFile(QApplication::applicationDirPath() + "/music/background_music.mp3")));那就得放到exe所在路径下。 需要额外安装解码器,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文件夹放进去,如图: 由于不同Qt版本,不同编译器(MSVC,MinGW),都有各种原因可能造成这些问题。这里没法一一测试。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |