मैं एक परियोजना पर pygst का उपयोग कर रहा हूं और यह ठीक काम कर रहा है। मैं इसे नए आत्मनिरीक्षण प्रणाली (जीआई) में माइग्रेट करने की कोशिश कर रहा हूं, लेकिन मुझे एक अलग व्यवहार मिल रहा है।जीस्ट्रीमर बस भेजता है कोई संदेश नहीं
वर्ष pygst में मैं कुछ इस तरह है:
... # other imports
import pygst
pygst.require('0.10')
import gst
... # other imports
gobjects.threads_init()
...
def my_handler(bus, message):
# handle the message
...
player = gst.element_factory_make('playbin2', 'my_player')
bus = player.get_bus()
bus.connect('message', my_handler)
bus.add_signal_watch()
...
player.set_state(gst.STATE_PLAYING)
# start the main Glib loop
संदेश पैरामीटर एक विशेषता .type जो चयनात्मक प्रसंस्करण के लिए इस्तेमाल किया जा सकता (मैं केवल के अंत में दिलचस्पी रखता हूँ है धारा (ईओएस) और त्रुटि)। नई प्रणाली का उपयोग करते हुए मेरे पास है:
... # other imports
from gi.repository import Gst
import glib
import gobject
.... # other imports
gobject.threads_init()
loop = glib.MainLoop(None, False)
def bus_handler(bus, message):
print message
# handle the message
...
Gst.init_check(None)
player = Gst.ElementFactory.make('playbin2', 'my_player')
player.set_property('uri', 'file:///home/kenji/button.ogg')
bus = player.get_bus()
bus.connect('message', bus_handler)
bus.add_signal_watch()
player.set_state(Gst.State.PLAYING)
# start the main loop
हालांकि, हैंडलर हमेशा कोई नहीं के रूप में पैरामीटर संदेश प्राप्त करता है। मैंने इन्हें फ़िल्टर करने का प्रयास किया है, लेकिन मुझे अभी भी कुछ भी नहीं मिला है (यानी सभी संदेश कोई नहीं)।
मैंने बहुत सारे जीस्ट्रीमर दस्तावेज़ (विशेष रूप से GstBus, add_signal_watch() और playbin2 पर पढ़ा है) लेकिन मुझे इस व्यवहार से संबंधित कुछ भी नहीं मिला। मैंने GST gir फ़ाइल की जांच की है और मैंने देखा है कि add_watch() को आत्मनिरीक्षण नहीं किया जा सकता है, इसलिए यह एक मृत अंत है। इस उपरोक्त उदाहरण में ग्लिब मुख्य लूप केवल पूर्ण जीटीके उदाहरण के बिना चीजों को कम करने के लिए है, लेकिन वास्तविक चीज़ Gtk.main() (बिल्कुल वही व्यवहार दे रही है) का उपयोग करती है।
मैं आर्क लिनक्स 64 पर जीस्ट्रीमर 0.10.35.0 (जैसा कि Gst.version() द्वारा सूचित किया गया है) का उपयोग कर रहा हूं, लेकिन मैंने उबंटू 11.04 32-बिट पर जीस्ट्रीमर 0.10.32.0 पर एक ही व्यवहार का परीक्षण किया है।
क्या बस.कनेक्ट() के लिए कोई विकल्प है? क्या मैं इसे गलत तरीके से उपयोग कर रहा हूं? मैंने इस बग को शिकार करने में काफी कुछ घंटे बिताए हैं, मैं वास्तव में इस पर किसी अंतर्दृष्टि की सराहना करता हूं। धन्यवाद! =)
मुझे यह बग मिला: https://bugzilla.gnome.org/show_bug.cgi?id=631901 असल में, यह अभी तक लागू नहीं हुआ है। –
मैं पुष्टि कर सकता हूं कि यह gstreamer 1.0 में तय है। –