2013-02-26 4 views
6

Я использую qt5.0. Я создал dll и поместил все свои аудиофайлы внутри dll. теперь я создаю файл из ресурса и игры. он работает нормально.Как воспроизвести аудио и удалить файл в QMediaPlayer?

Но проблема в том, что после воспроизведения файла я не могу удалить этот файл и воссоздать новый файл.

Если я попытаюсь удалить вручную, также получаю ошибку. msgstr "некоторая другая программа, использующая этот файл". как только я остановлю программу, тогда только удастся удалить файл.

Как удалить файл после немедленного палибэка. вот мой код

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

Я получаю "Audio играл" сообщение, но это не deleteing файл.

, пожалуйста, помогите мне решить эту проблему.

+0

есть ли какой-либо способ прямого потока из DLL без создания временных файлов? – Saravanan

+0

Похоже, что игрок может держать дескриптор файла. Если вы удалите объект игрока, может ли файл быть удален? – TheDarkKnight

+0

ну, я пробовал все, но все-таки я получаю ошибку. поэтому я помещаю аудиофайлы в папку windows/media и использую в приложении. Благодарю. – Saravanan

ответ

1

docs говорят нам для QMediaPlayer :: setMedia:

Установка этого свойства в нуль QMediaContent заставит игрока отбрасывание всю информацию, относящуюся к текущему медиа-источника и прекратить все I/O операции, связанные с этой средой.

К сожалению, это не работает на Windows 7 с Qt 5.1.1 - Это почему я подал bug report

Даже люди в IRC канале Qt сказал мне не использовать QMediaPlayer на Windows. Они предложили использовать SDL. Немного странно для кроссплатформенной платформы с API мультимедиа.

3

В последнее время я встретил ту же проблему. Я решил это, изменив компилятор с msvs на mingw. Я думаю, что ребята из Qt не решили эту ошибку, так как ее статус «нуждается в дополнительной информации». Код для выпуска медиафайла может быть следующим.

player->setMedia(QMediaContent()); 

Однако, если я использую MinGW компилятор, видео не играет в win7 x86 VM и сообщает DirectShowPlayerService::doRender: Unresolved error code 80040266. Это кажется мне тупиком.