1 年前に F5 がNGINX の買収を発表したとき、私は興奮しました。長年の F5 社員として、NGINX が最適だとわかっていたからです。 その気持ちは、最初の合同会議の 1 つで、NGINX の従業員が私にとって非常に重要なこと、つまり「コミュニティ」への取り組みについて話し合ったときに確信しました。 NGINX チームにプロダクト マネージャーとして参加して以来、私はその取り組みが実際に行われているのを目にし、コミュニティとより深く連携する機会に恵まれました。
オープンソースに携わる私たちは通常、コードを送信してオープンソース プロジェクトをサポートする人々を「コミュニティ」と呼びます。 重要ではありますが、これらは NGINX コミュニティのほんの一部にすぎません。 では、コミュニティの他のメンバーは誰でしょうか? 私たちは次のような方々も高く評価します:
ここ数か月、NGINX コミュニティのメンバーは、COVID-19 パンデミックの期間中、互いに、そして業務の維持に苦労している多くの組織をサポートするために真に団結してきました。 皆さんの多くは、NGINX ソフトウェアのメリットを享受できるサイトにフラグを立てたり、NGINX を最適なパフォーマンスに調整する方法について時間や専門知識を提供したりしています。 私たちは、自分たちの役割を果たすために、 COVID-19 の影響を受けたウェブサイト向けの無料リソースを公開し、コミュニティが新しい NGINX ユーザーの周りに集まっているのを見て興奮しています。
組織が増加するトラフィックに対処し、新しい機能を追加できるように支援する取り組みの一環として、パンデミックの最前線にいる組織に最大 5 つの NGINX Plus インスタンスを無料で提供しています。 これには、医療提供者、政府機関、そしてこのブログに最も関連する学校、大学、教育に重点を置いた非営利団体が含まれます。 これらの組織の間でトレンドとなっているユースケースが見つかりました。おそらく驚くことではないと思いますが、それはストリーミング ビデオです。
世界中の学校が閉鎖され、遠隔学習が急速に導入される中、今後数週間から数か月の間にストリーミング ビデオの使用が飛躍的に増加すると予想されます。 このブログの残りの部分では、NGINX Open Source と NGINX Plus を使用して、安定性、セキュリティ、スケーラビリティに優れたビデオ ストリーミングを実現する方法について説明します。
このブログに付随するデモ ビデオを録画してくれた NGINX テクニカル ソリューション アーキテクトの James Jones に心から感謝します。
ストリーミング ビデオ向けの当社のソリューションは、NGINX の Real-Time Messaging Protocol (RTMP) モジュールを活用しています。このビデオでは、James がプロセスを段階的に説明します。
James のデモを見ながらメモを取る必要がないように、次のセクションではすべてのコマンドと構成をまとめました。
このブログで紹介されている NGINX 構成には、ビデオ ストリームを視聴できるユーザーを制限するセキュリティ対策は含まれていません。 視聴者がビデオの視聴に使用するフロントエンド アプリケーションでストリームを保護するには、特定の IP アドレスからのアクセスのみを許可したり、視聴者に認証を求めたりするなど、さまざまな方法があります。
NGINX をコンパイルする前に、いくつかの基本的なビルド ツール ( autoconf
、 gcc
、 git
、 make )
をインストールする必要があります。 ダウンロードしてインストールするには、オペレーティング システムのコマンドを実行します (ここに含まれていない場合は、OS ベンダーのドキュメントを参照してください)。
Debian および Ubuntu の場合:
$ sudo apt update $ sudo apt install build-essential git
CentOS、Oracle Linux、RHELの場合:
$ sudo yum update $ sudo yum groupinstall "開発ツール" $ sudo yum install git
NGINX ビルドにはいくつかの依存関係も必要です。 圧縮には、Perl 互換正規表現 (PCRE)、OpenSSL、および zlib を使用します。
依存関係をダウンロードしてインストールする最も簡単な方法は、パッケージ マネージャーを使用することです。 オペレーティング システムのコマンドを実行します (ここに含まれていない場合は、OS ベンダーのドキュメントを参照してください)。
Debian および Ubuntu の場合:
$ sudo apt install libpcre3-dev libssl-dev zlib1g-dev
CentOS、Oracle Linux、RHELの場合:
$ sudo yum groupinstall pcre-devel zlib-devel openssl-devel
代わりにソースから依存関係をビルドしてインストールする場合は、手順を参照してください。
ビルドを完了するには、RTMP と NGINX の GitHub リポジトリをクローンし、NGINX configure
コマンドを実行してから、NGINX をコンパイルします。
$ cd /path/to/build/dir $ git clone https://github.com/arut/nginx-rtmp-module.git $ git clone https://github.com/nginx/nginx.git $ cd nginx $ ./auto/configure --add-module=../nginx-rtmp-module $ make $ sudo make install
NGINX を構成して、HTTP Live Streaming (HLS) プロトコルと Dynamic Adaptive Streaming over HTTP (DASH) プロトコルのいずれかまたは両方を使用してビデオをストリーミングできます。 これらのプロトコルは同じ機能を提供するため、どちらを選択するかは実際には好みの問題です。 これらについて詳しくない場合は、Vidbeo ブログの「HLS vs DASH」を参照してください。
HLSの場合、設定は次のようになります。 デモ(5:10 時点)では、James がこれらのディレクティブの目的を説明しています。
rtmp { server {
listen 1935;
application live {
live on;
interleave on;
hls on;
hls_path /tmp/hls;
hls_fragment 15s;
}
}
}
http {
default_type application/octet-stream;
server {
listen 80;
location /tv {
root /tmp/hls;
}
}
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
text/html html;
}
}
DASHの場合、設定は次のようになります。 デモでは、多くのディレクティブが両方のプロトコルで同じであるため、James は HLS と DASH を単一の構成に組み合わせています。
rtmp { server {
listen 1935;
application live {
live on;
dash on;
dash_path /tmp/dash;
dash_fragment 15s;
}
}
}
http {
server {
listen 80;
location /tv {
root /tmp/dash;
}
}
types {
text/html html;
application/dash+xml mpd;
}
}
構文エラーがないことを確認するために、NGINX 構成を検証することを常にお勧めします。 次のコマンドを実行します:
$ sudo nginx -t nginx: 設定ファイルのファイル名の構文は正常です nginx: 設定ファイルのファイル名のテストは成功しました
次に、このコマンドを実行して NGINX を起動します。
$ sudo nginx
ビデオ ストリームを開始します。 OBS Studio は、カスタム RTMP サーバーを構成することでワークステーションから NGINX サーバーにライブストリーミングできる、よく使用されるオープン ソース ツールです。 OBS をrtmp:// NGINX_server /tv/tv2にストリーミングするように設定します。ここで、 NGINX_serverは NGINX サーバーの IP アドレスまたはホスト名です。 ストリームキーは必要ありません。
James はライブではなくファイルからビデオをストリーミングしているため、デモでは OBS を使用していません。 彼は、次の内容のstream.shスクリプトを実行して、ビデオ ストリームを開始します (9:30)。
ffmpeg -re -I bbb_sunflower_1080p_60fps_normal.mp4 -vcodec コピー -loop -1 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv rtmp:192.168.1.138/live/bbb
彼がストリーミングしているビデオ ( -I
引数で指定) は、 blender.orgのオープンソースのBig Buck Bunnyビデオです。 その他の引数の詳細については、 ffmpeg の
ドキュメントを参照してください。
ビデオのストリーミングが開始されると、設定したプロトコルを使用して NGINX が正しくビデオを提供しているかどうかをテストできます。 James はVLC メディア プレーヤーのインスタンスを 3 つ開き、それぞれの再生方法に適した URL にアクセスします。 URL では、 NGINX_server はNGINX サーバーの IP アドレスまたはホスト名です。
ビデオ ライブラリまたはコースを構築する場合は、NGINX Open Source で可能な範囲を超えた機能が必要になる場合があります。 NGINX Plus には、事前構築されたモジュールを使用してパフォーマンスとエンドユーザー エクスペリエンスを向上させる拡張機能が含まれています。 あなたはできる:
COVID-19 パンデミックの間、NGINX は教育、公共政府、非営利セクターの組織に、NGINX Plus の最大 5 つのインスタンスの 1 年間の無料ライセンスを提供しています (審査と承認が必要です)。 詳細については、 「COVID‑19 の影響を受けるウェブサイト向けの無料リソース」をご覧ください。
RTMP モジュールを NGINX Plus に組み込むには、それを動的にロードします。 NGINX Plus 管理者ガイドを参照してください。
この 2 番目のデモでは、James が Ansible と Terraform を使用して、3 つのビデオ サーバーのロード バランサーとして NGINX Plus を簡単に設定する方法を示します。
James が 2 番目のデモで使用するファイルにアクセスするには、彼のGitHub リポジトリを参照してください。
ビデオストリーミングやその他のユースケースの実装で問題がある場合は、私たちがお手伝いします。 NGINXの従業員とコミュニティはStack OverflowのNGINXチャンネルを監視しています1質問やリクエストにはできるだけ早く対応します。
パンデミックの最前線にいる組織で働いており、高度なニーズがある場合は、上記のNGINX Plus ライセンスに加えて、F5 DNS Load Balancer Cloud Service の上位レベルのライセンスを取得できる可能性があります。 詳細については、 COVID‑19 の影響を受けるウェブサイトの無料リソースをご覧ください。
また、そのブログで概要を確認してください。 NGINX と F5 の無料リソースを使用して、 Web サイトのパフォーマンスを向上させる簡単な方法。
1Stack Overflow はサードパーティの Web サイトであり、F5 とは提携していません。 株式会社 F5 およびその関連会社は、Stack Overflow またはその他のサードパーティの Web サイトに投稿されたコンテンツ (一般情報や質問に対する解決策の提案を含む) について一切の責任を負いません。
「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"