QMediaPlayer和QVideoWidget的表现很糟糕

Terrible performance with QMediaPlayer and QVideoWidget

本文关键字:QVideoWidget QMediaPlayer      更新时间:2023-10-16

Ubuntu 10.10(奔腾4 2.80GHz)上尝试使用QtMobility 1.2.0Qt 4.7.4播放视频时,我看到了一个糟糕的表现。

有趣的是totem(也使用gstreamer作为后端)和vlc能够在这台机器上播放这些视频而没有问题,即使具有更高的分辨率(全屏等)。

根据top,我的应用程序占用100%的CPU,而totem和vlc只占用~ 40%。这是……奇怪!因此,我将在下面分享应用程序的源代码。它使用QMediaPlayerQVideoWidget来完成工作。

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

我开始使用QML Video Element,在遇到几个渲染/性能问题后,我最终放弃了,并编写了一个视频播放器元素来取代QtMobility的元素。

对于那些可能感兴趣的人,GStreamer有一个非常容易使用的c++接口。

你的代码没有问题,你只是把球传给Qt来解码和播放电影。

您使用的Qt版本没有启用硬件加速,或者您的系统没有适当的硬件让Qt加速解码和回放。