web-dev-qa-db-ja.com

NGINXリバースプロキシ、バックエンドサーバーへの単一接続を使用するためのビデオ(MJPG)ストリームの構成

質問/問題の天気があります。NGINXリバースプロキシを構成して、ビデオストリームのすべてのリクエストをバックエンドサーバーにプロキシせず、代わりに単一の接続を開いてビデオストリームを取得し、クライアントに配信することができます。現在、次の構成を使用しています。

server {                                                                        
      listen 9000 ssl;                                                              
      server_name some.domain www.some.domain;                                        
      error_log /var/log/nginx/error.cam.log;                                       
      access_log /var/log/nginx/access.cam.log;                                     

      ssl on;                                                                         
      ssl_certificate /etc/letsencrypt/live/some.domain/fullchain.pem;        
      ssl_certificate_key /etc/letsencrypt/live/some.domain/privkey.pem;       

      location / {                                                              

        auth_basic "Login";                                       
        auth_basic_user_file /etc/nginx/auth/Somefile;   
        proxy_pass http://XXX.XXX.XXX.XXX:9000/;                                  
        proxy_http_version 1.1;                                                 
        proxy_buffering off;        

      }                                                                                                                                                                                                                                
}  

これにより、クライアントリクエストがNGINXサーバーからそのサイトをリクエストするたびに、まったく同じビデオストリームを持つ新しいバックエンドからNGINX接続につながります。 Network Activity Backend=Green , NGINX=Blue 上のグラフは、送信ネットワークトラフィックを示しています:緑= Nginxサーバーおよび青=バックエンドサーバー。すべてのピークは、ビデオMJPGストリームにアクセスする新しいクライアントを意味します。

したがって、問題は、バックエンドが30Mビットを超える安定したストリームを配信できないRaspberry Piであるため、バックエンドからNGINXプロキシへのパフォーマンスが非常に制限されていることです。すでにバッファリングなどを試しましたが、うまくいきませんでした。バックエンドへの単一の接続を使用する方法はありますか?

ドイツからの感謝とよろしく、Flo

1
Flo

Nginxは、ローカルにキャッシュされていない限り、着信接続用に常に新しいプロキシ接続を作成します。 MJPGは無限ループであるため、ここではオプションのようには見えません。

しかし、私が試したいのは、プロキシサーバーでffmpeg/vlcをセットアップして、rpiからのmjpgストリームを消費することです。その後、Nginxはローカルのffmpeg/vlcに接続してストリームを取得できます。これで、バックエンドサーバーへの接続は1つだけになります。

2
Yarik Dot

@Yarikが回答したように、これは現在、Nginxがプロキシを処理する方法では不可能です。 1つのストリームを取得し、それを再ブロードキャストできるシステムが必要です。多くのクライアントがそれを望んでいます。

この空白を埋めるために設計された他のいくつかのプロジェクトがあります。これらのいずれかを同じサーバー上のNginxの背後でいつでも実行できます。 Nginxは引き続き各クライアントの個別の接続を確認し、それらをブロードキャスターに転送しますが、ブロードキャスターは1つのクライアントでのみカメラにロードします。

0