Raspberry Pi MJPG-Streamer低延迟

时间:2014-01-04 13:19:45

标签: stream raspberry-pi latency

我已经建立了一个覆盆子pi机器人。现在我想从Raspberry Pi车载摄像头流式传输视频。我按照本教程: http://blog.miguelgrinberg.com/post/how-to-build-and-run-mjpg-streamer-on-the-raspberry-pi/page/2

所以我终于让它工作了,但现在我希望尽可能地降低延迟。低延迟非常重要,因此无法控制机器人这样的延迟。

有什么建议吗? 祝你有愉快的一天!

4 个答案:

答案 0 :(得分:3)

我认为我从实验中发现,相机板完成了大部分处理工作,从根本上减轻了覆盖物的负担。您可以通过在捕获和流式传输时在pi上运行top来查看此内容。

首先,我在Linux客户端上运行以下命令:

nc -l -p 5001 | mplayer -fps 31 -cache 512 -

然后我在raspi上运行以下命令:

/opt/vc/bin/raspivid -t 999999 -o -w 1920 -h 1080 - | nc 192.168.1.__ 5001

这是通过从raspi到linux桌面的以太网连接完成的,这两个连接都连接到一个公共以太网集线器。

我做了以下观察:

  • 这些设置给我一个相当低的滞后(<100ms)
  • 增加缓存大小(在客户端上)只会导致更大的延迟,因为客户端会在启动之前缓冲更多的流
  • 将缓存大小降低到某个下限(对我来说是512)会导致播放器错误:“无法在线性流中向后搜索!”
  • 指定小于默认值1920x1080的尺寸会导致较小尺寸的延迟时间更长,尤其是当它们小于640x480时
  • 指定默认值以外的比特率会导致更长的延迟
  • 我不确定默认比特率是什么
  • 对于导致延迟的任何情景,似乎滞后随着时间的推移逐渐减少,我尝试的大多数配置似乎在一分钟左右后几乎没有滞后

令人遗憾的是,除了要运行的命令之外,电路板上几乎没有可用的技术信息。评论中的任何更多输入或对此答案的编辑将不胜感激。

答案 1 :(得分:2)

您应该在https://raspberrypi.stackexchange.com/

上提出这个问题

现在可以找到的所有强效解决方案都使用了raspivid。它直接将视频编码为H.264 / MPEG,这比捕获每一帧更有效。

到目前为止对我来说最好的一个是 - 首先关于你的覆盆子pi

raspivid -t 999999 -w 1080 -h 720 -fps 25 -hf -b 2000000 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=<IP-OF-PI> port=5000
  • 在您的PC /查看设备上

gst-launch-1.0 -v tcpclientsrc host=<IP-OF-PI> port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

来源:http://pi.gbaman.info/?p=150

答案 2 :(得分:0)

我找到了一个流程,其延迟时间低于0.5秒,并流入浏览器或Python脚本,将帧转换为OpenCV对象,以便在显示之前进行进一步处理。对我来说就像一个魅力。更多信息:

http://petrkout.com/low-latency-0-4-s-video-streaming-from-raspberry-pi-mjpeg-streamer-opencv/

答案 3 :(得分:0)

我意识到这是一篇旧帖子,但我最近需要做类似的事情,所以我创建了一个节点Raspberry Pi MJpeg Server你可以传递压缩质量和超时(每秒帧数 )。

启动服务器:

node raspberry-pi-mjpeg-server.js -p 8080 -w 1280 -l 1024 -q 65 -t 100

选项:

-p, --port        port number (default 8080)
-w, --width       image width (default 640)
-l, --height      image height (default 480)
-q, --quality     jpeg image quality from 0 to 100 (default 85)
-t, --timeout     timeout in milliseconds between frames (default 500)
-h, --help        display this help
-v, --version     show version

开源,因为我确信它会帮助他人。