deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:fore-vip/dsh-live
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
DeepSeek Harness(DSH)生态的 Cordis 直播插件:摄像头/麦克风采集、屏幕选区直播、画中画(PiP)、多平台多选同步推流(视频号、抖音、快手、斗鱼、B站、YY、虎牙、CC、自定义 RTMP),内置 ffmpeg 引擎(自动检测/一键安装/真实 RTMP 推流)。
一行命令安装到 DeepSeek Harness(dsh):
# npm 源(`dsh-live` 发布到 npm 后可用)
dsh plugin --profile web add dsh-live
# git 源(当前推荐,仓库产物已入库、无需构建)
dsh plugin --profile web add "github:fore-vip/dsh-live#main"
本地开发/动态形态:在 DSH 会话中用
cordis_define新建插件,将src/host.js、src/client.js分别粘贴到code.host/code.client即可运行。 安装后启动插件,页面右侧出现「直播」悬浮窗口。
getDisplayMedia 捕获后全屏拖拽框选直播区域— 最小化)。dsh-live/
├── package.json # npm 包声明:name=dsh-live + dsh.bundle/dsh.client 契约 + keywords
├── cordis.patch.yml # bundle 组合层:- insert: - id: dsh-live
├── index.mjs # Node half 入口(bundle 形态 Cordis entry,封装 src/host.js 同一函数体)
├── lib/client.js # Client bundle(dsh.client 通道,与 src/client.js 同一函数体)
├── src/
│ ├── host.js # Host 半区:多平台推流状态、ffmpeg 引擎、真实推流 RPC
│ └── client.js # Client 半区:右侧悬浮直播窗口全部 UI 与媒体采集逻辑
└── README.md # 使用说明 + 各平台推流配置 + 市场发布
插件内置两种推流引擎,在设置面板顶部切换:
| 引擎 | 说明 | 适用 |
|---|---|---|
| 模拟(演示) | Host 只维护推流状态与统计(码率/观看/时长为模拟值),不产生真实网络推流 | 演示 UI、多选/画中画等功能测试 |
| ffmpeg 真实推流 | Host 调用 ffmpeg 将画面编码后真实推送到所选平台的 RTMP 地址,每个平台一个独立进程、可并行 | 端到端验证真实推流链路 |
subprocess.resolveExecutable / command -v ffmpeg),设置面板显示版本与路径。brew install ffmpeg;~/.dsh/live-ffmpeg/。testsrc2 彩条 + 440Hz 正弦音,640×360 H.264/AAC),用于验证编码 → RTMP 服务器 → 拉流的完整链路;浏览器预览画面尚未接入 ffmpeg 输入(浏览器 MediaStream 需经中转才能进入 ffmpeg,属后续增强)。mediamtx 默认监听 rtmp://127.0.0.1:1935);rtmp://127.0.0.1:1935/live、推流码任意(如 test);ffplay rtmp://127.0.0.1:1935/live/test(或 VLC 打开同一地址)即可看到推上去的彩条画面。通用要点:服务器地址(推流域名) + 推流码(Stream Key) 两者缺一不可,拼接成完整 RTMP 地址
rtmp://…/streamKey。推流码是各平台给你的独有串(通常含房间号/令牌),不是公开的,请从你的开播工具或创作者后台获取。 内置的服务器地址为各平台公开通用端点模板;平台可能调整端点或对主播开通状态有要求,正式开播前请以下表「获取方式」里平台的实时数据为准,可在设置中修改后保存。
| 平台 | 标签 | 默认服务器地址 | 推流码获取方式 |
|---|---|---|---|
| 自定义 | 自定义 | 手动填写 | — |
| 微信视频号 | 视频号 | rtmp://push.weixin.qq.com/live |
电脑端「视频号助手」→ 直播管理 → 推流地址 / 推流码 |
| 抖音 | 抖音 | rtmp://push-douyin-pub.douyinstatic.com/live |
「抖音直播伴侣」→ 设置 → 推流(登录后生成) |
| 快手 | 快手 | rtmp://rtmp-push.kuaishou.com/live |
「快手直播伴侣」→ 推流设置 |
| 斗鱼 | 斗鱼 | rtmp://send.douyu.com/live |
「斗鱼开播工具」/ 主播中心 → 直播设置 → 推流地址 |
| B站 | B站 | rtmp://txy.live-send.acg.tv/live |
「B站直播姬」→ 设置 → 推流(登录后生成,含房间号+密钥) |
| YY | YY | rtmp://rtmp.yy.com/live |
YY 开播工具 / 主播后台 → 推流地址 |
| 虎牙 | 虎牙 | rtmp://open.live.huya.com/live |
「虎牙直播伴侣」→ 推流设置(含直播间密钥) |
| 网易CC | CC | rtmp://push.cc.163.com/live |
「网易CC开播工具」→ 推流地址 |
rtmp://txy.live-send.acg.tv/live)与推流码(如 房间号-密钥);camera / microphone 权限(页面需 HTTPS 或 localhost;若运行在 iframe 中,父页面需在 iframe 上加 allow="camera; microphone; display-capture")。getDisplayMedia 捕获,支持全屏拖拽框选区域;屏幕模式会同时收集系统声音与麦克风。| 现象 | 原因 / 处理 |
|---|---|
| 摄像头黑屏无画面 | 未授权或 iframe 缺 allow;预览区会显示具体错误码与处理提示 |
| 推流无效果 | 推流码过期 / 平台端点变更 / 平台侧未开播校验 —— 重新在开播工具获取并保存 |
| 有回音 | 预览声音开启导致麦克风回声 —— 用 🔊/🔇 关闭预览外放 |
| 标签点了没反应 | 检查该平台服务器地址与推流码是否已配置(设置面板中保存) |
DSH 插件市场 = npm registry + GitHub 发现性。插件是独立 npm 包(bundle 形态:包根 = 仓库根),安装命令为 dsh plugin --profile web add <包名>。
package.json#name = dsh-live(社区 dsh-* 命名约定);dsh.bundle.patch → cordis.patch.yml(组合层 - insert: - id: dsh-live,声明即 bundle,进 profile 层栈);dsh.client.platform = web + exports["./client"] → lib/client.js(client-modules 只扫描声明该字段的包,进 __DSH_BOOT__);exports["."] → index.mjs(Node half Cordis entry,name/inject/apply);@deepseek-ai/* 官方包由 profile 的 pnpm 闭包在挂载时注入,不要声明官方包依赖。npm view dsh-live(404 表示未被占用;如被占用换名并同步改 package.json#name 与 cordis.patch.yml)。npm login
npm publish --access public
dsh-plugin topic(GitHub → Settings → Topics)。dsh plugin --profile web add dsh-live # npm 源
dsh plugin --profile web add "github:fore-vip/dsh-live#<commit>" # git 源(产物已入库)
src/index.mjs → lib/index.mjs):已静态化 —— harness.handle 替换为官方 ctx.webServer HTTP 路由(/plugins/dsh-live/{status,targets,config,pushmode,ffmpeg,ffmpeg/install}),服务经 inject: ['timer','webServer','subprocess','shell'] 严格声明。src/client.js → lib/client.js):已静态化 —— __ModuleLoader__ 契约 + require('react');host.call → fetch('/plugins/dsh-live/*');ctx.timer → window.setInterval/setTimeout;ctx.slots 注册 shell.overlay。由 scripts/build-client.js 从动态函数体自动生成(可复现)。npm run build(生成 lib/ 产物并入库);校验:npm run check。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。