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"
質問が 2 つあります。
- このコールバックを呼び出すにはどうすればよいですか。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