返回首页

基于 WebRTC 的 P2P 视频服务:从零开发 9 个月

Vizavi 项目 — 在 9 个月内从零开发的 P2P 视频服务。基于 WebRTC 的架构,配备自己的 STUN/TURN 服务器和基于 Node.js 的信令服务器。该解决方案在普通的 VPS 上运行,无需使用数据库,将数据存储在 JSON 文件中。

如何在 9 个月内在 1 核 VPS 上组装视频服务
Advertisement 728x90

## 从零打造 P2P 视频服务:在 1 核 VPS 上开发 9 个月

在九个月的业余时间里,一位来自偏远地区的电工创建了一个功能齐全的 P2P 视频服务“Vizavi”——无需注册或安装应用。从配置简陋的 VPS(1 核,512 MB 内存)上从零构建而成,它利用 WebRTC 实现直接点对点连接,并能绕过封锁。最终成果:一个基于浏览器的解决方案,配备俄罗斯域名,即使在本地网络限制下也能正常运行。

从创意到现实:Vizavi 的诞生过程

项目源于创建者遭遇主流视频服务被封锁,不得不寻找替代方案。在实验神经网络时,灵感乍现:“能不能做一个视频通话工具?”作者深入钻研 WebRTC 基础、STUN/TURN 服务器以及 ICE 候选等技术。第一通成功测试通话点燃了进一步开发的热情。亮点功能:无需注册或安装应用——直接在浏览器中使用简短数字房间码即可连接。

架构采用“房间模式”:用户在 https://vizavi.rf/ 输入房间号,一旦两人进入,系统即自动连接。房间码分享由用户自行负责——通过消息应用、电话通话,甚至面对面交流。这大大降低了使用门槛:只需点击链接并授权摄像头/麦克风访问即可。

Google AdInline article slot

技术栈:极简主义哲学

服务运行在莫斯科数据中心租用的 VPS 上,配置最低限度:

  • 1 个 CPU 核心
  • 512 MB 内存
  • 10 GB SSD 磁盘(已用 3.3 GB)
  • 操作系统 Debian 11

基础设施包括:

  • Coturn —— 自建 STUN/TURN 服务器,用于 NAT 穿越
  • Node.js(信令服务器)由 PM2 管理
  • Nginx 作为反向代理
  • 来自 Let’s Encrypt 的 SSL,支持自动续期
  • UFW 和 Fail2Ban 用于基本安全防护
  • 客户端和服务器逻辑采用原生 JavaScript
  • Express 处理静态文件和 REST API
  • Socket.io 用于实时 WebRTC 信令

数据存储采用 JSON 文件,而非传统数据库。这适应了服务器有限资源,并简化了部署。自制管理面板可显示实时连接统计,并监控活动情况。

Google AdInline article slot

房间类型:从基础到 VIP

系统支持三种房间类型:

  • 标准房间 — 两人基础设置。输入相同号码,即自动连接。无通话录音、IP 日志或消息存储。
  • VIP 房间 — 增加层级控制:房主管理聊天、录音会议,并可踢出访客。访客支持屏幕共享和文件发送。包含多人连接队列以及入口留言板。
  • 观察房间(开发中)— 类似于“婴儿监视器”:一台设备充当摄像头,另一台作为查看器。计划将旧智能手机改造成视频源。

核心优势:连接前无需额外步骤。不像要求注册或输入用户名的竞争对手,Vizavi 输入房间码即可即时连接用户。

安全与隐私:当前状态

WebRTC 自带端到端加密,保障音频和视频流安全。不过,仍有一些地方需改进:

Google AdInline article slot
  • 聊天历史以明文形式存储在浏览器的 localStorage 中
  • VIP 入口消息保存在未加密的 JSON 文件中
  • 房间访问无认证机制

作者强调,这并非针对敏感数据设计,但承认需加强防护。在资源受限的 VPS(512 MB 内存)上,引入完整加密需权衡安全与性能。

开发者关键心得

  • 架构极简 — 使用 JSON 替代数据库、摒弃不必要依赖,对低端 VPS 运行至关重要。
  • 信令服务器灵活性 — Socket.io 能平稳处理 WebRTC 信号,即便面对大量机器人和扫描器流量。
  • 用户体验 — 省略注册或输入姓名等步骤,能立即提升参与度。
  • 安全是持续过程 — UFW 和 Fail2Ban 等基础工具必不可少,但需定期审计。

系统需应对持续的扫描器和机器人探测,因此会过滤它们:非浏览器客户端仅收到无 JavaScript 的精简 HTML 页面。这能减轻服务器负载,并有助于 SEO。

这个项目证明,WebRTC 等技术对初学者开发者来说触手可及。成功源于分阶段构建、专注核心功能,并充分利用现成工具(Coturn、Let’s Encrypt)。下一步计划:消息加密以及支持更多并发连接。

— Editorial Team

Advertisement 728x90

继续阅读