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_audio
 
Loading...

© XGFan 2012-2025