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

Stream webcam video with gstreamer 1.0 over UDP to PC

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

我有一个罗技 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) 但没有运气。 (尝试更改 video/x-raw-yuv 以适应 1.0 版本但仍然没有成功)

如有任何提示,我们将不胜感激!

编辑

使用 raspi 相机(不是网络摄像头)可以实现以下效果:

Windows批处理脚本:

@echo off
cd C:\gstreamer.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

但我不知道如何以相同的方式使用网络摄像头而不是 raspberry pi 相机(即 v4l2src 而不是 raspivid)

编辑 2

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

树莓派

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

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

我将 MJPG-Streamer 用于我的网络摄像头流,并得到 0.2 秒的延迟。 http://wiki.ubuntuusers.de/MJPG-Streamer

而且好处是可以用浏览器看

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

找到解决方案的提示

对于从 raspberry pi 上的 Logitech c270 流式传输视频到 windows 7 电脑,以下方法非常有效:

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 编码在 raspberry pi 上太慢了,但是网络摄像头已经提供了 jpeg 帧,因此使用 "image/jpeg"[ 不需要编码=13=]