Воспроизведение фононов QT не выполняется, когда QFILE используется для mediaSource, отлично работает при передаче строки - PullRequest
1 голос
/ 01 февраля 2012

Ниже приведен код, который я использую для воспроизведения видео

 QFile* file =new QFile(“C:\\Video\\test.avi”);
   media->setCurrentSource(Phonon::MediaSource(file));
   media->play();

При использовании этого кода воспроизведение не выполняется - я вижу полосу воспроизведения внизу, но видео никогда не запускается.

Если я изменю код на следующий, все будет работать как положено

  media->setCurrentSource(Phonon::MediaSource(“C:\\Video\\test.avi”));
  media->play();

Требуются ли дополнительные шаги инициализации при использовании iodevice?В конечном итоге мой код будет использовать пользовательский iodevice, который также не работает.

Ответы [ 3 ]

1 голос
/ 17 октября 2014

Это старая запись, но я хотел бы устранить любую путаницу на случай, если она поможет кому-то в будущем.

  1. QT позволяет передать Phonon :: MediaSource () aQIODevice.Мы успешно развернули наше решение, создав собственный подкласс QIODevice.

Причина, по которой он не работал для меня, заключалась в том, что у QT возникла проблема с кодеком, который я использовал.Когда вы используете устройство QIO, вы не получаете такую ​​же поддержку формата, как при передаче строки.

Еще одна вещь, которую стоит отметить, хотя это решение прекрасно работает на Windows.На Mac при использовании устройства QIO весь файл будет загружен в память до его воспроизведения.В моем случае это был нарушитель соглашения.Наличие зашифрованного файла бесполезно, если первое, что вы делаете, - дешифруете весь файл и загружаете его в память.

0 голосов
/ 01 февраля 2012

Если вы внимательно посмотрите в [Документ о фононном модуле] [1], вы увидите, что MediaSource нельзя построить с QFile*.

Кстати, я не вижу в вашем коде фононных путей.По крайней мере, вы должны создать аудио-приемник и подключить его к медиаобъекту:

Phonon::AudioOutput *audioOut = new PhononAudioOutpu(Phonon::MusicCategory);//or the      category you need
Phonon::createPath(mediaObject, audioOutput);
mediaObject->play();

Прекрасно работает с QFile

0 голосов
/ 01 февраля 2012

Из документации Phonon::MediaSource:

Предупреждение. В Windows мы поддерживаем только устройства QIOD, содержащие форматы avi, mp3 или mpg.Используйте конструктор, который берет имя файла для открытия файлов (внутренний интерфейс Qt не использует QFile для внутреннего использования).

Я думаю, что последняя строка должна ответить на ваш вопрос.Вместо QFile вы можете использовать QString или вызвать функцию QFile::fileName следующим образом:

QFile* file =new QFile(“C:\\Video\\test.avi”);
media->setCurrentSource(Phonon::MediaSource(file->fileName()));
media->play();
...