0

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

     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 秒。

4

1 回答 1

0

我不知道 Phonon 是否支持帧抓取,但一个更好的主意是只有一个 Phonon 播放器,然后您将复制每一帧渲染到一个QImage对象。然后,您可以将其复制QImage到另外 4 个QLabel对象,每个对象对应 4 个窗口。

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

事实上,Phonon 正在消亡,Qt Mobility提供了QMediaPlayer/QVideoWidget,它们使用起来很简单,并且允许抓帧。我建议您将您的应用程序转移到这项技术。

于 2012-03-20T19:00:46.597 回答