Я очень новичок во всем, что касается 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 +.
Мое понимание этой команды таково: получить пакет 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 для моего видео?
Я не прав с расшифровкой?
Что я делаю неправильно?
Как я могу улучшить свое решение?
Как бы вы решили эту проблему?
С уважением