Я пытаюсь передать видео и аудио с помощью 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
для этого с аутентификацией и без нее?
Спасибо за ваш ответ. Я полностью выполнил ваши инструкции при запуске конвейера '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
Спасибо за помощь. Оказывается, брандмауэр блокировал связь на порту 1935, поэтому не удалось установить соединение через RTMP. – Shiri
Еще один вопрос о последующей работе: у меня есть конвейер '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