【技术教程】录屏软件OpenScreen
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 | 维护中 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)