मैं पीईक्यूटी के साथ काम कर रहा हूं और एक क्यूटी विजेट के भीतर खेलने के लिए वेबकैम से वीडियो प्राप्त करने की कोशिश कर रहा हूं। मुझे सी और क्यूटी के लिए ट्यूटोरियल मिले हैं, और पायथन और gtk के लिए, लेकिन pyQt और gstreamer के इस कॉम्बो के लिए कुछ भी नहीं है। किसी को यह काम मिल रहा है?पायथन + क्यूटी + जीस्ट्रीमर
यह वीडियो ठीक खेलता है, लेकिन एक अलग विंडो में:
self.gcam = gst.parse_launch('v4l2src device=/dev/video0 ! autovideosink')
self.gcam.set_state(gst.STATE_PLAYING)
है कि मैं क्या जरूरत है ओवरले इतना काम कर रहे यह मेरी जीयूआई पर एक विजेट के भीतर प्रदर्शित किया जाता है पाने के लिए है। धन्यवाद, इंटरनेट का गुरु!
ठीक है, तो मुझे बहुत दूर मिल गया है, लेकिन अभी भी कुछ मदद की ज़रूरत है। मैं वास्तव में 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)
def on_sync_message(self, bus, message):
if message.structure is None:
return
message_name = message.structure.get_name()
if message_name == "prepare-xwindow-id":
win_id = self.windowId
assert win_id
imagesink = message.src
imagesink.set_property("force-aspect-ratio", True)
imagesink.set_xwindow_id(win_id)
def startPrev(self):
self.player.set_state(gst.STATE_PLAYING)
print "should be playing"
vidStream = Vid(wId)
vidStream.startPrev()
जहां wid विजेट im में उत्पादन प्रदर्शित करने के लिए प्राप्त करने की कोशिश की खिड़की आईडी है जब मैं इस चलाते हैं। एन 9 00 पर, स्क्रीन काले और ब्लिंक हो जाती है। कोई विचार? मैं यहाँ मर रहा हूँ!
संपादित करें: मैं पूर्ण कोड पोस्ट करने के लिए कहा गया है, और हालांकि मैं अभी भी यह थोड़ा साफ करने के लिए की जरूरत है, यहाँ प्रासंगिक हिस्सा है:,
self.cameraWindow = QtGui.QWidget(self)
self.cameraWindow.setGeometry(QtCore.QRect(530, 20, 256, 192))
self.cameraWindow.setObjectName("cameraWindow")
self.cameraWindow.setAttribute(0, 1); # AA_ImmediateWidgetCreation == 0
self.cameraWindow.setAttribute(3, 1); # AA_NativeWindow == 3
global wId
wId = self.cameraWindow.winId()
self.camera = Vid(wId)
self.camera.startPrev()
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.fvidscale = gst.element_factory_make("videoscale", "fvidscale")
self.fvidscale_cap = gst.element_factory_make("capsfilter", "fvidscale_cap")
self.fvidscale_cap.set_property('caps', gst.caps_from_string('video/x-raw-yuv, width=256, height=192'))
self.window_id = None
self.windowId = windowId
print windowId
self.player.add(self.source, self.fvidscale, self.fvidscale_cap, self.sink)
gst.element_link_many(self.source,self.fvidscale, self.fvidscale_cap, 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)
def on_sync_message(self, bus, message):
if message.structure is None:
return
message_name = message.structure.get_name()
if message_name == "prepare-xwindow-id":
win_id = self.windowId
assert win_id
imagesink = message.src
imagesink.set_property("force-aspect-ratio", True)
imagesink.set_xwindow_id(win_id)
def startPrev(self):
self.player.set_state(gst.STATE_PLAYING)
def pausePrev(self):
self.player.set_state(gst.STATE_NULL)
यह एक साथ कुछ बिट्स piecing जाता है और मैं अभी इसका परीक्षण नहीं कर सकता, लेकिन शायद यह किसी के लिए सहायक होगा। सौभाग्य!
आपने सी ++ और क्यूटी के लिए कहां पाया? मैं क्यूटी – user63898
के साथ आरएसटी स्ट्रीम करने के लिए रास्ता तलाश रहा हूं बस इस साइट को खोज रहा हूं और Google मुझे सी ++ और क्यूटी के लिए जानकारी मिली। इसके अलावा, Maemo.org मंचों की जांच करें। सौभाग्य! – Ptterb