Shairport-Sync in Home Assistant
type
status
date
slug
summary
tags
category
icon
password
背景
之前一直是使用一个树莓派5+Shairport-Sync搭配小米的音箱来实现AirPlay,现在树莓派5安装了Home Assistant系统,没有办法简单的直接跑docker了,所以有了如下的折腾。
Add-on
HA的add-on实际上就是一个docker容器,但是限制非常多,没有办法直接挂载声卡(小米音箱)进去,就算采用
full_access:true
也会遇到和hassio_audio
抢声卡的问题。所以只能使用ha的audio能力来使用pulse播放音频。Pulse音量调节
小米音箱有自己的音量调节,在裸机上使用
shairport-sync
的时候,能够通过amixer来联动音量(即按键调节和软件调节的是同一个音量)。但现在通过pulse调节音量就无法与按键联动(即按键调节音量为60%,那软件音量就是在60%当作100%的基础上去调节)。所以,需要在
hassio_audio
容器内做相应的修改,修改配置文件件 /usr/share/pulseaudio/alsa-mixer/paths/analog-output.conf
shairport-sync音量调节
现在对于shairport来说,音频是从alsa-pulse来播放的,音量调节直接使用容器内唯一的mixer
但是这个mixer有一个严重的问题,没有db刻度,导致
shairport-sync
无法直接调节。想过很多办法,比如fake一个mixer来提供db刻度、修改pulse或者alsa的配置等等,都没有成功。
最终选择了修改
shairport-sync
的源码(包含add-on代码)。声卡占用
后面又发现ha的一个问题,小米音箱只要连上ha,就会处于播放状态,led灯一直在闪,而且小爱也很难唤醒。
发现还是
hassio_audio
的问题,需要加上一个pulse module,在/etc/pulse/system.pa
上加入如下片段,使其在不播放的5秒后释放占用。持久化hassio_audio
没有查到好的办法,发现
Advanced SSH & Web Terminal
这个add-on支持init脚本(即add-on启动时执行的脚本),就加上了脚本去修改hassio_audioLoading...