我在OpenWRT上使用nginx來反向代理一個來自IP攝像機的motion-jpeg源,但即使在相當低的幀大小和速率下,我也經歷了高達10-15秒的延遲。將OpenWRT設備從路徑上移除後,相機可以完全無延遲地訪問。如何使用nginx反向代理IP攝像機的mjpeg流?
由於延遲的長度(以及它隨時間增長的事實),這看起來像某種緩衝/緩存問題。我已經設置了proxy_buffering off
,但是有什麼我應該留意的?
謝謝。
我在OpenWRT上使用nginx來反向代理一個來自IP攝像機的motion-jpeg源,但即使在相當低的幀大小和速率下,我也經歷了高達10-15秒的延遲。將OpenWRT設備從路徑上移除後,相機可以完全無延遲地訪問。如何使用nginx反向代理IP攝像機的mjpeg流?
由於延遲的長度(以及它隨時間增長的事實),這看起來像某種緩衝/緩存問題。我已經設置了proxy_buffering off
,但是有什麼我應該留意的?
謝謝。
我從來沒有得到這個工作,我對nginx滿意。根據您的具體需求,兩種解決方案可能是適當的:
,如果你可以容忍流是不同的端口,通過它通過使用端口轉發功能的OpenWRT的內置防火牆。
使用tinyproxy的反向代理功能。默認的軟件包具有反標籤功能,因此您需要自行檢查並自行構建。這種方法肯定比較繁瑣,但也有效。
我還是有興趣聽到有人與nginx合作。
我在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;
}
}
我的Nginx上的OpenWrt BB(wndr3800)反向代理到一個DLINK 932LB1 IP攝像頭,它的工作很好。即使在禁用proxy_buffering之前,也沒有顯着的延遲。如果我有很多東西通過網絡傳播,視頻可能會變得不穩定,但不會超過從瀏覽器(或任何我的網絡攝像頭應用程序)獲得的直接相機鏈接。所以......這是可能的。
Nginx是爲我走的路。我嘗試了tinyproxy & lighttpd進行反向代理,但每個OpenWrt上都缺少了一些功能。 tinyproxy和lighttpd都需要自定義編譯完整的反向代理功能,並且(AFAIK)lighttpd不會接受代理指令中的FQDN。
這是我已經打算:
我會在這裏包括我的nginx.conf,除了沒有什麼不尋常的事情......只是光禿禿的骨頭代理的東西。如果流量真的是你的罪魁禍首,你可以嘗試tcpdump或wireshark查看混亂的局域網。
但聽起來像是你的路由器是延遲的原因。也許硬件無法處理CPU /流量負載,或者您的Openwrt設置中可能還有別的東西會佔用高速公路。您的視頻是否流暢並延遲?還是你看到嚴重波濤洶涌的視頻?你提到的延長延遲聽起來像一個緩衝區/緩存的東西......但我不知道會做什麼。