Подтвердить что ты не робот

Ужасная производительность с QMediaPlayer и QVideoWidget

Я вижу ужасную производительность при попытке воспроизвести видео с QtMobility 1.2.0 и Qt 4.7.4 на Ubuntu 10.10 (Pentium 4 2.80GHz).

Что смешно в том, что тотем (который также использует gstreamer как backend) и vlc могут воспроизводить эти видео без проблем на этом компьютере, даже с более высоким разрешением ( полноэкранный режим и т.д.).

В соответствии с top мое приложение потребляет 100% процессора, а тотем и vlc потребляет только ~ 40%. Это странно! Поэтому я использую исходный код приложения ниже. Для выполнения задания используются QMediaPlayer и QVideoWidget.

movie.cpp

#include <QtGui/QMainWindow>
#include <QtGui>
#include <qmediaplayer.h>
#include <qvideowidget.h>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    QMainWindow mainWindow;

    mainWindow.resize(QSize(1280, 500));

    QMediaPlayer* mplayer = new QMediaPlayer;
    QVideoWidget* vid_widget = new QVideoWidget(&mainWindow);
    vid_widget->setAspectRatioMode(Qt::IgnoreAspectRatio);

    mainWindow.setCentralWidget(vid_widget);

    mplayer->setVideoOutput(vid_widget);
    mplayer->setMedia(QUrl::fromLocalFile(argv[1]));
    mplayer->setVolume(50);
    mplayer->setPlaybackRate(1);
    mplayer->play();

    mainWindow.show();

    return app.exec();
}

movie.pro

TEMPLATE = app
QT += gui 

CONFIG += mobility
MOBILITY = multimedia

QMAKE_RPATHDIR += $$DESTDIR

SOURCES = \
movie.cpp

Производительность остается ужасной, даже если я создаю меньшее окно, например:

mainWindow.resize(QSize(960, 540));

Кто-нибудь знает, что может вызвать это поведение и как его исправить?

Если кому-то интересно, ffmpeg показывает эту информацию об одном из видеофайлов, которые я использую для тестирования:

Input #0, matroska, from '/home/user/movie.mkv':
  Duration: 00:02:23.22, start: 0.000000, bitrate: N/A
    Stream #0.0(eng): Video: h264, yuvj420p, 1280x536 [PAR 1:1 DAR 160:67], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16
4b9b3361

Ответ 1

В коде нет ничего плохого, вы просто передаете мяч в Qt для декодирования и воспроизведения фильма.

Вы либо используете сборку Qt, которая не поддерживает аппаратное ускорение, либо ваша система не имеет подходящего оборудования для Qt для ускорения декодирования и воспроизведения.

Ответ 2

Я начал использовать QML Video Element и после нескольких проблем с рендерингом/производительностью, я, наконец, сдался и написал элемент видеопроигрывателя для замены один из QtMobility.

Кому бы ни было интересно, GStreamer имеет интерфейс С++, который очень прост в использовании.