
一台服务器。多个音频输出。搭配Music Assistant的全屋音频系统。
本项目允许您运行单个中央服务器(如NAS、树莓派或任何Docker主机),连接多个USB DAC或音频设备,在整个家庭中创建独立的音频区域。无需购买昂贵的多房间音频硬件,只需将经济实惠的USB DAC连接到中央机器,即可向每个房间流式传输同步音频。
┌─────────────────────────────────────────────────────────────────┐ │ 中央服务器 (Docker主机) │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 多房间音频容器 │ │ │ │ │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ 播放器1 │ │ 播放器2 │ │ 播放器3 │ ... │ │ │ │ │ (厨房) │ │ (卧室) │ │ (露台) │ │ │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ └────────┼─────────────┼─────────────┼────────────────────┘ │ │ │ │ │ │ │ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ │ │ │USB DAC 1│ │USB DAC 2│ │声卡 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ └─────────────────────────────────────────────────────────────────┘
!多房间音频控制器 !Docker !Music Assistant !.NET 8 !Sendspin
/api/health可直接部署的镜像地址:https://hub.docker.com/r/chrisuthe/squeezelitemultiroom
| 标签 | 描述 | 使用场景 |
|---|---|---|
latest | 最新稳定版本 | 生产环境部署 |
X.Y.Z | 版本标记发布 | 固定版本部署 |
sha-XXXXX | 提交特定构建 | 测试环境 |
bashdocker run -d \ --name multiroom-audio \ --network host \ -p 8096:8096 \ --device /dev/snd:/dev/snd \ -v audio_config:/app/config \ ghcr.io/chrisuthe/multiroom-audio:latest
通过 http://localhost:8096 访问Web界面
yamlservices: multiroom-audio: image: ghcr.io/chrisuthe/multiroom-audio:latest container_name: multiroom-audio restart: unless-stopped network_mode: host ports: - "8096:8096" devices: - /dev/snd:/dev/snd volumes: - ./config:/app/config - ./logs:/app/logs # - /etc/asound.conf:/etc/asound.conf:ro # 可选:自定义ALSA配置 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8096/api/health"] interval: 30s timeout: 10s retries: 3
使用上述Docker run命令或Docker Compose配置部署容器。
导航至 http://your-host-ip:8096
| 变量 | 默认值 | 描述 |
|---|---|---|
WEB_PORT | 8096 | Web界面端口 |
LOG_LEVEL | info | 日志详细程度(debug, info, warning, error) |
CONFIG_PATH | /app/config | 配置文件目录 |
LOG_PATH | /app/logs | 日志文件目录 |
yamlvolumes: - ./config:/app/config # 播放器配置文件 - ./logs:/app/logs # 应用程序日志 - /etc/asound.conf:/etc/asound.conf # 仅在需要访问软件定义设备时需要
yamldevices: - /dev/snd:/dev/snd # 所有音频设备(Linux系统)
如果您有自定义ALSA配置(虚拟设备、软件混音、多通道路由等),可挂载您的asound.conf文件使这些设备在容器内可用:
yamlvolumes: - ./config:/app/config - ./logs:/app/logs - /etc/asound.conf:/etc/asound.conf:ro # 自定义ALSA配置
这在以下场景中很有用:
容器重启后,您的自定义ALSA设备将出现在设备列表中。
完整API文档可在 http://localhost:8096/docs(Swagger UI)查看。
bash# 列出所有播放器 curl http://localhost:8096/api/players # 创建Sendspin播放器 curl -X POST http://localhost:8096/api/players \ -H "Content-Type: application/json" \ -d '{"name": "厨房", "device": "0"}' # 设置音量 curl -X PUT http://localhost:8096/api/players/厨房/volume \ -H "Content-Type: application/json" \ -d '{"volume": 75}' # 启动/停止播放器 curl -X POST http://localhost:8096/api/players/厨房/restart curl -X POST http://localhost:8096/api/players/厨房/stop # 健康检查 curl http://localhost:8096/api/health
Linux系统:确保音频设备可访问
bash# 检查可用设备 aplay -l # 验证设备权限 ls -la /dev/snd/
检查音频设备可用性:
bashdocker exec multiroom-audio ls /dev/snd
使用空设备测试:创建设备为null的播放器进行测试
查看日志:
bashdocker logs multiroom-audio
| 组件 | 技术 |
|---|---|
| 运行时 | .NET 8.0 / ASP.NET Core |
| 音频协议 | Sendspin via SendSpin.SDK 2.0 |
| 音频输出 | PortAudio via PortAudioSharp2 |
| 实时更新 | SignalR |
| 配置 | YAML via YamlDotNet |
| API文档 | Swagger/OpenAPI |
许可:MIT许可 - 详见LICENSE文件
致谢:
详细许可信息,请参见LICENSES.md。
本项目在AI(Anthropic的Claude)的协助下通过Claude Code开发。人类提供指导、审查输出并做出决策,但实现过程是AI辅助的。
将您的空间转变为互联音频体验
基于.NET 8.0为开源社区构建
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务