通过UDP将带有gstreamer 1.0的网络摄像头视频传输到PC

通过UDP将带有gstreamer 1.0的网络摄像头视频传输到PC,udp,raspberry-pi,gstreamer,Udp,Raspberry Pi,Gstreamer,我正在尝试将视频从Raspberry Pi(在Raspbian上)流式传输到Windows 7 PC,如以下视频: 我有一个连接到Raspberry Pi的Logitech C270,并使用以下方式通过TCP传输网络摄像头视频: gst启动v4l2src设备=/dev/video0\ “视频/x-raw-yuv,宽度=640,高度=480”\ x264enc pass=质量量化器=20调谐=零延迟\ RTPH264支付!tcpsink主机=$pi_ip端口=5000 从我的Pi。使用VLC进行

我正在尝试将视频从Raspberry Pi(在Raspbian上)流式传输到Windows 7 PC,如以下视频:

我有一个连接到Raspberry Pi的Logitech C270,并使用以下方式通过TCP传输网络摄像头视频:

gst启动v4l2src设备=/dev/video0\
“视频/x-raw-yuv,宽度=640,高度=480”\
x264enc pass=质量量化器=20调谐=零延迟\
RTPH264支付!tcpsink主机=$pi_ip端口=5000
从我的Pi。使用VLC进行接收,但延迟3秒。 我想通过UDP来缩短延迟(如果我错了,请纠正我)。但我一辈子都搞不懂。我尝试过以下方法:

gst-launch-1.0 v4l2src设备=/dev/video0\
“视频/x-raw-yuv,宽度=640,高度=480”\
x264enc pass=qual量化器=20 tune=zerolatency!\
RTPH264支付!udpsink主机=$pc_ip端口=1234

gst-launch-1.0 udpsrc端口=1234!\
“应用程序/x-rtp,有效载荷=127”\
rtph264depay!ffdec_h264!fpsdisplaysink sync=false文本覆盖=false
分别用于Pi和PC侧(取自 ) 但是没有运气。(尝试将视频/x-raw-yuv更改为适合1.0版本,但仍然没有成功)

任何提示都将不胜感激

编辑

使用raspi摄像头(而不是网络摄像头),以下功能可以正常工作:

Windows批处理脚本:

@echo关闭
cd C:\gstreamer\1.0\x86\u 64\bin
gst-launch-1.0-e-v udpsrc端口=5000!应用程序/x-rtp,有效载荷=96!
rtpjitterbuffer!rtph264depay!avdec_h264!fpsdisplaysink sync=false
文本覆盖=false
Raspberry Pi Bash脚本:

#/bin/bash
清楚的
拉斯皮维德-n-t 0-rot 270-w 960-h 720-fps 30-b 6000000-o-| gst-
发布-1.0-e-vv-fdsrc!h264parse!rtph264pay pt=96配置间隔=5!
udpsink主机=***您的PC机IP***端口=5000
但我不知道如何以同样的方式使用网络摄像头代替raspberry pi摄像头(即v4l2src代替raspivid)

编辑2

以下工作正常,但速度非常慢,延迟时间非常长:

RPi

个人电脑:


我现在怀疑(感谢@Mustafa Chelik的提示)巨大的延迟是由于raspberry pi必须对网络摄像机视频进行编码,而raspberry pi视频已经编码,但不确定这是否有意义?

我已经使用MJPG拖缆进行网络摄像机流,并获得了0,2秒的延迟。


其优点是您可以使用webbrowser观看。

从中找到解决方案的提示

以下内容对于从罗技c270(raspberry pi上的罗技c270)到windows 7 pc的流式视频非常有效:

PC端:

gst-launch-1.0-e-v udpsrc端口=5001^
应用程序/x-rtp,编码名称=JPEG,有效负载=26^
rtpjpegdepay!jpegdec^
自动视频接收器
RPi侧:

gst-launch-1.0-v v4l2src设备=/dev/video0\
! 图像/jpeg,宽度=1280,高度=720,帧速率=30/1\
! rtpjpegpay\
! udpsink主机=$myip端口=$myport

我怀疑在raspberry pi上,将网络摄像机视频编码为h264的速度太慢,但是网络摄像机已经提供了jpeg帧,因此不需要使用“image/jpeg”进行编码。

我不认为从TCP更改为UDP会减少延迟(尽管我不是百分之百确定)。你为什么这么认为?顺便问一下,RaspberryPi能对高清视频进行编码并流媒体吗?!树莓这么快就可以这么做了吗?视频的帧率是多少?25?我认为UDP对于实时流媒体更快,因为它是一种无连接的协议,而TCP是面向连接的,因此有一些重传延迟(三方握手等等)。不确定它是否能够流式播放高清视频,但它应该能够流式播放高质量视频。不确定帧速率,仍在努力解决这个问题。谢谢,但我更喜欢使用gstreamer来实现,以便使用python与python集成gstreamer绑定对我来说不起作用。首先我做了测试:
gst-launch-1.0-vvvv4l2src-device=/dev/video1!“图像/jpeg,宽度=800,高度=600,帧速率=8/1”!jpegdec!xImageSink
然后开始流式传输:
gst-launch-1.0-vvv v4l2src设备=/dev/video1!“图像/jpeg,宽度=800,高度=600,帧速率=8/1”!rtpjpegpay!udpsink主机=127.0.0.1端口=5000
接收:
gst-launch-1.0-vvv v4l2src设备=/dev/video1!“图像/jpeg,宽度=800,高度=600,帧速率=8/1”!rtpjpegpay!udpsink主机=127.0.0.1端口=5000
失败,原因是:“GstJpegDec:jpegdec0:不支持的组件数:0(最多3)”
gst-launch-1.0 -vv -e v4l2src device=/dev/video0  \
! videoscale \
! "video/x-raw,width=400,height=200,framerate=10/1" \
! x264enc pass=qual quantizer=20  tune=zerolatency  \
! h264parse \
! rtph264pay config-interval=5 pt=96  \
! 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