gstreamer 访问动态创建的元素以添加焊盘探针

gstreamer access dynamicaly created elements to add pad probe

我需要访问动态创建的 glvideomixer 元素的子元素(它是合成器的派生) 它有自己的 bin,它的子元素被创建到这个 bin 中。

如果我有指向 glvideomixer 元素和管道的指针,是否可以访问此类子元素?

是否有某种 "sub-element-created" 信号? - 我需要在子元素创建后立即访问它

我所做的所有这一切都是为了能够向这些元素添加焊盘探针以分析流经它们的内容。

这就是我创建 glvideomixer 的方式:

GstElement *video_mixer = gst_element_factory_make ("glvideomixer", NULL); 
//.. wait for creating inner structure and ASAP get element and 

这是仅显示 glvideomixer 的 bin 的管道部分:

我需要访问 mixer 元素(然后是其他具有自动生成名称的元素 - gluploadelement# glcolorconvertelement# ..)

您可以在 glvideomixer bin 上为 element-added 信号添加监听器:

void my_callback(GstBin *glvideomixer_bin, GstElement *element, 
       gpointer user_data) {
   //call gst_element_get_name and verify that it's "mixer"
}

g_signal_connect(GST_BIN(glvideomixer), "element-added", 
    G_CALLBACK(my_callback), my_data);

如果 mixer 元素碰巧立即创建,您也可以只使用 gst_bin_get_by_name

GstElement* mixer = gst_bin_get_by_name(GST_BIN(video_mixer), "mixer")

完成后取消引用:

gst_object_unref(mixer);

http://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstBin.html#GstBin-element-added