# 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来改进这个项目。 