シンプルリアルタイムサーバー(SRS)RTMPストリーミング用 | オリジナル、AI翻訳
SRSを使用してRTMPストリーミング用のエッジサーバーをデプロイする方法について詳しく説明します。特に、rtmp.conf
ファイルの理解と設定に焦点を当てます。SRSは、RTMP、HLS、HTTP-FLVなどのリアルタイムストリーミングプロトコルをサポートする高性能なメディアサーバーです。特に、コンテンツ配信ネットワーク(CDN)など、スケーラビリティが求められるシナリオに適しています。エッジサーバーは、クライアントに対して効率的にストリームを配布しつつ、オリジンサーバーからコンテンツをフェッチすることができます。以下に、ステップバイステップの手順を説明し、エッジデプロイメントの概念や設定方法について詳しく説明します。
SRSとエッジデプロイメントとは?
SRSは、リアルタイムメディアストリーミングを効率的に処理するためのオープンソースサーバーです。RTMP(リアルタイムメッセージングプロトコル)をサポートし、他にもHLSやWebRTCなどのプロトコルをサポートしています。SRSでは、「エッジ」サーバーは、クライアント(視聴者やパブリッシャー)と「オリジン」サーバー(ストリームの発生源)の間の中継役を担います。エッジは、クライアントからのリクエストがあったときにのみオリジンからストリームをフェッチし、オリジンの負荷を軽減し、スケーラブルな配布を可能にします。CDNのキャッシュレイヤーのように考えてください。
SRSを使用してエッジサーバーをデプロイするのは、以下のような場合に適しています:
- 大量の視聴者をサポートする。
- パブリッシャーがエッジにストリームをプッシュし、エッジがそれをオリジンに転送する。
- 高価なオリジンサーバーの帯域幅使用を最小限に抑えるために、安価なエッジノードを活用する。
ステップバイステップ:SRSを使用してRTMPエッジサーバーをデプロイする
以下に、SRSをRTMPストリーミング用のエッジサーバーとして設定する方法を説明します。Linuxシステム(例:Ubuntu)を使用していることを前提としています。
1. SRSのインストール
まず、SRSをマシン上で動作させる必要があります:
- SRSのダウンロード:最新の安定版を公式GitHubリポジトリから取得します(github.com/ossrs/srs)。2025年2月26日現在、通常は以下のようにリポジトリをクローンします:
git clone https://github.com/ossrs/srs.git cd srs
- SRSのビルド:SRSは、
./configure
とmake
を使用したシンプルなビルドプロセスを持っています:./configure make
これにより、サーバーが
objs
ディレクトリ(例:objs/srs
)にコンパイルされます。 - バイナリのテスト:デフォルトの設定で動作することを確認します:
./objs/srs -c conf/srs.conf
デフォルトでは、RTMP用にポート1935をリッスンします。コンソール出力を確認してください。
2. エッジの概念を理解する
SRSでは、エッジサーバーは「リモート」モードで動作し、クライアントからのリクエストがあったときにのみオリジンサーバーからストリームをフェッチします。このオンデマンドのフェッチが、RTMPの配布を効率的にスケーリングするための鍵です。
- オリジンサーバー:ストリームの発生源(例:OBSなどのエンコーダーがRTMPストリームをプッシュする場所)。
- エッジサーバー:クライアントが接続する中継で、必要なときにオリジンからフェッチします。
この例では、SRSを実行しているオリジンサーバーが192.168.1.100:1935
にあると仮定します(実際のオリジンIPに置き換えてください)。
3. エッジサーバーの設定
SRSは、動作を定義するための設定ファイルを使用します。デフォルトのsrs.conf
は良い出発点ですが、エッジデプロイメントには特定の設定が必要です。ここでは、edge.conf
という名前の設定を作成します。
edge.conf
の作成:cd conf nano edge.conf
- エッジ設定の追加:
以下は、RTMPエッジデプロイメント用の最小限の
edge.conf
です:listen 1935; max_connections 1000; srs_log_tank file; srs_log_file ./objs/edge.log; vhost __defaultVhost__ { cluster { mode remote; origin 192.168.1.100:1935; } }
listen 1935
:エッジはポート1935でRTMP接続をリッスンします。max_connections 1000
:同時接続の制限(サーバーの容量に応じて調整)。srs_log_file
:デバッグ用にファイルにログを出力します。vhost __defaultVhost__
:デフォルトの仮想ホスト設定。cluster { mode remote; origin 192.168.1.100:1935; }
:このサーバーをエッジ(mode remote
)として設定し、オリジンサーバーを指定します。
- 保存と終了:nanoでCtrl+O、Enter、Ctrl+X。
4. エッジサーバーの起動
エッジ設定でSRSを実行します:
./objs/srs -c conf/edge.conf
ログ(./objs/edge.log
)を確認して、オリジンに接続されていることを確認します。
5. 設定のテスト
- ストリームのパブリッシュ:OBSやFFmpegなどのツールを使用して、オリジンサーバーにRTMPストリームをプッシュします:
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://192.168.1.100/live/livestream
ここで、
live
はアプリ名、livestream
はストリームキーです。 - エッジからの再生:VLCや他のRTMPクライアントを使用して、エッジからストリームを再生します:
rtmp://<edge-server-ip>/live/livestream
<edge-server-ip>
をエッジサーバーのIP(例:192.168.1.101
)に置き換えます。エッジはオリジンからストリームをフェッチし、それを提供します。
6. rtmp.conf
の探索
SRSはデフォルトでrtmp.conf
ファイルを同梱していませんが、チュートリアルやカスタム設定で参照されることがあります。これは、RTMP専用の設定ファイルの命名規則です。例えば、SRSのドキュメント(ossrs.net)には、リアルタイムRTMPストリーミング用のサンプルrtmp.conf
が提供されています:
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
tcp_nodelay on;
min_latency on;
play {
gop_cache off;
queue_length 10;
}
publish {
mr off;
}
}
- 目的:この設定は、オリジンサーバーでの低遅延RTMPストリーミングを最適化します。エッジデプロイメントでは、ステップ3の
cluster
ブロックを追加することで適応します。 - 主要な設定:
tcp_nodelay on
:Nagleのアルゴリズムを無効にして遅延を減少させます。min_latency on
:バッファリングよりも低遅延を優先します。gop_cache off
:リアルタイム再生のためにグループオブピクチャのキャッシュを無効にします。mr off
:パブリッシュの遅延を避けるために「マージリード」を無効にします。
エッジの場合、この設定をcluster
設定と組み合わせることで、単独で使用するのではなく、適応します。
エッジのメカニズムとRTMPの説明
- エッジの動作:クライアントが
rtmp://<edge-ip>/live/livestream
をリクエストすると、エッジはストリームを持っているかどうかを確認します。持っていない場合、オリジン(192.168.1.100:1935
)からフェッチし、ローカルにキャッシュして他のクライアントに提供します。パブリッシャーがエッジにプッシュすると、エッジはストリームをオリジンに転送します。 - RTMPの詳細:RTMPは、ライブストリーミングに適した低遅延プロトコルです。SRSはRTMPを効率的に処理し、サーバー間の同期のための絶対時間コーディング(ATC)などの機能をサポートしていますが、エッジモードではデフォルトで無効です。
- スケーラビリティ:同じオリジンを指す複数のエッジを追加して、数千のクライアントを処理します。SRSは、複数のオリジンをリストアップすることでフェイルオーバーをサポートします(例:
origin 192.168.1.100:1935 192.168.1.200:1935;
)。
ヒントとトラブルシューティング
- ファイアウォール:オリジンサーバーとエッジサーバーの両方でポート1935が開いていることを確認します。
- ログ:オリジンへの接続失敗などのエラーを確認するために
edge.log
をチェックします。 - 遅延:オリジンが低遅延である場合、エッジは通常1秒未満の遅延を追加します。
- 複数のエッジ:同じ設定で追加のエッジをデプロイし、必要に応じて
listen
ポートやIPを調整します。
まとめ
SRSを使用してRTMPエッジサーバーをデプロイすることは、オリジンとエッジの関係を理解すれば簡単です。edge.conf
は、エッジがストリームを動的にフェッチまたはプッシュするように設定し、rtmp.conf
スタイルの設定は必要に応じてRTMPのパフォーマンスを微調整することができます。この設定で、数人の視聴者からグローバルな視聴者まで、効率的にライブストリーミングをスケールアップできます。さらに調整したい場合や、RTMPとHLSを統合したい場合は、お知らせください!