Gstreamer RTP передача видео + текст - PullRequest
2 голосов
/ 05 марта 2020

Я пишу конвейер gstreamer, используя синтаксис командной строки для отправки видеопотока, и хотел бы отправить данные вместе с ним. Одним из решений, которое я считал целесообразным, было отправить данные в виде файла субтитров.

Я могу мультиплексировать как видео, так и файлы субтитров через rtp, используя следующий конвейер:

gst-launch-1.0 rtpmux name=mux ! udpsink host=127.0.0.1 port=5000 \ 
filesrc location=movie.avi ! decodebin ! videoconvert ! x264enc ! rtph264pay ! mux.sink_0 \
filesrc location=movie.srt ! subparse ! rtpgstpay ! mux.sink_1

Я знаю, что он прибывает как следует, потому что я могу просматривать порт, получающий данные с Netcat. Но когда я пытаюсь прочитать поток с помощью gstreamer на стороне получателя, я получаю « синтаксическая ошибка ». Сейчас я использую конвейер

gst-launch-1.0 udpsrc port=5000 caps = "application/x-rtp" ! rtpptdemux name=demux ! queue ! \
demux.src_0 ! rtph264depay ! decodebin ! videoconvert ! autovideosink \
demux.src_1 ! rtpgstdepay ! fakesink

. В нем я пытаюсь отменить каждый шаг на стороне отправителя, но что-то не так, и я не знаю, что это такое. (Я бы кое-что сделал с субтитрами позже, подделка предназначена только для отладки)

Если есть другие способы сделать это, я был бы рад любой помощи!

Что касается других возможных решений, я понимаю, что RTP поддерживает текстовый диалог с использованием полезной нагрузки rtp ( RF C 4103 ) и для синхронизированного текста ( RF C 4396). ) но из того, что я нашел в списке плагинов gstreamer для RTP, пока нет никакой поддержки.

Моя конечная цель - отправить видео с opencv на одном компьютере вместе с некоторыми данными и прочитайте это синхронно в принимающей стороне. После работы командной строки я бы адаптировал ее к opencv и непрерывно переписывал файл субтитров или передавал переменную напрямую.

Заранее большое спасибо за помощь!

1 Ответ

1 голос
/ 06 марта 2020

Синтаксис командной строки неверен, потому что queue не может идти после элемента demux (хотя это выглядит как-то логично в командной строке).

В вашем случае, элемент queue можно использовать после демодукс-источника подушечки. Например

gst-launch-1.0 udpsrc port=5000 caps = "application/x-rtp" ! rtpptdemux name=demux \
demux.src_0 ! queue ! rtph264depay ! decodebin ! videoconvert ! autovideosink \
demux.src_1 ! queue ! rtpgstdepay ! fakesink
...