2011-07-08 187 views
2

我在OpenWRT上使用nginx來反向代理一個來自IP攝像機的motion-jpeg源,但即使在相當低的幀大小和速率下,我也經歷了高達10-15秒的延遲。將OpenWRT設備從路徑上移除後,相機可以完全無延遲地訪問。如何使用nginx反向代理IP攝像機的mjpeg流?

由於延遲的長度(以及它隨時間增長的事實),這看起來像某種緩衝/緩存問題。我已經設置了proxy_buffering off,但是有什麼我應該留意的?

謝謝。

回答

0

我從來沒有得到這個工作,我對nginx滿意。根據您的具體需求,兩種解決方案可能是適當的:

  • ,如果你可以容忍流是不同的端口,通過它通過使用端口轉發功能的OpenWRT的內置防火牆。

  • 使用tinyproxy的反向代理功能。默認的軟件包具有反標籤功能,因此您需要自行檢查並自行構建。這種方法肯定比較繁瑣,但也有效。

我還是有興趣聽到有人與nginx合作。

2

我在Arduino Yun上安裝了mjpg-streamer,然後在我的路由器設置中將安裝端口轉發白名單列入了我的web服務器。

這是我的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

我的Nginx上的OpenWrt BB(wndr3800)反向代理到一個DLINK 932LB1 IP攝像頭,它的工作很好。即使在禁用proxy_buffering之前,也沒有顯着的延遲。如果我有很多東西通過網絡傳播,視頻可能會變得不穩定,但不會超過從瀏覽器(或任何我的網絡攝像頭應用程序)獲得的直接相機鏈接。所以......這是可能的。

Nginx是爲我走的路。我嘗試了tinyproxy & lighttpd進行反向代理,但每個OpenWrt上都缺少了一些功能。 tinyproxy和lighttpd都需要自定義編譯完整的反向代理功能,並且(AFAIK)lighttpd不會接受代理指令中的FQDN。

這是我已經打算:

  • Basic或在面向公衆的Nginx的消化AUTH提供站點級別的訪問控制。
  • 我將我的CGI腳本(shell,haserl等)委託給Openwrt的uhttpd。
  • 嚴格控制反向代理到攝像機mjpeg & jpeg API,沒有 其他攝像機功能暴露給公衆。
  • 由Nginx處理的攝像頭basic-auth(proxy_set_header),所以沒有後端 授權碼暴露給公衆。
  • 相對較小的腳印(無perl,apache,ruby等)。

我會在這裏包括我的nginx.conf,除了沒有什麼不尋常的事情......只是光禿禿的骨頭代理的東西。如果流量真的是你的罪魁禍首,你可以嘗試tcpdump或wireshark查看混亂的局域網。

但聽起來像是你的路由器是延遲的原因。也許硬件無法處理CPU /流量負載,或者您的Openwrt設置中可能還有別的東西會佔用高速公路。您的視頻是否流暢並延遲?還是你看到嚴重波濤洶涌的視頻?你提到的延長延遲聽起來像一個緩衝區/緩存的東西......但我不知道會做什麼。