【问题标题】:How to Play Audio and remove file in QMediaPlayer?如何在 QMediaPlayer 中播放音频和删除文件?
【发布时间】:2013-02-12 11:33:43
【问题描述】:

我正在使用 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";
    }
}

我收到“已播放音频”消息,但它并未删除文件。

请帮我解决这个问题。

【问题讨论】:

  • 有什么方法可以直接从 DLL 流式传输而不创建任何临时文件?
  • 看起来播放器可能保留了文件的句柄。如果你删除了播放器对象,那么文件可以被删除吗?
  • 好吧,我尝试了所有的方法,但仍然出现错误。所以我将音频文件放在 windows/media 文件夹中并在应用程序中使用。谢谢。

标签: qt audio-streaming qmediaplayer


【解决方案1】:

docs 告诉我们 QMediaPlayer::setMedia:

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

不幸的是,这不适用于带有 Qt 5.1.1 的 Windows 7 - 这就是我提交bug report 的原因

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

【讨论】:

  • 我意识到这是一个老问题。在 Windows 10 上的 Python 中,文件是视频文件,player.setMedia(QMediaContent(None)) 释放文件,然后可以使用os.remove(temp0.mp4) 删除文件。我没有用音频文件试过这个,但我不知道为什么会有所不同。
【解决方案2】:

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

player->setMedia(QMediaContent());

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2011-11-09
    • 2013-06-17
    相关资源
    最近更新 更多