Я пытаюсь создать систему мультимедийных баз данных, используя 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?
Спасибо
этот документ описывает функции, поддерживаемые бэкэндами QMultimedia. Визуализация в виджет теперь не поддерживается.
Я рекомендую использовать другую библиотеку для кодирования / декодирования мультимедиа (например, ffmpeg) — QMultimedia сейчас не стабильна, и я думаю, что корректная работа только примеры из документации 🙁
Других решений пока нет …