Запустите GstRTSPServer из пайплайна GstElement

Я делаю приложение Gstreamer 1.0 на C. Конвейер построен на основе конфигурации пользователя и «состояния» системы во время выполнения. Поэтому я использую несколько GstElements, которые позже добавляются и связываются с «конвейером GstElement». Вот минимальный пример для лучшего понимания:

GstElement *pipeline = gst_pipeline_new("mypipeline");
...
GstElement *src = gst_element_factory_make("videotestsrc", NULL);
...
gst_bin_add_many(GST_BIN(pipeline), src, enc, pay, NULL);
gst_element_link_many(src, enc, pay, NULL);
...

Затем этот конвейер должен быть запущен с помощью GstRTSPMediaFactory. . Проблема, с которой я столкнулся, заключается в том, что gst_rtsp_media_factory_set_launch принимает только конвейер const gchar *.

Поэтому мой вопрос: если кто-нибудь из вас знает о функции для

  • преобразование GstElement *pipeline в представление const gchar* (что-то вроде обратного gst_parse)
  • или запуск GstRTSPMediaFactory из GstElement *pipeline (см. редактирование №1 ниже)

Любая помощь высоко ценится! Спасибо.


РЕДАКТИРОВАНИЕ №1:

Из документации gst-rtsp-server:

Реализация GstRTSPMediaFactory по умолчанию позволяет легко создавать конвейеры GStreamer с использованием синтаксиса gst-launch. Можно создать подкласс GstRTSPMediaFactory, использующий различные методы построения конвейеров.

Поэтому запуск GstRTSPMediaFactory из GstElement технически возможен. Дополнительный вопрос к этому подходу: кто-нибудь знает о такой реализации подкласса GstRTSPMediaFactory?


person g0hl1n    schedule 13.11.2017    source источник
comment
нет ничего, чтобы преобразовать конвейер в строку gst-launch, в качестве альтернативы вы можете посмотреть [1], чтобы реализовать второй вариант передачи конвейера на завод, [1] gstreamer-devel.966125.n4.nabble.com/   -  person Prabhakar Lad    schedule 14.11.2017
comment
Я хотел бы сделать то же самое. Вы нашли способ?   -  person JonasVautherin    schedule 31.03.2020


Ответы (1)


Да, репозиторий gst-rtsp-server имеет ссылку пример в подпапке examples. Подводя итог: создайте подкласс GstRTSPMediaFactory и переопределите виртуальный метод create_element().

Кроме того, это также означает, что 2 варианта, которые вы указали ранее, были неверными;

  • преобразование конвейера GstElement в представление const gchar (что-то вроде обратного gst_parse)

Это невозможно, так как программный API более выразителен и позволяет делать больше (даже простой пример: регистрация обратных вызовов), чем декларативный API запуска.

  • или запуск GstRTSPMediaFactory из конвейера GstElement * (см. редактирование № 1 ниже)

Вы думаете наоборот: когда RTSP-сервер GStreamer получает запрос на начало воспроизведения, он будет использовать GstRTSPMediaFactory для запуска GstPipeline на основе вашей реализации get_element(). А не наоборот, когда каждый пайплайн запускает свой RTSP-сервер.

person nielsdg    schedule 05.06.2020