Как использовать nginx для обратного прокси-потока потока mjpeg IP-камеры? - PullRequest
2 голосов
/ 08 июля 2011

Я использую nginx в OpenWRT для обратного прокси-канала движения motion-jpeg с IP-камеры, но я испытываю задержку до 10-15 секунд, даже при довольно низких размерах и частоте кадров. Если устройство OpenWRT удалено с пути, доступ к камере возможен без задержек.

Из-за длительности задержки (и того факта, что она увеличивается со временем), это похоже на проблему буферизации / кэширования. Я уже установил proxy_buffering off, но есть ли еще что-то, за чем я должен следить?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 20 июля 2014

Я установил mjpg-streamer на Arduino Yun, а затем в настройках роутеров переадресация портов из белого списка только на мой веб-сервер.

Вот мой конфиг 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;
  }
}
0 голосов
/ 03 июня 2015

У меня Nginx на Openwrt BB (wndr3800) с обратным проксированием на ip-камеру dlink 932LB1, и он работает хорошо.Никаких значительных задержек, даже до того, как я отключил proxy_buffering.Если у меня много информации по сети, видео может стать прерывистым, но не более, чем при прямой ссылке на камеру из браузера (или из любого из моих приложений ip cam).Так что ... это возможно.

Nginx был для меня способом.Я пробовал tinyproxy & lighttpd для обратного прокси, но у каждого из них отсутствуют функции в OpenWrt.Как tinyproxy, так и lighttpd требуют настраиваемой компиляции для функций полного обратного прокси, и (AFAIK) lighttpd не будет принимать полные доменные имена в директиве прокси.

Вот что у меня получается:

  • Basicили дайджест аутентификации на общедоступной стороне. Nginx обеспечивает контроль доступа по всему сайту.
  • Я передаю свои CGI-скрипты (shell, haserl и т. д.) в uhttpd Openwrt.
  • Тщательно управляемый обратный прокси-сервер к камереAPI mjpeg & jpeg, никакие другие функции камеры не доступны для общего доступа.
  • Базовая авторизация камеры обрабатывается Nginx (proxy_set_header), поэтому внутренний код авторизации не доступен для публики.
  • Относительно небольшая площадь(без perl, apache, ruby ​​и т. д.).

Я бы включил сюда свой файл nginx.conf, за исключением того, что в этом нет ничего необычного ... только голые прокси.Вы можете попробовать tcpdump или wireshark, чтобы увидеть, что загромождает вашу локальную сеть, если трафик действительно является вашим виновником.

Но, похоже, что-то в вашем маршрутизаторе является причиной задержки.Возможно, аппаратное обеспечение просто не может справиться с нагрузкой на процессор / трафик, или может быть что-то еще в вашей настройке Openwrt, которая загружает шоссе.Ваше видео гладкое и просто задерживается?Или вы смотрите серьезно нестабильное видео?Упомянутая вами задержка удлинения звучит как буфера / кеша ... но я не знаю, что будет делать это.

0 голосов
/ 02 ноября 2011

Я никогда не получал эту работу к моему удовлетворению с nginx.В зависимости от ваших конкретных потребностей, могут подойти два решения:

  • , если вы можете допустить, чтобы поток находился на другом порту, пропустите его, используя функцию переадресации портов встроенного в OpenWRTfirewall.

  • использовать возможности обратного прокси-сервера tinyproxy.Пакет по умолчанию имеет возможность обратного прокси-сервера, отключенную с помощью флага, поэтому вы должны быть готовы проверить его и создать его самостоятельно.Этот метод определенно более сложный, но он также работает.

Мне все равно было бы интересно узнать о том, кто работает с nginx.

...