У меня есть поток mjpeg с веб-камеры и вы хотите отобразить его в приложении, написанном на python, используя pygtk. Поток представляет собой строку байтов из драйвера. Какой виджет будет лучше всего отображать это, и мне нужно будет сделать промежуточное преобразование перед тем, как поместить его в виджет? Должен ли я писать свой собственный виджет, чтобы сделать это?python контейнер GTK для потока mjpeg
ответ
GTK + не содержит собственный виджет, способный декодировать и рендеринг видео.
Возможно, вам стоит взглянуть на GStreamer, который представляет собой набор инструментов потокового мультимедиа, построенный на той же платформе GObject, что и GTK +.
У этого есть GstXvImageSink, который способен рендерить видео с помощью X11, и вы должны настроить его для рендеринга поверх виджета GTK +.
Этот пример помог мне начать работу с gstreamer, он показывает, как один захватывает поток веб-камеры и отображает его в виде виджета.
http://pygstdocs.berlios.de/pygst-tutorial/webcam-viewer.html
Можно использовать виджет изображения, чтобы показать поток MJPEG.
Начать фоновый поток, и он прочитал поток и обновлять изображение с помощью gtk.gdk.PixbufLoader
и image_widget.set_from_pixbuf
Например:
for frame in self.get_raw_frame():
loader = gtk.gdk.PixbufLoader('jpeg')
loader.write(frame)
loader.close()
pixbuf = loader.get_pixbuf()
# Schedule image update to happen in main thread
gobject.idle_add(self.widget.set_from_pixbuf, pixbuf)
Полный рабочий пример здесь: https://gist.github.com/mic159/fa2181a69f9119871b87
autovideosink может также стоит посмотреть. – XTL