GitHub「openscreen」项目全面对比分析

GitHub 上存在多个同名的 openscreen 项目,性质截然不同,极易混淆。本文从定义、核心理念、设计模式、使用场景、优劣势及代码示例六个维度,对四个主要项目进行系统梳理与横向对比。


一、项目定义

1. siddharthvaddem/openscreen(⭐ 11.3k)

免费的屏幕录制与演示视频创作工具,是付费软件 Screen Studio 的开源替代品。完全免费、无订阅、无水印、可商用。技术栈为 Electron + React,面向开发者与内容创作者,主打"录制即剪辑"的一体化桌面体验。

2. chromium/openscreen(Google 官方)

Google 主导、由 W3C 标准规范驱动的投屏协议库。使用 C++ 编写,实现了 Open Screen Protocol(OSP)、多播 DNS(mDNS)/DNS-SD,以及 Cast 协议(设备发现、应用控制、媒体流传输)。内嵌于 Chromium 浏览器,供浏览器厂商和设备开发者集成使用。

3. webadderall/Recordly(近期 Fork)

从 siddharthvaddem/openscreen Fork 而来,在原版基础上做了大量功能扩展。新增自动缩放、动态模糊光标、摄像头叠加、自动字幕等进阶能力,适合制作引导操作视频和专业产品演示。

4. clhome/openscreenPlus(中文社区 Fork)

基于 siddharthvaddem/openscreen 和 openscreen-chinese 进行的二次开发,根据系统语言自动切换中英文界面,是面向中文用户的本地化增强版本。


二、核心理念

维度 siddharthvaddem/openscreen chromium/openscreen Recordly openscreenPlus
核心使命 民主化屏幕演示创作 跨设备投屏标准化协议 演示录制一体化工作流 中文友好的录制工具
开源哲学 完全免费,无商业限制 开放标准,嵌入 Chromium 社区驱动功能扩展 本地化 + 功能增强
目标用户 开发者 / 内容创作者 浏览器 / 设备厂商 产品 / 教学视频制作者 中文用户群体
技术取向 产品体验优先 协议规范优先 工作流效率优先 可用性本地化优先

核心区别一句话siddharthvaddem/openscreen给人用的录制工具;chromium/openscreen给设备用的协议库——两者同名,领域完全不同。


三、设计模式与技术架构

3.1 siddharthvaddem/openscreen — 录制-编辑-导出一体化架构

整体采用 Electron 双进程模型,主进程负责底层捕获,渲染进程承载 React 编辑界面,两者通过 IPC 通信协作。


┌─────────────────────────────────────────────┐
│             Electron 主进程                  │
│  ┌──────────────┐   ┌──────────────────┐    │
│  │  屏幕捕获     │   │  音频捕获         │    │
│  │ (ScreenCap   │   │ (系统音 / 麦克风) │    │
│  │  Kit 等)     │   │                  │    │
│  └──────┬───────┘   └────────┬─────────┘    │
│         └──────────┬─────────┘              │
│               ┌────▼─────┐                  │
│               │ 原始录制  │ ← .project 持久化 │
│               └────┬─────┘                  │
└────────────────────┼───────────────────────┘
                     │ IPC
┌────────────────────▼───────────────────────┐
│             React 渲染进程                  │
│  ┌──────────────────────────────────────┐  │
│  │        时间轴编辑器 (Timeline)        │  │
│  │  [缩放轨] [速度轨] [注释轨] [裁剪轨] │  │
│  └────────────────┬─────────────────────┘  │
│                   │                        │
│  ┌────────────────▼─────────────────────┐  │
│  │    导出引擎(MP4 / GIF / WebM)       │  │
│  └──────────────────────────────────────┘  │
└────────────────────────────────────────────┘

核心设计模式:

  • 事件驱动:光标遥测数据(Cursor Telemetry)驱动自动缩放建议,点击"魔法棒"一键应用
  • 关键帧动画:通用 Keyframe 轨道实现缩放、速度等效果的平滑过渡
  • 项目持久化.project 文件保存完整编辑状态,支持断点续编,随时返回修改

3.2 chromium/openscreen — 分层协议栈模块化架构

采用平台抽象层将协议逻辑与底层操作系统解耦,三大核心模块(OSP、Cast、mDNS)相互独立,可按需裁剪引入。

┌──────────────────────────────────────────────────┐
│               嵌入应用层 (Embedder)               │
│         (Chromium / Android / 第三方设备)         │
└───────────────────┬──────────────────────────────┘
                    │ Platform API
┌───────────────────▼──────────────────────────────┐
│              Open Screen Library                 │
│  ┌──────────┐  ┌───────────┐  ┌───────────────┐ │
│  │   OSP    │  │   Cast    │  │  mDNS/DNS-SD  │ │
│  │ 协议模块  │  │ 协议模块  │  │   发现模块    │ │
│  └──────────┘  └───────────┘  └───────────────┘ │
│  ┌────────────────────────────────────────────┐  │
│  │         平台抽象层 (Platform API)           │  │
│  │   [时钟] [任务调度] [网络] [TLS] [日志]    │  │
│  └────────────────────────────────────────────┘  │
└───────────────────┬──────────────────────────────┘
                    │ QUIC / TLS 1.3
┌───────────────────▼──────────────────────────────┐
│                  网络传输层                       │
│     mDNS 设备发现 → QUIC 安全连接 → 媒体流       │
└──────────────────────────────────────────────────┘

核心设计模式:

  • Observer 模式:公共 API 通过原始指针接收 delegate / observer / callback 对象,用于异步状态变更通知
  • 平台抽象层(PAL):将协议逻辑与底层 OS 和硬件彻底解耦,实现跨平台移植
  • 模块独立性:OSP、Cast、mDNS 三大模块可单独引入,不强制捆绑

安全机制:OSP 使用 DNS-SD 服务名 _openscreen._udp 进行 mDNS 设备广播,连接层采用 QUIC + TLS 1.3,每个 Agent 需生成自签名 X.509 v3 证书(ecdsa_secp256r1_sha256)用于身份认证。


四、使用场景

siddharthvaddem/openscreen 及衍生版本

场景 说明
🎬 产品 Demo 制作 录制带光标放大、背景美化效果的产品演示视频
📚 技术教程录制 开发者录制编码过程,自动智能缩放聚焦关键操作
📱 社交媒体内容 导出精美 GIF 或短视频,用于 Twitter / LinkedIn
🏢 商业演示 无水印、免费商用,替代付费的 Screen Studio($89+)
🎓 在线课程制作 Recordly 的自动字幕功能可大幅降低字幕制作成本

chromium/openscreen

场景 说明
📺 智能电视 / 流媒体设备 嵌入投屏接收端,实现 Cast 接收器功能
🌐 浏览器开发 为 Chrome / Edge 等实现 W3C Presentation API
🏠 智能家居生态 局域网设备自动发现与媒体推送
📡 跨厂商互联互通 遵循 W3C 规范,打通不同品牌设备间的投屏协议

五、优劣势对比

siddharthvaddem/openscreen

✅ 优势 ⚠️ 劣势
完全免费,无水印,可商用 功能快速迭代,偶有 Bug
跨平台(Windows / macOS / Linux) 与 Screen Studio 相比缺少部分高级视觉效果
AI 辅助自动缩放(光标遥测驱动) 个人项目,维护者精力有限
.project 文件持久化,支持断点续编 Linux 需 PipeWire,老系统兼容性受限
社区活跃,11k+ Stars,Fork 生态丰富 无专业级调色 / 特效支持

chromium/openscreen

✅ 优势 ⚠️ 劣势
Google / W3C 背书,协议权威性高 上手门槛极高,需 C++ 专业背景
BSD-3 协议,可商业嵌入 构建系统复杂(gclient + GN + ninja)
模块化架构,可按需裁剪 Public API 仍不稳定,存在破坏性变更风险
跨平台(Linux / macOS / ARM) 文档相对匮乏,主要靠阅读源码理解
安全性强(TLS 1.3 + QUIC) 协议规范仍是草案,实现未完全跟上最新版本

六、具体示例与代码

示例 1:siddharthvaddem/openscreen 本地构建

# 克隆项目并启动开发模式
git clone https://github.com/siddharthvaddem/openscreen.git
cd openscreen
npm install
npm run dev

# 构建生产版本
npm run build

# Linux 用户直接运行 AppImage
chmod +x Openscreen-Linux-*.AppImage
./Openscreen-Linux-*.AppImage

光标遥测驱动自动缩放(核心逻辑):

// 1. 收集录制过程中的光标点击事件
const cursorEvents = [];
onMouseClick((event) => {
  cursorEvents.push({
    x: event.x,
    y: event.y,
    timestamp: Date.now(),
    type: 'click'
  });
});

// 2. 点击「魔法棒」→ 基于点击位置自动生成缩放建议
function generateZoomSuggestions(events) {
  return events
    .filter(e => e.type === 'click')
    .map(e => ({
      time: e.timestamp,
      zoomTarget: { x: e.x, y: e.y },
      scale: 2.0,    // 放大倍数
      duration: 800  // 过渡动画时长(ms)
    }));
}

// 3. 将建议写入时间轴 ZoomTrack
timeline.zoomTrack.addKeyframes(generateZoomSuggestions(cursorEvents));

示例 2:chromium/openscreen 构建与集成

# 安装 depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=$PATH:/path/to/depot_tools

# 拉取源码及所有依赖
gclient config https://chromium.googlesource.com/openscreen
gclient sync

# 构建 OSP Demo
mkdir out/debug
gn gen out/debug
ninja -C out/debug osp_demo
./out/debug/osp_demo

# 运行单元测试
ninja -C out/debug openscreen_unittests
./out/debug/openscreen_unittests

C++ 嵌入示例(Observer 模式实现设备发现):

#include "osp/public/service_listener.h"

// 实现 Observer,监听局域网设备发现事件
class MyScreenListener : public osp::ServiceListener::Observer {
 public:
  void OnStarted() override {
    OSP_LOG_INFO << "mDNS 监听已启动,搜索投屏目标...";
  }

  void OnServiceFound(const osp::ServiceInfo& info) override {
    OSP_LOG_INFO << "发现设备: " << info.service_id
                 << " @ " << info.v4_endpoint.address;
    // 在此发起 QUIC + TLS 1.3 安全连接,推送媒体流
  }

  void OnServiceLost(const osp::ServiceInfo& info) override {
    OSP_LOG_INFO << "设备离线: " << info.service_id;
  }
};

int main() {
  MyScreenListener listener;
  auto service_listener = osp::ServiceListener::Create(
      osp::ServiceListener::Config{}, &listener, task_runner);
  service_listener->Start();
  // ... 进入事件循环
  return 0;
}

示例 3:openscreenPlus / Recordly 安装与工作流

# Windows:下载 Setup.exe → 双击安装
# macOS:下载 .dmg → 拖入 Applications(14.2+ 需授权音频权限)
# Linux:需 PipeWire 支持系统音频
chmod +x OpenScreenPlus-*.AppImage && ./OpenScreenPlus-*.AppImage

标准录制流程:

① 启动 → 选择录制源(全屏 / 指定窗口)
② 配置音频(静音 / 系统音 / 麦克风 / 全部)
③ 开始录制 → 停止 → 自动进入编辑器
④ 时间轴编辑(缩放 / 速度 / 注释 / 裁剪)
⑤ 导出(MP4 / GIF / WebM)

七、选型建议

需求场景 推荐项目
免费制作精美产品 Demo,无商业限制 siddharthvaddem/openscreen
偏好中文界面,追求开箱即用 clhome/openscreenPlus
需要摄像头叠加、自动字幕等进阶功能 webadderall/Recordly
开发投屏设备 / 实现 W3C Presentation API chromium/openscreen
构建 Cast 接收端或智能电视应用 chromium/openscreen

附:项目速览

项目 性质 语言 Stars 许可证 维护状态
siddharthvaddem/openscreen 录制工具 TypeScript / Electron 11.3k MIT 活跃
chromium/openscreen 协议库 C++ BSD-3 活跃(Google)
webadderall/Recordly 录制工具(Fork) TypeScript / Electron 新项目 MIT 活跃
clhome/openscreenPlus 录制工具(中文 Fork) TypeScript / Electron 小众 MIT 维护中
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐