3

我在 OpenWRT 上使用 nginx 来反向代理来自 IP 摄像机的运动 jpeg 提要,但我遇到了长达 10-15 秒的延迟,即使在帧大小和速率非常低的情况下也是如此。从路径中移除 OpenWRT 设备后,可以毫无延迟地访问相机。

由于延迟的长度(以及它随时间增长的事实),这看起来像是某种缓冲/缓存问题。我已经设置好了proxy_buffering off,但是还有什么我应该注意的吗?

谢谢。

4

3 回答 3

4

我在 Arduino Yun 上安装了 mjpg-streamer,然后在我的路由器设置中设置端口转发白名单仅到我的网络服务器。

这是我的 Nginx 配置,它位于启用站点的目录中。

server {
  listen      80;
  server_name cam.example.com;
  error_log /var/log/nginx/error.cam.log;
  access_log /var/log/nginx/access.cam.log;

  location    / {
    set $pp_d http://99.99.99.99:9999/stream_simple.html;
    if ( $args = 'action=stream' ) {
      set $pp_d http://99.99.99.99:9999/$is_args$args;
    }
    if ( $args = 'action=snapshot' ) {
      set $pp_d http://99.99.99.99:9999/$is_args$args;
    }

    proxy_pass $pp_d;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_set_header X-Request-Start $msec;
  }
}
于 2014-07-20T00:25:03.697 回答
0

我从来没有让这个工作让我对 nginx 感到满意。根据您的具体需求,两种解决方案可能就足够了:

  • 如果您可以容忍流在不同的端口上,请使用 OpenWRT 内置防火墙的端口转发功能将其通过。

  • 使用 tinyproxy 的反向代理功能。默认包具有被标志禁用的反向代理功能,因此您需要自行检查和构建它。这种方法肯定更繁琐,但也确实有效。

我仍然有兴趣听到有人使用 nginx 进行这项工作。

于 2011-11-02T14:17:25.173 回答
0

我在 Openwrt BB (wndr3800) 上有 Nginx 反向代理到 dlink 932LB1 ip cam,它运行良好。即使在我禁用 proxy_buffering 之前,也没有明显的滞后。如果我有很多东西通过网络传输,视频可能会变得断断续续,但不会比浏览器(或我的任何 ip cam 应用程序)直接连接到相机的链接更多。所以……这是可能的。

Nginx 是我要走的路。我尝试使用 tinyproxy 和 lighttpd 进行反向代理,但每个都缺少 OpenWrt 上的功能。tinyproxy 和 lighttpd 都需要针对完整的反向代理功能进行自定义编译,并且 (AFAIK) lighttpd 将不接受代理指令中的 FQDN。

这就是我要做的:

  • 面向公众的 Nginx 上的基本或摘要身份验证提供站点范围的访问控制。
  • 我将我的 CGI 脚本(shell、haserl 等)代理到 Openwrt 的 uhttpd。
  • 严格控制相机 mjpeg 和 jpeg API 的反向代理,没有其他相机功能向公众公开。
  • 由 Nginx (proxy_set_header) 处理的相机基本身份验证,因此没有公开的后端授权代码。
  • 相对较小的占用空间(没有 perl、apache、ruby 等)。

我会在这里包含我的 nginx.conf,除了它没有什么不寻常的地方......只是简单的代理东西。如果流量确实是你的罪魁祸首,你可以试试 tcpdump 或 wireshark 看看是什么让你的 LAN 变得混乱。

但听起来你的路由器是延迟的原因。也许硬件无法处理 CPU/流量负载,或者您的 Openwrt 设置中可能有其他东西占用了高速公路。您的视频是否流畅且只是延迟?还是您看到严重断断续续的视频?您提到的延长延迟听起来确实像缓冲区/缓存的事情......但我不知道会做什么。

于 2015-06-03T05:19:46.930 回答