2013-02-26 12 views
6

私はqt5.0を使用しています。私はdllを作成し、すべてのオーディオファイルをdllに入れました。今私はリソースと再生からファイルを作成しています。それは正常に動作しています。QMediaPlayerでオーディオを再生してファイルを削除する方法は?

しかし、問題はファイルを再生した後で、そのファイルを削除して新しいファイルを再作成できないことです。

手動で削除しようとするとエラーが発生します。 "そのファイルを使用している他のプログラム"。一度私はプログラムを停止し、ファイルを削除することができます。

palybackの直後にファイルを削除する方法。ここに私のコード

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

私がメッセージを「オーディオが再生」が、それはファイルをdeleteingていないそうです。

この問題の解決にお役立てください。

+0

一時ファイルを作成せずに直接DLLからストリームを送信する方法はありますか? – Saravanan

+0

プレーヤーがファイルを管理しているようです。プレーヤーオブジェクトを削除すると、ファイルを削除できますか? – TheDarkKnight

+0

まあ、私はすべてのことを試みたが、まだ私はエラーが発生しています。だから私はオーディオファイルをwindows/mediaフォルダに入れ、アプリケーションで使う。ありがとう。 – Saravanan

答えて

1

docs QMediaPlayer :: setMediaのための私達に告げる:ヌルQMediaContentにこのプロパティを設定する

廃棄に現在のメディア・ソースにして 中止に関連するすべての情報をプレイヤーの原因になりますすべてのI/Oそのメディアに関連する操作。

残念ながら、これはQtの5.1.1を使用してWindows 7で動作しない - これを私はbug report

を提出し、なぜQtのIRCチャンネルでさえ、人々がWindows上QMediaPlayerを使用していない私に言いました。彼らはSDLの使用を提案しました。 Multimedia APIを使用したクロスプラットフォームのフレームワークに少し不思議です。

3

最近、同じ問題が発生しました。 コンパイラをmsvsからmingwに変更して解決しました。 Qtの人たちは、ステータスが「もっと情報が必要です」としてこのバグを解決しなかったと思います。メディアファイルを解放するコードは次のようになります。私はmingwのコンパイラを使用する場合

player->setMedia(QMediaContent()); 

しかし、映像はVMのwin7のx86およびレポートDirectShowPlayerService::doRender: Unresolved error code 80040266では再生できません。これは私にとってはデッドロックのようです。

関連する問題