Long Speedrun Summit 2025 の技術的なお話

RTAイベント

この記事はRTAGamers Advent Calendar 2025の22日目の記事です。

はじめに

天外魔境ZERO発売30周年おめでとう!(挨拶)

長時間RTAのイベントLong Speedrun Summit(以下LSS)運営のひとりping値と申します。この記事では、今年の9~10月に開催した『Long Speedrun Summit 2025』(以下LSS2025)の舞台裏で使っていた技術について、筆者が関わっていたやつを簡単に紹介します。

2年前のLSS2023の技術的なお話はこちら

ミラー配信方式への変更

とか言っているがオンラインRTAイベントではむしろ昔からミラー配信が一般的なのだが、LSSは運営の負担を抑える(実際に抑えれているかどうかは諸説あり)ために走者にストリームキーを配布して各自直接配信してもらうという形をとっていた。しかしこの方式は作品切り替え時に視聴環境によっては手動で更新をかける必要があったり、LSS2024途中からプレロール広告が表示されるようになったりしたため、LSS2025では重い腰を上げてミラー配信方式に切り替えることとした。配信構成図は下記の通り。並走でない限りミラー配信側で音量調整を行わない点がいびつな感がある。

LSS2025の配信構成図

走者への広告設定依頼のあれやこれやがめんどいので、バテン100%走者のポケットマネーによってLSSアカウントでTwitch Turboに加入してもらった上でOBSのブラウザソース上でLSSアカウントにログインし走者のTwitch配信をミラー配信した。Turbo加入によって配信録画の保存期間1週間が1ヶ月に伸びたのは地味に助かった。

走者のSRT配信をOBS-to-OBSでミラー配信PCが受け取る手段も候補として考えていたが、以下の理由から不採用とした。

  • (クロム神曰く)当日調整が必要な人がそこそこいたりSRT不可能な人もいる
  • 通常のOBSではパケロスやRTTを確認できない
  • 第三者が簡単に走者の配信を確認できない

安定した長時間配信のために

ミラー配信は全て我が家のDell G15 5530で配信していた。回線はeonetの1Gbpsプランで通信量制限は5TB/月。さすがにこの長期間ともなると通信量制限も気にしないといけない。期間中の通信量は2~2.5TBくらいだった。配信の映像ビットレート設定は720pの4.5Mbpsだが、視聴者の画質選択のためにマルチトラックビデオを有効にしたため合計では6Mbpsくらい。

PCを休ませるため以下の区間はミラー配信PCを使わなかった。録画再配信は自分以外の運営が、超長時間のポケダンとバテン100%は走者自身が直接配信した。

  • 録画再配信
  • ポケモン不思議のダンジョン 空の探検隊
  • バテン・カイトス

家庭内LANはWi-Fi 6の5GHz帯で、親機はI-O DATA WN-DAX5400QR、配信PCの子機はインテルWi-Fi 6 AX200。余談だが、電子レンジを動かすと高確率でネットが切断される00年代から無線LANを使っている老の者としては、無線でもこれだけ配信が安定しているのを見るとつくづく技術の進歩を感じる。閑話休題。

ミラー配信テスト中、Twitch配信受信のバッファリング発生時にバッファリングが10秒ほども続いた。そのため親機と子機の設定を見直したところ、子機のMIMO 省電力モード設定を「自動SMPS」から「SMPSなし」に変更することによってバッファリング時間が1秒程度にまで改善できた。

ミラー配信テスト中にはまた、Windown 11バージョン24H2でOBSを最小化するとブラウザソースの音声にノイズが乗る不具合に遭遇したため工場出荷時の23H2に戻し、この辺を参考にして24H2に更新されないようにしていた。なおこの不具合は既にOBS Studio 31.1で修正されたハズ。そのうちもとに戻さなきゃね。

運営メンバーによる配信PCの操作に使ったのはおなじみのParsec。作品切り替え時やなにかトラブルのあったときなど、操作が必要になったときだけ接続していた。Parsecはたまにメンテナンスが発生し利用できなくなるのでDiscordサーバーのnewsチャンネルや公式サイトのNoticesページで期間中のメンテナンス情報をチェックするといい。もしParsecメンテナンス発生などでミラー配信がトラブったときは従来の直接配信方式に切り替える予定だった。LSS2025の期間中メンテがなくてよかったね!

Twitchエラー画面/バッファリングからの自動復旧

なにぶん長期間かつオールナイトの配信なので、深夜帯などで運営が多少目を離してもいいよう、#2000,#3000エラーや長時間続くバッファリングが発生しても自動復旧する仕組みは必須だと考えていた。

#2000,#3000エラーに対しては、高機能シーンスイッチャープラグインの画像認識機能によってエラー画面を検出することで自動更新がかかるようにした。バッファリングに対しては、バッファリング発生時に表示されるスピナーの表示をカスタムCSSで弄ることで画像認識を可能とし、バッファリングが3秒以上続くと自動更新がかかるようにしていた。

バッファリング自動復旧マクロ

マクロの動作テストのために送信側で配信のバッファリングを意図的に起こす方法はいろいろ調べたが、clumsyを使うのが一番楽だった。

Twitch配信のブラウザソースの高さを長めにとると、マウスカーソルを重ねたとき画面上下に表示されるテロップが配信画面に重ならない。

チャット欄の表示

今年2月、界隈(界隈とは?)に寝耳に水の衝撃が走った4月からのTwitchダイジェスト100時間制限の導入。これにより自チャンネルのダイジェストのYouTubeエクスポートをがんばったRTAプレイヤーはそこそこいるはずだ。筆者もその一人である。

LSSはもともとYouTubeチャンネルにほぼ全ての動画をエクスポートしていたのでそこは問題なかったが、ダイジェストに付属するチャットを残せなくなってしまった。けどいただいたチャットはなんとかして残したいよねということで、LSS2025からは配信画面にチャット欄を表示して録画にハードコーディングすることによる解決を図った。

Twitchのチャット欄表示に使えるいわゆるChat Widgetはいくつかあれど、1000人以上視聴するイベントのチャットモデレーションを考えると「遅延表示に対応」かつ「チャット削除の痕跡が残らない」のがマスト。OBSのブラウザソースとして使えるものを筆者が試した限りでは、これらを両方満たすのはfChatStreamElementsの2点だった。より安定しているのは配信機能拡張系サービス大手のStreamElementsだろうということでStreamElementsのChat Widgetを採用した(なんか今確認したらfChatのサーバー繋がらないね)。ちなみにこれまた大手のStreamlabsのは遅延表示には対応しているものの削除の痕跡が思いっきり見えるのでだめだった。

カスタムCSSでフォントとEmoteの大きさのバランスを調整したり、バッジを消したり、単走と並走で横幅が変わるので横幅の固定化を解除したりした。

もし盛大に荒れたときはTwitchDownloaderのチャットレンダリング機能で作った動画で上書きする予定だったが、幸いその出番はなかった。

過去配信のチャットのYouTube字幕化

なおLSS2024までのTwitchチャットは、TwitchDownloaderを使ってJSON形式でダウンロードし、TwitchChatToSubtitlesUIでSRT形式の字幕に変換し、YouTubeの字幕としてアップロードすることで、どうにかこうにかYouTubeで字幕として閲覧できるようにした。

チャットの重複を削除したり、連結したり、一部の区間を削除したい場合は自分でスクリプトを書いてなんとかした。

TwitchChatToSubtitlesUIの出力設定

よりTwitchチャットに寄せた字幕を出力できるスクリプトもあったが、試したところうまくいかなかった。今見るとなんかコメント欄に新しいやつがあった。こいつはどうなのだろう?

なんとか楽して録画再配信したい

高機能シーンスイッチャープラグインのマクロでどうにかした。待機画面シーンでは5分以上待機するか再生予定時刻になると再放送シーンへ切り替え、再放送シーンでは録画の再生が終了すると次の待機画面シーンへ切り替え、を繰り返す。ひとつの録画につきふたつのマクロを設定しているためマクロがやたら多くなるが、録画と録画の間でしっかり待機画面に切り替えるにはこうしないといけなさそうな感じ。

録画再配信マクロ1

録画再配信マクロ2

解説者による音声切り替え

並走で解説者がゲーム音声を切り替える仕組みがあれば、解説者の意図するゲーム音声に最小のラグで切り替えることができ、しかも配信管理の仕事を減らせるのでなんとかならんかなーと思って高機能シーンスイッチャープラグインの機能一覧を眺めていた。するとTwitchのチャットをトリガーに設定できるのに気付いたため当初の予定にはなかったが並走用OBSに組み込んでみた。要求するTwitchアカウントのトークン権限は「ライブストリームのチャットメッセージを表示します」だけでok。

(ChForSwitch)チャンネルのモデレータが同チャンネルで「1」か「1」と発言するとトリガーされる設定

改善案としては、Discord OverlayのChat Widgetを高機能シーンスイッチャープラグインのOCR機能で読み取るようにすればDiscord内だけで完結するので次やるときはそうしてみたい。

おわりに

Twitch配信の自動復旧・チャット表示・録画再配信のサンプルのOBSパッケージはこちら。今回はマイクのフィルタや音声バランス調整に課題が残ったので、次はその辺をいい感じにやりたいと思ってます。


アドのカレも残りあと3日。明日は炒飯さんの記事です!

コメント

タイトルとURLをコピーしました