2017-01-26 2 views
0

У меня есть конвейер, написанный в программу на языке C, которая перенаправляет видеопоток от stdin на несколько клиентов UDP. Я хочу, чтобы эти клиенты добавлялись или удалялись динамически, поэтому во время компиляции невозможно определить, какие из них и сколько их будет. Это мой трубопровод (если добавить фиксированный параметр clients это работает отлично):GStreamer - Вывести сигнал на элемент

fdsrc name=origin \ 
! video/x-h264,width=320,height=240,framerate=30/1,profile=baseline,stream-format=avc,alignment=au \ 
! h264parse \ 
! rtph264pay \ 
    config-interval=1 \ 
    pt=96 \ 
! multiudpsink name=dest \ 
    sync=false 

Согласно документации GStreamer, что я могу достигнуть его, посылая сигнал для того, чтобы добавить или удалить клиент динамически. В этом случае это должно быть add signal.

Но я не могу найти информацию о , посылая сигнал элементу (в данном случае, к элементу multiudpsink). Легко получить ссылку на мой элемент:

GstElement *sink = gst_bin_get_by_name(GST_BIN(pipeline), "dest"); 
/* TODO: send a signal to add a client */ 
g_object_unref(sink); 

Но как я могу испустить сигнал этому элементу?

ответ

1

Наконец-то я понял. Используя g_signal_emit_by_name, вы можете отправить любому элементу GStreamer сообщение.

код выглядит следующим образом:

GstElement *sink = gst_bin_get_by_name(GST_BIN(pipeline), "dest"); 
g_signal_emit_by_name(sink, "add", "192.168.1.25", 5004, NULL); 
g_object_unref(sink); 

Благодаря Тим Мюллер, из списка рассылки GStreamer-разви, который дал мне right example о том, как продолжить.

Смежные вопросы