RTMP モジュールを使用した Nginx のインストールとチューニングおよび CentOS での FFmpeg を介したストリーミングの開始方法

Nginx とは?

Nginx は、多くの機能を備えたオープンソースのウェブサーバーです。これは、ロードバランサー、リバースプロキシー、メールプロキシー、HTTP キャッシュなどとして使用できます。この記事では、インターネットを介してウェブカメラからビデオやオーディオをストリームする際に使用される RTMP (Real Time Messaging Protocol) モジュールを使用して、Nginx をインストール、コンパイル、およびチューニングし、ビデオのストリーミング・ツールとして使用する方法を紹介します。

Nginx のインストールおよびチューニング、FFmpeg を介したストリーミング方法

早速、作業に入りましょう。この記事は、まだ Nginx を使用したことがない初心者の方でもすぐに取り組めるようになるためのチュートリアルです。まずは Nginx のインストールとチューニングにフォーカスし、次にストリーミングを行う方法についてサンプルコードとともに紹介します。

ステップ 1: 準備

Nginx のインストールを始める前に、作業に必要なパッケージの依存関係をいくつかインストールする必要があります。

ステップ 2: Nginx のインストレーション

関連する属性をインストールした後、Nginx の公式ウェブサイトから Nginx のアーカイブをダウンロードし、CentOS マシン上で解凍する必要があります。この記事では、バージョン 1.14.0 を使用しています。

次に、git を使用して Nginx RTMP モジュールをクローンします。

そして、ディレクトリー nginx-1.14.0 に移動して、以下のパラメーターで Nginx を構成します。

Nginx の構成が完了したら、コンパイルを行ってインストールします。

Nginx のバージョンおよびインストールされたモジュールは、以下のコマンドから確認できます。

ステップ 3: Nginx のチューニング

インストール後、Nginx ディレクトリーへのモジュールリンクを作成します。

Nginx が任意のフォルダーを使用する場合、Nginx のユーザーとグループを作成し、これらのフォルダーの所有者とグループを Nginx のユーザーとグループへ変更する必要があります。

Nginx をサービスとして実行するため、/usr/lib/systemd/system/ のパスに沿って nginx.service ファイルを作成し、以下のテキストを nginx.service ファイルにコピーおよびペーストする必要があります。

これらのステップがすべて終了後、ついに Nginx の使用を開始できます。

システムが起動時する度に Nginx を実行する場合、Nginx を有効化します。

ステップ 4: RTMP の構成

Nginx の動作設定は、/etc/nginx/nginx.conf に存在します。

RTMP モジュールの構成を作成する場合、nginx.conf ファイルに追加する必要があります。

以下は、ライブ・ストリーミングのサンプルになります。

nginx.conf ファイル内で変更を施した後、Nginx を再起動して変更を適用します。

これで、CentOS マシン上で Nginx のインストールと RTMP モジュールのチューニングができました。

ステップ 5: インテル® Media SDK のインストール

QuickSync で FFmpeg をビルドするため、インテル® Media SDK をインストールします。最初に、github からインテル® Media SDK をクローンします。

次に、クローンしたプロジェクトのディレクトリーに移動して、ビルドする必要があります。

msdk/build/__bin/release でインテル® Media SDK をビルドした後、QuickSync で FFmpeg をビルドする際に必要となる libmfx.pc ファイルが表示されます。インテル® Media SDK のフォルダーがある作業ディレクトリーへ戻り、libmfx.pc ファイルとともに PKG_CONFIG_PATH をフォルダーへエクスポートします。

ステップ 6: FFmpeg のインストール

まずは、github から FFmpeg プロジェクトをクローンします。

FFmpeg をクローンする際、以下のオプションを使用して構成する必要があります。

構成に成功したら、ログで h264_qsv オプションを確認できます。これは、FFmpeg が QuickSync で構成されたことを示します。これで、FFmpeg をコンパイルしてインストールできます。

FFmpeg をインストールした後、FFmpeg にインストールされたコンポーネントを確認します。--enable-libmfx は、QuickSync のインストールに成功したことを示します。

ステップ 7: インテル® Media Driver のインストール

使用するマシンにインテル® Media Driver (iHD_drv_video.so) がインストールされていない場合、またはドライバーのバージョンが FFmpeg の実行に適していない場合、ドライバーをビルドする必要があります。まずは、github から LibvaGmmLib のマスターブランチをインストールする必要があります。

次に、github からインテル® Media Driver プロジェクトをクローンします。

そして、ドライバーのフォルダーに移動して、ビルド用のフォルダーを作成し、コンパイルします。

iHD_drv_video.so ファイルを取得したら、LIBVA 環境変数を指定する必要があります。

ステップ 8: Nginx を介した FFmpeg の起動

ここで、Nginx と FFmpeg を統合します。nginx.conf ファイルを編集して、実行コマンドとして QuickSync と FFmpeg を使用します。以下のサンプルでは、トランスコーディング用のいくつかのパラメーターを追加し、FFmpeg のすべてのログを /home/tmp へダンプします。ステップ 3 にある通り、Nginx は、tmp フォルダーの所有者およびグループになります。

保存して終了します。

次に、Nginx を使用してブロードキャストを起動します。トランスコードするストリームを選択し、開始します。

注意: 並列セッションの数と各セッションにおける出力数の両方を変更できます。出力を 1 つ追加する際のコード例は以下になります。

追記: ドライバーに問題がある場合、ステップ 7 を再度ご確認ください。ステップ 7 を既に確認済みであるにも関わらず問題が解決されない場合、nginx.conf ファイルへ LIBVA_DRIVERS_PATH を追加してください。iHD ドライバーが存在するディレクトリーからドライバーを使用するための権限が Nginx に付与されていることをご確認ください。

ステップ 9: ブロードキャストにおけるトランスコードの動作確認

トランスコーディングを起動する前に、FFplay を実行し、どのような内容が出力されるのかを確認できます。これには、確認したい出力を選択して FFplay に追加する必要があります。例えば、1 つ目のアプリケーションから出力ストリームを確認する場合、以下のようなコードを実行できます。$name 変数の代わりに、FFmpeg を起動した際の出力ストリームに mystream などの名前を付ける必要があります。

FFplay を開始した後、以下のような画面が表示されます。

これは、FFplay がデータを待機していることを示します。ステップ 7 で実行したように、ストリーミングを開始できます。

その後、問題がなければ、FFplay はトランスコードされたストリームの再生を開始します。

FFmpeg のログ (/home/tmp) では、以下のような結果が表示されます。

これは、QuickSync と FFmpeg が正常に動作し、ブロードキャストの前にストリームをトランスコードしていることを意味します。

弊社では、ViCue Soft 社が提供する幅広い動画符号化方式に対応するビデオ解析ソフトウェア VQ Analyzer 製品や、Intel 社がオープンソースとして提供するインテル® Media SDK に対する有償サポートを販売しています。

VQ Analyzer がもたらす開発期間の短縮やコストの削減などの効果は、無償評価版にてお試しください。インテル® Media SDK の有償サポートに関する詳細は、FAQ ページの 「オープンソースのインテル® Media SDK 年間サポート販売開始」をご参照ください。


この記事は、ViCue Soft 社の Technology Blog に公開されている「How to install & tune Nginx with RTMP module and start streaming through FFmpeg with QuickSync on CentOS.」の日本語参考訳です。