2012-02-29 105 views

回答

0

您將需要收聽GstBus上的GstMessage(gst_pipeline_get_bus)。有一個GST_MESSAGE_EOS會在流式傳輸結束時發出。

+0

是的,我已經從管道獲得總線,並處理消息:GstBus * bus = gst_pipeline_get_bus(pipeline); gst_bus_add_watch(總線,(G_CALLBACK)bus_callback,(G_MAINLOOP)循環));並且在回調函數中,我已經收聽了GST_MESSAGE_EOS,但沒有發生任何事情。請幫助我,謝謝 – 2012-03-03 07:11:44

+0

也許你可以添加一個鏈接到你的來源(鏈接到回購或pastebin)。你錯過了別的東西。嘗試查看調試日誌(GST_DEBUG =「*:4」./your-app(例如,使用freedesktop.org的gst-debug-viewer) – ensonic 2012-03-04 17:16:28

+0

是的,我會試着調查 – 2012-03-06 10:30:09

0

如果您只是編寫應用程序,則不應該在意事件處理過程,因爲插件或基本元素庫將執行gst_pad_set_event_function()操作,並且事件處理函數將處理您發送的事件(GST_EVENT_EOS或其他事件)。

GStreamer源代碼,你可以看到,一個事件發送到所述元件(管道)將推動(通過調用gst_pad_push_event())到墊(SRC或匯,取決於GST_EVENT_IS_DOWNSTREAM(event)的返回值),則判斷事件是否屬於它,如果不是,則發送給對等打擊墊。

對您有幫助嗎?

+0

是的,我需要處理EOS事件,因爲這是我的教授的要求,影像應用程序會向你發送數據包,你必須對數據包進行解碼,將解碼後的數據推送到隊列中,然後實時顯示它們(當然,必須是同步的),所以我需要通知EOS事件當我發送最後一個數據包時,你能幫我解決這個問題嗎? – 2012-03-03 07:24:33

+0

我想人們可以更有效地幫助你,如果你想告訴你想要做什麼,並問他們如何實現這一點,而不是假設你知道解決方案在閱讀您的評論之後,我不確定發佈EOS活動是否是您想要的,因爲它本身很簡單,但似乎不適合您。 – ensonic 2012-03-12 09:21:02