我正在尝试使用 gstreamer 将来自网络摄像头的流保存为一系列图像。到目前为止,我已经编写了这段代码......
#!/usr/bin/python
import sys, os
import pygtk, gtk, gobject
import pygst
pygst.require("0.10")
import gst
def __init__(self):
#....
# Code to create a gtk Window
#....
self.player = gst.Pipeline("player")
source = gst.element_factory_make("v4l2src", "video-source")
sink = gst.element_factory_make("xvimagesink", "video-output")
caps = gst.Caps("video/x-raw-yuv, width=640, height=480")
filter = gst.element_factory_make("capsfilter", "filter")
filter.set_property("caps", caps)
self.player.add(source, filter, sink)
gst.element_link_many(source, filter, sink)
在此之后,我试图在总线上创建一个信号来侦听来自源或接收器的任何消息,以指示已发送或接收新帧,以便可以保存它。
bus = self.player.get_bus()
bus.add_signal_watch()
bus.connect("message::any", self.save_file,"Save file")
其中 save_file 是我的回调,我想保存文件。
def save_file(self, bus, msg):
print "SAVED A NEW FILE"
我有两个问题,
- 如何调用此回调。message::any 不起作用。
- 调用此消息时,如何访问图像缓冲区。
更新(2012 年 4 月 12 日):
几个链接供参考
v4l 的 python 接口。但这对我不起作用。当我尝试使用 12.04 Ubuntu 时,它似乎崩溃了。 http://code.google.com/p/python-video4linux2/
感兴趣的人的网络摄像头查看器代码。但这不是我想要的,因为它使用 gst-launch 并且不提供我想要的管道控制级别。http://pygstdocs.berlios.de/pygst-tutorial/webcam-viewer.html