Skip to content

项目名称

Live777播放器

基本信息

项目详情
项目名称Live777播放器
小组名称Live777播放器
项目方向Web 前端 / 流媒体 / WebRTC
项目周期2026年7月 — 2026年8月

小组成员

姓名角色GitHub
刘忆组长@Hakkai04
高成楠组员@xianshengli12138
张望辉组员@zhangwanghui512
曾家琛组员@Jackreceive
万家丰组员@2322143403w-netizen

项目简介

Live777 Player 是基于 Live777 WebRTC SFU 引擎构建的独立高性能流媒体播放器客户端。项目实现了一个完整的 WebRTC 播放器,支持 WHEP 拉流播放WHIP 摄像头推流 双模式,提供全功能播放控制、实时流状态统计(分辨率/码率/RTT/丢包等 8 项指标)、多路摄像头切换(最大 16 路网格布局),以及响应式桌面/移动端跨平台适配。

背景:Live777 是一个开源的轻量级边缘 WebRTC SFU 服务器,但社区缺少一个功能完善的 Web 端播放器客户端。本项目的目标是为 Live777 生态提供一个开箱即用、类型安全、经过完整测试的播放器前端,降低 WebRTC 流媒体技术的使用门槛。

技术栈

前端

技术版本用途
TypeScript5.6类型安全(7 项 strict 标志全开)
React18.3UI 框架
Tailwind CSS + daisyUI4.3 / 5.7原子化 CSS + 语义组件库
Zustand5.0状态管理 + localStorage 持久化
whip-whep1.2.0WHIP/WHEP IETF 协议客户端库
Vite5.4构建工具和开发服务器
ESLint10.xstrictTypeChecked 规则集
Playwright1.62E2E 自动化测试

后端(RTSP 桥接服务)

技术用途
Rust + axum 0.8RTSP → WHEP 桥接服务(编译期类型安全、零数据竞争)
tokio异步运行时
tower-httpCORS + 请求追踪中间件
tracing结构化 JSON 日志

核心功能

  1. WebRTC/WHEP 拉流播放 — 通过 IETF 标准 WHEP 协议建立 RTCPeerConnection,支持看门狗自动重连
  2. WHIP 摄像头推流 — getUserMedia 采集本地摄像头/麦克风,通过 WHIP 协议推流至 Live777 SFU
  3. RTSP 协议桥接 — 输入 RTSP 地址自动通过 Rust/Go 桥接服务转为 WHEP 播放,接入 IP 摄像头
  4. 全功能播放控制 — 播放/暂停/停止、音量滑块 0-100%、静音、全屏、画中画、截图、键盘快捷键(Space/F/M/Escape)
  5. 实时流状态统计 — 分辨率、码率(kbps)、帧率(fps)、RTT(ms)、抖动(ms)、丢包率(%)、编解码器、连接状态,1 秒轮询
  6. 多路并发播放 — 频道 CRUD + 1/4/9/16 路网格布局,在线状态实时指示,频道列表 localStorage 持久化
  7. Web 端与移动端适配 — 桌面三栏布局(侧边栏+播放区+设置),移动端全宽播放器+可展开底部抽屉+触摸交互,响应式旋转适配
  8. 自动化测试与 CI — Playwright 25 个 E2E 测试场景覆盖桌面+移动端,GitHub Actions 自动 TypeCheck/Build/E2E/Rust Check

Live777 Player


项目截图

Web 端主界面

Web端主界面

移动端界面

移动端主界面


系统架构图

┌─────────────────────────────────────────────────────┐
│              浏览器(Live777 Player)                 │
│                                                     │
│  ┌──────────┐  ┌──────────┐  ┌────────┐  ┌──────┐  │
│  │ WHEP 拉流 │  │ WHIP 推流 │  │ 控制栏  │  │统计  │  │
│  │ RTCPeer  │  │ getUser  │  │ 全屏   │  │分辨率 │  │
│  │ Connection│  │ Media    │  │ 音量   │  │码率   │  │
│  └────┬─────┘  └────┬─────┘  └────────┘  │RTT   │  │
│       │              │                    └──────┘  │
│       │ WHEP 订阅    │ WHIP 发布                    │
└───────┼──────────────┼─────────────────────────────┘
        │              │
        ▼              ▼
┌──────────────────────────────────────────────────┐
│          Live777 SFU(端口 7777)                  │
│          选择性转发单元 / 协议转换                   │
└──────┬───────────────────────────────────────────┘


┌──────────────────────────────────────────────────┐
│     RTSP 桥接 — Rust/axum(端口 4002)            │
│     POST /bridge/rtsp  →  WHEP URL               │
└──────┬───────────────────────────────────────────┘
       │ RTSP

┌──────────────────────────────────────────────────┐
│             RTSP 摄像头 / IP 摄像头                 │
└──────────────────────────────────────────────────┘

代码仓库

演示

在线演示: 启动 Live777 SFU + 播放器后访问 http://localhost:3000

快速体验:

bash
# 1. 启动 Live777 引擎
docker run -d --name live777 -p 7777:7777 ghcr.io/binbat/live777-server:latest

# 2. 启动播放器
cd player && npm install && npm run dev

# 3. 浏览器打开 http://localhost:3000

项目亮点

  • 类型安全第一: TypeScript 7 项 strict 标志全开 + ESLint strictTypeChecked,编译期即可拦截大量潜在 bug;Rust 桥接服务利用编译期所有权检查和错误穷举,消除数据竞争和 nil 指针风险
  • 完整的 WebRTC 协议栈: 同时支持 WHEP(拉流)/ WHIP(推流)/ RTSP(桥接)三种协议,前端智能识别 URL 协议类型并自动路由
  • 结构化日志系统: 自研 JSON 格式日志,含 correlationId(关联 ID)、module(模块标记),便于快速定位和归因问题
  • 可量化的性能指标: 内置首帧计时(WhepClient.firstFrameMs),Buffering 策略(low/normal/high/auto)映射到 WebRTC playoutDelayHint,可精确控制延迟
  • 自动化测试保障: Playwright 25+ E2E 测试场景 × 桌面+移动端双项目,GitHub Actions CI 自动执行 TypeCheck/Lint/Build/E2E/Rust Check
  • 跨平台适配: 桌面三栏布局与移动端全宽布局无缝切换,响应式旋转适配,触摸交互(双击全屏、单击显示控制栏)

项目总结

本项目从零构建了一个功能完善的 WebRTC 流媒体播放器客户端。通过严格的类型系统约束和全面的自动化测试,在保持代码质量的同时实现了 8 项核心功能的完整交付。

主要收获:

  • 深入理解了 WebRTC 协议栈(ICE/DTLS/SCTP/SDP)、WHIP/WHEP 标准的工作流程
  • 实践了 TypeScript 严格模式 + Rust 编译期安全的前后端技术组合,体会到类型系统在工程中的实际价值
  • 通过 Playwright E2E 测试搭建了自动化回归验证体系,迭代效率显著提升
  • 在响应式布局、触摸交互、多路并发等用户体验细节上积累了实践经验

西安电子科技大学广州研究院