QMediaPlayer 不产生音频
Posted
技术标签:
【中文标题】QMediaPlayer 不产生音频【英文标题】:QMediaPlayer doesn't produce audio 【发布时间】:2019-03-16 16:26:04 【问题描述】:我从 C++ 开始,我正在尝试使用 Qt 播放 mp3 文件。我写了这段代码,但由于某种原因它不起作用。我已经搜索了互联网,但找不到有用的东西。
这是我的代码:
#include <iostream>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QFileInfo>
#include <QUrl>
int main()
QMediaPlaylist *list = new QMediaPlaylist;
list->addMedia(QUrl::fromLocalFile(QFileInfo("Filename.mp3").absoluteFilePath()));
QMediaPlayer *music;
music = new QMediaPlayer();
music->setPlaylist(list);
music->play();
return 0;
没有音乐播放,这个程序的输出是:
QObject::startTimer:定时器只能用于以 QThread 启动的线程 QObject::startTimer:定时器只能用于以 QThread 启动的线程
这是我的.pro
文件:
TEMPLATE = app
TARGET = MediaPlayer
QT += core multimedia
SOURCES += main.cpp
环境:
Fedora 29 Qt 5.11.3-1
我试图在 Qt creator 和终端上运行这个程序。
【问题讨论】:
使用:int main(int argc, char *argv[]) QGuiApplication app(argc, argv); QMediaPlaylist *list = new QMediaPlaylist; list->addMedia(QUrl::fromLocalFile(QFileInfo("Filename.mp3").absoluteFilePath())); QMediaPlayer *music; music = new QMediaPlayer(); music->setPlaylist(list); music->play(); return app.exec();
@eyllanesc 谢谢,成功了!
【参考方案1】:
您的应用程序缺少一个
QCoreApplication
如果它应该是无头的
QGuiApplication
用于 QtQuick,或
QApplication
如果它具有小部件
Q*Application
是大多数 Qt 应用程序的必备组件,因为这是在主线程上处理所有事件和信号的部分。这就是您遇到 QTimer
相关错误的原因,因为 Qt 无法事先用 QThread
“包装”主线程。
只需添加它以及app.exec();
即可启动它,你应该没问题。 app.exec()
将阻塞直到您的应用程序完成。
此外,您在应用程序的整个生命周期中需要的实例通常应该创建在堆栈上,而不是堆上。
int main(int argc, char *argv[])
QCoreApplication app(argc, argv);
QMediaPlaylist list;
auto media = QUrl::fromLocalFile(QFileInfo("Filename.mp3").absoluteFilePath());
list.addMedia(media);
QMediaPlayer music;
music.setPlaylist(list);
music.play();
return app.exec();
【讨论】:
在堆栈上创建要在整个生命周期中使用的对象是什么疯狂的事情?我们实际上注意到这在某些情况下不适用于堆。为什么要疯狂?一方面,该对象不能通过多个客户端访问。以上是关于QMediaPlayer 不产生音频的主要内容,如果未能解决你的问题,请参考以下文章
如何在 QMediaPlayer 中获取媒体类型(视频或音频)?
PyQt5:QMediaPlayer 无法从 QBuffer 重放音频