# Realtime Plugin
实时语音聊天插件,通过WebSocket连接Vocode服务器实现实时语音交互。
## 功能特性
- **实时音频录制**: 16kHz/16-bit/单声道格式录音
- **WebSocket通信**: 与Vocode服务器进行实时数据传输
- **音频播放**: 播放服务器返回的语音数据
- **状态管理**: 连接状态和语音状态监控
- **事件回调**: 支持各种事件的监听和处理
## 技术实现
### Android端实现
- **音频录制**: 使用AudioRecord进行16kHz/16-bit/单声道录音
- **音频播放**: 使用AudioTrack进行音频播放
- **WebSocket**: 使用OkHttp WebSocket客户端
- **线程管理**: 使用Kotlin协程处理录音和播放
### iOS端实现
- **音频录制**: 使用AVAudioEngine和AVAudioInputNode
- **音频播放**: 使用AVAudioPlayerNode进行播放
- **WebSocket**: 使用URLSessionWebSocketTask
- **线程管理**: 使用DispatchQueue管理录音和播放线程
### 核心组件
- `RealtimePlugin`: 主插件入口,处理Flutter方法调用
- `RealtimeAudioManager`: 音频管理器,负责录音和播放
- `RealtimeWebSocketManager`: WebSocket管理器,负责网络通信
**Android端组件**:
- AudioRecord + AudioTrack + OkHttp + Kotlin协程
- 对应您提供的Android原生示例功能
**iOS端组件**:
- AVAudioEngine + AVAudioPlayerNode + URLSessionWebSocketTask + DispatchQueue
## 使用方法
```dart
import 'package:realtime/realtime.dart';
final realtimeService = RealtimeService();
// 初始化
await realtimeService.initialize(
serverUrl: 'wss://your-server/ws',
sampleRate: 16000,
channels: 1,
bitsPerSample: 16,
);
// 监听事件
realtimeService.eventStream.listen((event) {
switch (event.type) {
case 'connectionStatusChanged':
// 处理连接状态变化
break;
case 'voiceStatusChanged':
// 处理语音状态变化
break;
case 'textReceived':
// 处理收到的文本消息
break;
case 'error':
// 处理错误
break;
}
});
// 连接服务器
await realtimeService.connect();
// 开始录音
await realtimeService.startRecording();
// 停止录音
await realtimeService.stopRecording();
// 断开连接
await realtimeService.disconnect();
// 释放资源
await realtimeService.dispose();
```
## 音频格式
- **采样率**: 16000 Hz
- **声道数**: 1(单声道)
- **位深**: 16-bit
- **帧长**: 20ms (320字节)
## 权限要求
### Android
权限已自动包含在插件中:
- `RECORD_AUDIO`: 音频录制权限
- `INTERNET`: 网络访问权限
- `ACCESS_NETWORK_STATE`: 网络状态权限
### iOS
在Info.plist中添加麦克风权限:
```xml
NSMicrophoneUsageDescription
应用需要麦克风权限进行语音录制
```
## 注意事项
1. 确保服务器地址正确且可访问
2. 网络环境良好,避免频繁断线
3. 音频格式与服务器保持一致
4. 及时释放资源,避免内存泄漏
## 错误处理
插件会自动处理常见错误:
- 网络连接失败
- 音频设备不可用
- 权限被拒绝
- 服务器断开连接
通过事件流可以监听这些错误并进行相应处理。