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。

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

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

小夜