# SIP客户端与USB蓝牙模块集成需求文档
## 1. 系统概述
开发跨平台(ARM/X86,也可以是单平台)的SIP客户端管理系统,实现**多USB蓝牙模块(外置声卡设备)与多SIP客户端的一对一动态绑定**,构建SIP服务器到多手机的并行呼叫通道。系统支持设备热插拔管理、账号-设备绑定配置及分布式音频路由。
- USB设备动态绑定
- SIP注册管理
- 音频路由控制
## 2. 详细需求
### 2.1 USB蓝牙模块管理
#### 设备识别
- 应用程序实时监控USB接口,识别预定义的USB蓝牙模块(通过VID/PID或设备特征码过滤)
- 支持同时接入多个同型号模块,每个模块独立处理
#### 驱动与绑定
- 自动加载系统级驱动(如HCI音频驱动),确保设备作为标准音频输入/输出设备被识别
- 设备插入时,启动**独立进程**绑定模块(一对一关系),进程隔离保证稳定性
#### 生命周期管理
- 设备拔出时自动释放资源并终止对应进程
- 进程异常退出后支持自动重启绑定
### 2.2 SIP客户端核心功能
#### 账号配置
提供配置文件/命令行/API接口,动态设置以下参数:
```ini
# 设备绑定配置文件 (device_binding.conf)
[DEVICE:SN-12345] # 蓝牙模块序列号
SIP_USER = ext1001
SERVER = sip.example.com
PASSWORD=encrypted_password
CODECS=G.711,PCMA
AUDIO_DEV = hw:BTModule1 # ALSA设备名
[DEVICE:SN-67890]
SIP_USER = ext1002
SERVER = sip.example.com
PASSWORD=encrypted_password
CODECS=G.711,PCMA
AUDIO_DEV = hw:BTModule2
```
支持TLS/SRTP加密配置。
#### 注册与状态维护
- 自动向SIP服务器注册并维持心跳(定期发送REGISTER)
- 注册状态实时日志记录(成功/失败及错误码)
#### 呼叫控制
- 自动接听SIP服务器发起的呼叫(INVITE请求)
- 支持DTMF中继(RFC 2833)及基本SIP方法(ACK, BYE)
### 2.3 音频路由机制
#### 设备绑定
SIP客户端进程独占绑定USB蓝牙模块的音频输入/输出通道(如ALSA设备hw:CardName或PulseAudio Sink)
##### 动态绑定特性
- 设备插入时自动加载对应配置创建SIP实例
- 支持运行时配置热更新(SIGHUP重载)
##### 冲突解决机制
- 设备重复插入时拒绝二次绑定并告警
- SIP账号冲突时自动去注册旧实例
#### 蓝牙-手机链路
通话音频流路径:
```
SIP服务器 → 管理守护进程 → SIP客户端N → USB蓝牙模块N → 手机N
```
多路并发控制:
- 独立音频通道:每个实例分配独立ALSA设备句柄
- 回声消除:每个通道单独启用WebRTC AEC模块
#### 回退机制
呼叫过程中蓝牙断开时,自动发送SIP BYE终止通话并触发告警
### 2.4 非功能性需求
#### 兼容性
- 操作系统:Linux (ALSA/PulseAudio), Windows (WASAPI)
- SIP协议:RFC 3261基础协议栈,支持UDP/TCP传输
#### 性能
- 设备插拔响应延迟 ≤ 1s
- 音频传输延迟 ≤ 100ms(端到端测试)
#### 安全
- 配置文件密码加密存储(AES-256)
- 拒绝未授权SIP请求(防火墙规则+白名单)
#### 日志与监控
- 结构化日志(JSON格式):设备状态、SIP信令、错误事件
- 系统资源监控(进程CPU/内存占用告警)
---
## 3. 系统流程
---
## 4. 交付物
| 组件 | 说明 |
|------|------|
| 设备监控守护进程 | USB热插拔检测、进程生命周期管理 |
| SIP客户端实例 | 单模块绑定的轻量化进程(C++/Python) |
| 配置工具 | 账号管理工具(CLI/GUI可选) |
| 日志分析模块 | 实时故障诊断工具(基于ELK栈) |
| 自动化测试套件 | 系统功能验证(Python测试脚本)|
---
## 5. 验证标准
- 绑定测试:插入USB模块后,SIP客户端进程在3秒内启动并占用音频设备
- 呼叫测试:SIP服务器发起呼叫后,被叫号码在5秒内响铃
- 压力测试:并发处理10+模块时,CPU占用率≤70%(X86四核/2GHz)
- 异常测试:强制拔出模块时,客户端进程优雅退出(无僵尸进程)
> 备注:我方需提供USB蓝牙模块的所有需要的参数和设备。