使用Gstreamer的Raspberry Pi USB网络摄像头流到计算机

时间:2016-03-15 22:38:41

标签: ffmpeg raspberry-pi gstreamer webcam

我有一个连接到覆盆子pi的fisheye usb网络摄像头,我试图将其传输到计算机上。我玩过ffmpeg,看起来有点迟了超过320x240。从我所读到的,人们对gstreamer感到满意。

所以我测试了usb网络摄像头,它在本地工作

gst-launch-1.0 -v v4l2src device=/dev/video0 ! 'video/x-raw,width=640,height=480' ! glimagesink

这些是我尝试用来将视频传输到计算机的命令。然而,我所看到的只是一扇绿色的窗户。

TCP服务器:gst-launch-1.0 -v v4l2src device=/dev/video0 ! 'video/x-raw,width=640,height=480,framerate=30/1' ! x264enc byte-stream=true ! rtph264pay ! gdppay ! tcpserversink host=192.168.200.38 port=5000 sync=false

TCP客户端:gst-launch-1.0 -v tcpclientsrc host=192.168.200.38 port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

UDP服务器: gst-launch-1.0 -v v4l2src device=/dev/video0 ! 'video/x-raw,width=640,height=480,framerate=30/1' ! x264enc byte-stream=true ! rtph264pay ! gdppay ! udpsink host=192.168.200.37 port=5000 sync=false

UDP客户端: gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

我想我必须以某种方式错误地管道插件。任何建议表示赞赏。

2 个答案:

答案 0 :(得分:1)

首先尝试以下方法:

  1. 在x264enc之后添加rate = Math.Round((fuel / distance),2); Console.WriteLine("Your fuel consumption rate is {0} lt/100km", (rate * 100).ToString("#.##")); (这通常需要在嵌入式系统中使用)
  2. 重新检查IP和连接(我看到IP在TCP和UDP情况下有所不同)
  3. 如果问题仍未解决,请说明一些观点:

    1. 您的相机提供了哪种视频格式(添加" -v"在您的第一个命令之后,它会告诉您)
    2. x264enc是否支持该格式?
      (根据its manual,x264enc支持 I420,YV12,Y42B,Y444,NV12,I420_10LE,I422_10LE,Y444_10LE
      • 如果不支持该格式,请尝试使用其他相机或其他编码器。
      • 如果支持,请尝试确认您的编码命令(使用tune=zerolatency / filesink)并解码命令(使用fakesink

答案 1 :(得分:0)

所以我把东西弄了一天,让它运转起来。我将发布到目前为止的内容。队列让rpi多线程为h264编码部分,我为x264enc提供了omxh264enc,因为它是openmax / accelerated。两种变化都有助于延迟

我想我不需要gdppay? (看到有人在没有它的情况下流Stream webcam video with gstreamer 1.0 over UDP to PC

rpi方

gst-launch-1.0 -vv -e v4l2src device=/dev/video0 ! "video/x-raw,width=640,height=480" ! queue ! omxh264enc ! h264parse ! rtph264pay ! udpsink host=192.168.200.37 port=5000

计算机端

gst-launch-1.0 -vv -e udpsrc port=5000 ! application/x-rtp, payload=96 ! rtph264depay ! queue ! avdec_h264 ! videoconvert ! autovideosink sync=false