# 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. 及时释放资源,避免内存泄漏 ## 错误处理 插件会自动处理常见错误: - 网络连接失败 - 音频设备不可用 - 权限被拒绝 - 服务器断开连接 通过事件流可以监听这些错误并进行相应处理。