2013-04-15 5 views
1

Я пытаюсь создать видеосервер rtsp на основе gstreamer. В моем случае мне нужно, чтобы клиент подключился к серверу и начал потоковое видео на сервер.потоковое видео в сервер rtsp gstreamer

Я прочитал некоторые учебники по этому вопросу, особенно это: http://www.ip-sense.com/linuxsense/how-to-develop-a-rtsp-server-in-linux-using-gstreamer/

В этом учебнике видео в потоковом режиме с сервера к клиенту, и мне нужно, чтобы изменить это так видео будет транслироваться с клиента сервер.

EDIT: В демке этот трубопровод запущен:

gst_rtsp_media_factory_set_launch (factory, "(" 
      "videotestsrc ! video/x-raw-yuv,width=320,height=240,framerate=10/1 ! " 
      "x264enc ! queue ! rtph264pay name=pay0 pt=96 ! audiotestsrc ! audio/x-raw-int,rate=8000 ! alawenc ! rtppcmapay name=pay1 pt=97 "")"); 

Трубопровод начинается с видео и аудио источников тестов и кодирует их в полезную нагрузку 0 и 1. мне нужно сделать наоборот - взять RTSP полезную нагрузку и декодировать ее.

+0

Спасибо , Я ничего не пробовал, так как не знаю, что попробовать. –

ответ

1

для декодирования RTSP-потоков, полученных клиентом от сервера, используйте rtspsrc

gst-launch rtspsrc location=${LOCATION} \ 
      ! rtph264depay ! ffdec_h264 ! ffmpegcolorspace ! xvimagesink 

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

Рамка gstrtspserver, по-видимому, нацелена на обычную usecase для RTSP: клиенты вытаскивают данные с сервера. Если вы хотите это сделать, ваш лучший запуск - это, вероятно, взломать библиотеку gstrtspserver в рамки gstrtsppushclient (просто обмен логикой подключения должен делать трюк). вам также придется повторно выполнить приемную (серверную) сторону.

но это уже не RTSP (в том смысле, что вы не найдете других приложений там, которые могут иметь дело с вашими).

Вы должны, вероятно, переосмыслить свою архитектуру. хорошее начало читать, вероятно, RFC2326

1

Если вы действительно хотите, это «сервер», который получает потоковый ввод от «клиента», просто отбрасывает роли сервера и клиентских приложений. Напишите клиента, который всегда существует. Возможно, вам понадобится какой-то цикл перезапуска, чтобы, если конец входящего потока заканчивается, вы просто перезапустите его. Кроме того, ваш клиент должен будет делать то, что вы хотите сделать с данными; сохранить его, показать, ретранслировать его (???).

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

Бит кусковой, но он должен работать.

0

Хотя этот вопрос был задан давно, но я собираюсь ответить за кого-то, кто может его искать. Для этого используйте GStreamer.

  1. Gstreamer теперь есть сервер RTSP средств массовой информации Here
  2. Gstreamer также имеет GstRtspClientSink element, который позволяет передавать поток на совместимый медиа-сервер RTSP. Пример базовой командной строки: «gst-launch-1.0 videotestsrc! Queue! X264enc! Rtspclientsink location = rtsp: //127.0.0.1: 8554/тест»при условии, что медиа-сервер работает на локальном хосте, порт 8554 и ожидает публикации пункт„тест“
  3. Пример приложения на базе GStreamer RTSP сервера, который принимает поток от клиента доступен Here