Я разрабатываю приложение в Qt (5), и в основном я пытаюсь визуализировать один и тот же источник видео в двух местах в моем окне, используя QtMultimedia5.
Я делаю это в QML, но если есть решение в C ++, я буду рад реализовать его вместо этого.
У меня нет проблем, чтобы показать видео в окне. Проблемы начинаются, когда я пытаюсь использовать тот же QMediaSource, но отображаю его на 2 окнах / элементах управления.
Я вижу, что происходит то, что вызывается QMediaService :: requestControl, который возвращает объект QVideoRendererControl. Затем вызывается QVideoRendererControl :: setSurface, чтобы установить поверхность, на которой оно отображает видео.
Итак, из того, что я понял, у QMediaService есть одна поверхность, на которую он рендерит видео в любой момент времени.
Как я могу сделать 2 или более поверхностей? Есть ли другие классы, которые лучше соответствуют моим потребностям?
ура
Ну, это было довольно просто, не так, как я ожидал. Ты должен любить 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, чтобы шейдер уменьшал исходное изображение.
Других решений пока нет …