Python GTK 容器用于 MJPEG 流
我有一个来自网络摄像头的mjpeg视频流,想在用python和pygtk写的应用程序中显示它。这个视频流是从驱动程序得到的一串字节。请问哪个控件最适合用来显示这个视频流?在放入控件之前,我需要做一些中间转换吗?我需要自己写一个控件来实现这个功能吗?
3 个回答
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
1
这个例子帮助我入门了gstreamer,它展示了如何获取摄像头的视频流并在一个小窗口中显示出来。
http://pygstdocs.berlios.de/pygst-tutorial/webcam-viewer.html
2
GTK+本身没有可以直接解码和播放视频的组件。
你可以看看GStreamer,这是一个基于GTK+相同框架的流媒体工具包。
它有一个叫做GstXvImageSink的功能,可以用X11来播放视频,你可以配置它在GTK+组件上面播放视频。