Qt (5): рендерить одно и то же видео на 2 разных поверхностях, используя QtMultimedia

Я разрабатываю приложение в Qt (5), и в основном я пытаюсь визуализировать один и тот же источник видео в двух местах в моем окне, используя QtMultimedia5.
Я делаю это в QML, но если есть решение в C ++, я буду рад реализовать его вместо этого.

У меня нет проблем, чтобы показать видео в окне. Проблемы начинаются, когда я пытаюсь использовать тот же QMediaSource, но отображаю его на 2 окнах / элементах управления.

Я вижу, что происходит то, что вызывается QMediaService :: requestControl, который возвращает объект QVideoRendererControl. Затем вызывается QVideoRendererControl :: setSurface, чтобы установить поверхность, на которой оно отображает видео.
Итак, из того, что я понял, у QMediaService есть одна поверхность, на которую он рендерит видео в любой момент времени.

Как я могу сделать 2 или более поверхностей? Есть ли другие классы, которые лучше соответствуют моим потребностям?

ура

4

Решение

Ну, это было довольно просто, не так, как я ожидал. Ты должен любить QtQuick2.

Итак, у меня есть источник MediaPlayer и элемент VideoOutput в моем коде QML:

MediaPlayer {
id: mp1
source: "slide-1.wmv"}
VideoOutput {
id: tbltSlides
anchors.fill: parent
visible: true
source: mp1
}

Все, что мне нужно было сделать, это просто добавить ShaderEffectSource и установить tbltSlides в качестве его источника.
Так просто:

ShaderEffectSource {
id: slides
x: 600
width:250
height: 250
sourceItem: tbltSlides
visible: true
}

РЕДАКТИРОВАТЬ: Очевидно, что для достижения наилучшего качества вы хотите, чтобы элемент tbltSlides был больше, чем ShaderEffectSource, чтобы шейдер уменьшал исходное изображение.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]