Контейнер Python GTK для потока mjpeg

У меня есть поток mjpeg с веб-камеры, и я хотел бы отобразить его в приложении, написанном на python с использованием pygtk. Поток представляет собой строку байтов от драйвера. Какой виджет лучше всего подходит для отображения этого, и нужно ли мне делать какое-то промежуточное преобразование, прежде чем помещать его в виджет? Должен ли я написать свой собственный виджет для этого?


person Paul    schedule 28.11.2009    source источник


Ответы (3)


GTK+ не содержит собственного виджета, способного декодировать и отображать видео.

Вероятно, вам следует обратить внимание на GStreamer, который представляет собой набор инструментов для потокового мультимедиа, созданный на той же платформе GObject, что и GTK+.

Он имеет GstXvImageSink, способный отображать видео с использованием X11, и вы сможете настроить его для отображения поверх виджета GTK+.

person unwind    schedule 30.11.2009
comment
Autovideosink, возможно, также стоит посмотреть. - person XTL; 15.02.2012

Этот пример помог мне начать работу с gstreamer, он показывает, как захватывать поток с веб-камеры и отображать его в виджете.

http://pygstdocs.berlios.de/pygst-tutorial/webcam-viewer.html

person Linus Unnebäck    schedule 02.03.2010

Можно использовать виджет изображения для отображения потока 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

person mic159    schedule 20.01.2015