Skip to content
Fengjing95Public

About

Pushing or recording video media in browser.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

WebOBS · 浏览器直播推流工作台

在浏览器中实现 OBS 式的直播工作台:场景保存配置并快速切换,来源承载屏幕捕获 / 摄像头 / 文字 / 图片 / 视频等素材,混音器控制输出监听与各输入设备音量,支持 WebRTC(WHIP) 与 WebTransport 两种推流链路。

技术栈:React 19 + TypeScript + Vite + Tailwind CSS + shadcn/ui + Zustand(选型依据见 docs/04-技术选型文档.md)。

架构图

WebOBS 架构设计图

自上而下:UI 层(React 组件)→ 状态层(Zustand)→ Core 引擎层(不依赖 React 的合成 / 混音 / 推流 / 录制 / 持久化)→ 浏览器 Web API → 外部服务(WebTransport / WHIP)。

源文件为 docs/architecture.excalidraw,可在 Excalidraw 中导入继续编辑后重新导出。

快速开始

pnpm install
pnpm dev        # http://localhost:5173
pnpm build      # 类型检查 + 产物构建
pnpm test       # Vitest 单元测试(54 项)
pnpm test:e2e        # Playwright E2E 主套件(假媒体流,默认不含录制)
pnpm test:e2e:record # 录制用例(单独运行:无头 MediaRecorder 编码有间歇卡死,故 opt-in)
  • 摄像头 / 屏幕捕获 / 麦克风要求 HTTPS 或 localhost 安全上下文;
  • 本地 WHIP 联调推荐 MediaMTX:推流地址 http://127.0.0.1:8889/live/whip,播放地址 http://127.0.0.1:8889/live/;
  • 未配置推流服务器时为模拟模式(状态机与统计演示)。

文档索引(docs/)

文档 内容
01-概要设计文档 目标与边界、总体架构、数据模型、关键流程、协议对比、里程碑
02-详细设计文档 领域模型(TS)、核心服务实现、双推流链路、UI / 性能 / 测试
03-交互原型 可直接打开的高保真交互原型(OBS 主界面布局)
04-技术选型文档 React + Vite + shadcn/ui 选型结论与备选对比

工程结构

src/
├─ components/   # layout / preview / panels / dialogs / ui(shadcn)
├─ stores/       # zustand:scenes / ui / stream / settings / devices
├─ core/         # ★ 不依赖 React
│  ├─ engine/    # 合成引擎(渲染循环 / 命中测试 / 转场)
│  ├─ sources/   # 来源采集与句柄生命周期
│  ├─ audio/     # Web Audio 混音图
│  ├─ streaming/ # IStreamTransport:whip / webtransport
│  ├─ record/    # MediaRecorder 录制
│  └─ persistence/ # IndexedDB(场景 / 素材 / 设置)
├─ types/        # 领域模型
└─ hooks/        # 画布指针交互

里程碑

  • M0 交互原型 ✅(docs/03)
  • M1 MVP ✅ —— 合成 + 混音 + 六类来源 + WHIP 推流 / 模拟推流 + 录制(FS 流式 / 下载双模式)+ IndexedDB 持久化 + 工作室模式
  • M2 接近完成 ✅ WebTransport 媒体封装(WebCodecs + MoQ / RTP-over-QUIC + 自研拥塞)、来源 / 场景右键菜单、拖拽排序、Shift 等比缩放、滤镜一期(ctx.filter)、配置导入导出、渐变到黑转场、Wake Lock、性能面板;剩余:设备热插拔细节打磨
  • M3:WebGL 渲染器、色度键 / LUT、多路推流、ESLint / Prettier 接入

About

Pushing or recording video media in browser.

Resources

Stars

1 star

Watchers

0 watching

Forks

Contributors

Languages