AI源码
AI源码AI 精选 · 优质源码 · 助力学习

在线视频聊天项目说明

本项目是一个基于 WebRTC P2P 的多人视频聊天室,采用前后端分离架构。音视频数据不经过服务器,由客户端之间通过 WebRTC 直连传输;服务器仅负责 SDP 信令转发 与 房间管理。

评分:4.8/5.0
销量:81
发布:2026/6/24
难度:L2 进阶级
💬 联系咨询
永久使用权限
免费更新维护
技术支持服务

项目说明

在线视频聊天项目说明

项目概述

本项目是一个基于 WebRTC P2P 的多人视频聊天室,采用前后端分离架构。音视频数据不经过服务器,由客户端之间通过 WebRTC 直连传输;服务器仅负责 SDP 信令转发房间管理

仓库根目录包含两个版本:

目录说明
版本1/完整功能版:Express 后端 + Vue3 前端,含聊天、屏幕共享、设备切换、图片编辑、视频录制等
版本2/精简版:独立 Vite 前端 + 轻量 Socket 服务端

本文档重点说明 版本1 的文件结构与运行环境。


版本1 技术栈

前端(版本1/vue3

类别技术
框架Vue 3.3
语言TypeScript 5
构建工具Vite 4
状态管理Pinia 2
UI 组件库Ant Design Vue 4
实时通信Socket.IO Client 4.7
样式Sass / SCSS
其他Vue JSX、mitt 事件总线、unplugin-vue-components 按需引入

后端(版本1/express

类别技术
运行时Node.js
Web 框架Express 4.18
实时通信Socket.IO 4.7
中间件body-parser
开发工具nodemon、cross-env

运行环境

基础要求

项目要求
Node.js建议 16.x 及以上(推荐 18+ / 20+)
包管理器npm / yarn / pnpm 均可
浏览器支持 WebRTC 的现代浏览器(Chrome、Edge、Firefox、Safari 等)
操作系统macOS / Windows / Linux

端口与网络

服务默认端口协议说明
Express 后端3000开发环境 HTTP / 生产环境 HTTPSSocket.IO 信令服务
Vue3 前端5173(Vite 默认)HTTP开发服务器,通过代理访问后端

环境变量

前端版本1/vue3/.env.development / .env.production):

变量说明
VITE_NODE_ENV运行环境:development / production
VITE_DEV_MODE是否开启开发者模式(开发环境)
VITE_APP_TITLE应用标题
VITE_BASE_URLAPI 基础路径,默认 /api

后端

变量说明
NODE_ENVdevelopment 时使用 HTTP;非 development 时使用 HTTPS(需配置 SSL 证书)

开发代理

前端 vite.config.ts 已配置代理:

  • /apihttp://localhost:3000(REST 接口)
  • /socket.iohttp://localhost:3000(WebSocket 信令)

版本1 启动方式

需分别启动后端与前端两个服务。

1. 启动后端

cd 版本1/express
npm install
npm run start    # 等价于 npm run dev,使用 nodemon 热重载

启动成功后控制台输出:http://localhost:3000/

2. 启动前端

cd 版本1/vue3
npm install
npm run dev

浏览器访问 Vite 开发地址(通常为 http://localhost:5173)。

3. 生产构建(前端)

cd 版本1/vue3
npm run build      # 输出到 dist/
npm run preview    # 本地预览构建结果

版本1 架构说明

┌─────────────┐     Socket.IO 信令      ┌─────────────┐
│  Vue3 客户端 │ ◄──────────────────────► │ Express 服务端 │
│  (WebRTC)   │     offer/answer/ice     │  (房间管理)   │
└──────┬──────┘                          └─────────────┘
       │
       │  WebRTC P2P 直连(音视频 / 数据通道)
       ▼
┌─────────────┐
│  其他客户端  │
└─────────────┘
  • 服务端:维护房间、用户列表,转发 WebRTC 信令(SDP、ICE Candidate),不转发媒体流。
  • 客户端:封装 WebRTC SDK(src/utils/WebRTC/),实现 P2P 连接、屏幕共享、设备切换、断线重连等。

版本1 文件目录结构

版本1/
├── express/                          # 后端服务
│   ├── config/
│   │   └── database.js               # 内存数据存储(clients、rooms、userInfoMap)
│   ├── src/
│   │   ├── app.js                    # 应用入口,组装 Express + Router + Socket
│   │   ├── middlewares/
│   │   │   └── index.js              # 全局中间件(body-parser 等)
│   │   ├── router/
│   │   │   ├── index.js              # 路由自动注册(扫描 router 目录)
│   │   │   └── userRouter.js         # 用户相关 REST 接口
│   │   ├── services/
│   │   │   └── index.js              # Express 实例创建,定义 PORT=3000
│   │   └── utils/
│   │       ├── socket.js             # Socket.IO 核心:房间、信令、重连逻辑
│   │       └── util.js               # 工具函数(debounce 等)
│   ├── package.json
│   └── README.md                     # Socket 事件协议文档
│
└── vue3/                             # 前端应用
    ├── public/
    │   └── logo.svg                  # 静态资源
    ├── src/
    │   ├── main.ts                   # 应用入口:Pinia、自定义指令注册
    │   ├── App.vue                   # 根组件
    │   ├── style.css                 # 全局样式
    │   ├── assets/                   # 静态资源
    │   │   ├── emojis.ts             # 表情数据
    │   │   └── file-type/            # 文件类型图标(pdf、word、zip 等)
    │   ├── views/
    │   │   └── ChatRoom.vue          # 聊天室主页面
    │   ├── components/               # 业务组件
    │   │   ├── Layout.vue            # 页面布局
    │   │   ├── UserIcon.vue          # 用户头像
    │   │   ├── FileList.vue          # 文件列表
    │   │   ├── VideoRecorder.vue     # 视频录制
    │   │   ├── scrollbar.vue         # 滚动条
    │   │   ├── chat/                 # 聊天相关
    │   │   │   ├── Chat.vue          # 聊天面板
    │   │   │   ├── Emoji.vue         # 表情选择
    │   │   │   ├── MessageList.vue   # 消息列表
    │   │   │   └── MessageFile.vue   # 文件消息
    │   │   ├── chatroom/             # 房间相关
    │   │   │   ├── Join.vue          # 加入房间
    │   │   │   ├── MemberList.vue    # 成员列表
    │   │   │   └── DeviceSelect.vue  # 设备选择(摄像头/麦克风)
    │   │   ├── edit/                 # 图片编辑(TSX/JSX)
    │   │   │   ├── EditImage.tsx
    │   │   │   ├── EditImage.jsx
    │   │   │   └── utils.ts
    │   │   ├── preview/              # 图片预览
    │   │   │   └── PreviewImage.tsx
    │   │   └── menu/                 # 右键菜单
    │   │       └── menu.tsx
    │   ├── hooks/                    # 组合式函数
    │   │   ├── useMenu.ts            # 菜单逻辑
    │   │   ├── useVideoRecorder.ts   # 视频录制
    │   │   ├── useResizeObserver.ts  # 尺寸监听
    │   │   ├── useSlotRef.ts         # 插槽引用
    │   │   └── useWebWorkerFn.ts     # Web Worker 封装
    │   ├── store/                    # Pinia 状态管理
    │   │   ├── index.ts
    │   │   └── modules/
    │   │       └── chat.ts           # 聊天状态
    │   ├── styles/
    │   │   └── variables.scss        # SCSS 全局变量
    │   ├── test/                     # 功能测试/演示组件
    │   │   ├── AudioVisualizer.vue   # 音频可视化
    │   │   ├── Canvas.vue            # Canvas 测试
    │   │   ├── Clipboard.vue         # 剪贴板测试
    │   │   └── SpeechRecognition.vue # 语音识别测试
    │   └── utils/                    # 工具与核心 SDK
    │       ├── WebRTC/               # WebRTC 核心封装
    │       │   ├── rtc-client.ts     # RTC 客户端 SDK 入口
    │       │   ├── WebRTC.ts         # WebRTC 连接管理
    │       │   └── message.ts        # 信令消息定义
    │       ├── MediaDevices/
    │       │   └── mediaDevices.ts   # 媒体设备管理
    │       ├── audio/
    │       │   ├── audioVisualizer.ts
    │       │   └── speechRecognition.ts
    │       ├── Canvas/
    │       │   └── html2canvas.ts    # 截图
    │       ├── Clipboard/
    │       │   └── clipboard.ts      # 剪贴板
    │       ├── directive/            # Vue 自定义指令
    │       │   ├── index.ts
    │       │   ├── vEditImage.ts     # 图片编辑指令
    │       │   ├── vMenu.ts          # 右键菜单指令
    │       │   ├── vPreview.ts       # 图片预览指令
    │       │   └── vSelectFile.ts    # 文件选择指令
    │       ├── socket-client.ts      # Socket.IO 客户端封装
    │       ├── fileUtils.ts          # 文件处理
    │       ├── formatDate.ts         # 日期格式化
    │       ├── colorUtils.ts         # 颜色工具
    │       ├── event.ts              # 事件工具
    │       ├── message.ts            # 消息工具
    │       ├── observer.ts           # 观察者模式
    │       ├── queue.ts              # 队列
    │       └── util.ts               # 通用工具
    ├── types/
    │   └── global.d.ts               # 全局类型声明
    ├── index.html                    # HTML 入口
    ├── vite.config.ts                # Vite 配置(代理、别名、构建)
    ├── tsconfig.json                 # TypeScript 配置
    ├── tsconfig.node.json
    ├── components.d.ts               # 组件自动导入类型
    ├── .env.development              # 开发环境变量
    ├── .env.production               # 生产环境变量
    ├── package.json
    └── README.zh-CN.md               # 前端详细文档(含 RTCClient API)

版本1 核心模块说明

后端模块

文件职责
src/app.js启动入口,依次初始化中间件、路由、Socket
src/utils/socket.jsSocket.IO 事件处理:join/leave、offer/answer、icecandidate、reconnect
config/database.js内存存储:clients(连接映射)、rooms(房间)、userInfoMap(用户信息)
src/router/userRouter.js用户相关 HTTP 接口
src/services/index.js创建 Express 实例,端口固定为 3000

前端模块

目录/文件职责
views/ChatRoom.vue聊天室主界面,整合视频、聊天、成员列表
utils/WebRTC/WebRTC SDK,封装 P2P 连接、屏幕共享、设备切换、断线重连
utils/directive/自定义指令:图片编辑、预览、右键菜单、文件选择
components/chatroom/加入房间、成员管理、设备选择
components/chat/文字/文件/表情消息
store/modules/chat.ts聊天消息 Pinia 状态
hooks/useVideoRecorder.ts视频录制 Hook

Socket 信令事件(前后端约定)

事件名方向说明
join客户端 → 服务端加入房间
leave双向离开房间
offer / answer双向WebRTC SDP 交换
icecandidate双向ICE 候选交换
getOffer客户端 → 服务端请求对端 offer
reconnect / reconnectWork双向断线重连
error服务端 → 客户端错误通知(如用户名重复)

详细协议见 版本1/express/README.md


仓库根目录结构

online-video-chat---simple/
├── 项目说明.md          # 本文档
├── 版本1/               # 完整版(Express + Vue3)
│   ├── express/
│   └── vue3/
└── 版本2/               # 精简版(Vite + 轻量 Server)
    ├── src/
    ├── server/
    └── ...

技术分类

包含内容

完整源码
项目说明文档
演示材料

适用人群

学习参考与二次开发

关于 AI源码

AI源码 专注优质项目源码分享,提供完整源码、详细文档与技术支持,助力源码设计与课程作业。

QQ: 861077046
邮箱: 861077046@qq.com
已服务 81+ 位用户
立即咨询

相关推荐

查看全部 →
本地生活小程序
小程序
进阶

本地生活小程序

本项目是一个基于微信小程序原生开发的本地生活服务平台,提供餐厅推荐、招聘信息、生活服务分类、近期活动展示等功能,是一个典型的O2O本地生活服务类小程序。

小程序
4.869
电影购票网站
HTML
NEW
进阶

电影购票网站

基于原生 HTML、CSS、JavaScript 实现的 PC 端电影在线购票演示网站。数据使用本地 Mock 模拟,订单与座位占用状态通过浏览器 持久化,无需后端服务,直接用浏览器打开 即可运行。

HTML大作业
4.869
家乡介绍小程序
小程序
进阶

家乡介绍小程序

这是一个家乡文化展示与旅游推荐的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目以广东省惠州市惠东县为示例,完整实现了景点浏览、美食推荐、乡镇介绍、历史回顾、收藏管理等核心功能,适合作为微信小程序开发学习项目或计算机设计参考。

小程序
4.824
乡村振兴三农小程序
小程序
进阶

乡村振兴三农小程序

这是一个乡村振兴与三农服务的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目完整实现了政策解读、农业科技、数字乡村、乡村旅游、农产品展销、乡风文明、人才振兴、基层党建、经验分享等核心功能模块,适合作为微信小程序开发学习项目或计算机设计参考。

小程序
4.889
图书借阅小程序
Node
进阶

图书借阅小程序

这是一个图书借阅管理的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目完整实现了图书浏览、分类筛选、搜索查询、收藏管理、借阅下单、订单管理等核心功能,适合作为微信小程序开发学习项目或计算机设计参考。

Node小程序Vue2+1
4.865
垃圾上门回收小程序
Node
进阶

垃圾上门回收小程序

这是一个完整的垃圾上门回收服务平台,包含微信小程序端。系统实现了垃圾分类回收预约、订单管理、地址管理、系统配置等核心功能,采用Egg.js后端框架,适合作为微信小程序全栈开发学习项目或计算机设计参考。

Node小程序Vue2+1
4.877