Как да използвам nginx за обратен прокси mjpeg поток на IP камера?

Използвам nginx на OpenWRT за обратен прокси на motion-jpeg емисия от IP камера, но имам забавяне до 10-15 секунди, дори при доста ниски размери и скорости на рамката. Когато устройството OpenWRT бъде премахнато от пътя, камерата може да бъде достъпна без никакво забавяне.

Поради продължителността на забавянето (и факта, че то нараства с времето), това изглежда като някакъв проблем с буферирането/кеширането. Вече зададох proxy_buffering off, но има ли нещо друго, за което трябва да внимавам?

Благодаря.


person mikepurvis    schedule 08.07.2011    source източник
comment
Вижте също serverfault.com/questions/788173/   -  person Cameron Tacklind    schedule 24.03.2020


Отговори (3)


Инсталирах 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;
  }
}
person stenius    schedule 20.07.2014

Никога не съм получавал това да работи по мое задоволство с nginx. В зависимост от вашите специфични нужди, две решения, които може да са подходящи:

  • ако можете да толерирате потока да е на различен порт, прекарайте го чрез функцията за пренасочване на портове на вградената защитна стена на OpenWRT.

  • използвайте възможностите за обратно прокси на tinyproxy. Пакетът по подразбиране има възможностите за обратен прокси, деактивирани от флаг, така че трябва да се чувствате удобно да го проверите и изградите сами. Този метод определено е по-сложен, но също върши работа.

Все пак ще ми е интересно да чуя за някой, който получава това да работи с nginx.

person mikepurvis    schedule 02.11.2011

Имам Nginx на Openwrt BB (wndr3800) с обратно проксииране към ip камера dlink 932LB1 и работи добре. Няма значително забавяне, дори преди да деактивирам proxy_buffering. Ако имам много неща, минаващи през мрежата, видеото може да бъде накъсано, но не повече, отколкото при връзка директно към камерата от браузъра (или от някое от моите приложения за ip cam). Така че... възможно е.

Nginx беше начинът за мен. Опитах tinyproxy & lighttpd за обратното проксииране, но всеки има липсващи функции на OpenWrt. И tinyproxy, и lighttpd изискват персонализирана компилация за пълните функции за обратен прокси и (AFAIK) lighttpd няма да приеме FQDN в директивата за прокси.

Ето какво ми предстои:

  • Основно или дайджест удостоверяване на публичен Nginx осигурява контрол на достъпа в целия сайт.
  • Проксирам моите CGI скриптове (shell, haserl и т.н.) към uhttpd на Openwrt.
  • Строго контролиран обратен прокси към mjpeg & jpeg API на камерата, никакви други функции на камерата не са изложени на обществеността.
  • Основното удостоверяване на камерата се обработва от Nginx (proxy_set_header), така че кодът за оторизация на бекенда не е изложен на обществеността.
  • Сравнително малък отпечатък (без perl, apache, ruby ​​и т.н.).

Бих включил моя nginx.conf тук, освен че няма нищо необичайно в него... само голи костни прокси неща. Може да опитате tcpdump или wireshark, за да видите какво претрупва вашата LAN, ако трафикът наистина е вашият виновник.

Но изглежда нещо във вашия рутер е причината за забавянето. Може би хардуерът просто не може да се справи с натоварването на процесора/трафика или може да има нещо друго във вашата настройка на Openwrt, което пречи на магистралата. Вашето видео гладко ли е и само със закъснение? Или виждате сериозно накъсано видео? Забавянето на удължаването, което споменавате, звучи като нещо с буфер/кеш... но не знам какво би направило това.

person wbr    schedule 03.06.2015