为什么qmediaplayer :: duration()给我-1的值
Why is QMediaPlayer::duration() giving me a value of -1?
这是我的代码:
QString BoatProgramming::setDuration(QString path)
{
if (path.isNull()) { return ""; }
QMediaPlayer mp;
mp.setMedia(QUrl::fromLocalFile("/home/akiva/deleteme.ogg"));
qDebug() << mp.duration(); // Outputting a value of -1
m_Duration = QString::number(mp.duration());
emit durationChanged();
return m_Duration;
}
显然在某个地方有一个错误,但是除了检查文件名外,我对问题是什么,我对问题是什么。可能仅支持.ogg
吗?在将对象完全加载到内存中之前,我是否调用该功能?还是其他东西?
谢谢。
QMediaPlayer::setMedia()
从文档中表现出异步的加载:
此功能在记录介质的指定源后立即返回。它不会等待媒体完成加载,也不会检查错误。聆听加载媒体以及加载期间发生错误时通知
mediaStatusChanged()
和error()
信号。
这意味着请查询QMediaPlayer
对duration()
立即致电setMedia()
可能无法正常工作,因为QMediaPlayer
可能还没有加载媒体。
为了确保加载在调用duration()
之前已经完成,您必须收听mediaStatusChanged()
信号,并且仅在mediaStatus()
返回QMediaPlayer::LoadedMedia
时才获得duration()
。这是一个最小示例:
#include <QtWidgets>
#include <QtMultimedia>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QLabel label; //a label to display duration
QString fileName = QFileDialog::getOpenFileName(nullptr, "Open Media File");
QMediaPlayer mp;
mp.setMedia(QUrl::fromLocalFile(fileName));
QObject::connect(&mp, &QMediaPlayer::mediaStatusChanged,
[&](QMediaPlayer::MediaStatus status){
if(status == QMediaPlayer::LoadedMedia) //when loading is finished
{
//show duration in a label
qint64 duration= mp.duration();
label.setText(QString("Duration: %1 ms.nnThat is: %2")
.arg(duration)
.arg(QDateTime::fromTime_t(duration/1000).toUTC()
.toString("hh:mm:ss")));
label.show();
}
});
return app.exec();
}
相关文章:
- 为什么除非我使用 cout,否则我的值不正确?
- 如果我在指针中使用 ++ 操作数,我的值就会出错
- 如何检测除整数以外的任何内容是否传递给我的类构造函数?
- 如何将不同大小的数组传递给我的 C++ 函数?
- 将静态 IP 分配给我的 ESP32 服务器后不再响应
- 发出给我的理解错误消息(启动C++/编程)
- 乘法返回我的值不正确
- SQLBindParameter 要么说它需要更多的数据,要么忽略我的值
- 将自定义 Java 数据模型传递给我的本机代码
- 当键不存在时,映射给出的值
- 从不使用 C/C++ 默认值/分配给变量的值
- 我需要C++向量的最大大小(我给出的值)
- 为什么 rand() 给我的数字超出了我定义的间隔?(昨天工作正常)
- 为什么当我尝试在地图中迭代时我的值不显示
- 如何在不使用tensorflow的情况下构建tfsensor并将其提供给我的docker服务器
- 我不明白 sizeof() 和数组给出的值
- 为什么我的值没有由我的初始化(参数化)构造函数初始化?
- 向量不取我给出的值
- uniform_real_distribution给我的值超出范围
- 为什么c++中的clock_gettime给我的值与Java的nanotime()不同?