11月8日から、群馬県嬬恋村、標高1,444mの山の仕事場「嬬恋牧場Work&Camp」のデッキのカメラを、YouTubeで24時間ライブ配信しています。浅間山と谷と、手前のフィールドが映ります。初日の夜、映像が止まりがちになりました。
配信はこちら → youtube.com/@tsumagoicamp/live

仕組み
デッキの屋外カメラ(Tapo C530WS)と、それを読んでYouTubeへ送るIntel NUCが1台。NUCはWi-Fiだけでつないでいます。映像はffmpegが1本。そのまわりの小さなPythonの監督役が、再起動し、速さを測り、状態をファイルに書きます。それを牧場モニターが読むので、配信が止まればいつも見ている画面に出ます。
止まった順に
配信が勝手に終わる
最初はYouTubeの「今すぐ配信」を使っていました。配信プログラムが再起動するたびにYouTubeの配信が終わり、リンクも視聴時間も消えました。最初の1時間で4回です。専用のキーで「予約配信」にし、自動終了を切ったら直りました。再接続しても、同じ配信が続きます。
PCが追いつかない
最初の版は、文字を描くために1080pのコマを1枚ずつGPUから降ろし、また戻していました。ほかに何も動いていなければ実時間の1.25倍。PCが忙しくなると遅れ、コマがスワップまでたまり、YouTube側で4分のあいだに2回切れました。
次に、デコード、切り抜き、縮小、色、エンコードまで、映像をGPUに置いたままにしました。文字のある帯だけをCPUに降ろして描き、上に重ね直していました。これで毎秒25コマは保てましたが、帯が3本になった11月9日の朝も、ffmpegはCPU 1コアの約70%を使っていました。
いまは何も降ろしません。文字のパネルを1枚ずつ小さな透明のキャンバスに描き、GPUの上で映像に重ねています(overlay_vaapiが透明度を保ってくれます)。ffmpegが使うのは1コアの約31%で、毎秒25コマを実時間で回しています。

夜に遅れる
暗くなるとカメラは赤外線に切り替わり、1秒に12〜16コマほどしか送ってきません。それでも時刻は25コマ分ついています。カメラの時計のままだと配信は0.7倍速ほどになり、ビットレートも落ち、見ている人の画面はくるくる回るだけでした。
いまは届いたコマにその場の時刻を打ち、エンコードの直前で毎秒25コマにそろえています。夜の回線はルーターの先で5%ほどパケットが落ちていたので、NUCの輻輳制御をBBRにし、ビットレートを4,500kbit/sに下げました。その夜のYouTube Studioの表示は「Excellent」のままでした。

無音で止まる
YouTubeのライブには音声トラックが要ります。カメラのマイクの音は流しません。よくて風の音、悪ければお客さまの声がのるからです。いちばん手こずったのが無音でした。別の入力として作った無音は映像とずれて、音だけ止まったまま映像が進み、あとでまとめて流れ、Studioに「映像が十分に届いていない」と言われました。フィルタの中で作った無音は約94秒ごとに止まり、送り出しを厳密にそろえる設定を足すと0kbpsで固まりました。
効いたのは、カメラ自身の音声トラックを「時計」としてだけ借りることでした。サンプルはゼロにしてから、入力を一切読まない式でつくった風の音(ブラウンノイズ、ゆっくりした突風、40〜900Hz)に置き換えます。マイクの音が出ていく経路はありません。
再起動は、見ている全員の問題
再起動は数秒の空白になり、見ている全員の画面が止まります。だから本番ではいじらず、変更はまとめて入れます。自動の再起動はメモリの見張り役の1つだけ(2時間半に1回ほど)で、それも同じ配信の中で済みます。
開いたままにしたくなる画面
同じものが回るだけの山の映像は、1時間もすると作り物に見えてきます。だから画面には、いま本当のことを載せています。
- 施設の気象計の気温・風・湿度・気圧を1分ごとに。30分より古い数字は出しません。
- 日の出から日の入りまで光がたまっていく金色のバー。
- カメラは1分ごとに少しずつ向きを変え、向きと次に動くまでの秒数が出ます。
- サイトでおなじみの仙人けんじが、1分にひと言打ちます。地元の豆知識、なぞなぞ(答えは3分後)、おみくじ、「集中25分」「5分休憩」の合図。書きためた200以上の台詞と80のなぞなぞ・クイズに、いまの数字からつくる台詞。24時間、同じ言葉は出ません。
- 台詞はまず日本語で。英語版がある台詞は、続けて同じ内容を空色の英語で打ちます。
- 空で何かあると、金色の帯で知らせます。施設の気象計で見たその季節の初霜、気象庁が浅間山について出した情報(気象庁の言葉のまま)、大きな磁気嵐、流星群の極大。
仙人の台詞には、画面に見える山の話(出典のあるデータから)や、ときどきそこで草を食む牛の話もあります。


仙人の文字は、以前は打っている途中で入れ替わって跳ねました。いまは配信の時計で次の1分の区切りから打ちはじめ、4秒ほどで打ち終わり、次まで動かしません。
ライブチャットで !おみくじ と打つと、1分以内に仙人が名前を呼んで、運勢を画面で読み上げます。1人1日1回です。名前は安全な16文字までに整え、YouTubeのIDはハッシュでしか残さず、記録は1週間で消えます。
11月9日からは、チャットの遊びも増えました。!予想 で今夜の最低気温を予想すると、朝7時に仙人が、施設の気象計の夜の最低気温にいちばん近かった人の名前を呼びます。!見る 1〜3 で3つの眺めのどれかに投票すると、カメラがそちらへゆっくり動き、3分とどまります。!おはよう は日の出のあと最初のひとりを記録します。!答え で仙人のなぞなぞに答えると、答えが出るときに最初の正解者の名前を呼びます。

プライバシー
画面は切り抜いていて、上から塗ってはいません。マイクの音は流しません。こちらでは録画せず、巻き戻しも切っています。撮影やイベント、お客さまに頼まれたときは、休憩画面に切り替えます。映る範囲のテントにはドットのマスクがありますが、いまは切っています。お客さまが映るところにいるときは、手で入れます。予約に合わせて自動で切り替える仕組みは、まだつくっていません。
配信は無料で見られます。