QMultimedia — Какие кодировки и контейнеры видео/аудио поддерживаются?

Я пытаюсь создать систему мультимедийных баз данных с использованием Qt. Я использую QMultimedia для воспроизведения видео в QVideoWidget.

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

 mMediaPlayer = new QMediaPlayer();
  mMediaPlaylist = new QMediaPlaylist();
  QMediaContent content(QMediaResource())
  mMediaPlaylist->addMedia(QUrl::fromLocalFile(QDir(QString("data")).absoluteFilePath(QString("%1.dat").arg(mMedia.GetUID()))));
    mMediaPlayer->setPlaylist(mMediaPlaylist);


    mVideoWidget = new QVideoWidget();
    mMediaPlayer->setVideoOutput(mVideoWidget);
    this->setCentralWidget(mVideoWidget);
    mVideoWidget->show();
    mMediaPlayer->play();

По сути, он воспроизводит, например, файл с именем 1.dat, который представляет собой просто переименованный видеофайл (например, video.mp4). Однако воспроизведение видео никогда не работает, и возникает следующая ошибка:

DirectShowPlayerService::doRender: Unresolved error code 80040266

С помощью поиска в Google я обнаружил, что эта ошибка связана с тем, что QMultimedia не имеет необходимых кодеков/фильтров для воспроизведения формата видео. Я пробовал преобразовывать свои видео во множество различных форматов с помощью ffmpeg, одновременно пробуя форматы, указанные на странице Поддерживаемые форматы в DirectShow и Поддерживаемые форматы мультимедиа в Media Foundation. Я также пытался установить фильтры DirectShow для Ogg Vorbis, Speex, Theora, FLAC и WebM и конвертировать видео в theora/vorbis в ogg-контейнере. Все еще не идет.

Я должен отметить, что мне удалось воспроизвести один файл mpg, поэтому я знаю, что QMultimedia работает. Но я попытался преобразовать другое видео, чтобы имитировать свойства этого файла mpg, и это, похоже, не сработало, поэтому кажется, что QMultimedia чрезвычайно специфичен в отношении поддерживаемых форматов.

Какую систему использует QMultimedia для внутреннего декодирования? Как узнать, какие типы кодировок и контейнеров он поддерживает? Можно ли написать свой собственный декодер в Qt?

Спасибо


person Brad    schedule 19.09.2013    source источник


Ответы (1)


В этот документ описывает функции, поддерживаемые бэкендами QMultimedia. Рендеринг в виджет сейчас не поддерживается. Я рекомендую использовать другую библиотеку для кодирования/декодирования мультимедиа (например, ffmpeg) - QMultimedia сейчас не стабильна и я думаю, что корректно работают только примеры из документации :(

person Dmitry Bakhtiyarov    schedule 19.09.2013
comment
Спасибо за статью. Я не знал, что рендеринг в виджет еще не поддерживается DirectShow. В итоге я использовал libvlc для рендеринга видео в окно, что оказалось чрезвычайно простым в использовании, поэтому я просто продолжу использовать libvlc. - person Brad; 19.09.2013