我想添加一些處理邏輯突然離開本地視頻文件,但我有一些麻煩理解如何將以下(成功)gst-launch命令轉換成碼(並用 「墊添加」 回調提供的話):Gstreamer鏈接decodebin2到autovideosink
gst-launch filesrc location=/path/to/my/video.avi ! decodebin2 ! autovideosink
我已經盡我的手在GStreamer中的basic-tutorial-3,代替audioconvert
使用decodebin2
:
data.source = gst_element_factory_make("filesrc", "source");
data.convert = gst_element_factory_make("decodebin2", "uridecoder");
data.sink = gst_element_factory_make("autovideosink", "autodetect");
但是,我永遠無法鏈接data.convert
到data.sink
,如示例中所述; gst_element_link(data.convert, data.sink)
總是失敗。我懷疑decodebin2
有一些特殊待遇。一些gstreamer的用戶文件檔案化管理using ghostpads and seperate bins,其迅速的嘗試後,也取得了沒有成功:
data.bin = gst_bin_new("processing-bin");
gst_bin_add_many(GST_BIN(data.bin), data.decoder, data.sink, NULL);
gst_element_add_pad(data.bin,
gst_ghost_pad_new("bin_sink",
gst_element_get_static_pad(data.decoder,"sink")));
我如何繼續調試有點困惑。其他人有沒有任何指針?
下面是當前代碼的歸結要點:(gist)
====
更新:我的回調,現在射擊,我想這是因爲我曾經爲一個不正確的文件名filesrc位置(哎呦)
現在,在遵循以下建議之後,我可以確認我正在獲取音頻和視頻上限類型,並在添加回調中檢查它們。不過,我現在得到以下「不掛鉤」的錯誤墊處理一幀後:
Debugging information: gstavidemux.c(5187): gst_avi_demux_loop(): /GstPipeline:gstreamer-test/GstBin:processing-bin/GstDecodeBin2:uridecoder/GstAviDemux:avidemux0:
streaming stopped, reason not-linked
我的回調,現在射擊,我能要檢查的帽子每個新焊盤的類型並相應地處理它們。然而,看起來該流在一幀處理後丟失了其匯。我已更新我的問題以供進一步說明。 – 2012-08-06 00:51:12