मेरे पास एक क्यूटी एप्लीकेशन है जो एक अलग धागे में जीस्ट्रीमर से संबंधित सामान करता है। हालांकि मैं सोचता हूं मैंने सिग्नल कॉलबैक सेट करने के नियमों का पालन किया है, मैंने जो कॉलबैक फ़ंक्शन निर्दिष्ट किया है उसे प्रतीत नहीं किया जा रहा है।जीस्ट्रीमर मेरे कॉलबैक को कॉल नहीं कर रहा है
कॉलबैक फ़ंक्शन इस प्रकार है, सब यह करने के लिए प्रयास करता है डिबगिंग के लिए सांत्वना के लिए कुछ लोग इन है:
static gboolean Cb(GstBus *bus, GstMessage *msg, gpointer data)
{
std::cout << "g_sig, bus = " << (void*)bus
<< ", msg = " << (void*)msg
<< ", data = " << (void*)data
<< std::endl;
return TRUE;
}
अनुक्रम मैं शुरू करने और धारा (एक जीवित RTSP/264 फ़ीड की निगरानी के लिए उपयोग कर रहा हूँ एक आईपी कैमरे से) है:
GstElement *playBin = gst_parse_launch("<gstreamer pipeline>");
GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(playBin));
gst_bus_add_signal_watch(bus);
g_signal_connect(bus, "message::state-changed", (GCallback)Cb, NULL);
gst_element_set_state(playBin, GST_STATE_PLAYING);
GMainLoop *mainLoop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(mainLoop);
अब धारा वास्तव में खेल रहा है (वीडियो दिखाई देता है) तो मैं वहां कोई नहीं मुद्दा है यह सोचते कर रहा हूँ है। हालांकि, मुझे उम्मीद है कि पाइपलाइन शुरू होने पर स्थिति परिवर्तन संदेश पोस्ट किया जाना चाहिए। यह तब नहीं हो रहा है जब से मैं Cb()
से आउटपुट नहीं देख रहा हूं।
मुझे message::eos
, message::error
और message::element
संकेतों को भी पकड़ने पर भी मुझे कोई आउटपुट नहीं मिलता है।
मुझे यकीन नहीं है कि यह एक समस्या होगी, लेकिन बस, उपरोक्त कोड थोड़ा सरलीकृत है। वास्तव में दो स्ट्रीम चल रहे हैं, इसलिए प्रत्येक प्लेबिन के लिए उपरोक्त कोड का पहला स्निपेट दो बार होता है (अनुक्रम प्रत्येक के लिए सटीक है, मुझे कोड को अनावश्यक रूप से जटिल करने की आवश्यकता नहीं है)।
फिर मुख्य पाश बनाया और चलाया जाता है।
जैसा कि कहा गया है, मुझे कॉलबैक फ़ंक्शन से कोई आउटपुट नहीं दिख रहा है, तो मेरे संदेश कहां जा रहे हैं?
परिशिष्ट: क्या इसके लायक है, मैं भी कोशिश की है के लिए gst_bus_add_watch
विधि सभी बजाय संदेशों विशिष्ट संकेत है, लेकिन अभी भी कुछ नहीं दिखाई देता है पर कब्जा करने की। मुझे यह भी उल्लेख करना चाहिए कि, एक क्यूटी अनुप्रयोग होने के नाते, मेरे पास कोड में gtk_init
नहीं है - मैं मुख्य धागे से gst_init
पर कॉल करता हूं।
मुझे लगता है कि आप वास्तविक कोड में सभी बुलाए गए कार्यों (विशेष रूप से g_signal_connect) के वापसी मूल्यों की जांच कर रहे हैं? – Silicomancer
किसी कारण से यह संभव है कि स्टडआउट को रीडायरेक्ट किया जा रहा है। क्या आपने 'सीबी() 'फ़ंक्शन में ब्रेकपॉइंट में रखने का प्रयास किया है? – MrEricSir