我正在使用PyQt并尝试从网络摄像头获取视频以在QT小部件中播放.我已经找到了C和Qt的教程,以及python和gtk的教程,但是对于pyQt和gstreamer的这个组合没什么.有人这个有用吗?
这播放视频很好,但在一个单独的窗口中:
self.gcam = gst.parse_launch('v4l2src device=/dev/video0 ! autovideosink')
self.gcam.set_state(gst.STATE_PLAYING)
Run Code Online (Sandbox Code Playgroud)
我需要的是让叠加层工作,以便它显示在我的GUI上的小部件中.谢谢,互联网大师!
好的,所以我已经走得更远了,但仍然需要一些帮助.我实际上是为Maemo编写的,但以下代码在我的linux笔记本电脑上工作正常:
class Vid:
def __init__(self, windowId):
self.player = gst.Pipeline("player")
self.source = gst.element_factory_make("v4l2src", "vsource")
self.sink = gst.element_factory_make("autovideosink", "outsink")
self.source.set_property("device", "/dev/video0")
self.scaler = gst.element_factory_make("videoscale", "vscale")
self.window_id = None
self.windowId = windowId
self.player.add(self.source, self.scaler, self.sink)
gst.element_link_many(self.source,self.scaler, self.sink)
bus = self.player.get_bus()
bus.add_signal_watch()
bus.enable_sync_message_emission()
bus.connect("message", self.on_message)
bus.connect("sync-message::element", self.on_sync_message)
def on_message(self, bus, message):
t = message.type
if t == gst.MESSAGE_EOS:
self.player.set_state(gst.STATE_NULL)
elif t == gst.MESSAGE_ERROR:
err, debug = message.parse_error()
print "Error: %s" % err, debug
self.player.set_state(gst.STATE_NULL) …Run Code Online (Sandbox Code Playgroud)