Я пытаюсь создать систему мультимедийных баз данных с использованием 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?
Спасибо