前提
- ラズパイ3B+にKodiをインストールして使っている
- KodiはオープンソースのメディアプレーヤーOS
- ここに動画とか音楽を入れとくと同じLAN配下のテレビとかで再生できたりする
- ようはAndroidTVをデジタルフォトフレーム化できる
- 再生機は主に(ネットワーク越しの)テレビなので、ラズパイ本体のHDMI出力は利用していない
問題発生
- ラズパイのストレージ容量がカツカツになる事態発生
- 見ると /home/osmc/.kodi/temp にあるログファイルがめっちゃ容量食ってる
- ログファイルは2つあって、それぞれ4.5GiBと2GiBだった
- しかも毎秒2KiBぐらいずつ増えてる
- 32GiBのストレージしかつけてないラズパイでこれは厳しい
ファイルはこんな感じ。前回起動時と今回起動中の2つがローテーションされているっぽい。
osmc@osmc:~/.kodi/temp$ ll kodi* -rw-r--r-- 1 osmc osmc 4852561425 Aug 06 18:22 kodi.log -rw-r--r-- 1 osmc osmc 2105929839 Jun 29 22:59 kodi.old.log
ログの中身を読む
以下が実際のログファイルの中身。こんな感じのが数秒おきにぞくぞくと生成されていた。
2023-08-06 16:41:51.583 T:722 INFO: CActiveAESink::OpenSink - initialize sink 2023-08-06 16:41:51.585 T:722 INFO : CAESinkALSA::Initialize - Attempting to open device "@" 2023-08-06 16:41:51.597 T:722 INFO : CAESinkALSA - Unable to open device "sysdefault" for playback 2023-08-06 16:41:51.600 T:722 INFO : CAESinkALSA - Unable to open device "default" for playback 2023-08-06 16:41:51.600 T:722 INFO : CAESinkALSA - Unable to open device "front" for playback 2023-08-06 16:41:51.601 T:722 ERROR : CAESinkALSA::Initialize - failed to initialize device "@" 2023-08-06 16:41:51.603 T:722 ERROR : CActiveAESink::OpenSink - no sink was returned 2023-08-06 16:41:51.604 T:721 ERROR : ActiveAE::InitSink - returned error
ActiveAEはKodiのオーディオエンジンのことで、Sinkとはデータの転送先であるオーディオデバイス、先頭のCはC++を表しているらしい。ALSAはAdvanced Linux Sound Architectureである。
雑に読んだ感じ、どうもオーディオデバイスを掴もうとしては失敗し続けているらしい。
Kodiのオーディオデバイス設定画面を見る
Kodiの設定画面を見に行くと、利用できるサウンド出力は以下のような感じだった。
いくつか選べるように見えるが、よくよく見てみると全部HDMI経由のサウンド出力である。
この時はラズパイ本体のHDMI出力にモニターを繋いで設定画面を見ているが、普段の運用ではHDMIには何も刺さっていない。
すると有効なオーディオ出力先は1つも存在しないことになり、問題のエラーが出まくることになる。
効果のなかった対策
ラズパイには hdmi_force_hotplug=1 という設定が存在する。
これは「HDMIコネクタにモニターが接続されないまま起動しても、内部では常時画面描画しておき、後からHDMI接続することで即映像表示できるようにする」という意味のオプション。VNCでたまにデスクトップ見るみたいな用途で有用らしい。
これを使えば「モニターなしで起動してもHDMI出力が有効」みたいな感じになるので問題を解決できると踏んだが、実際はなにも改善しなかった。
ちなみに設定方法だが、Kodiの設定画面からMyOSMCを開き、サークルメニューでPi Configを選ぶ。
そしてDisplayカテゴリのhdmi_force_hotplugを有効にする。
最後にOKで閉じて、ラズパイ本体を再起動する。しかし繰り返しになるがこの方法では問題は解決しなかった。
あれ、3.5mmアナログオーディオは?
一通り試してはたと気づいたのだが、ラズパイには元々本体に3.5mmのアナログオーディオ出力ジャックが備わっている。
3.5mmというのは有線イヤホンとかを差し込める、スマホとかでも普遍的に見る音声出力コネクタのことだ。なぜアナログ出力デバイスが設定画面に表示されていないのだろう?
実はコネクタに何か差しているときだけ選べるのかな? とか勘ぐって色々試してみたが、接続機器の変更ではオーディオ出力デバイス一覧の内容は変化しないことがわかっただけだった。
解決方法
「Kodiでアナログオーディオが一覧に出ない~~」的なキーワードであれこれググったらドンピシャのスレッドを発見した。
https://discourse.osmc.tv/t/no-3-5mm-analogue-audio-output-option-since-latest-update-pi-3b/90049
なるほど設定ファイルをいじればいいらしい。というわけで sudo vi /boot/config-user.txt する。
hdmi_force_hotplug=1 sdtv_aspect=1 start_x=1 # ここから追加 dtoverlay=pisound dtparam=audio=on
さっき設定した hdmi_force_hotplug=1 もこのファイルに書かれている。なぜオーディオ出力の設定だけPi ConfigのGUIに入れてくれなかったのか……。
大本の設定ファイルである /boot/config.txt の中身を確認して、以下の行の存在を確認(無ければ追加する)
[all] # 中略 include config-user.txt
問題解決
ラズパイ本体を再起動して設定画面を見ると、めでたくアナログ出力が選べるようになっていた。
bcm2835 Headphones が増えた |
HDMIケーブルを抜いて通常運用に戻し、ログの増え方を監視する。
osmc@osmc:~/.kodi/temp$ ll kodi* -rw-r--r-- 1 osmc osmc 87275 Aug 20 01:56 kodi.log -rw-r--r-- 1 osmc osmc 84419 Aug 20 00:39 kodi.old.log
1時間稼働して85KiBくらいなのでちゃんと直ってそう。
2023-08-19 23:54:30.843 T:1123 INFO <general>: CDVDAudioCodecFFmpeg::Open() Successful opened audio decoder mp3float 2023-08-19 23:54:31.015 T:1123 INFO <general>: AudioDecoder: File is queued 2023-08-19 23:54:31.030 T:1123 INFO <general>: PAPlayer::PrepareStream - Ready
↑イヤホン繋いでmp3再生してみたときのログ。エラー出さずに再生できている。
おまけ
ついでにこの問題のせい(たぶん)で肥大化したjournalログも消しておいた。
/var/log/journal/ をふっ飛ばしただけ。
コメント