NymphCast 介绍与选型指南

说清 NymphCast 是什么、receiver/sender 双端架构如何工作、生态组件有哪些,并给出与 Chromecast/AirPlay/DLNA 等主流投屏方案的量化选型对比。已在 Ubuntu 24.04(x86_64)实测源码编译、接收端启动、客户端发现与推流全流程。

NymphCastNymphCast流媒体DockerDocker Compose2026/10/30

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,commit 3f50059,编译版本串 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 实查)
最新 Releasev0.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 移植)
  • 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/UPnPHTTP over UDP 组播 239.255.255.250DLNA、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 GUI75%基于 EmulationStation 的独立图形界面模式
NymphCast Apps25%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)。至此"发现 → 连接 → 推流 → 解码播放 → 状态回调"闭环全部走通。

六、适用场景与限制

适用场景:

  1. 旧机改造网络音箱:树莓派、旧笔记本接有源音箱做局域网音乐终端,手机/电脑即推即播;官方 Releases 为树莓派系统(Buster/Bullseye)提供 armv6l 预编译包,演示视频即采用树莓派 2B + USB 网卡 + 2.1 音箱形态。
  2. 全屋多房间音频:多台接收端分组后由 NymphCast Player 做同步播放(多播特性)。
  3. 局域网媒体分发:配合 NymphCast MediaServer 把 NAS 上的媒体库暴露给各接收端浏览播放。
  4. 二次开发接入:BSD 3-Clause 协议 + LibNymphCast SDK,可把投屏能力嵌进自有硬件/软件;AngelScript 应用可在服务端扩展私有协议。

限制(实测与官方文档确认):

  1. 同一时刻只允许一个投送会话:第二个客户端推流会被拒绝,服务端日志报 Trying to start a new session with session already active. Abort.(实测复现)。多客户端轮播需等待当前会话结束。
  2. CLI 客户端功能最小化:nymphcast_client 仅支持发现与文件推流;URL 推流、播放控制(音量/暂停/音轨切换)、分组管理需使用 NymphCast Player 图形客户端或 SDK 二次开发。
  3. 无官方 Linux x86 预编译包:v0.2-alpha0 的 Release 资产只有 Android APK 与 Windows 安装器,Linux 平台必须源码编译(Alpine/FreeBSD 有社区软件源包)。
  4. 视频输出依赖硬件解码:官方测试矩阵显示树莓派 4 最高 1080p@24fps(h.264),树莓派 0/2/3、Odroid-C2 等平台 ffmpeg 硬解不可用;HEVC 暂不支持。
  5. 项目节奏慢:稳定线 v0.1 发布于 2022 年,v0.2 仍在 alpha 阶段,生产使用建议锁定版本并做充分验收。

七、同类选型对比

把 NymphCast 放进"局域网投屏/音频推送"方案池里横向对比(协议与生态数据为公开事实,NymphCast 数据为 2026-10-29 实查):

维度NymphCastChromecast / Google CastAirPlay 2DLNA/UPnP AVPulseAudio/RTP 组播
属性开源软件方案谷歌私有协议 + 硬件苹果私有协议开放行业标准开源桌面方案
可自托管服务端✅ 任意 Linux/BSD/树莓派❌ 需购买 Chromecast/带 TV 的设备❌ 需 AirPlay speaker/Apple TV(第三方实现如 shairport-sync 可模拟)✅✅
客户端生态CLI/Qt Player/Android app,自建全平台 Chrome/Google HomeApple 全家桶原生海量老牌播放器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)明显优于同类。

八、参考链接