使用gstreamer 1.0通过UDP将网络摄像头视频流传输到PC

时间:2015-01-15 17:36:41

标签: udp raspberry-pi gstreamer

我尝试将视频从Raspberry Pi(在Raspbian上)流式传输到Windows 7 PC,如此视频中所示:https://www.youtube.com/watch?v=lNvYanDLHZA

我有一台Logitech C270连接到Raspberry Pi,并设法通过TCP流式传输网络摄像头视频:

gst-launch v4l2src device=/dev/video0 ! \
'video/x-raw-yuv,width=640,height=480' ! \
x264enc pass=qual quantizer=20 tune=zerolatency ! \
rtph264pay ! tcpsink host=$pi_ip port=5000

来自我的Pi。使用VLC工作接收此功能,但延迟3秒。 我想通过UDP来做这个以获得更短的延迟(如果我错了,请纠正我)。但不能为我的生活搞清楚。我试过以下:

gst-launch-1.0 v4l2src device=/dev/video0 ! \
'video/x-raw-yuv,width=640,height=480' ! \
x264enc pass=qual quantizer=20 tune=zerolatency ! \ 
rtph264pay ! udpsink host=$pc_ip port=1234

gst-launch-1.0 udpsrc port=1234 ! \ 
"application/x-rtp, payload=127" ! \
rtph264depay ! ffdec_h264 ! fpsdisplaysink sync=false text-overlay=false

分别为Pi和PC端(取自 Webcam streaming using gstreamer over UDP) 但没有运气。 (试图改变视频/ x-raw-yuv以适应1.0版本,但仍然没有运气)

任何提示都将受到高度赞赏!

修改

使用raspi相机(不是网络摄像头),以下工作:

Windows批处理脚本:

@echo off
cd C:\gstreamer\1.0\x86_64\bin
gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, payload=96 !        
rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false    
text-overlay=false

Raspberry Pi Bash脚本:

#!/bin/bash
clear
raspivid -n -t 0 -rot 270 -w 960 -h 720 -fps 30 -b 6000000 -o - | gst-       
launch-1.0 -e -vvvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 !   
udpsink host=***YOUR_PC_IP*** port=5000

但我无法弄清楚如何以相同的方式使用网络摄像头而不是覆盆子pi相机(即v4l2src而不是raspivid)

修改2

以下是有效的,但速度很慢且有很大的延迟:

RPI

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

PC:

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

我现在怀疑(感谢来自@Mustafa Chelik的暗示),这个巨大的滞后是由于树莓派必须编码网络摄像头视频,而树莓派视频已经编码,不确定是否这样做感觉不过?

2 个答案:

答案 0 :(得分:2)

http://www.z25.org/static/rd/videostreaming_intro_plab/

找到解决方案的提示

以下版本适用于从Rasite pi上的Logitech c270到Windows 7 PC的流视频:

PC端:

gst-launch-1.0 -e -v udpsrc port=5001 ! ^
application/x-rtp, encoding-name=JPEG,payload=26 ! ^
rtpjpegdepay ! jpegdec !  ^
autovideosink 

RPi方:

gst-launch-1.0 -v v4l2src device=/dev/video0  \
! "image/jpeg,width=1280, height=720,framerate=30/1" \
! rtpjpegpay \
! udpsink host=$myip port=$myport

我怀疑这是网络摄像头视频对h264的编码在树莓派上太慢了,但是摄像头已经给了jpeg帧,因此没有使用&#34; image / jpeg&#34; <#34; < / p>

答案 1 :(得分:1)

我已经使用了MJPG-Streamer的网络摄像头,并且延迟了0.2秒。 http://wiki.ubuntuusers.de/MJPG-Streamer

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