我开发了一个应用程序,用户可以同时播放多个声音。为此,我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)
或将媒体设置为 nullQMediaContent
media->setMedia(QMediaContent())
以使播放器丢弃与当前媒体源相关的所有信息,则应用程序将冻结。这两个操作在其他声音上效果很好。如果我不删除这种QMediaPlayer
,我最终没有声音的空间。不知何故QMediaPlayer
,实例数量有限QMediaPlayer
,我无法删除的每一个都填写这个数字,并且没有空间容纳QMediaPlayer
.
问题是:我怎样才能避免这个问题?如果我限制同时声音的数量,正确的QMediaPlayer
实例数量是多少?如果我设置一个限制,这个限制对于其他机器来说可能会很高。或者如何正确检测到这个格式错误的 QMediaPlayer 并正确删除它?
另外,如果我等待第一个QMediaPlayer::ResourceError
信号来限制声音的数量,这有时为时已晚,因为错误信号会稍后发出,有时应用程序已经创建了一个QMediaPlayer
我无法删除的畸形,这会阻止进程关闭.