muse_galaxy:为 muse_vtuber 解码并推送 JPEG 帧与 16k PCM 的 DSH 采集器

前言

在 DSH 里做「能看、能听」的智能体,常见做法是把摄像头、浏览器或自建网关接到识别链路,再在会话里插话。若目标是用 muse_vtuber 统一承担取帧策略、VAD 断句、识图与说话,输入侧只需要稳定地把媒体变成 vtuber 采集口能吃的格式。旧方案(muse_galaxy_watch / muse_galaxy_bili_live 配合云网关、mediamtx、websockets)已与当前架构不兼容且代码已删除;muse_galaxy(维护者 Stella-Mira,分类:联网工具)是面向 muse_vtuber 的 DSH 采集器插件:把本地文件、网络资源与直播流解码成 JPEG 帧 + 16k 单声道 PCM,经 HTTP 推给 vtuber 的 capture 接口。识别与限流不在本插件,这里只负责取流与搬运。

这是什么

一句话:本插件是 muse_vtuber 的输入侧工具集。流水线大致为:

galaxy_path / galaxy_rtsp …           ← 本插件
   ↓ yt-dlp(需要时)→ ffmpeg 解码
   ↓ POST /vtuber/api/capture/frame   (JPEG,按 vtuber open 返回的 want.fps / want.width)
   ↓ POST /vtuber/api/capture/pcm     (16k PCM,默认 200ms 一块)
muse_vtuber:MJPEG 面板 + vision.autoIntervalMs + mic.vad → ASR → 插话

插件版本在仓库 package.json 中为 2.0.0,许可证 MIT,运行时仅依赖 Node 内置模块(零 npm 依赖),本机需 ffmpeg;解析视频站点页面 URL 时需 yt-dlp(资料建议 python -m pip install yt-dlp)。

核心功能

暴露的工具

工具 说明
galaxy_path 本地文件 / 直链 / 视频站点 URL(可先过 yt-dlp)。播完即停,不循环
galaxy_rtsp rtsp:// / rtmp:// / m3u8 / flv 等直播流,采到源断或调用 galaxy_stop
galaxy_path_bilibili B 站视频(BV/av/URL),复用 mira_bilibili 登录态
galaxy_rtsp_bilibili B 站直播(短号/房间号/URL),断流自动换节点重连
galaxy_status 当前或最近任务:帧数、丢帧、音频块、错误、用时
galaxy_stop 停止一路;不传 streamId 则停止全部

调用 galaxy_path 等会立即返回 streamId(不阻塞播放);画面出现在 vtuber「形象」页签的「视频」卡片,后续识别由 vtuber 配置决定。

B 站分工

与 mira_bilibili、muse_vtuber 的典型分工如下:

mira_bilibili  → 登录态 / 私信 / 弹幕 / 直播事件(后台)
muse_galaxy    → 视频 URL、直播间号 → ffmpeg 可用的直链
muse_vtuber    → 取帧识别 / 断句识别 / 说话

本插件不处理弹幕与私信;与 mira_bilibili 共享 mira_account 凭据,「看画面」与「回弹幕/私信」是两条独立通道。

视频(P1)

示例:galaxy_path_bilibili BV1xx411c7mD

  1. 从 ~/.dsh/mira_config/mira_account/creds/<accountId>.json 读取 fields.{SESSDATA,bili_jct,buvid3,buvid4};
  2. 写成 Netscape 格式的临时 cookies.txt(权限 600,解析完立刻删除);
  3. 对 DASH 分别用 yt-dlp -g 取音视频直链,交给两个 ffmpeg 解码。

站点视频(含 B 站/YouTube)音视频分离时,需两次 yt-dlp:视频 -f 'bv*'(退 'b'),音频 -f 'ba'(退 'b');只取 -g 第一行会得到无声音的视频轨。

直播(P2)

示例:galaxy_rtsp_bilibili 12345678

  1. room_init 解析真实 room_id 与 live_status;
  2. getRoomPlayInfo 取候选流,avc 优先、hevc 垫底;
  3. 开播前按真实解码管线各探测约 2.5 秒,选能出帧的节点;
  4. 断流后按退避换候选节点,候选用尽则重新解析,次数受 bili.maxReconnects 限制。

资料中强调:直播 Referer 需为 https://live.bilibili.com/<房间号>(房间号可从流地址 cid= 取);探测须与真实解码管线一致,仅用 -f null 短探测可能误判坏节点。

配置项(节选)

键 默认 说明
enabled true 为 false 时不注册工具
vtuber.baseUrl http://127.0.0.1:3080 muse_vtuber 地址
vtuber.tokenFile "" 留空则用 $DSH_HOME/mira_config/muse_vtuber/capture.json(由 vtuber 生成)
bili.accountId bili-main 使用的账号凭据 id
bili.maxReconnects 8 B 站直播断流最大重连次数
bili.reconnectDelayMs 800 重连退避基数
bili.probeCandidates 6 开播前探测候选数
media.ffmpeg / media.ytdlp ffmpeg / yt-dlp 可改为绝对路径或带参数形式
media.sampleRate 16000 与 vtuber mic.sampleRate 一致
media.chunkMs 200 PCM 分块
maxSeconds 3600 单路时长硬上限(防直播忘关;path 播完不受影响)

通用 galaxy_rtsp 不做断流重连;重连逻辑仅在 galaxy_rtsp_bilibili。

安装与启用

已抓取 README 未给出 DSH 官方 dsh plugin add … 安装命令,此处不凭仓库名拼接命令。安装与更新请以社区目录页说明为准:

启用前请确认本机已安装 ffmpeg(必需)及按需安装的 yt-dlp;插件以当前 dsh 进程权限运行,安装前应自行审阅源码与 MIT 许可证。

典型用法

前置条件

  1. muse_vtuber 的 GET /vtuber/api/health 中 features.capture 需齐全(open/frame/pcm/close/ping/stream);采集令牌由 vtuber 生成。
  2. 调用 capture/open 属于「接收」,会话需为 observer 或 taker。在 DSH 会话内调用 galaxy_path / galaxy_rtsp 会带上 sessionId;首次观看时 vtuber 可通过 security.autoObserve 登记为 observer。无 sessionId 直接调采集口会收到 403 authz/no-session。

可复现示例

B 站点播(需已配置 mira_account 与 bili.accountId):

galaxy_path_bilibili BV1xx411c7mD

B 站直播(含断流换节点):

galaxy_rtsp_bilibili 12345678

通用资源(本地、直链或需 yt-dlp 的站点 URL):

galaxy_path /path/to/file.mp4
galaxy_rtsp rtsp://…

查看状态或停止:

galaxy_status
galaxy_stop
galaxy_stop <streamId>

仓库自检脚本

在正在运行的 dsh web 环境下,可对采集口做真解码自检(须带会话身份,避免 vtuber 403):

node test/live-path.mjs --session session-galaxy-selftest
node test/latency.mjs

后者可用环境变量 DSH_SESSION_ID 提供会话身份。资料注明:在受限沙箱中 ffmpeg 管道可能 spawn EPERM,需在不受限 shell 中运行。

适用场景与注意

适合:已在用 muse_vtuber 做虚拟形象感知与表达,需要从文件、直链、通用直播或 B 站 视频/直播向 vtuber 持续送帧与 PCM,且希望 B 站直播侧由插件处理 CDN 节点探测与断流重连的场景。

注意:

  • 画面与声音各起一个 ffmpeg,实现简单但占用约 1–2 核;帧队列深度 32,满则丢最旧帧以保「尽量新」的画面。
  • 不做识图/VAD 策略,这些均在 vtuber 侧配置。
  • 与旧 galaxy 云网关方案不兼容;消费者仅为 muse_vtuber。

DSH 生态理念是「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

muse_galaxy 把媒体解码与 HTTP 推送收敛到 DSH 工具层,让 vtuber 专注识别与对话。进一步说明与配置见 SkillHub 目录页 与 GitHub 仓库 README。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye