Как встроить собственное окно в компонент QML?

Я разрабатываю кроссплатформенное SIP-приложение на основе PJSUA2 для ядра и QtQuick для графического интерфейса.

PJSUA2 предоставляет API для отображения устройств захвата пользователя, а также видеопотока удаленной стороны. Такой API предоставляет собственный обработчик окон для данного видео. Встроенный обработчик окон зависит от платформы (HWND в Windows, NSView * на Mac и т. Д.).

Я хотел бы встроить это собственное окно в определенный компонент QML, скажем, Rectangle.

Это возможно?

К вашему сведению: я использую MacOS Sierra 10.12.6, PJSIP 2.7 с бэкэндом SDL и Qt 5.9.2. Но я бы хотел, чтобы это работало как на Windows, так и на MacOS.

1

Решение

Ты не можешь. Вы даже не можете включить QWidget в Qt Quick Item.

Чтобы дать вам что-нибудь пожевать, вы можете взглянуть на https://github.com/vlc-qt/vlc-qt .

Они предлагают QWidgets и QtQuick Items, которые позволяют использовать VLC для воспроизведения видео.

Они используют дескриптор окна (HWND) для виджета (https://github.com/vlc-qt/vlc-qt/blob/master/src/core/MediaPlayer.cpp#L217).

Но для Qt Quick они копируют каждый видеокадр в QSGNode (https://github.com/vlc-qt/vlc-qt/blob/master/src/core/VideoStream.cpp#L111 а также https://github.com/vlc-qt/vlc-qt/blob/master/src/qml/rendering/VideoNode.cpp#L32).

2

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

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

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