2015-01-15 215 views
2

进出口试图流从树莓PI(上Raspbian)视频到Windows 7 PC像在这个视频:https://www.youtube.com/watch?v=lNvYanDLHZA流的网络摄像头的视频通过UDP PC

我有一个Logitech C270连接到树莓皮,并已成功使用了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 

从我的皮。接收这个使用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 

树莓派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的提示),这个巨大的延迟是由于树莓派必须对网络摄像头视频进行编码,而覆盆子pi视频已经被编码,因此不确定这是否合理虽然?

+1

我不认为从TCP更改为UDP将减少延迟(虽然我不是百分百确定这一点)。你为什么这么认为?顺便说一句,RaspberryPi可以编码高清视频并将其流式传输吗?! RaspberryPi是否快速这样做?什么是视频的帧率? 25? – 2015-01-15 20:00:11

+0

我认为UDP实时流式传输速度更快,因为它是无连接协议,而TCP是面向连接的,因此会有一些重传延迟(三次握手等等)。不确定它是否能够传输高清视频,但它应该能够传输高质量的视频。不确定帧速率,仍在努力解决这个问题。 – 2015-01-16 07:10:58

回答

2

发现线索到下述溶液中工作得很好,从罗技C270树莓PI视频流,以在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,在树莓派上速度太慢,但webcamera已经给了jpeg帧,因此没有编码需要使用“图像/ JPEG”

+0

不适用于我。首先我做了测试: 'gst-launch-1.0 -vvv v4l2src device =/dev/video1! “image/jpeg,width = 800,height = 600,framerate = 8/1”! jpegdec! xvimagesink' 然后开始流式传输: 'gst-launch-1.0 -vvv v4l2src device =/dev/video1! “image/jpeg,width = 800,height = 600,framerate = 8/1”! rtpjpegpay! udpsink host = 127.0.0.1 port = 5000' And receiving: 'gst-launch-1.0 -vvv v4l2src device =/dev/video1! “image/jpeg,width = 800,height = 600,framerate = 8/1”! rtpjpegpay! udpsink host = 127.0.0.1 port = 5000' 因以下错误而失败:“GstJpegDec:jpegdec0: 不支持的组件数量:0(最多3个)” – beemaster 2016-04-29 05:42:47

相关问题