如何在QMediaPlayer中播放音频并删除文件



我使用的是qt5.0。我创建了dll,并将我所有的音频文件放在dll中。现在我正在从资源创建文件并播放。它运行良好。

但问题是,在播放该文件后,我无法删除该文件并重新创建新文件。

如果我尝试手动删除,我也会出错。"使用该文件的其他程序"。一旦我停止程序,然后只能删除文件。

如何在立即回放后删除文件。这是我的代码

player = new QMediaPlayer;
connect(player,SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),this,SLOT(mediaStatusChanged(QMediaPlayer::MediaStatus)));
QFile file2(QDir::tempPath() + "/temp0.mp3");
if (file2.open(QIODevice::ReadWrite))
{
    QFile workFile(":/AUDIO/" + fn +".mp3");
    if(workFile.open(QIODevice::ReadOnly))
    {
      file2.write(workFile.readAll());
      workFile.close();
    }
    file2.close();
}
player->setMedia(QMediaContent(QUrl::fromLocalFile(QDir::tempPath() + "/temp0.mp3")));
player->setVolume(100);
player->play();

void Audio::mediaStatusChanged(QMediaPlayer::MediaStatus state)
{
    if(state==QMediaPlayer::EndOfMedia)
    {
        QFile::remove(QDir::tempPath() + "/temp0.mp3");
        qDebug()<<"Audio played";
    }
}

我收到"音频播放"消息,但它没有删除文件。

请帮我解决这个问题。

最近,我遇到了同样的问题。我通过将编译器从msvs改为mingw来解决这个问题。我认为Qt的人没有解决这个错误,因为它的状态是"需要更多信息"。发布媒体文件的代码如下所示。

player->setMedia(QMediaContent());

但是,如果我使用mingw编译器,视频不会在VM win7 x86中播放,并报告DirectShowPlayerService::doRender: Unresolved error code 80040266。这对我来说似乎是一个僵局。

文档告诉我们QMediaPlayer::setMedia:

将此属性设置为空QMediaContent将导致播放器丢弃与当前媒体源有关的所有信息停止与该介质相关的所有I/O操作。

不幸的是,这在带有Qt 5.1.1的Windows 7上不起作用-这就是我提交错误报告的原因

甚至Qt-irc频道的人也告诉我不要在Windows上使用QMediaPlayer。他们建议使用SDL。对于一个带有多媒体API的跨平台框架来说有点奇怪。

最新更新