185 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 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来改进这个项目。  | 
