gst中, srcpad buffer探针附加字符串, 下一个插件srcpad buffer探针获取, c实现
时间: 2023-05-11 17:01:47 浏览: 138
可以使用 gst_pad_add_probe() 函数来为 srcpad 添加 buffer 探针,然后在探针函数中使用 gst_buffer_add_meta() 函数来附加字符串。下一个插件的 srcpad 可以使用 gst_pad_add_probe() 函数来获取 buffer,并使用 gst_buffer_get_meta() 函数来获取附加的字符串。
以下是示例代码:
```c
// 为 srcpad 添加 buffer 探针
static GstPadProbeReturn srcpad_probe(GstPad *pad, GstPadProbeInfo *info, gpointer user_data) {
GstBuffer *buffer = GST_PAD_PROBE_INFO_BUFFER(info);
GstMeta *meta = gst_buffer_add_meta(buffer, MY_META_TYPE, NULL);
MyMeta *my_meta = (MyMeta *) meta;
my_meta->str = g_strdup("附加的字符串");
return GST_PAD_PROBE_OK;
}
// 获取下一个插件的 srcpad,并获取附加的字符串
static GstPadProbeReturn next_plugin_probe(GstPad *pad, GstPadProbeInfo *info, gpointer user_data) {
GstBuffer *buffer = GST_PAD_PROBE_INFO_BUFFER(info);
GstMeta *meta = gst_buffer_get_meta(buffer, MY_META_TYPE);
if (meta != NULL) {
MyMeta *my_meta = (MyMeta *) meta;
g_print("附加的字符串:%s\n", my_meta->str);
}
return GST_PAD_PROBE_OK;
}
// 在插件初始化时为 srcpad 添加探针
static gboolean plugin_init(GstPlugin *plugin) {
gst_element_class_add_pad_template(src_template, gst_pad_template_new("src", GST_PAD_SRC, GST_PAD_ALWAYS, gst_caps_new_empty_simple()));
gst_element_class_add_pad_template(next_plugin_template, gst_pad_template_new("sink", GST_PAD_SINK, GST_PAD_ALWAYS, gst_caps_new_empty_simple()));
gst_element_class_set_static_metadata(GST_ELEMENT_CLASS(plugin), "Plugin", "Generic", "Description", "Author");
return TRUE;
}
// 在插件启动时为 srcpad 添加探针
static gboolean plugin_activate(GstPlugin *plugin) {
GstElement *src = gst_element_factory_make("src", NULL);
GstElement *next_plugin = gst_element_factory_make("next_plugin", NULL);
GstPad *srcpad = gst_element_get_static_pad(src, "src");
GstPad *next_plugin_pad = gst_element_get_static_pad(next_plugin, "sink");
gst_pad_add_probe(srcpad, GST_PAD_PROBE_TYPE_BUFFER, srcpad_probe, NULL, NULL);
gst_pad_add_probe(next_plugin_pad, GST_PAD_PROBE_TYPE_BUFFER, next_plugin_probe, NULL, NULL);
gst_bin_add_many(GST_BIN(plugin), src, next_plugin, NULL);
gst_element_link(src, next_plugin);
return TRUE;
}
// 注册插件
GST_PLUGIN_DEFINE(GST_VERSION_MAJOR, GST_VERSION_MINOR, plugin, "Plugin", plugin_init, plugin_activate, NULL);
```
注意:MY_META_TYPE 是自定义的 meta 类型,需要在插件初始化时注册。
阅读全文