通过UDP将带有gstreamer 1.0的网络摄像头视频传输到PC
我正在尝试将视频从Raspberry Pi(在Raspbian上)流式传输到Windows 7 PC,如以下视频: 我有一个连接到Raspberry Pi的Logitech C270,并使用以下方式通过TCP传输网络摄像头视频:通过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进行
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