SRTLAレシーバーのセルフホスト

LOLS IRLは標準のBELABOX互換srtlaを話すので、自分のレシーバーはこちらのホスト型リレーとまったく同じに動きます。何を動かすか、どのポートが重要か、そしてモバイルデータの回線が自分のマシンに届かなくなる唯一の間違いを説明します。

何かをホストする必要はありません。無料のLOLS Cloudリレーがあるので、ボンディングはすぐ使えますし、自分でレシーバーをホストして、誰にも頼らないこともできます。ホストする理由はちゃんとあります。配信を自分で管理できるインフラに届けたい、こちらのリレーが近くにない場所で物理的に近いマシンが欲しい、上限を気にしたくない、あるいは単に自分のものは自分で動かしたい、などです。アプリのどの部分もこちらのサーバーに縛られていないので、切り替えはホスト名の変更だけです。

作るもの

スマホ(wifi + モバイルデータ)
   |
   |  srtla、UDP、ネットワークごとにソケット1つ
   v
srtla_rec          公開UDPポートで待ち受け、回線を元に戻す
   |
   |  プレーンSRT、UDP、localhost上
   v
メディアサーバー   MediaMTXまたは同等のもの
   |
   +--> OBS、またはTwitch / Kick / YouTubeへのリストリーム

部品は2つで、それぞれ役割は1つです。BELABOXプロジェクトのsrtla_recがボンディングを理解する部分で、スマホが開いた回線はすべて1つのグループとして登録され、それをふつうの1本のSRT配信に戻します。そのあとSRTリスナーに転送し、そこからメディアサーバーが引き継ぎます。よく使われるのはMediaMTXで、OBSに渡したり、再配信したり、録画したりできますが、SRTを受け付けるものなら何でも使えます。

どこで動かすか

レシーバーには、スマホが配信に使うすべてのネットワークから届く必要があり、実際には公開アドレスが必要です。小さなVPSで十分です。やるのはパケットの転送でトランスコードではないので、コア数よりもメガビット単位の帯域と控えめなCPUのほうがずっと大事です。配信する場所に地理的に近い場所に置いてください。一番近いリレーを選ぶのと同じ理由で、距離は取り戻せない遅延で、再送のたびにもう一度かかります。

ほぼ全員がはまる間違い

自宅のLANにある、192.168.1.50のようなアドレスのレシーバーには、Wi-Fiからしか届きません。モバイルデータの回線はプライベートアドレスへ経路をたどれないので、登録されず、ボンディングになりません。余計な手順を踏んだだけのWi-Fi配信になり、統計には回線が2本ではなく1本しか出ません。

公開アドレスのあるマシンでホストするか、ルーターでUDPポートをLAN内のマシンに転送して、アプリをルーターの公開アドレスに向けます。ダイナミックDNSの名前を使えば、アドレスが変わるたびに打ち直さずに済みます。

ポート

ポート用途
UDP、srtlaのポート、インターネットからの受信スマホが触れる唯一のポートです。慣例は5000。束ねた回線はそれぞれ別の送信元アドレスとポートから届くので、回線ごとに開けたり設定したりするものはありません。
UDP、SRTリスナー、ローカルsrtla_recが組み立て直した配信を転送する先です。MediaMTXは初期設定でSRTを8890で待ち受けます。プレーンなSRTクライアントにも公開させたい場合を除き、インターネットに公開する必要はありません。
メディアサーバーが提供するものOBSや視聴者へのRTMP、RTSP、HLS、WebRTC出力で、完全に自由で、ボンディングの経路には含まれません。

UDPはTCPではない

ファイアウォール、クラウドのセキュリティグループ、ルーターの転送ルールは、初期設定がTCPのことがとても多いです。TCPだけのルールに向けて送ったsrtlaの登録は、どこにもエラーを出さずに消えてしまい、レシーバーが落ちているのと見分けがつきません。回線が登録されないときは、ほかを調べる前に、ルールのプロトコルを確認してください。

ストリームID

srtla_recはSRTのストリームIDをそのまま通すので、アプリのStream id欄に入れるのは、その先のサーバーが期待するものです。MediaMTXなら、publish形式で、認証がオンのときはパスと、必要に応じて認証情報です:

publish:mypath
publish:mypath:username:password

インターネットに開けているポートなら、認証をオンにしてください。公開アドレスにある認証なしのpublishエンドポイントは、いずれ自分以外の誰かに見つかります。

アプリを向ける

  1. LOLS IRLで:Streams → + → SRTLA。
  2. Host:公開ホスト名。Port:srtla_recが待ち受けているUDPポート。
  3. Stream id:メディアサーバーが期待するpublish文字列。
  4. Latency:最初は2000 ms。配信が始まると、アプリが計測しているラウンドトリップ時間を表示して値を提案します。近くのマシンなら、たいてい初期値より低くなります。
  5. 保存して、有効にして、配信を開始し、統計オーバーレイを開きます。回線ごとに1行。2行なら、両方のネットワークが登録されています。

本当に動いているか確かめる

先に知っておきたいメモ

どこかの手順で詰まったり、2つ目の回線を受け付けないレシーバーを一緒に見てほしかったりしますか?Discordで聞くか、support@lols.ggにメールしてください。いる地域、統計オーバーレイの表示、レシーバーのログを添えてもらえれば、たいていはメッセージ2通のやり取りで済みます。

関連:アプリ側とインジケーターの読み方は5分でできるボンディング、ホストしたくないなら無料リレーの使い方、そしてすべてのガイド。