2017-01-09 33 views
3

Я пытаюсь передать видео и аудио с помощью Gstreamer на сервер RTMP (Wowza), но есть ряд проблем.Как передавать через RTMP с помощью Gstreamer?

Практически отсутствует документация о том, как правильно использовать rtmpsink, плагин, отправляющий медиа через RTMP на указанный сервер. Не только это, но и создание правильного конвейера Gstreamer, совместимого с rtmpsink, - это просто пробная и ошибка.

Мой текущий трубопровод Gstreamer является:

sudo gst-launch-1.0 -e videotestsrc ! queue ! videoconvert ! x264enc ! flvmux streamable=true ! queue ! rtmpsink location='rtmp://<ip_address>/live live=true' 

Запуск выше на моей машине Linux выплевывает эту ошибку:

Setting pipeline to PAUSED ... 
Pipeline is PREROLLING ... 
Redistribute latency... 
Pipeline is PREROLLED ... 
Setting pipeline to PLAYING ... 
New clock: GstSystemClock 
ERROR: from element /GstPipeline:pipeline0/GstRTMPSink:rtmpsink0: Could not  open resource for writing. 
Additional debug info: 
gstrtmpsink.c(246): gst_rtmp_sink_render(): /GstPipeline:pipeline0/GstRTMPSink:rtmpsink0: 
Could not connect to RTMP stream "rtmp://31.24.217.8/live live=true" for writing 
EOS on shutdown enabled -- waiting for EOS after Error 
Waiting for EOS... 
ERROR: from element /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: Internal data flow error. 
Additional debug info: 
gstbasesrc.c(2948): gst_base_src_loop(): /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: 
streaming task paused, reason error (-5) 
ERROR: from element /GstPipeline:pipeline0/GstQueue:queue0: Internal data flow error. 
Additional debug info: 
gstqueue.c(992): gst_queue_handle_sink_event(): /GstPipeline:pipeline0/GstQueue:queue0: 
streaming task paused, reason error (-5) 

Из-за отсутствия документации на стороне Wowza другой вопрос на самом деле контактный - указав правильный IP-адрес на точку rtmpsink и отсутствующую документацию на стороне Gstreamer, надлежащая проверка подлинности RTMP неуловима, кроме некоторых примеров, найденных на некоторых форумах, которые не могут быть подтверждены как работа из-за других переменных.

Каков правильный конвейер Gstreamer для потоковой передачи через RTMP с использованием rtmpsink и как правильно реализовать rtmpsink для этого с аутентификацией и без нее?

ответ

2

Фактически трубопровод, который вы используете, отлично работает.

Однако, отключив защиту WMP от Wowza, это необходимо, также указывая на правильное направление.

Следуя инструкциям на следующей странице: https://www.wowza.com/forums/content.php?36-How-to-set-up-live-streaming-using-an-RTMP-based-encoder

  • Перепроверьте, что RTMP включена в приложении Типы воспроизведения:

Applications

  • Отключить все опции безопасности для обеспечения совместимости с GStreamer.

Security

  • В Playback безопасности вкладке , убедитесь, что Нет выбраны клиентские ограничения (не выбран по умолчанию).

Playback

  • В Источники вкладка, в левом столбце, можно проверить настройки сервера:

Output

После того, как мы сделали все, эти шаги, мы можем запустить предыдущий трубопровод:

gst-launch-1.0 -e videotestsrc ! queue ! videoconvert ! x264enc ! flvmux streamable=true ! queue ! rtmpsink location='rtmp://192.168.1.40:1935/livertmp/myStream' 

Это работает, и вы можете проверить результат нажатием на Проигрыватели. Результат следующий:

TestPlayers

Хотя, возможно, это из области видимости, можно добавить аудио к трубопроводу и улучшить его, добавив некоторые свойства, которые отсутствовали:

gst-launch-1.0 videotestsrc is-live=true ! videoconvert ! x264enc bitrate=1000 tune=zerolatency ! video/x-h264 ! h264parse ! video/x-h264 ! queue ! flvmux name=mux ! rtmpsink location='rtmp://192.168.1.40:1935/livertmp/myStream' audiotestsrc is-live=true ! audioconvert ! audioresample ! audio/x-raw,rate=48000 ! voaacenc bitrate=96000 ! audio/mpeg ! aacparse ! audio/mpeg, mpegversion=4 ! mux. 

Касательно зашифрованный паролем контент, нелегко добиться его с помощью GStreamer.

+0

Спасибо за ваш ответ. Я полностью выполнил ваши инструкции при запуске конвейера 'sudo gst-launch-1.0 -e videotestsrc! очередь ! видеоконвертер! x264enc! flvmux streamable = true! очередь ! rtmpsink location = 'rtmp: //192.168.78.10: 1935/live/myStream'' приводит к тому же поведению, что и ранее описано. Дополнительные замечания, однако, указывая на публичный IP-адрес сервера Wowza, выходят из строя с ошибкой выше, но с использованием локального ip '192.168.78.10' (данный Wowza) заставляет попытаться работать минуту или около того, прежде чем бросать те же ошибки. – Shiri

+0

Спасибо за помощь. Оказывается, брандмауэр блокировал связь на порту 1935, поэтому не удалось установить соединение через RTMP. – Shiri

+0

Еще один вопрос о последующей работе: у меня есть конвейер 'sudo gst-launch-1.0 shmsrc socket-path =/tmp/mixer1 do-timestamp = true is-live = true! 'video/x-raw, format = BGRA, pixel-aspect-ratio = 1/1, interlace-mode = progressive, framerate = 24/1, width = 1024, height = 576'! видеоконвертер! x264enc bitrate = 1024! h264parse! flvmux name = mux streamable = true! rtmpsink location = 'rtmp: //192.168.78.10: 1935/live/RTMPStream'', который сообщает, что он принимает данные, но воспроизводит только черный экран. Тем не менее, изменение его на «udpsink» и воспроизведение через VLC. Знаете ли вы, в чем проблема? – Shiri