社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

别让 NAS 只当网盘!Docker 部署 AirPlay,秒变家庭音响中心

NASBox • 3 周前 • 116 次点击  
如有修改或改动,关注文章底部留言!
教程对你有用,可以 “点赞” 和 “打赏”支持 ~



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 




 

 

 

 




 

 

 

 

 



Shairport Sync:

一款开源 AirPlay 音频接收器,支持 AirPlay 1/2(部分功能),让你的 NAS 或树莓派秒变家庭音响中心,打造多房间同步播放的体验。

项目特点:

  • • 协议支持:既可以作为经典的 AirPlay 1 播放器,也能构建为 AirPlay 2 播放器(有一些限制)。
  • • 音质与格式:支持立体声和多声道(5.1、7.1),甚至可以播放无损 24-bit 立体声,采样率高达 48kHz。
  • • 元数据处理:可以获取并传递艺术家信息、专辑封面等元数据给其他应用。
  • • 接口扩展:支持 MQTT、MPRIS-like 接口和 D-Bus,用于与其他应用交互和远程控制。
  • • 局限性:仅支持音频,不支持 AirPlay 的视频或照片流。

安装

Docker Compose

services:
  airplay:
    image: mikebrady/shairport-sync:latest
    container_name: airplay
    network_mode: host
    volumes:
      - ./shairport-sync.conf:/etc/shairport-sync.conf
    devices:
      - /dev/snd
    group_add:
      - audio
    cap_add:
      - SYS_NICE
    restart: always

参数说明(更多参数建议去看文档)

:::
shairport-sync.conf(挂载文件):用于配置参数

/dev/snd(设备):挂载声卡设备

group_add(权限组,可选):添加 audio 权限

cap_add(进程调度,可选):提升进程的调度优先级

:::

配置

启动前先创建 shairport-sync.conf 配置文件,下面是一个基础模板,接下来将一个个说具体怎么配置

general = {
  name = "FNOS-Speaker";
  output_backend = "alsa";
};

alsa = {
  output_device = "plughw:1,0";
  output_format = "S16";
};

TIP:建议先安装 ALSA 工具包,方便查看声卡信息(如果懒得装,也可以使用通用兼容的参数)

# 安装 ALSA 工具包
apt update && apt install -y alsa-utils

# 查看所有音频设备
aplay -l

# 查看可用的 ALSA 控制接口
amixer -c 1 controls

# 查看声卡支持的采样格式
aplay -D plughw:1,0 --dump-hw-params /dev/zero 2>&1 | grep FORMAT

全局配置,其中 output_backend 是选择音频,操作声卡硬件默认选择 alsa 就行,兼容性比较好

general = {
  name = "DXP-Speaker"; # AirPlay设备名称
  output_backend = "alsa"; # 音频后端: alsa/pw/pa/jack
};

音频后端设置(下面会详细说,怎么填参数)

alsa = {
  output_device = "plughw:1,0"; # 指定声卡输出
  output_format = "S16"; # 音频位深格式
};

使用 SSH 工具连接设备,输入下面命令:

# 切换 root 权限
sudo -i

# 查看声卡级别(看有几张卡、编号和名字)
cat /proc/asound/cards

# 查看设备级别(看每张卡有几个 PCM 设备)
cat /proc/asound/pcm

这台设备有 3 张声卡,分别是:CPU 核显 HDMI/DP 通道、主板集成声卡、主板蜂鸣器。其中卡 1 就是需要的,如果不清楚,可以复制问 AI 就行

下面就是具体看每个卡下的 PCM 设备,01-00 就是需要用到的主板音频(耳机 / 音箱 / 麦克风),所以 output_device 填写是“plughw:1,0”

cat /proc/asound/cards

跟上面的对照关系
0 [HDMI]      →  00-03 / 00-07 / 00-08  (三个 HDMI 口)
1 [PCH]       →  01-00 / 01-02           (模拟口 + 备用)
2 [pcsp]      →  02-00                   (蜂鸣器)

至于 output_format 一般都是通用的填 S16 就行,也可以输入命令查看

aplay -D plughw:1,0 --dump-hw-params /dev/zero 2>&1 | grep FORMAT

使用

确认容器日志无报错后,在 iPhone/Mac 的控制中心点击音频投送,就能在列表里看到设备。

启动容器后查看日志,应该是没有警告或者报错的

下拉控制中心,点击投送就能看到接收器了

测试过 fnOS(笔记本)和 UGOS Pro(绿联全闪)两个系统都没问题,有扬声器就是扬声器播放,插上 3.5mm 音频也能正常出声

如果配置没有问题,容器日志也没报错,同时也可以正常找到设备,但就是没声音,大概率是声卡默认处于静音状态(比较常见情况)。可以安装 ALSA 工具包,通过 amixer 命令解除静音、调高音量,直接复制下面命令运行即可。

# 安装 alsa-utils
apt update && apt install -y alsa-utils

# 开音量+去静音
amixer -c 0 sset Master 100% unmute

总结

Shairport Sync 这款应用可以配置的参数还有很多,本教程只是将最基础的功能搭建起来。NTP 同步精度、解码后处理、多房间延迟对齐,这些高阶配置官方文档里都有。如果你的手里有闲置音箱/功放、又想给 iPhone 扩展一个无线音频出口的 NAS 用户,非常值得推荐!几十行配置让它重新上岗,性价比很高。

综合推荐: ⭐⭐⭐(吃灰设备重新上岗,AirPlay 生态无缝接入)

使用体验:⭐⭐⭐(部署不复杂,但需要跟着步骤)

部署难易:⭐⭐⭐(中规中矩)



 

 



 




 

 

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/199262