YouTube LiveのためのEmacs Lispを改良する
僕は時々、YouTube Liveでゲーム配信をしている。配信する際には OBS
を使っていたが、どうも動作が重い。元々、使っているPCのスペックがそれほど高くないため、なんとか設定で改善できないかと、いろいろ試してはみたが上手くいかなかった。そこでffmpegを使って、YouTube Liveをするという方向に切り替えた。中身は対した事ない ffmpeg
のラッパーだ。しかし、こういう風にする事で配信と僕の距離は近くなる。この心の距離の近さをこれからも大切にしたい。
ffmpegには元々AVFoundation経由でスクリーンの情報を取得でき、またRTMPSでデータを転送する事もできる。特定の画面のみをキャプチャする事は難しそうだったが、画面全体を配信するだけならffmpegでじゅうぶんだ。
前回ffmpegを使って配信を試してみた所、配信自体はできたけれどいろいろとマズい所も判明した。特にマズかった所は配信開始直後にCLIの画面が少し映るのだが、そこにffmpegのコマンドも映り込んでいた。YouTube LiveのAPIキーはRTMPのURLの中に付いているから、APIキーが映像として配信されてしまう。
コマンドはEmacsの async-shell-command
で起動していたが、それによってffmpegの標準入出力のあるバッファが、カレントバッファとしてポップアップしてしまう。これが問題だった。そこで今回は、ffmpegが完全に裏で実行されるよう、 start-process
を使って実装しなおす事にした。また、ちょうど同じ時期に作業PCの入れ替えも行っていた。そのため、ffmpegやEmacsの権限に関連する修正も行った。
まず、新しいPCにHomebrewを使いffmpegをインストールする。
brew install ffmpeg
そして前回使ったコマンドを実行する。しかし、ここで前回とは異なりffmpegが異常終了した。
ffmpeg -f avfoundation -r 30 -s 1920x1080 -i '1:0' -f flv 'rtmps://a.rtmp.youtube.com/live2/APIキー'
この問題の解消にハマった。しかし、以前使っていたPCでは普通にできていた。よくよく考えると、以前EmacsのmacOSでの権限付与を行っていた。そこで以前のブログを漁りmacOSにインストールしたEmacsからマイクにアクセスするに辿り付いた。これを参考にしながら、マイクと、画面収録の権限を付与するためEmacsのInfo.plistを手で編集した。
そして、macOSの環境設定の「プライバシーとセキュリティ」の項目でマイクと、画面収録の権限の付与を行った。マイクの権限付与は、マイクにアクセスしないと項目が出なかった。今回はsoxを使ってマイクへのアクセスを行った。
brew install sox
sox -d testing.wav
これでマイクへのアクセスを許可する項目が表示された。
あとは、Emacs Lispの実装を、 start-process
を修正した。修正したものを掲載する。これで来週から心置き無く配信できそうだ。