Qt Воспроизвести одно и то же видео на пяти Phonon :: VideoWidget - PullRequest
0 голосов
/ 20 марта 2012

Я пытаюсь воспроизвести одно и то же видео в пяти окнах:

     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, но не для двух или пяти. Если я создаю несколько медиаобъектов, загрузка процессора увеличивается до 70-90%. Та же задача была решена во Flash для браузеров. Но мне нужно решение для C ++ Qt. У меня нет других идей. Video.flv имеет размер 144x144 и его продолжительность составляет около 7-8 секунд.

1 Ответ

0 голосов
/ 20 марта 2012

Я не знаю, поддерживает ли Phonon захват кадра , но лучшая идея - иметь только один проигрыватель Phonon , и тогда вы будете делать копию каждого рендеринга кадра к QImage объекту. Затем вы можете скопировать QImage в другие 4 QLabel объекты, по одному для каждого из 4 окон.

Это решение использует намного меньше процессорной обработки, поскольку вы будете рендерить только одно видео.

Правда в том, что Умирает Фонон, и Qt Mobility предлагает QMediaPlayer / QVideoWidget , с которыми легко работать, и позволяет захват кадра . Я предлагаю вам перенести ваше приложение на эту технологию.

...