Я пытаюсь разработать приложение python, которое отображает полученный поток UDP в окне QWidget.Я использую gstreamer и Pyside (Qt).Для этого мне нужно установить дескриптор окна с winId моего QWidget, и я делаю это.Пример кода ниже:
def _on_any_bus_message(self, bus, message):
structure = message.get_structure()
if structure is not None:
print(structure.get_name())
if structure.get_name() == "prepare-window-handle":
message.src.set_window_handle(self.videoWidget.winId())
return Gst.BusSyncReply.PASS
videoWidget
имеет тип QWidget
.
Когда я запускаю свое приложение на виртуальной машине Ubuntu 18.04 и пытаюсь получить поток, оно открывается в новом рендерере OpenGLокно вместо ожидаемого окна.Я напечатал входящие сообщения в приведенном выше коде и заметил, что сообщение "prepare-window-handle"
никогда не принимается.
Я провел еще один тест - я запускаю то же приложение в Docker-контейнере с Ubuntu 16.04 и получаю сообщение "prepare-window-handle"
- он был распечатан в терминале и обработан приложением.
На обеих машинах linux установлен gstreamer1.0 с одинаковым набором плагинов.В чем может быть причина того, что на Linux VM это сообщение не получено?Это как-то связано с графическими драйверами или проблемами ускорения?