WebRTC 音视频通话应用
一个基于WebRTC的实时音视频通话web应用,使用WebRTC技术传输视频流。用户开始通话后会自动播放默认视频流,当用户进行音频或文本对话时会切换到相应的视频流,交互结束后自动回到默认视频流。
功能特性
- 🎤 实时音频通话: 基于WebRTC技术实现点对点音频通话
- 📹 WebRTC视频流传输: 使用WebRTC技术传输视频流,而非播放本地文件
- 📐 固定视频比例: 视频播放框固定9:16比例,适合移动端显示
- 🎬 无播放条界面: 隐藏视频播放条,提供纯净的观看体验
- 💬 文本输入识别: 根据输入的文本内容切换相应视频流
- 🎤 语音输入识别: 支持语音输入并切换对应视频流
- 🔄 自动回退: 交互结束后自动回到默认视频流
- 🎨 现代化UI: 响应式设计,支持移动端和桌面端
- 🔄 实时同步: 所有用户实时同步视频流状态
WebRTC视频流传输机制
- 视频流创建: 将本地视频文件转换为MediaStream
- Canvas渲染: 使用Canvas将视频渲染为实时流
- 流切换: 根据用户交互动态切换不同的视频流
- 实时同步: 所有用户实时同步视频流状态
- 缓存机制: 缓存已创建的视频流,提高切换效率
- 多用户传输: 通过WebRTC技术向所有连接用户传输视频流
技术栈
- 前端: HTML5, CSS3, JavaScript (ES6+)
- 后端: Node.js, Express.js
- 实时通信: Socket.IO
- 音视频: WebRTC API, Canvas API
- 视频处理: MediaStream API
安装和运行
前提条件
- Node.js (版本 14 或更高)
- 现代浏览器 (支持WebRTC和Canvas)
安装依赖
# 使用npm安装依赖
npm install
# 或使用yarn安装依赖
yarn install
启动应用
# 开发模式(自动重启)
npm run dev
# 或生产模式
npm start
访问 http://localhost:3000 开始使用应用。
项目结构
new_rtc/
├── src/ # 前端源代码
│ ├── index.html # 主HTML文件
│ ├── index.js # 主JavaScript文件
│ └── styles.css # 样式文件
├── videos/ # 视频文件目录
│ ├── asd.mp4 # 默认视频文件
│ ├── zxc.mp4 # 示例视频文件
│ └── jkl.mp4 # 示例视频文件
├── server.js # Express服务器
├── package.json # 项目配置
└── README.md # 项目说明
使用说明
1. 开始音频通话
- 点击"开始音频通话"按钮
- 允许浏览器访问麦克风
- 音频状态将显示"已连接"
- 系统自动开始播放默认视频流(9:16比例,无播放条)
2. 智能视频流切换
- WebRTC视频流: 使用WebRTC技术传输视频流,而非播放本地文件
- 固定比例显示: 视频播放框固定9:16比例,适合移动端观看
- 纯净界面: 隐藏播放条,提供沉浸式观看体验
- 文本输入: 在文本框中输入内容,系统会根据关键词自动切换视频流
- 语音输入: 点击语音按钮进行语音输入,系统会识别并切换视频流
- 自动回退: 交互结束后10秒自动回到默认视频流
- 手动控制: 点击"回到默认视频"按钮立即回到默认视频流
3. 视频映射配置
在 server.js 中可以配置文本到视频的映射关系:
const videoMapping = {
'你好': 'asd.mp4',
'hello': 'asd.mp4',
'再见': 'zxc.mp4',
'goodbye': 'zxc.mp4',
'谢谢': 'jkl.mp4',
'thank you': 'jkl.mp4',
'默认': 'asd.mp4'
};
4. 默认视频配置
在 server.js 中可以修改默认视频:
const DEFAULT_VIDEO = 'asd.mp4'; // 修改为您的默认视频文件名
添加新视频
- 将视频文件放入
videos/目录 - 支持的格式: MP4, WebM, AVI
- 在
server.js中更新视频映射配置 - 重启服务器
语音识别
当前版本使用模拟语音识别。要集成真实的语音识别,可以:
- 使用Web Speech API
- 集成第三方语音识别服务(如百度、阿里云等)
- 修改
processVoiceInput方法中的语音识别逻辑
浏览器兼容性
- Chrome 60+
- Firefox 55+
- Safari 11+
- Edge 79+
注意事项
- 需要HTTPS环境才能使用麦克风(本地开发除外)
- 确保浏览器允许访问麦克风权限
- 视频文件应放在
videos/目录中 - 建议使用现代浏览器以获得最佳体验
- 交互超时时间可在服务器端配置(默认10秒)
- 视频流使用Canvas渲染,确保浏览器支持Canvas API
故障排除
无法访问麦克风
- 检查浏览器权限设置
- 确保使用HTTPS或localhost
- 检查设备是否被其他应用占用
视频流无法创建或黑屏
- 检查视频文件格式是否支持
- 确认视频文件路径正确
- 检查浏览器是否支持Canvas API
- 查看浏览器控制台是否有错误信息
- 使用"测试视频文件"按钮检查视频文件是否可访问
- 确保视频文件在
videos/目录中存在
连接问题
- 检查网络连接
- 确认服务器正在运行
- 检查防火墙设置
CSS样式问题
- 确保
src/styles.css文件存在 - 检查浏览器控制台是否有404错误
- 确认服务器正确配置了静态文件服务
许可证
MIT License
贡献
欢迎提交Issue和Pull Request来改进这个项目。
Description
Languages
JavaScript
88%
CSS
6.5%
HTML
5.5%