потоковая передача xh264 на веб-сайт с использованием Gstreamer-1.0 - PullRequest
0 голосов
/ 31 октября 2018

Я очень новичок во всем, что касается GStreamer, поэтому я был бы рад, если бы вы могли мне помочь.

Мне нужно транслировать видеосигнал с почти нулевой задержкой с веб-камеры на сервер, чтобы они могли просматривать поток на веб-сайте. Веб-камера связана с Raspberry Pi 3, потому что на монтажной платформе существуют ограничения по пространству. В результате использования Pi я действительно не могу перекодировать видео на самом Pi. Поэтому я купил веб-камеру Logitech C920, которая может выводить необработанный поток h264.

К настоящему времени мне удалось просмотреть поток на моей машине с Windows, но мне не удалось заставить весь сайт работать. Мои "достижения":

  • Отправитель:

    gst-launch-1.0 -e -v v4l2src device=/dev/video0 ! video/x-h264,width=1920,height=1080,framerate=30/1 ! rtph264pay pt=96 config-interval=5 mtu=60000 ! udpsink host=192.168.0.132 port=5000
    

Мое понимание этой команды таково: Получить сигнал video-device0, который является потоком h264 с определенной шириной, высотой и частотой кадров. Затем упакуйте его в rtp-пакет с достаточно высоким mtu, чтобы не было артефактов, и капсулируйте rtp-пакет в udp-пакет и перенаправьте его в порт ip +.

  • Получатель:

    gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
    

Мое понимание этой команды таково: получить пакет udp через порт 5000. Приложение говорит, что это пакет rtp внутри. Я не знаю, что делает rtpjitterbuffer, но это немного уменьшает задержку видео. rtph264depay говорит, что внутри rtp находится поток в кодировке h264. Чтобы получить необработанные данные, которые понимает fpsdisplaysink, нам нужно декодировать сигнал h264 с помощью avdec_h264.

Следующим моим шагом было изменение приемника-приемника на локальный приемник tcp и вывод этого сигнала со следующим тегом html5:

<video width=320 height=240 autoplay>
    <source src="http://localhost:#port#">
</video>

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

Мне не хватает видео-контейнера типа MP4 для моего видео? Я не прав с расшифровкой? Что я делаю неправильно? Как я могу улучшить свое решение? Как бы вы решили эту проблему?

С уважением

...