Qt Воспроизвести одно и то же видео на пяти Phonon::VideoWidget
Я пытаюсь воспроизвести одно и то же видео в пяти окнах:
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 ответ
Я не знаю, поддерживает ли Phonon захват кадров, но лучшая идея - иметь только один проигрыватель Phonon, и тогда вы будете делать копию каждого кадра, визуализируемого в QImage
объект. Вы можете скопировать QImage
в другой 4 QLabel
объекты, по одному на каждое из 4 окон.
Это решение использует намного меньше процессорной обработки, так как вы будете рендерить только одно видео.
Правда в том, что Phonon умирает, а Qt Mobility предлагает QMediaPlayer/QVideoWidget, с которым легко работать и который позволяет захватывать кадры. Я предлагаю вам перенести ваше приложение на эту технологию.