Gstreamer - 通过 tcp 从 Logitech c920 流式传输 h264 视频
Gstreamer - stream h264 video from Logitech c920 over tcp
我正在尝试从直接输出 h264 的 Logitech c920 流式传输视频。发送方是Raspberry Pi,接收方是Windows 7 PC。使用 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 的问题,但我不确定。
以下适用于通过 TCP 流式传输 h264:
发件人:
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
我正在尝试从直接输出 h264 的 Logitech c920 流式传输视频。发送方是Raspberry Pi,接收方是Windows 7 PC。使用 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 的问题,但我不确定。
以下适用于通过 TCP 流式传输 h264:
发件人:
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