Gstreamer - потоковое видео h264 от Logitech C920 через TCP

Я пытаюсь транслировать видео с Logitech C920, который выводит h264 напрямую. Отправляющая сторона - Raspberry Pi, а принимающая сторона - ПК с Windows 7. Используя udp это работает безупречно в Gstreamer:

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

gst-launch-1.0 -v v4l2src device=/dev/video0 ! \
video/x-h264,width=1280,height=720,framerate=30/1 ! h264parse ! rtph264pay \
pt=127 config-interval=4 ! udpsink host=$myip port=$myport

Получатель:

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

Однако, используя tcp, это не работает:

отправитель

gst-launch-1.0 -v v4l2src device=/dev/video0 ! \
video/x-h264,width=960,height=720,framerate=5/1 ! h264parse ! rtph264pay pt=96 config-interval=1 \
! gdppay  ! tcpserversink host=$myip port=$myport

Получатель:

gst-launch-1.0 -e -v tcpclientsrc host="172.17.166.255" port=5001  ! ^
application/x-gdp ! gdpdepay ! rtpjitterbuffer !  ^
rtph264depay ! ^
avdec_h264 ! ^
autovideosink sync=false text-overlay=false

И я получаю следующую ошибку на стороне получателя:

ERROR: from element /GstPipeline:pipeline0/GstGDPDepay:gdpdepay0: Could not decode stream.
Additional debug info:
gstgdpdepay.c(443): gst_gdp_depay_chain ():     
/GstPipeline:pipeline0/GstGDPDepay:gdpdepay0:
could not create event from GDP packet
EOS on shutdown enabled -- waiting for EOS after Error

Самое смешное: если я запускаю принимающую сторону прямо перед запуском отправителя, я получаю видеопоток за пару секунд до того, как он сломается. Я подозреваю, что это может быть проблема с gdppay gdpdepay, но я точно не знаю.

1 ответ

Решение

Следующее работает для потоковой передачи h264 через TCP:

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

v4l2src device=/dev/video0 ! video/x-h264,width=320,height=90,framerate=10/1 !
tcpserversink host=192.168.0.4 port=5000

Получатель:

tcpclientsrc  host=192.168.0.4 port=5000 !
h264parse   ! avdec_h264  ! 
autovideosink sync=true

По-видимому, h264 можно передавать по протоколу TCP без использования gdppay/depay.

Другие вопросы по тегам