diff --git a/packages/client-v2/README.md b/packages/client-v2/README.md index e17039f..de5bff0 100644 --- a/packages/client-v2/README.md +++ b/packages/client-v2/README.md @@ -2,205 +2,6 @@ > 开发中,敬请期待... -实时音频流推送服务,支持多客户端连接、音频录制/播放、RPC 远程调用和实时事件推送。 - -## 架构 - -``` -┌─────────────────────────────────────────────────────────────────────────┐ -│ Server │ -│ │ -│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ -│ │ SessionManager │ │ AudioBus │ │ EventBus │ │ -│ │ │ │ (Pub/Sub) │ │ (Broadcast) │ │ -│ │ ├─ Session 1 │ │ │ │ │ │ -│ │ ├─ Session 2 │◄──►│ ├─ Receiver │ │ ├─ Server → │ │ -│ │ └─ Session N │ │ └─ Broadcaster │ │ └─ Client → │ │ -│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ -│ │ │ │ │ -│ ▼ ▼ ▼ │ -│ ┌─────────────────────────────────────────────────────────────────┐ │ -│ │ Command Handler │ │ -│ │ ├─ Shell (执行远程命令) │ │ -│ │ ├─ GetInfo (获取设备信息) │ │ -│ │ ├─ SetVolume (设置音量) │ │ -│ │ ├─ File (文件操作) │ │ -│ │ └─ System (系统控制) │ │ -│ └─────────────────────────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────────────┘ - │ TCP │ UDP - ▼ ▼ -┌─────────────────────────────────────────────────────────────────────────┐ -│ Client │ -│ │ -│ ┌─────────────────┐ ┌─────────────────────────────────────────┐ │ -│ │ Session │ │ Audio Pipelines │ │ -│ │ │ │ │ │ -│ │ ├─ Connection │ │ ┌───────────┐ ┌───────────────┐ │ │ -│ │ ├─ RPC Manager │ │ │ Record │ │ Playback │ │ │ -│ │ └─ Pipelines │◄──►│ │ Pipeline │ │ Pipeline │ │ │ -│ └─────────────────┘ │ │ │ │ │ │ │ -│ │ │ Mic→Opus │ │ Opus→Speaker │ │ │ -│ │ │ →UDP │ │ ←UDP │ │ │ -│ │ └───────────┘ └───────────────┘ │ │ -│ └─────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────────────┘ -``` - -## 项目结构 - -``` -src/ -├── lib.rs -├── app/ -│ ├── server/ # 服务端 -│ │ ├── mod.rs # Server 主体 -│ │ ├── audio_bus.rs # 音频总线 (发布-订阅) -│ │ ├── session.rs # 会话管理 -│ │ └── stream.rs # 音频流 (录音/播放/转发) -│ │ -│ └── client/ # 客户端 -│ ├── mod.rs # Client 主体 -│ ├── session.rs # 会话管理 -│ └── pipeline.rs # 音频管道 -│ -├── audio/ # 音频处理 -│ ├── codec.rs # Opus 编解码 -│ ├── config.rs # 音频配置 -│ ├── player.rs # ALSA 播放 -│ ├── recorder.rs # ALSA 录音 -│ └── wav.rs # WAV 文件读写 -│ -├── net/ # 网络层 -│ ├── command.rs # RPC 命令类型 -│ ├── discovery.rs # 服务发现 -│ ├── event.rs # 实时事件系统 -│ ├── network.rs # TCP/UDP 连接 -│ ├── protocol.rs # 通信协议 -│ └── rpc.rs # RPC 管理 -│ -└── bin/ - ├── client.rs # 客户端 demo - └── server.rs # 服务端 demo -``` - -## 功能特性 - -### RPC 命令系统 - -支持多种类型的远程调用: - -| 命令 | 描述 | 请求 | 响应 | -| ----------- | --------------- | --------------------------------- | ------------------------------------------- | -| `Shell` | 执行 Shell 命令 | command, cwd, env, timeout | stdout, stderr, exit_code | -| `GetInfo` | 获取设备信息 | - | model, serial, version, uptime, audio_state | -| `SetVolume` | 设置音量 | volume (0-100) | previous, current | -| `File` | 文件操作 | Read/Write/Delete/List/Stat | data/entries/stat | -| `System` | 系统控制 | Reboot/Shutdown/GetLoad/GetMemory | Accepted/Load/Memory | -| `Ping` | 延迟测量 | timestamp | timestamp, server_time | - -### 实时事件系统 - -**服务端事件 (Server → Client):** - -- `AudioStatusChanged` - 音频状态变化 -- `ClientJoined/Left` - 客户端加入/离开 -- `Notification` - 通知消息 -- `RecordingComplete` - 录音完成 -- `PlaybackComplete` - 播放完成 - -**客户端事件 (Client → Server):** - -- `StatusUpdate` - 状态更新 (CPU/内存/温度) -- `AudioLevel` - 音频电平 -- `KeyPress` - 按键事件 -- `Alert` - 警告/错误 - -### 音频功能 - -- **录音**: 从客户端麦克风录制,服务端保存为 WAV -- **播放**: 服务端推送音频文件到客户端播放 -- **编码**: Opus 编解码,支持 16kHz/48kHz -- **传输**: UDP 低延迟传输 - -## 使用方法 - -### 启动服务端 - -```bash -cargo run --bin server --release -``` - -### 启动客户端 (Linux) - -```bash -cargo run --bin client --release -``` - -### 交叉编译 (ARM) - -```bash -make build-arm -``` - -## 配置 - -通过环境变量配置认证: - -```bash -export XIAO_SERVER_AUTH="your-server-secret" -export XIAO_CLIENT_AUTH="your-client-secret" -``` - -## 示例代码 - -### 服务端 - -```rust -use xiao::app::server::Server; -use xiao::net::command::Command; - -let server = Arc::new(Server::new().await?); - -// 启动服务器 -tokio::spawn(async move { - server.run(8080).await.unwrap(); -}); - -// 执行远程命令 -let result = server.shell(client_addr, "uname -a").await?; -println!("Output: {}", result.stdout); - -// 开始录音 -server.start_record(client_addr, AudioConfig::voice_16k()).await?; - -// 广播事件 -server.broadcast_event(ServerEvent::Notification { - level: NotificationLevel::Info, - title: "Notice".to_string(), - message: "Hello everyone!".to_string(), -}).await; -``` - -### 客户端 - -```rust -use xiao::app::client::{Client, ClientConfig}; - -let client = Arc::new(Client::new(ClientConfig::default())); - -// 订阅服务端事件 -let mut events = client.subscribe_events(); -tokio::spawn(async move { - while let Ok(event) = events.recv().await { - println!("Event: {:?}", event); - } -}); - -// 运行客户端 -client.run().await?; -``` - ## License MIT License © 2026-PRESENT [Del Wang](https://del.wang)