You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
1 year ago | |
|---|---|---|
| .. | ||
| android | 1 year ago | |
| ios | 1 year ago | |
| lib | 1 year ago | |
| .gitignore | 1 year ago | |
| IMPLEMENTATION.md | 1 year ago | |
| README.md | 1 year ago | |
| example.md | 1 year ago | |
| pubspec.yaml | 1 year ago | |
README.md
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
使用方法
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中添加麦克风权限:
<key>NSMicrophoneUsageDescription</key>
<string>应用需要麦克风权限进行语音录制</string>
注意事项
- 确保服务器地址正确且可访问
- 网络环境良好,避免频繁断线
- 音频格式与服务器保持一致
- 及时释放资源,避免内存泄漏
错误处理
插件会自动处理常见错误:
- 网络连接失败
- 音频设备不可用
- 权限被拒绝
- 服务器断开连接
通过事件流可以监听这些错误并进行相应处理。