g_signal_connect pad-added не работает

Я пытаюсь научиться использовать динамические пэды в 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


person user655561    schedule 19.12.2013    source источник


Ответы (1)


Ваш код отлично сработал для меня.

Ваш демультиплексор, вероятно, не смог демультиплексировать поток, проверьте входной файл, который вы предоставляете. Вероятно, это недопустимый файл ogg.

В соответствующей заметке добавьте код отладки в свою программу, т. е. прослушивайте шину для сообщений. Очень помогает, когда что-то не работает.

базовое руководство 3 по gstreamer sdk: прекрасный пример того, что вы пытаетесь сделать.

person rubndsouza    schedule 19.12.2013
comment
Я попробовал несколько видео. Я не получаю никакой ошибки, но функция не входит в функцию cb_new_pad. - person user655561; 19.12.2013
comment
Я попробовал базовый учебник 3, и у меня была та же проблема. Я использую gstreamer 1.2.1 на Ubuntu 12.04, используя виртуальный ящик. Что может быть причиной этой проблемы? - person user655561; 19.12.2013
comment
Итак, вы не получаете никаких сообщений об ошибках, когда запускаете базовый учебник 3? Работает ли gst-launch в командной строке cmd? - person rubndsouza; 20.12.2013