Gstreamer не отправляет сообщение «prepare-window-handle» в виртуальной машине Ubuntu 18.04 - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь разработать приложение 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 это сообщение не получено?Это как-то связано с графическими драйверами или проблемами ускорения?

1 Ответ

0 голосов
/ 30 ноября 2018

Благодаря вопросам Флориана я направил свое расследование в правильном направлении и нашел решение моей проблемы - для принимающего конвейера gstreamer необходимо autovideosink изменить на ximagesink.Полный рабочий трубопровод размещен ниже:

udpsrc port=4000 ! application/x-rtp,encoding-name=H264,payload=96 ! rtpjitterbuffer ! rtph264depay ! decodebin ! videoconvert ! ximagesink sync=FALSE

...