Skip to main content
Glama

CastFabric 控制台总览

CastFabric 把手机、电脑和 AI Agent 发来的音频,统一送到局域网音响。手机继续使用 DLNA、AirPlay、妙播(MiPlay);AI 通过内嵌 MCP 播放 URL、本地文件或实时 PCM。 核心输出面向标准 UPnP/DLNA MediaRenderer,完全不依赖小米账号;小米云只保留为显式 启用的旧设备兼容扩展。

默认情况下,每台已启用音响会对应一组 CastFabric · <音响名称> 接收入口。不同音响 可以并行播放,同一音响内的协议会话由独立 Receiver Suite 协调,不存在“全局默认音响”。

为什么是 CastFabric

  • 多协议、同一出口:虚拟 DLNA、AirPlay、妙播最终都落到标准 DLNA 输出适配器。

  • 多音响、彼此隔离:每台输出音响拥有独立 Receiver Suite、会话、端口和活动记录。

  • 不绑定厂商账号:DLNA 扫描、发现与播放不受小米 token 或公网状态影响。

  • 让 AI 直接找到音响:同一服务的 /mcp 暴露发现、管理、播放与控制,无需部署 sidecar、第二个容器或额外端口。

  • 保留原生直投:实体音响自己的 DLNA 仍然存在,追求最低延迟时可以直接选择它。

  • 成功必须可验证:控制命令成功后,还要确认实体音响真的拉取 HTTP 音频流,才记录 输出已建立;“接受了命令但没有声音”会得到明确错误码。

  • 不猜测产品数据:控制台不根据 URL 猜发送 App,也不把解码耗时冒充端到端听感延迟。

  • 默认保护隐私:事件与诊断包会移除 URL 查询参数、凭据、完整 IPv4/IPv6 地址。

Related MCP server: sonos-ts-mcp

声路模型

手机 / 电脑 ── DLNA / AirPlay / 妙播 ──┐
                                      ├─▶ Receiver Suite(每台音响独立)─▶ DLNA 输出 ─▶ 实体音响
AI Agent ── MCP:URL / 文件 / 实时 PCM ┘

音响 A:DLNA + AirPlay + MiPlay + MCP ─▶ 输出 A
音响 B:DLNA + AirPlay + MiPlay + MCP ─▶ 输出 B

妙播当前声路为 AAC → 48 kHz 双声道 PCM → HTTP WAV/L16 → 实体 DLNA DMR。妙播接收端 基于公开资料和抓包行为独立实现,随 0.10 版本以预发布功能提供。

AI 与 MCP

CastFabric 0.11 在现有 Web 服务上直接提供 Streamable HTTP MCP:控制台地址若为 http://192.168.1.10:8300,MCP 地址就是 http://192.168.1.10:8300/mcp。它复用同一套 target_id、播放状态机和输出适配器,并非另一套播放服务。

当前提供 11 个原子工具:

  • 管理:系统状态、列出音响、扫描音响、启用/停用或重命名音响;

  • 播放:HTTP(S) URL、Agent 本地文件、s16le / 48 kHz / 双声道 实时 PCM;

  • 控制:查询状态、暂停、停止、设置音量。

仓库中的 CastFabric Agent Skill 进一步封装了文件上传、FFmpeg 实时转码和客户端侧的顺序/循环播放列表。MCP 保持轻量:CastFabric 不内置 TTS、媒体库 或服务器播放队列,Agent 负责生成或选择音频,CastFabric 只负责可靠地送到指定音响。

当前 MCP 面向可信局域网,尚未提供公网认证。不要把 /mcp 直接暴露到互联网。

延迟边界

  • 原生 DLNA 直投:在当前测试音箱上通常低于 1 秒,适合优先考虑响应速度的场景。

  • AirPlay / 妙播实时桥接:在当前测试音箱上听感约 4 秒。CastFabric 的 MiPlay 解码首帧 只需约 3–4 ms,音箱开始拉流并收到首批 PCM 约需 0.1 秒;剩余等待最符合实体 DMR 对 实时 HTTP 流进行固件预读的行为,无法由 CastFabric 通过标准 DLNA 控制指令关闭。

这不是所有音响都固定为 4 秒,但在新增原生或低延迟输出适配器之前,不承诺视频口型同步。 需要最低延迟时,请直接选择实体音响的 DLNA 入口。测试证据、已排除方案与后续 POC 见 实时桥接延迟边界

Docker 快速部署

SSDP 和 mDNS 依赖局域网组播,推荐在 Linux Home Server 上使用 host 网络:

git clone https://github.com/DjangoAILab/CastFabric.git
cd CastFabric
docker compose pull
docker compose up -d

打开 http://宿主机IP:8300,进入「连接配置」扫描并启用输出音响。标准 DLNA 音响不需要 登录小米账号。配置保存在 ./conf

多网卡或自动 IP 选择不正确时,在 .env 中指定局域网地址:

CASTFABRIC_HOSTNAME=192.168.1.10
CASTFABRIC_CONFIG_DIR=./conf

用途

默认端口

Web 控制台

8300/tcp

虚拟 DLNA 与媒体服务

8200/tcp

妙播控制起始端口

8899/tcp

SSDP / mDNS

host 网络中的 1900/udp5353/udp

也可以使用仓库中的非破坏式管理脚本:

./deploy.sh local       # 从当前源码构建
./deploy.sh pull        # 拉取已发布镜像
./manage.sh status
./manage.sh logs -f

控制台

  • 总览:在单屏内展示当前声路、可确认的发送端信息、协议与输出音响;多声路最多展示 三条,其余汇总,不因音响数量增加而破坏布局。

  • 音响:管理多台输出音响、接收入口名称、启停状态和每协议健康。

  • 活动:查看结构化会话与失败原因;诊断信息经过服务端脱敏。

  • AI 接入:复制当前实例的 MCP 地址、客户端配置与验证提示词;不会新增独立服务端口。

连接、播放偏好、端口和可选扩展集中在二级「连接配置」面板;界面支持中英文切换。

本地开发与验证

需要 Python 3.10+ 和 FFmpeg:

python3 -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[test]'
castfabric --conf-path conf
python -m pytest -q
castfabric-miplay self-test --duration 0.35
castfabric-miplay scan --timeout 5
castfabric-miplay simulate --target 192.168.1.20 --duration 1

当前发布门槛同时覆盖:单元/集成测试、Agent Skill 测试、MCP 冷启动、真实音响文件与 PCM 拉流、双实体 DMR 协议 POC、旧配置迁移与回滚读取、诊断隐私,以及 amd64/arm64 GHCR 构建。

迁移、架构与协议资料

兼容与开源

项目使用 MIT License。迁移期继续提供 miairopenxiaocastopenxiaocast-miplay 命令,以及 miair Python 包;已有 config.json、配置卷和虚拟设备 UDN 不会被主动删除或重新生成。

CastFabric 延续并感谢 MiAirXiaoMusicAirPlay2 ReceiverMacast 的既有工作。妙播部分没有直接引入许可证不明确的 第三方实现代码。

Maintenance

ActivityActive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DjangoAILab/CastFabric'

If you have feedback or need assistance with the MCP directory API, please join our Discord server