WebRtc_QingGan/README.md
2025-07-23 15:55:48 +08:00

185 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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