NymphCast 介绍与选型指南
说清 NymphCast 是什么、receiver/sender 双端架构如何工作、生态组件有哪些,并给出与 Chromecast/AirPlay/DLNA 等主流投屏方案的量化选型对比。已在 Ubuntu 24.04(x86_64)实测源码编译、接收端启动、客户端发现与推流全流程。
NymphCast 介绍与选型指南
目标:说清 NymphCast 是什么、receiver/sender 双端架构如何工作、生态组件有哪些,并给出与 Chromecast/AirPlay/DLNA 等主流投屏方案的量化选型对比。已在 Ubuntu 24.04(x86_64)实测源码编译、接收端启动、客户端发现与推流全流程。
一、环境信息
本文结论基于以下资料来源与实测环境(信息查询日期均为 2026-10-29):
- 软件官方仓库:MayaPosch/NymphCast(GitHub)
- 实测版本:v0.2-alpha0(tag
v0.2-alpha0,commit3f50059,编译版本串v0.2-alpha0.20241108) - 实测系统:Ubuntu 24.04 LTS,x86_64,g++ 13.3.0,FFmpeg 6.1.1
- 实测内容:三仓库源码编译(NymphRPC → LibNymphCast → server/client)、接收端以 SDL dummy 音频驱动启动、
nymphcast_client跨机发现与 WAV/MP3 推流闭环 - 社区数据来源:GitHub 仓库页与 Releases 页(经 shields.io 徽章接口查询)、官方 README 与
doc/目录构建文档
⚠️ 版本说明:官方 README 明确"当前稳定版为 v0.1,v0.2 处于开发中"。最新发布的 Release 为 v0.2-alpha0(2024-11-09 发布,2025-04-23 更新资产),本文按该最新 Release 实测;追求保守稳定可选用 v0.1 线(2022-04-22 发布)。
二、软件概述
NymphCast 是一个把任意硬件变成"网络音视频播放终端"的开源自托管方案:在一台连接了电视或(有源)音箱的设备上运行 NymphCast Receiver(服务端),手机、电脑等客户端设备作为遥控器(sender),把本地文件或网络 URL 推送到接收端播放。定位上它是 Chromecast 的开源替代品,由开发者 Maya Posch(Nyanko 工作室)维护。
关键事实(实查于 2026-10-29):
| 项目 | 值 |
|---|---|
| 源码仓库 | https://github.com/MayaPosch/NymphCast |
| 开源协议 | BSD 3-Clause(完全开源) |
| GitHub 星数 | 2.6k(shields.io 实查) |
| 最新 Release | v0.2-alpha0(2024-11-09 发布) |
| 稳定线 | v0.1(2022-04-22 发布) |
| 主语言 | C++17 |
| 核心依赖 | NymphRPC、LibPoco、FFmpeg(libav,要求 v5.1+)、SDL2/SDL2_image、FreeImage、FreeType、RapidJSON、libcurl |
| 播放内核 | 基于 ffplay 移植的 ffplay_cpp(覆盖 FFmpeg 所支持的全部编解码器) |
| 扩展机制 | AngelScript 脚本应用(NymphCast Apps,预览状态) |
与 Chromecast 不同,NymphCast 不依赖厂商云服务与厂商账号:发现、会话、传输全部发生在局域网内,接收端硬件完全由用户自选(x86 小主机、树莓派、旧笔记本均可),这正是自托管场景选择它的核心理由。
三、核心架构
NymphCast 采用典型的"接收端 + 发送端"双端架构:
- Receiver(服务端,
nymphcast_server):运行在连接音箱/电视的目标设备上,等待客户端连接,接收推流数据并用内置 ffplay 播放内核解码输出。支持四种运行形态,由不同配置文件区分:- NymphCast Audio(纯音频接收,
nymphcast_audio_config.ini) - NymphCast Video(音视频接收,
nymphcast_video_config.ini) - NymphCast ScreenSaver(音视频 + 待机屏保图片,
nymphcast_screensaver_config.ini) - NymphCast GUI(Smart TV 独立图形界面模式,实验特性,基于 EmulationStation 移植)
- NymphCast Audio(纯音频接收,
- Sender(发送端):负责发现接收端、发起会话、推送媒体文件或 URL。形态包括 CLI 客户端(
nymphcast_client,随主仓库src/client发布)、Qt5 图形客户端 NymphCast Player(SDK 参考实现,覆盖 Android/Windows/Linux/BSD/Haiku)、以及第三方基于 LibNymphCast 的集成。
两端之间通过作者自研的 NymphRPC RPC 库通信:服务端监听 TCP 4004 端口承载控制会话与推流数据,同时监听 UDP 4004 端口响应客户端的广播发现;若安装了 Avahi/mDNS,接收端还会以 _nymphcast._tcp 服务类型注册(make install 会部署 avahi 服务定义文件),客户端可双通道发现。配套的 NymphCast MediaServer(NCMS) 再占用 TCP/UDP 4005 端口,为客户端提供局域网媒体库浏览。
💡 技术拓展:局域网设备发现不止 UDP 广播一种做法,常见三类——
发现机制 原理 代表方案 特点 UDP 广播探测 客户端向固定端口广播询问,服务端应答 NymphCast 默认(UDP 4004) 零依赖、实现简单;跨网段不可达 mDNS/DNS-SD(Avahi/Bonjour) 组播 224.0.0.251 注册服务类型 NymphCast 可选( _nymphcast._tcp)、AirPlay名称友好、可被 iOS/macOS 原生浏览 SSDP/UPnP HTTP over UDP 组播 239.255.255.250 DLNA、Chromecast v1 生态老、报文冗长、易被误报 NymphCast 实际同时支持前两类:默认 UDP 广播开箱即用,装了 Avahi 的 Linux 主机可通过
src/server/avahi/nymphcast.service注册 mDNS 服务。
数据面流程(实测路径):客户端 castFile 把媒体文件按块流式推给接收端(服务端默认维护 20 MB 内存缓冲,可配置),接收端交给 ffplay 播放内核解码,音频经 SDL2 输出到系统音频设备,视频经 SDL2 窗口输出;播放状态(开始/结束)通过回调实时通知客户端,客户端据此在播放结束后自动退出。
四、功能特性
以下特性状态表实查自官方 README(2026-10-29,v0.2-alpha0 时点):
稳定特性:
| 功能 | 完成度 | 说明 |
|---|---|---|
| 文件推流 | 100% | 客户端把本地媒体文件流式推送到接收端播放 |
| URL 推流 | 100% | 直接推送网络媒体地址(由接收端拉流播放) |
| MediaServer 接入 | 100% | 从局域网内 NymphCast MediaServer 实例浏览并播放 |
| 编解码支持 | 100% | 覆盖 FFmpeg 全部支持的音视频编解码器 |
| 字幕与音轨 | 75% | 支持内嵌位图字幕(如 PGS);文本/外挂字幕计划在 v0.2 完善 |
| 多房间同步 | 85% | 多接收端分组同步播放(v0.1 为实验性,v0.2 持续完善) |
实验特性:
| 功能 | 完成度 | 说明 |
|---|---|---|
| SmartTV GUI | 75% | 基于 EmulationStation 的独立图形界面模式 |
| NymphCast Apps | 25% | AngelScript 脚本应用,可在服务端扩展第三方流媒体协议(随包附带 HelloCast、SoundCloud 示例) |
| 本地媒体播放 | 25% | 接收端不经客户端直接播放本地媒体(v0.2-alpha0 起提供 INI 配置入口) |
从表格可见:作为"把音频推到局域网音箱"这一核心用途,NymphCast 已完全可用;视频、GUI、脚本应用属于进阶玩法,需接受 alpha 品质。
五、快速开始(最小可用示例)
本节给一条最短可用路径,完整安装过程(依赖、编译、systemd 托管)见 《Ubuntu 24.04 安装 NymphCast 0.2-alpha0 指南》;命令细节见 《NymphCast 0.2-alpha0 常用 CLI 命令与工具详解》。
1. 启动接收端(纯音频形态,无声卡/无桌面环境时用 SDL dummy 音频驱动验证链路):
export SDL_AUDIODRIVER=dummy # 无声卡环境用 dummy 驱动;接了音箱的真机可去掉
nymphcast_server -c /usr/local/etc/nymphcast/nymphcast_audio_config.ini \
-a /usr/local/share/nymphcast/apps/ -w /usr/local/share/nymphcast/wallpapers/
启动日志(实测):
Detected Host Little Endian.
Dispatcher: Setting max pool size to 10 workers.
Setting resource folder to default location.
Adding app: HelloCast
Adding app: SoundCloud
Initialising server...
Dispatcher: Setting max pool size to 10 workers.
2. 从另一台机器扫描发现接收端:
nymphcast_client -r
实测回显(nymphcast-build24 为接收端主机名,随主机名变化):
Detected Host Little Endian.
Dispatcher: Setting max pool size to 10 workers.
Dispatcher: Setting max pool size to 10 workers.
Scanning for online remote receivers...
Found remotes:
0. nymphcast-build24 <10.89.60.3:4004> ()
3. 推送一个音频文件(用 ffmpeg 生成的 30 秒 440Hz 正弦波):
ffmpeg -y -f lavfi -i 'sine=frequency=440:duration=30' -acodec pcm_s16le -ar 44100 -ac 2 /root/test_tone.wav
nymphcast_client -f /root/test_tone.wav -i 10.89.60.3
实测回显(节选):
Opening file /root/test_tone.wav
Opening file '/root/test_tone.wav'
Press Ctrl+c to quit.
接收端同步打印解码信息(实测):
Format WAV / WAVE (Waveform Audio), duration -9223372036854775808 usInput #0, wav, from '':
Duration: 00:00:30.00, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
Finding audio stream...
Found audio stream: 0.
播放完成后客户端自动退出(返回码 0)。至此"发现 → 连接 → 推流 → 解码播放 → 状态回调"闭环全部走通。
六、适用场景与限制
适用场景:
- 旧机改造网络音箱:树莓派、旧笔记本接有源音箱做局域网音乐终端,手机/电脑即推即播;官方 Releases 为树莓派系统(Buster/Bullseye)提供 armv6l 预编译包,演示视频即采用树莓派 2B + USB 网卡 + 2.1 音箱形态。
- 全屋多房间音频:多台接收端分组后由 NymphCast Player 做同步播放(多播特性)。
- 局域网媒体分发:配合 NymphCast MediaServer 把 NAS 上的媒体库暴露给各接收端浏览播放。
- 二次开发接入:BSD 3-Clause 协议 + LibNymphCast SDK,可把投屏能力嵌进自有硬件/软件;AngelScript 应用可在服务端扩展私有协议。
限制(实测与官方文档确认):
- 同一时刻只允许一个投送会话:第二个客户端推流会被拒绝,服务端日志报
Trying to start a new session with session already active. Abort.(实测复现)。多客户端轮播需等待当前会话结束。 - CLI 客户端功能最小化:
nymphcast_client仅支持发现与文件推流;URL 推流、播放控制(音量/暂停/音轨切换)、分组管理需使用 NymphCast Player 图形客户端或 SDK 二次开发。 - 无官方 Linux x86 预编译包:v0.2-alpha0 的 Release 资产只有 Android APK 与 Windows 安装器,Linux 平台必须源码编译(Alpine/FreeBSD 有社区软件源包)。
- 视频输出依赖硬件解码:官方测试矩阵显示树莓派 4 最高 1080p@24fps(h.264),树莓派 0/2/3、Odroid-C2 等平台 ffmpeg 硬解不可用;HEVC 暂不支持。
- 项目节奏慢:稳定线 v0.1 发布于 2022 年,v0.2 仍在 alpha 阶段,生产使用建议锁定版本并做充分验收。
七、同类选型对比
把 NymphCast 放进"局域网投屏/音频推送"方案池里横向对比(协议与生态数据为公开事实,NymphCast 数据为 2026-10-29 实查):
| 维度 | NymphCast | Chromecast / Google Cast | AirPlay 2 | DLNA/UPnP AV | PulseAudio/RTP 组播 |
|---|---|---|---|---|---|
| 属性 | 开源软件方案 | 谷歌私有协议 + 硬件 | 苹果私有协议 | 开放行业标准 | 开源桌面方案 |
| 可自托管服务端 | ✅ 任意 Linux/BSD/树莓派 | ❌ 需购买 Chromecast/带 TV 的设备 | ❌ 需 AirPlay speaker/Apple TV(第三方实现如 shairport-sync 可模拟) | ✅ | ✅ |
| 客户端生态 | CLI/Qt Player/Android app,自建 | 全平台 Chrome/Google Home | Apple 全家桶原生 | 海量老牌播放器 | Linux 桌面为主 |
| 多房间同步播放 | ✅(分组多播,85%) | ✅ 扬声器分组 | ✅ 原生 | ❌(标准本身不做同步) | ✅(同网段组播) |
| 推送 URL/在线媒体 | ✅(服务端拉流) | ✅ | ✅ | ⚠️ 以文件索引为主 | ❌ 仅音频流 |
| 字幕支持 | ⚠️ 内嵌位图字幕(75%) | ✅ | ✅ | ⚠️ 依播放器实现 | ❌ |
| 隐私/离线可用 | ✅ 无云依赖 | ❌ 依赖谷歌服务 | ⚠️ 部分依赖苹果生态 | ✅ | ✅ |
| 部署门槛 | 中(Linux 源码编译) | 零(买即用) | 零(苹果设备) | 中 | 低(Linux 桌面) |
| 开源许可 | BSD 3-Clause | 闭源(协议部分文档化) | 闭源 | 标准开放 | GPL 系 |
| 活跃度 | 2.6k 星、v0.2-alpha0(2026-10-29 查) | 谷歌持续迭代 | 苹果持续迭代 | 标准冻结、生态收缩 | 随桌面发行版维护 |
选型解读:
- 要"买来就用、生态最全"→ Chromecast/AirPlay,但服务端不可自托管、有云依赖;
- 要"老设备互通、标准开放"→ DLNA,但无同步播放能力且生态老化;
- 要"纯 Linux 桌面内共享音频"→ PulseAudio/RTP,离开 Linux 桌面不适用;
- 要"自建接收端 + 开源可改 + 局域网无云"→ NymphCast 是少数同时满足这三点的专用投屏方案,代价是需源码编译、客户端生态小、单会话限制。若需求只是"把音频送到指定音箱"且能接受编译,NymphCast 的架构干净度与可定制性(AngelScript 应用、SDK)明显优于同类。
八、参考链接
- 官方仓库:https://github.com/MayaPosch/NymphCast (README 含特性状态表、生态清单、平台支持矩阵)
- 版本发布页:https://github.com/MayaPosch/NymphCast/releases (v0.2-alpha0 与 v0.1 资产清单,查询日期 2026-10-29)
- 服务端编译文档:https://github.com/MayaPosch/NymphCast/blob/master/doc/building_nymphcast_server.md
- 音频模式安装指南:https://github.com/MayaPosch/NymphCast/blob/master/doc/nymphcast_audio_setup_guide.md
- LibNymphCast SDK:https://github.com/MayaPosch/libnymphcast
- NymphCast MediaServer:https://github.com/MayaPosch/NymphCast-MediaServer
- 项目主页(作者站点):http://nyanko.ws/nymphcast.php
- 站内实操篇:《Ubuntu 24.04 安装 NymphCast 0.2-alpha0 指南》、《NymphCast 0.2-alpha0 配置参数详解》、《NymphCast 0.2-alpha0 常用 CLI 命令与工具详解》