ストリーミング用のNGINX RTMPサーバーのセットアップ方法

毎回ライブストリームがクラッシュしている場合は、信頼性のあるストリーミングホスト方法を見つける必要があります。しかし、高価なオプションを負担することができない場合でも心配ありません!NGINX RTMPが救世主となります。NGINX RTMPは信頼性のあるオープンソースモジュールですので、無料で利用できます。

このチュートリアルでは、NGINX RTMPサーバーのセットアップ方法を学び、ウェブサイトで信頼性のあるライブストリームを行うことができます。

準備はできましたか?それでは読み進めてライブストリームのセットアップを始めましょう!

前提条件

このチュートリアルは実演形式です。一緒に進める場合は、以下のものが必要です。

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but you can use any other Linux distribution with NGINX.
  • A non-root user with sudo privileges.
  • ライブストリームサーバーを実行するために必要な最小リソース – 2G RAM、2 CPUコア、20 GB HDD。

これらの値はあくまで目安です。実際のトラフィックのニーズによって異なります。トラフィックが多いほど、ライブビデオをホストおよびストリーミングするためにより強力なサーバーが必要になります。開発環境では、2つのCPUと2GBのRAMを備えたNGINX RTMPサーバーは、テストに十分です。

RTMPサーバーの設定

前提条件が整ったので、RTMPサーバーのインストールと設定に移ることができます。まず、NGINXサーバーをRTMPサーバーに変換するためのNGINXモジュールをインストールし、次にNGINXの設定ファイルを設定してユーザーにライブストリームを有効にします。

1. ターミナルを開き、apt updateコマンドを実行してすべてのパッケージをアップデートします。このコマンドはパッケージデータベースを最新のUbuntuのデータベースと同期させます。

sudo apt update -y
Updating all your packages

2. 次に、以下のコマンドを実行してLinuxサーバーにRTMPサーバーをインストールします。

libnginx-mod-rtmpモジュールはNGINXサーバーをRTMPサーバーに変換するNGINXモジュールです。このモジュールはNGINXがAdobe Flashプレーヤーと通信し、ライブビデオやオーディオをストリーミングすることを可能にし、開発チームによって公式にサポートされています。

sudo apt install libnginx-mod-rtmp -y
installing an RTMP server

3. お気に入りのエディタで/etc/nginx/nginx.confファイルを開き、RTMPライブプログラムを設定します。nginx.confファイルはNGINXの設定ファイルであり、NGINXサービスの動作を定義するためのいくつかのディレクティブやブロックが含まれています。

4. 最後に、以下のコードをnginx.confファイルに追加し、変更を保存してエディタを終了します。

以下のコードはNGINXにRTMPサーバーとして動作するよう指示し、ユーザーに対してライブストリームを有効にします。

# このコードブロックはNGINXをRTMPサーバーとして動作させるためのものです。 
rtmp {
		server {
		# サーバーが監視するポートを設定します。
    listen 1935;
				# 送信されるデータの各チャンクのサイズです。
				# チャンクが小さすぎるとFlash Playerがフリーズすることがあります。
				# これによりバッファアンダーフローの状態が発生する可能性があります。
        chunk_size 4096;
				# IPアドレスがサーバーにコンテンツを公開することを許可されます。
				# ローカルホストのみがNGINX RTMPでコンテンツを公開できるようにします。
				allow publish 127.0.0.1;
				# 他のすべてのユーザーに対してコンテンツの公開を拒否します。
				deny publish all;
				# "live"という名前のアプリケーションを定義します。
        application live {
				# NGINXにユーザーのためのライブストリームを有効にするよう指示します。
						live on;
				# この行は録画を無効にするためのものです。この行が含まれていない場合、
				# NGINXは録画を続け、ストリームをディスクに永久に保存します。
						record off;
				}
		}
}

ファイアウォールの設定によるネットワークの保護

すでにNGINX RTMPサーバーを設定していますが、ネットワークを保護し、トラフィックの流れを制御する必要があります。どのようにすればいいのでしょうか?UbuntuのデフォルトファイアウォールであるUncomplicated Firewall(UFW)を設定することで、ネットワークを保護できます。

NGINX RTMPサーバーをファイアウォールの背後に配置する場合、NGINX RTMPサーバーポートを開放する必要があります。NGINX RTMPサーバーをポート1935でリスンするように設定した場合、このポートをファイアウォールを通じて許可する必要があります。

1. 次のコマンドを実行して、ファイアウォールにポート1935を開くファイアウォールルールを追加します。このファイアウォールルールにより、NGINX RTMPサーバーポート1935がすべての受信および送信リクエストに対してアクセス可能になります。

sudo ufw allow 1935/tcp
Opening Port 1935 on your firewall

2. 次に、次のコマンドを実行してファイアウォールを無効にし、再度有効にします。このコマンドは、ファイアウォールの変更が反映されるようにファイアウォールを再起動します。

sudo ufw disable && sudo ufw enable

3. 最後に、次のコマンドを実行してファイアウォールのステータスを確認し、ポート1935がすべてのIPアドレス(Anywhere)からアクセス可能かどうかを確認します。

sudo ufw status
Checking if Port 1935 is Accessible from Anywhere

FFmpegを使用したビデオストリーミング

NGINX RTMPサーバーが起動したので、FFmpegを使用して例のビデオを作成し、NGINX RTMPサーバーを介してストリーミングします。FFmpegは、VLC、OMXPlayer、VobSubなど、さまざまなアプリケーションで音声とビデオの録画、変換、ストリーミングを行うための完全なソリューションです。

サーバーでビデオストリーミングをテストし、ストリーミングに適した小さいサイズのビデオを使用できます。

1. 以下のapt installコマンドを実行して、FFmpegの正常な動作に必要な依存関係をインストールします。

以下のコマンドは以下のものをインストールします:

  • libpcre3 – FFmpegツールキットが正規表現を解析およびコンパイルするために使用する正規表現ライブラリです。
  • libpcre3-dev – このパッケージには、libpcre3パッケージの開発ヘッダが含まれています。
  • libssl-dev – RTMPサーバーでSSL/TLS接続を作成するために使用されるOpenSSL暗号ライブラリです。
  • zlib1g-dev: zlibライブラリはインターネット上でのオーディオおよびビデオファイルの転送を高速化する圧縮および解凍ライブラリです。
sudo apt install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev
Installing Required Dependencies

2. 次に、以下のコマンドを実行してサーバーにffmpegをインストールします。

 sudo apt install ffmpeg -y 
Installing FFmpeg

3. 最後に、ffmpegコマンドを実行して、以下の作業を行い新しいライブストリームを作成します:

  • ソースファイル(i)から入力(re)を読み取ります。ビデオのパスとファイル名にはvideo.mp4を使用してください。
  • ビデオフォーマットをそのままコピー(c:v copy)し、音声をAACコーデックでエンコード(c:a aac)します。
  • 音声サンプルレートを44100 Hz(ar 44100)に設定します。もしビデオのサンプルレートがこの値(44100 Hz)未満の場合、FFmpegはサンプルレートを増やすために補間処理を行います。
  • オーディオチャンネルを1チャンネル(モノラル)に設定します(ac 1) 、そしてFFmpegがストリームするビデオフォーマットを設定します(-f flv)。
  • 「RTMPサーバーの設定」セクション(ステップ4)で設定したRTMPライブプログラム(rtmp://localhost/live/streamname.flv)を設定します。 streamname.flvを任意の名前に変更できます。
ffmpeg -re -i "video.mp4" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://139.180.203.6:1935/live/streamname.flv 

以下のように、ffmpegコマンドは、新しく作成されたRTMPライブストリームのフレームごとの秒数、ビットレート、およびfpsを表示します。

Viewing the RTMP Live Stream Data

結論

このチュートリアルでは、NGINX RTMPサーバーをセットアップし、NGINXの設定ファイルを変更してサーバー上でライブストリームを有効にする方法を学びました。また、NGINX RTMPサーバーを介してFFmpegツールを使用してビデオライブストリームをセットアップする方法にも触れました。

ライブストリームを設定するのにお金をかける必要はないことに気付きました。この時点で、なぜ HTML5の <video>要素を使用してストリームをウェブページに統合しないのでしょうか。または RTMPストリームのためにOBS Studioをセットアップすることはいかがでしょうか?

Source:
https://adamtheautomator.com/nginx-rtmp/