Проблемы EOS с конвейером gstreamer - PullRequest
0 голосов
/ 07 сентября 2018

Я пишу программу для имитации конвейера gsteramer, который у меня работает из командной строки.

Мне удалось успешно перехватить некоторые сигналы, такие как:

g_signal_connect (data2.source, "pad-added", G_CALLBACK (pad_added_handler), &data2);
g_signal_connect (data2.source, "drained", G_CALLBACK (eos_cb), &data);

для добавленияпрокладывает и сообщает, когда читатель URL достиг конца потока - EOS.

Я пытаюсь создать ловушку, чтобы найти, когда шина достигла EOS, но у меня возникли проблемы.Я видел примеры ошибок перехвата из шины, например:

g_signal_connect (G_OBJECT (bus), "message::error", (GCallback)error_cb, &data);

Я думаю, что-то вроде этого должно работать:

g_signal_connect (G_OBJECT (bus), "message::eos", (GCallback)eos_cb_bus, &data);

Но я не знаю, что именноищите (часть 'message :: eos').

Кто-нибудь может мне помочь?Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Сравните ваш код с Как пользоваться автобусом . Копируем пример кода оттуда:

bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline);
gst_bus_add_signal_watch (bus);
g_signal_connect (bus, "message::error", G_CALLBACK (cb_message_error), NULL);
g_signal_connect (bus, "message::eos", G_CALLBACK (cb_message_eos), NULL);

Итак, «message :: eos» - это правильное имя сигнала. Возможно, вы забыли gst_bus_add_signal_watch () в своем коде?

Сравните также Разница между gst_bus_add_watch () и g_signal_connect () .

0 голосов
/ 07 сентября 2018

Пример GStreamer hello world - хорошее начало, чтобы понять, как с этим обращаться:

https://gstreamer.freedesktop.org/documentation/application-development/basics/helloworld.html

По сути, вы настраиваете обратный вызов GstBus и выбираете оттуда сообщения, которые вас интересуют. В вашем случае это будет EOS.

...