13

Ubuntu 10.10 (Pentium 4 2.80GHz)上尝试使用QtMobility 1.2.0Qt 4.7.4播放视频时,我发现性能很差。

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

根据top,我的应用程序消耗了100%的 CPU,而 totem 和 vlc 只消耗了~ 40%。这很奇怪!所以我在下面分享应用程序的源代码。它使用QMediaPlayerQVideoWidget完成这项工作。

电影.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();
}

电影.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
4

2 回答 2

5

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

对于任何可能感兴趣的人,GStreamer 都有一个非常易于使用的 C++ 接口。

于 2011-12-13T12:43:20.920 回答
3

您的代码没有任何问题,您只是将球传递给 Qt 以进行电影的解码和播放。

您正在使用未启用硬件加速的 Qt 构建,或者您的系统没有适合 Qt 的硬件来加速解码和播放。

于 2011-10-22T16:59:52.833 回答