[英]g_signal_connect “pad-added” doesn't work
我正在尝试学习如何在gstreamer中使用动态垫。 因此,我尝试添加添加了填充信号的信号,以便在创建元素后能够收到一条消息。 但是,我没有收到任何消息。
这是代码:
#include <gst/gst.h>
static void
cb_new_pad (GstElement *element,
GstPad *pad,
gpointer data)
{
gchar *name;
name = gst_pad_get_name (pad);
g_print ("A new pad %s was created\n", name);
g_free (name);
/* here, you would setup a new pad link for the newly created pad */
}
int
main (int argc,
char *argv[])
{
GstElement *pipeline, *source, *demux;
GMainLoop *loop;
/* init */
gst_init (&argc, &argv);
/* create elements */
pipeline = gst_pipeline_new ("my_pipeline");
source = gst_element_factory_make ("filesrc", "source");
g_object_set (source, "location", argv[1], NULL);
demux = gst_element_factory_make ("oggdemux", "demuxer");
/* put together a pipeline */
gst_bin_add_many (GST_BIN (pipeline), source, demux, NULL);
gst_element_link_pads (source, "src", demux, "sink");
/* listen for newly created pads */
g_signal_connect (demux, "pad-added", G_CALLBACK (cb_new_pad), NULL);
/* start the pipeline */
gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);
loop = g_main_loop_new (NULL, FALSE);
g_main_loop_run (loop);
}
那是什么问题呢? (通过我使用gstreamer 1.2.1的方式
您的代码对我来说很好。
您的解复用器可能无法对流进行解复用,请检查您提供的输入文件。 这可能不是有效的ogg文件。
在相关说明中,请在程序中添加调试代码,即侦听总线中的消息。 当某事不起作用时,它会很有帮助。
gstreamer sdk的基本教程3是您要尝试执行的操作的完美示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.