Qt QMediaPlayer - QThread :: start:创建线程

时间:2017-02-16 11:26:19

标签: c++ qt qmediaplayer

我开发了一个用户可以同时播放多个声音的应用程序。为此,我将QMediaPlayer与矩阵结合使用,以分别保存每个声音。代码很简单,对于每个声音,我都使用这样的代码:

media = new QMediaPlayer();
media->setMedia(QUrl::fromLocalFile(QFileInfo("sound.mp3").absoluteFilePath()));
media->play();

一切都好。但是在播放声音115-125(同声音)时,新声音发出信号error(QMediaPlayer::ResourceError),错误代码为:QMediaPlayer::ResourceError - A media resource couldn't be resolved。在发出错误信号之前,它会在输出时打印此消息:DirectShowPlayerService::doPlay: Unresolved error code 0x80004005 ()

这不是问题,因为我在检测到此错误后立即删除这些声音。 问题出现在几个QMediaPlayer::ResourceError之后。 如果我创建新声音,输出窗口会显示错误消息:QThread::start: Failed to create thread. 创建新的QMediaPlayer实例后会出现此错误:

qDebug() << "before media = new QMediaPlayer(); (FILE)";
media = new QMediaPlayer();
qDebug() << "after media = new QMediaPlayer(); (FILE)" << media->error

输出:

before media = new QMediaPlayer(); (FILE)
QThread::start: Failed to create thread
after media = new QMediaPlayer(); (FILE) QMediaPlayer::NoError

这最后一种QMediaPlayer实例不会发出错误。更重要的是,州是QMediaPlayer::PlayingState。但是,如果我尝试删除它delete(media)或将媒体设置为空QMediaContent media->setMedia(QMediaContent())以使播放器丢弃与当前媒体源相关的所有信息,则应用程序会冻结。 这两个操作对别人的声音很好。 如果我不删除这种QMediaPlayer,我就没有声音了。不知何故,QMediaPlayer的实例数量有限,而且我不能删除的每个QMediaPlayer都会填写此数字,并且无法为QMediaPlayer的新实例留出空间。

问题是:如何避免这个问题?如果我限制同时发声的数量,那么QMediaPlayer个实例的正确数量是多少?如果我设置了限制,则对于其他计算机,此限制可能会很高。或者如何正确检测这个格式错误的QMediaPlayer并正确删除它?

另外,如果我等待第一个QMediaPlayer::ResourceError信号来限制声音的数量,这有时为时已晚,因为稍后会发出错误信号,有时应用程序已经创建了格式错误{{1}我不能再删除,这会阻止进程关闭。

0 个答案:

没有答案