Python GTK 容器用于 MJPEG 流

1 投票
3 回答
1875 浏览
提问于 2025-04-15 16:28

我有一个来自网络摄像头的mjpeg视频流,想在用python和pygtk写的应用程序中显示它。这个视频流是从驱动程序得到的一串字节。请问哪个控件最适合用来显示这个视频流?在放入控件之前,我需要做一些中间转换吗?我需要自己写一个控件来实现这个功能吗?

3 个回答

0

可以使用一个图像组件来显示MJPEG视频流。

你需要启动一个后台线程,让它去读取这个视频流,并使用 gtk.gdk.PixbufLoaderimage_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+组件上面播放视频。

撰写回答