ICPC 2024 横浜大会 スタッフ参加記 中継班編

12月21日、22日に開催されたICPC 2024 Asia Yokohama Regionalにスタッフとして参加していました。

# これまでの活動
私自身は2019年に選手としてラストイヤーを迎え、2020年からJAGメンバーとして大会の補助を行っていたので、今年で5回目のスタッフです。最初の2年間はオンライン開催だったので、ZoomとYouTube Liveの配信のお手伝いをしていました。2年目の2021年も同様のことをやっていたのですが、この年から[開幕映像（Opening Movie）](https://www.youtube.com/watch?v=xrXUi3ixiNg)というものを作り始めました。（別に配信班の管轄として作っているわけではない気もしますが…）

この動画はAdobe After Effectsというソフトで作っています。<font color="#bbb">（もしもこういうモーショングラフィックスに興味があれば、[こちらのチャンネル](https://www.youtube.com/@PuttiMW)などがおすすめです）</font>
このオープニングの参考にした動画の一つに[渋ハル杯](https://www.youtube.com/watch?v=KZAtCaCaEnQ)という、APEX LEGENDSの大会の動画があるんですが、「3人で1チームって、実質ICPCじゃん」と思いながら、似たようなのを作りたいと思い始めました。本当は毎シーズンごとに作り込みを変えたい気持ちはあるのですが、今のところはチーム名とかを設定できる変数を用意し、エッセンシャルプロパティという機能でチーム名を流し込みつつチーム紹介パートを作っているので比較的楽に作っています。しかし、毎年のチーム数は変わりますし、尺の調整や長いチーム名の対応などで手間がかかっています。

[今年のオープニング映像はこちら](https://youtu.be/-WibTG5lF6c?si=d11xVsDFllb_NIVa)です。ぜひ再生・高評価・コメント・チャンネル登録をお願いします。

# 配信について
今年の実際の配信は、以下のように行いました。
<iframe width="560" height="315" src="https://www.youtube.com/embed/VagMm5tqDMk?si=ltKySVpep175EfAR" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

会場の小さな一室に、配信用のマシンやモニターを並べた技術卓と、実況者が喋ったり画面を見たりする実況卓を用意して行われました。
![20241222_112501.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188347/c80d114b-a4bf-48a2-3cd2-1bf278e90d55.jpeg)
配信機としてはMacBook Pro (M1 Pro)を使用して、直接カメラを接続し、OBSでミキシングしてYouTubeに送っていました。出演者のマイク用にオーディオインターフェースを用意し、OBSのモニター機能を使用してOBSに乗せる音の確認はオーディオインターフェースのヘッドホンから、実際のYouTubeに流れている音などはBluetoothイヤホンで確認していました。技術卓のOBSを映しているモニターは、HDMIスプリッタを使用して実況卓の1モニターにミラーリングしていました。またOBSのホットキー機能を使用して、F1キーでシーン1、F2でシーン2に切り替え、…を割り当て、無線キーボードを実況卓に置いておくことで実況卓側でOBSのシーン切り替えができるようにしました。<font color="#bbb">（途中で無線キーボードの調子が悪くなり、切り替えはすべて技術卓で行うようになりましたが…）</font>

準備は、day 0 は配信用のネットワークができていなかったので、配信用の小物を用意していました。
day 1 の午前中のモックコンテストで簡易的に動作確認をしたのち、配信部屋の準備。午後のリハーサルでシステムが動作することを確認しました。

# スクリーンキャストについて
ICPCの配信の特色として、選手の画面を見るスクリーンキャストが挙げられます。スクリーンキャストのこれまで技術的準備に関してはgusmachineさんのブログが詳しいです。
- [ICPC 2023 Asia Yokohama Regional スタッフ参加記録](https://gusmachine.dev/posts/2024/01/08/2024-01-08-icpc2023/)
- [ICPC 2023 Asia Yokohama Regional スクリーンキャストの構成について](https://gusmachine.dev/posts/2024/01/19/2024-01-19-icpc-screencast/)

オンラインからオンサイトに戻った2022年から、WFの放送のような中継でのスクリーンキャスト利用を模索していました。2022年、2023年では、スクリーンキャストはそこまで遅延を減らす必要はないなどの話や、WFの配信でも使われている [live-v3](https://github.com/icpc/live-v3) を動かすために相談しつつ、JAG模擬地区の裏でlive-v3とDOMjudgeの連携を確認するなどしていました。

2022年はそもそもスクリーンキャストしか行わない予定が、day 0になって会場で喋るスペースが設けられたということで急遽実況も行おうということになり、結構行き当たりばったりにパワーで準備をするような運用をしていました。この年のスクリーンキャストシステムは配信側で自由にセレクトできる仕様にはなっていたのですが、基本は自動巡回で配信に乗せていて、コンテストの後半に会場の実況席の準備ができたのでそこで少し使ってもらいました。

2023年はWFでも使用しているlive-v3をまともに扱えるようになったので実際に使用し始めたのですが、スクリーンキャストシステムの不具合や、live-v3経由で使用する際の不便な仕様などの関係であまり活躍できませんでした。

今年の大会ではlive-v3がHLSに対応したため、中継班側からは素直にlive-v3を使用することができ、解像度としては720pと多少低めでしたが、実際の実況でも活躍しました。

# live-v3
[live-v3](https://github.com/icpc/live-v3) は、ICPCなどの競技プログラミングコンテストの配信を便利にそれっぽく行うためのツールです。ICPCに限らず、IOI形式や、AtCoderのコンテスト形式にも対応しています。独自の順位表やジャッジキュー、各種チームの設定したメディアを切り替えて HTML で放送画面として組み立ててくれます。チームメディアとしては、Webカメラなどの動画ソースや、選手情報の画像などを設定でき、提出・AC状況などをまとめつつ表示することができます。Javaで書かれたServerを立ち上げて、ブラウザでadminパネルを操作し、画面を切り替えます。設定としては、`settings.json` というDOMjudgeなどジャッジへの接続情報を書くファイルと、`advanced.json` というチーム情報 (チーム紹介画像とかスクリーンキャストの URI など) その他を記述するファイルを用意すれば動きます。キューなどのウィジェットの位置は `widget_positions.json` をカスタムして変えることができます。

オフラインでテストをしたい際は、DOMjudgeなどでevent-feedというjsonを保存し、live-v3の起動時に指定すればシミュレートすることができます。私は年に1回しか使わないのですが、開発がそこそこに活発であるためなのか、毎年configファイルの書き方が微妙に変わり、毎回 config 修正をしている気がします。

# 会場内カメラ
ICPC公式放送の意義として、公式だからこそできることとしてコンテストエリアの中継があると思います。例年、1箇所ないし2箇所の定点からの固定カメラを設置し、会場の様子を配信で使用しています。

今年初めて、会場内の様子をリアルタイムに配信する手持ちカメラを中継で使用しました。リアルタイムの配信には [VDO.Ninja](VDO.Ninja) を内部ツールとして活用しています。これは拠点が離れた場所のカメラやPCの画面を、ブラウザを使用して超低遅延でリモートのOBSに配信することができるWebサービスです。固定カメラでは、ミラーレスカメラをPCにつなぎ、VDO.Ninja を使用して配信マシンのOBSに送っています。手持ちカメラは、スマートフォンでVDO.Ninjaに接続し、会場内のWi-Fiでカメラの映像をそのまま送っており、シンプルな構成でリアルタイム配信しています。スマホをそのまま使用すると手ブレが大変なので、スマホ用ジンバルを使用して撮影しました。手持ちカメラを持っている人には、適当な通話アプリをイヤホンで使用してもらいながらコミュニケーションしてもらっていました。

本当はWFのように、各選手PCにWebカメラを設置してその映像を使用するのもやりたいところですが、お金と労力の問題でできていません。手持ちカメラも、移動の手間があるので提出に合わせて選手を映しに行くなどはできず、ジンバルがそこそこ重いのでずっと同じ人が続けるのは大変という問題はありますが、固定カメラよりはずっと良さそうなので、しばらくは手持ちカメラの運用を頑張るという方向性になりそうです。

# 閉会式
2024年の閉会式は、産貿ホール9階のホールで行われました。コンテスト終了15分前に放送を一時中断し、休憩時間中に機材を運び込み放送しました。今年はホールのスタッフからマイクなどの音声をまとめたXLR出力をもらえたので、そのままオーディオインターフェースに取り込んで流しました。PC画面の取り込みに関しては、スタッフ・審判団のPCでVDO.Ninjaで共有してもらう手もありましたが、PCが複数台あり手間だったため、HDMIスプリッターとHDMIキャプチャを使用しました。ここでの注意点として、Macで画面を出力しようとした場合、デフォルトでHDCPという保護信号が送られるため、HDCPを無効化できるスプリッターやキャプチャーでないと画面が取れません。事前にスタッフの使用するPCは確認できたのですが、スポンサー様の使用するPCを失念していたため、Macで流そうとしたときに少しトラブってしまいました。来年に向けてこの問題を反省していきたいと思います。

閉会式は片付けの都合などもあり、ワンオペで配信とカメラを行っていました。なのでカメラのシューにiPadを吸着できるアタッチメントを接続し、ミキシングをしているMacの画面をiPadに映すことで配信状況の確認やシーン切り替えを、カメラを操作しながら行いました。

# おわりに
スタッフ参加記と言いつつ、備忘録を兼ねた中継班の裏側といった感じの内容でした。配信の内容やオペレーションに関しては細かいところが詰められていなかったりしますが、コンテンツとしては現在の我々ができるところまでは完成しつつあるのかなと思いました。

これまでの反省を活かし、まだまだ改善できるところもあるとは思いますが、横浜大会の中継をスケールするにはもう少し人手が限界かもしれません。YouTube配信や放送部などでカメラやOBSの知見があり、ICPC大会中継に興味があるという方はぜひ↓にご応募ください。
https://jag-icpc.org/?Join

（配信技術の知識がなくても、配信のお手伝いをすることはありますので、JAGスタッフとしての仕事の傍ら、配信のお願いをすることもあります）


最後に、今回のICPC 2024 Asia Yokohama Regionalに参加された選手の皆さん、お疲れさまでした。また、配信を手伝ってくれた出演者の皆さま、会場スタッフの皆さま、本当にありがとうございました。皆さんの協力があってこそ、無事に大会を開催し、配信することができました。今後とも引き続きよろしくお願いします。

皆さまお疲れさまでした。また次回の大会でお会いしましょう。