2009-11-28 2 views
0

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

ответ

2

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

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

У этого есть GstXvImageSink, который способен рендерить видео с помощью X11, и вы должны настроить его для рендеринга поверх виджета GTK +.

+0

autovideosink может также стоит посмотреть. – XTL

0

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