Qt在五个Phonon :: VideoWidget中播放相同的视频

时间:2012-03-20 18:43:46

标签: c++ qt video phonon

我正试图在五个窗口中播放相同的视频:

     Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
         media = new Phonon::MediaObject(this);
        media->setCurrentSource(Phonon::MediaSource("video.flv"));

        Phonon::VideoWidget* fvid=new Phonon::VideoWidget(this);
        Phonon::createPath(media,fvid);
        fvid->setGeometry(20,20,122,122);
        fvid->show();

        Phonon::VideoWidget* fvid2=new Phonon::VideoWidget(this);
        Phonon::createPath(media,fvid2);
        fvid2->setGeometry(220,220,122,122);
        fvid2->show();
    }

void Widget::on_pushButton_clicked()
{
    media->play();
}

此代码适用于一个VideoWidget,但不适用于两个或五个。如果我创建了几个Mediaobjects,我的cpu使用率会上升到70-90%。在浏览器的FLash中解决了相同的任务。但我需要C ++ Qt的解决方案。我没有任何其他想法。 video.flv为144x144,持续时间约为7-8秒。

1 个答案:

答案 0 :(得分:0)

我不知道Phonon是否支持帧抓取,但更好的想法是只有一个Phonon播放器,然后你会制作每个帧的副本被重新渲染为QImage个对象。然后,您可以将QImage复制到另外4个QLabel个对象,每个对象分别对应4个窗口。

此解决方案使用的CPU处理量要少得多,因为您只渲染一个视频。

事实是, Phonon即将死亡,Qt Mobility提供QMediaPlayer/QVideoWidget,它们很容易使用并且允许抓取框架。我建议你将你的应用程序转移到这项技术上。