3/20(日)にAlgorave 10th Birthday Partyで10分間パフォーマンスしたのでその記録。

当日のアーカイブとソースコードは以下。

登録からパフォーマンスまで

登録からパフォーマンス終了までは以下の流れだった。

  • 登録するとRTMP認証キーと諸々の情報がメールで送られてくる。
  • Instractionsのドキュメントが用意されており、それに従ってOBSでの設定とテストを促される。
    • メールを受け取った日にはテストできなかったので、再度メールが来て催促された。(そしてテスト接続すると「ありがとう」的なメールが来ていた気がする)
  • RTMPサーバーはテスト用と本番用がある。本番用は自分のスロットの10分前にならないと接続できない。
  • 自分のスロットの開始10分前にメールがあり、本番用RTMPに接続して待機するよう促される。
  • 自分のスロットの開始時間になるとRTMPサーバー側から切断され再接続する。再接続が成功したらパフォーマンス開始。
  • 終了時間間際になると、RTMPサーバー側から「切断するよ」的なメッセージが送られ、しばらくすると切断される。パフォーマンス終了。

Algoraveは5周年イベントくらいからこの形式で配信イベントをやっているので、とても洗練されている印象を受けた。

OBSまわり

私自身、OBSでの配信は今回が初めてだったので学ぶところが多かった。上記のInstractionsが丁寧で助かった。やったこととしては以下である。

  • テスト用のプロファイルを作る。
  • テストする。
  • テスト用のプロファイルをduplicateし、本番用のプロファイルを作成する。
  • 本番用のプロファイルで、SettingsのStream -> ServerのURIを本番のものにする。
  • 本番用のRTMPサーバーに接続する。

当初、Profile毎にSettingsを持っていることを理解していなかったので、本番10分前にウィザードからプロファイルを再作成するものだと思っていた。2日前くらいにこれが誤りだと気がついて助かった。

その他、主に私の環境依存の細かい点は以下。

  • 最終的に作成した設定
    • Encoder: x264
    • Video bitrate: 1500(CBR)
    • Audio bitrate: 320
    • FPS: 15
    • Base Resolution: 1366x768
    • Output Resolution: 853x480
  • ウィザードで作成したものから変更した点
    • Output -> Output Mode: Simple → Advanced
      • 以下を変更できるようになる
    • Output -> Streaming -> bitrate: 2500 → 1500
      • Rate ControlはCBRのまま
    • Output -> Audio -> Track1 Audio bitrate: 160 → 320
    • Video -> FPS: 30 (Common Value) → 15 (Integer FPS Value)
  • TextやImageをオーバーレイできるが、ちょっとしたテキストを追加しただけでもEncodingの負荷は目に見えて高くなる(その分FPSを落とす等の対応が必要だった)
  • Imageの透過は、Blending Mode -> Additive
  • x264のソフトエンコーダとSonic Piの組合せはどちらもCPUバウンドで、OBS側で高品質な設定をするとSonic Pi側でThread deathが発生してしまう
  • テスト接続をしていく中で音量が小さいことがあったが、OBSの設定や回線の問題と言うより、OBSへの入力(Soundflower)の問題だったようである。(原因・解決方法は不明のまま)[2022-06-02追記] やはりSoundflowerの問題だったようで、メニューバーの音量を弄る(一度小さくしてから最大にする等)と解消されるようである。
  • 本番での回線の構成は以下の組合せに落ち着いた。
    • 配信用マシン: 固定回線と有線LAN, モニタ: モバイル回線とiPhone上のブラウザ
    • 以下のような構成はNGだった。
      • 配信用マシン: 固定回線と無線LAN, モニタ: 固定回線と無線LAN、PC上のブラウザ
        • 前日に試した構成、頻繁に切断された
      • 配信用マシン: 固定回線と有線LAN, モニタ: モバイル回線とUSBテザリング、PC上のブラウザ
        • テザリングでPCから見てたが、これも不安定だった
    • 本番中は家族にも協力してもらって、モバイル回線を使うようにしてもらった。
  • “videoで500、audioで128でも(複雑なビジュアルを表示せずコードを表示するだけなら)十分なクオリティだ”とAlexが言っていたのが印象的だった。今後の参考になった。
  • 配信と同時に録画してる方も居て、マシンスペックが良ければ自分も試してみたい。

その他

  • RTMPサーバーはおそらく自前でnginx+owncastを立てていて、ときどき自前でメンテしてたようだ。
  • 他にも「誰がパフォーマンス中か」を示すhtmlをAlexが作って公開してた。
  • “Test early, test often”ということだったので、私自身は3/16から毎日テストサーバーへの接続を確認した。
  • Discordに今回のイベントのチャネルがあって、Alexは精力的かつフレンドリーにサポートしてたのが印象的だった。
  • すっかり忘れてしまったオープンソースコミュニティの感覚を思い起こさせる良いイベントだった。Alexを始め運営の皆さんに感謝!