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.
wolfplus d445c4afa6 add 1 year ago
..
android add 1 year ago
ios/realtime add 1 year ago
lib add 1 year ago
.gitignore add 1 year ago
IMPLEMENTATION.md add 1 year ago
README.md add 1 year ago
example.md add 1 year ago
pubspec.yaml add 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>

注意事项

  1. 确保服务器地址正确且可访问
  2. 网络环境良好,避免频繁断线
  3. 音频格式与服务器保持一致
  4. 及时释放资源,避免内存泄漏

错误处理

插件会自动处理常见错误:

  • 网络连接失败
  • 音频设备不可用
  • 权限被拒绝
  • 服务器断开连接

通过事件流可以监听这些错误并进行相应处理。