2013-02-26 154 views
6

我正在使用qt5.0。我创建了dll并将所有音频文件放入dll中。现在我正在创建资源和播放文件。它工作正常。如何播放音频并删除QMediaPlayer中的文件?

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

如果我尝试手动删除我也得到错误。 “使用该文件的其他程序”。一旦我停止该程序,然后只能删除该文件。

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

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"; 
    } 
} 

我得到“音频打出了”的消息,但它不是在delete一个文件。

请帮我解决这个问题。

+0

是否有任何方式直接从DLL流没有创建任何临时文件? – Saravanan 2013-02-26 20:47:30

+0

看起来玩家可能会保留文件的句柄。如果删除播放器对象,那么该文件是否可以被删除? – TheDarkKnight 2013-04-26 08:58:59

+0

好吧,我尝试了所有的东西,但仍然出现错误。所以我把音频文件放在windows/media文件夹中并在应用程序中使用。谢谢。 – Saravanan 2013-05-07 08:20:39

回答

1

docs告诉我们QMediaPlayer :: setMedia:

这个属性设置为空QMediaContent会导致玩家 丢弃与当前媒体源和 停止一切信息,所有I/O与该媒体相关的操作。为什么我提交了bug report

即使在Qt的IRC频道的人告诉我,不要在Windows上使用QMediaPlayer这 -

不幸的是,这并不在Windows 7上使用Qt 5.1.1的工作。他们建议使用SDL。多媒体API的跨平台框架有点奇怪。

3

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

player->setMedia(QMediaContent()); 

但是,如果我用MinGW的编译器,影像不会在一个虚拟机的win7玩的x86和报告DirectShowPlayerService::doRender: Unresolved error code 80040266。这对我来说似乎是一个僵局。