2011-10-13 152 views
13

可怕的表現我看到了可怕的性能,同時試圖與QtMobility的1.2.0的Qt 4.7.4播放視頻上的Ubuntu 10.10(奔騰4 2.80GHz的)。與QMediaPlayer和QVideoWidget

有什麼好笑的是,圖騰(也使用的GStreamer作爲後端)和VLC能夠播放這些視頻,而無需在本機上出了問題,即使有更高的分辨率(全屏等)。

根據頂部,我的應用程序佔用CPU的100%而圖騰和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)); 

有沒有人k現在什麼可能導致這種行爲,我該如何解決?

如果有人有興趣,的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 
+0

如果源代碼可用,我建議準備尋找繁忙循環的長時間調試弱點 – Ulterior

+3

@Ulterior沒有什麼可調試的。看起來像在qt庫中搞砸了。不會是第一個 –

回答

3

沒有什麼不對您的代碼,你只是過客球Qt用於電影的解碼和播放。

您正在使用的Qt版本沒有啓用硬件加速,或者您的系統沒有合適的Qt硬件來加速解碼和播放。

+2

糟糕的視頻性能在Linux上非常普遍。很難相信在2.8 GHz時,人們需要硬件加速才能獲得體面的性能,但我們現在是這樣。

+0

h264尤其可能會導致播放的痛苦,而2.8 GHz的Pentium 4並不是真的能勝任這項任務。幸運的是,對於我們的Linux用戶,VAAPI對開源驅動程序來說已經足夠了,我們不再需要nVidia VDPAU來播放1080p。我發現我的1。2Ghz酷睿i3筆記本電腦確實不錯,即使是開放源代碼的ATI驅動程序也可以使用VAAPI,如果我切換到內置混合動力5950 –

+0

顯然VAAPI還不支持Qt Multimedia: https://bugreports.qt-project .org/browse/QTBUG-23761 – RzR

5

我開始使用QML Video Element,並且出現了幾個渲染/性能問題後,我終於放棄並編寫了一個視頻播放器元素來替換QtMobility中的一個。

給誰可能感興趣,GStreamer has a C++ interface這是非常容易使用。

+0

我有同樣的問題,視頻播放器以正常速度重現視頻,但Phonon速度太慢。您能否更詳細地解釋您如何解決問題,我遵循GStreamer的C++接口鏈接,但是我沒有發現任何內容。謝謝。 – HMarioD

+0

好吧,這是一個值得它自己的線索的問題,所以我將簡要介紹一下:學習一些GStreamer教程,直到你能夠編寫一個可以讀取視頻文件,檢索它的幀並將其顯示在窗口上的應用程序。在此過程中,您會發現該幀存儲的像素格式可能不是RGB。爲了正確顯示幀,每幀需要被轉換成它們所在的格式(比如說YUV)到RGB。 – karlphillip

+0

轉換過程實際上是我們用Phonon觀察到的糟糕性能的原因,因爲它是由CPU完成的。爲了加快速度,您可以通過[GLSL着色器](http://stackoverflow.com/q/8977489/176769)編寫要在GPU上執行的色彩空間轉換代碼(即YUV到RGB)。隨意投票我的問題/答案。祝你好運! – karlphillip