CGJU
ツール検索サイト
2026年6月8日 · 読了時間 8 分

Nginx-RTMPモジュールの紹介

Nginx-RTMPは、ロシアの開発者Roman Arutyunyanによって開発されたオープンソースのNginxサードパーティモジュールです。NginxにRTMP(Real-Time Messaging Protocol)プロトコルのサポートを追加し、Nginxを機能豊富なストリーミングサーバーに変えることができます。

RTMPプロトコルはもともとMacromedia社(後にAdobeに買収)によって開発され、Flashプレーヤーとサーバー間の音声・動画伝送に使用されていました。Flashが歴史の舞台から消えた現在でも、RTMPプロトコルは低遅延で成熟・安定しているという特徴から、今でもライブ配信の事実上の標準となっています。

Nginx-RTMPの主な機能

  • RTMP配信・再生:RTMPプロトコルによるライブ配信と再生をサポート
  • HLSサポート:RTMPストリームをリアルタイムでHLSフォーマットに変換
  • DASHサポート:MPEG-DASHストリーミングフォーマットをサポート
  • ライブ録画:ライブコンテンツを動画ファイルとして録画
  • リアルタイムトランスコード:FFmpegと連携してリアルタイムでトランスコード
  • 統計パネル:統計情報ページを標準搭載
  • ライブ制御:録画、停止、廃棄などの制御コマンドをサポート

一般的な利用シーン

  • 個人配信:自分だけのライブ配信プラットフォームを構築
  • 企業研修:社内ビデオライブ配信システム
  • 教育配信:オンライン授業、遠隔教育
  • ゲーム配信:ゲーム画面のリアルタイムライブ配信
  • 監視システム:カメラのストリーミング転送

Ubuntuでのコンパイルインストール

UbuntuにNginx-RTMPをインストールするには、RTMPモジュールがNginxの公式モジュールではないため、ソースコードからのコンパイルが必要です。以下に詳細なコンパイルインストール手順を示します。

ステップ1:コンパイル依存関係のインストール

まず、コンパイルに必要な依存パッケージをインストールします:

sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev -y

ステップ2:ソースコードのダウンロード

NginxとNginx-RTMPモジュールのソースコードをダウンロードします:

cd /usr/local/src
sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz
sudo wget https://github.com/arut/nginx-rtmp-module/archive/refs/heads/master.zip -O nginx-rtmp-module.zip
sudo tar zxvf nginx-1.24.0.tar.gz
sudo unzip nginx-rtmp-module.zip

ステップ3:コンパイルとインストール

コンパイルパラメータを設定し、RTMPモジュールを追加します:

cd nginx-1.24.0
sudo ./configure \
  --prefix=/usr/local/nginx \
  --with-http_ssl_module \
  --add-module=../nginx-rtmp-module-master
sudo make
sudo make install

ステップ4:システムサービスの作成

systemdサービスファイルを作成し、Nginxの管理を容易にします:

sudo tee /etc/systemd/system/nginx.service << EOF
[Unit]
Description=NGINX with RTMP module
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx

Windowsでのインストール

Windowsシステムでは、コンパイル済みバージョンを使用することで、コンパイルの手間を省けます。

方法1:コンパイル済みバージョンの使用

GitHubで有志がコンパイルしたWindowsバージョンをダウンロードするか、以下の方法を使用できます:

# 1. Nginx for Windowsをダウンロード
# http://nginx.org/en/download.html からダウンロード

# 2. nginx-rtmp-moduleをダウンロード
# https://github.com/arut/nginx-rtmp-module からダウンロード

# 注意:Windowsバージョンは特定のコンパイルが必要なため、既製のnginx-rtmp-win32バージョンを直接検索することを推奨

方法2:Dockerの使用

WindowsでDockerを使用するのがより簡単な方法です:

docker run -d \
  --name nginx-rtmp \
  -p 1935:1935 \
  -p 8080:8080 \
  -v /path/to/nginx.conf:/etc/nginx/nginx.conf \
  tiangolo/nginx-rtmp

設定ファイルの詳細解説

Nginx-RTMPの設定ファイルは nginx.conf で、通常 /usr/local/nginx/conf/ ディレクトリにあります。以下に各設定を詳しく説明します。

基本設定

これは最も基本的なRTMP設定です:

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
        }
    }
}
  • listen 1935:RTMPのデフォルトポート、ファイアウォールを開放する必要がある
  • chunk_size:データチャンクサイズ、伝送効率に影響
  • application live:liveという名前のアプリケーションを定義
  • live on:ライブ配信モードをオン
  • record off:録画機能をオフ

HLS設定

HLS出力を設定し、ライブストリームをウェブページで再生できるようにします:

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;

            hls on;
            hls_path /tmp/hls;
            hls_fragment 3;
            hls_playlist_length 15;
            hls_cleanup on;
            hls_sync 100ms;
        }
    }
}

http {
    server {
        listen 8080;

        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
        }
    }
}
  • hls on:HLS機能をオン
  • hls_path:HLSセグメントとプレイリストの保存パス
  • hls_fragment:各セグメントの長さ(秒)
  • hls_playlist_length:プレイリストの合計時間
  • hls_cleanup:期限切れセグメントの自動削除
  • hls_sync:音声・動画の同期時間差

DASH設定

MPEG-DASHのサポートを設定します:

application live {
    live on;
    record off;

    dash on;
    dash_path /tmp/dash;
    dash_fragment 2;
    dash_playlist_length 10;
    dash_format mp4;
}

マルチビットレートトランスコード設定

FFmpegと連携してリアルタイムマルチビットレートトランスコードを実現します:

application live {
    live on;
    record off;

    exec ffmpeg -i rtmp://localhost/live/$name
      -c:v libx264 -crf 23 -preset veryfast -maxrate 2000k -bufsize 4000k -s 1280x720 -c:a aac -b:a 128k -f flv rtmp://localhost/live720/$name
      -c:v libx264 -crf 23 -preset veryfast -maxrate 1000k -bufsize 2000k -s 854x480 -c:a aac -b:a 96k -f flv rtmp://localhost/live480/$name
      -c:v libx264 -crf 23 -preset veryfast -maxrate 500k -bufsize 1000k -s 640x360 -c:a aac -b:a 64k -f flv rtmp://localhost/live360/$name;
}

application live720 {
    live on;
    record off;
    hls on;
    hls_path /tmp/hls/720p;
}

application live480 {
    live on;
    record off;
    hls on;
    hls_path /tmp/hls/480p;
}

application live360 {
    live on;
    record off;
    hls on;
    hls_path /tmp/hls/360p;
}

配信テスト

FFmpegによる配信

最も簡単な配信方法はFFmpegを使用することです:

# ローカルファイルを配信
ffmpeg -re -i test.mp4 -c copy -f flv rtmp://サーバーIP/live/stream1

# 画面を配信
ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -preset fast -pix_fmt yuv420p -f flv rtmp://サーバーIP/live/stream1

OBSによる配信

OBS Studioは最も人気のあるライブ配信ソフトです。設定方法は以下の通りです:

  1. OBSを開き、「設定」をクリック
  2. 「配信」タブを選択
  3. サービスで「カスタム...」を選択
  4. サーバーに記入:rtmp://サーバーIP/live
  5. ストリームキーに記入:stream1(カスタマイズ可能)
  6. OKをクリックし、「配信開始」をクリック

再生テスト

ffplayまたはVLCでRTMPストリームを再生します:

# FFplayで再生
ffplay rtmp://サーバーIP/live/stream1

# VLCで再生
vlc rtmp://サーバーIP/live/stream1

HLSを設定している場合は、ブラウザで再生することもできます:

http://サーバーIP:8080/hls/stream1.m3u8

HLS設定の詳細解説

HLS(HTTP Live Streaming)はAppleが開発したストリーミングプロトコルです。HTTPベースで互換性が高いという特徴から、ウェブライブ配信やモバイル端末での再生に広く使用されています。

HLS主要パラメータの最適化

  • hls_fragment:セグメント長、2-4秒を推奨。短いほど遅延は低くなるがファイル数は増える
  • hls_playlist_length:プレイリスト長、セグメントの5-6倍を推奨
  • hls_sync:音声・動画の同期、100msに設定すれば通常十分
  • hls_start_number:プレイリストの開始番号

低遅延HLS設定

より低い遅延を追求する場合は、以下のように設定できます:

hls on;
hls_path /tmp/hls;
hls_fragment 1;
hls_playlist_length 3;
hls_sync 50ms;
hls_cleanup on;
hls_delete_threshold 3;

この設定により遅延を3-5秒程度に削減できますが、サーバー負荷とネットワークオーバーヘッドが増加します。

録画機能

Nginx-RTMPは強力なライブ録画機能を提供しており、ライブコンテンツを動画ファイルとして保存できます。

録画設定オプション

application live {
    live on;

    record all;
    record_path /tmp/records;
    record_suffix -%Y%m%d-%H%M%S.flv;
    record_unique on;
    record_max_size 1000M;
    record_max_files 5;
    record_interval 30m;

    # 録画完了後に実行するスクリプト
    exec_record_done ffmpeg -i $path -c copy /path/to/$basename.mp4;
}
  • record:録画モード、off|all|audio|video
  • record_path:録画ファイルの保存パス
  • record_suffix:ファイル名の接尾辞、時刻フォーマットをサポート
  • record_unique:一意のファイル名を生成し、上書きを回避
  • record_max_size:単一録画ファイルの最大サイズ
  • record_max_files:保持する最大ファイル数
  • record_interval:新しいファイルに分割する間隔

録画モードの説明

  • off:録画をオフ
  • all:音声と動画の両方を録画
  • audio:音声のみ録画
  • video:動画のみ録画

統計パネル

Nginx-RTMPには統計機能が標準搭載されており、HTTPページから現在のサーバー状態と接続情報を確認できます。

統計パネルの設定

http {
    server {
        listen 8080;

        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /usr/local/src/nginx-rtmp-module-master/;
        }

        location /control {
            rtmp_control all;
        }
    }
}

統計パネルへのアクセス

設定完了後、以下のアドレスからアクセスできます:

  • 統計ページ:http://サーバーIP:8080/stat
  • 制御インターフェース:http://サーバーIP:8080/control

統計パネルに表示される情報は以下の通りです:

  • 現在のアクティブストリーム数
  • 各ストリームの配信情報
  • 各ストリームの再生クライアント数
  • アップロードとダウンロードの帯域幅
  • 接続時間などの詳細情報

制御インターフェース

controlインターフェースを通じてライブ配信をリモート制御できます:

  • record/start:録画開始
  • record/stop:録画停止
  • drop/publisher:配信を切断
  • drop/subscriber:特定の視聴者を切断

よくある問題と最適化

1. ファイアウォール設定

ファイアウォールで必要なポートが開放されていることを確認してください:

# UFWファイアウォール
sudo ufw allow 1935/tcp
sudo ufw allow 8080/tcp

# iptables
sudo iptables -A INPUT -p tcp --dport 1935 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

2. 権限の問題

NginxがHLSセグメントディレクトリへの書き込み権限を持っていることを確認してください:

sudo mkdir -p /tmp/hls /tmp/records
sudo chown -R www-data:www-data /tmp/hls /tmp/records

3. 同時実行パフォーマンスの最適化

Nginxの設定を調整して同時接続能力を向上させます:

worker_processes auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 65535;
    use epoll;
    multi_accept on;
}

4. 配信認証

他人による無断配信を防ぐため、認証を追加できます:

application live {
    live on;
    record off;

    # 簡単なURL認証
    on_publish http://localhost/auth;
}

# HTTP認証サービス(例)
location /auth {
    if ($arg_key = "your-secret-key") {
        return 200;
    }
    return 403;
}

まとめ

Nginx-RTMPは機能豊富なオープンソースのストリーミングサーバーモジュールであり、これを使用することで自分だけのライブ配信システムを簡単に構築できます。本記事では、モジュールの紹介、インストール・デプロイ、設定の詳細解説から機能の使用方法まで、Nginx-RTMPの使い方を全面的に紹介しました。

個人配信、企業研修、オンライン教育のいずれにおいても、Nginx-RTMPは安定して信頼できるストリーミングサービスを提供できます。FFmpegと組み合わせることで、リアルタイムトランスコードやマルチビットレート出力など、より多くの高度な機能を実現できます。

ストリーミングサーバーを構築した後は、当社の M3U8オンラインプレーヤー を使用してHLSライブストリームの再生效果をテストできます。ブラウザでHLSアドレスを入力するだけで再生できます。

関連記事

その他の役立つ記事とツール

ライブストリームをテストしたいですか?

当社の無料M3U8オンラインプレーヤーを使用して、ブラウザでHLSライブストリームを直接再生

今すぐ体験 ➡