# och-mrcp **Repository Path**: caoyixiao/och-mrcp ## Basic Information - **Project Name**: och-mrcp - **Description**: java实现的mrcp服务端,实现多厂商对接tts、asr等功能 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2025-12-22 - **Last Updated**: 2025-12-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OCH-MRCP 一个基于 Spring Boot + Netty 的高性能 SIP + RTP + MRCPv2 语音服务。支持对接云端语音识别/合成(当前内置阿里云 ASR/TTS,预留腾讯云配置),并提供可调优的并发与网络参数。 ## 特性 - **协议栈**: SIP、RTP、MRCPv2(自研实现,基于 Netty) - **引擎集成**: 阿里云 ASR/TTS(已接入);腾讯云(配置预留) - **性能优化**: 可配置的 Netty 线程、JitterBuffer、RTP 端口池、限流/缓存、JVM 启动参数 - **可观测性**: Spring Boot Actuator 健康检查与指标 - **日志与JSON**: SLF4J + Logback;com.alibaba.fastjson2 [[memory:6184877]] ## 环境要求 - Java 17+ - Maven 3.6+ - Windows 或 Linux(提供 `scripts/start.bat` 与 `scripts/start.sh`) ## 目录结构 ```text src/main/java/com/och/mrcp/ ├─ config/ # 外部化配置绑定 ├─ core/ │ ├─ sip/ # SIP: model/parser/encoder/transaction │ ├─ rtp/ # RTP: model/session(JitterBuffer、RtpSession*) │ └─ mrcp/ # MRCPv2: model/parser/factory ├─ handler/ # Netty pipeline 处理器 ├─ server/ # SipServer、RtpServer、MrcpServer ├─ service/ # 语音引擎会话与统一管理 └─ resources/ ├─ application.yml # 主要配置 └─ logback-spring.xml # 日志配置 ``` ## 构建 ```bash mvn clean package -DskipTests ``` 产物:`target/och-mrcp-0.0.1-SNAPSHOT.jar` 依赖关键版本: - Spring Boot 3.5.4, Java 17 - Netty 4.1.100.Final - fastjson2 2.0.47 - 阿里云 nls-sdk-transcriber/tts 2.2.13 ## 运行 ### 方式一:直接运行 JAR ```bash java -jar target/och-mrcp-0.0.1-SNAPSHOT.jar \ --spring.profiles.active=prod \ --server.port=8080 \ --logging.file.path=logs/ ``` ### 方式二:使用脚本(推荐) - Linux: `scripts/start.sh` - Windows: `scripts/start.bat` 脚本内置 JVM 调优参数(G1GC、GC 日志、OOM 转储、Netty 优化等),启动前确保已完成打包。 启动后可访问: - 健康检查: `http://localhost:8080/actuator/health` - 指标: `http://localhost:8080/actuator/metrics` ## 端口与服务 - 应用 HTTP/Actuator: `server.port`(默认 8080) - SIP: `sip.udp-port`/`sip.tcp-port`(默认 8060,支持 UDP/TCP) - MRCP 控制: `mrcp.local-port`(默认 1554) - RTP 媒体端口池: `rtp.min-port`-`rtp.max-port`(默认 10000-30000) ## 核心配置(application.yml) 仅列出关键项,详见 `src/main/resources/application.yml`。 - 服务 - `server.port`: 应用端口,默认 8080 - Netty - `netty.boss-threads`、`netty.worker-threads` - `netty.connect-timeout-millis`、`write-timeout-millis`、`read-timeout-millis` - SIP - `sip.local-ip`: 若配置 127.0.0.1,运行时会自动探测非回环网卡用于 Contact 与 SDP c= - `sip.transport`: `udp|tcp`;`enable-tcp/udp`、`tcp-port/udp-port` - 其他: `user-agent`、`session-expires`、`tcp-backlog`、`tcp-keep-alive` - RTP - `rtp.payload-type`: 8=PCMA, 0=PCMU;`sample-rate`、`channels`、`frame-size` - 抖动缓存: `jitter-buffer-size`、`jitter-buffer-timeout-ms`、`enable-jitter-buffer` - 端口池: `min-port`、`max-port` - MRCPv2 - `mrcp.local-port`、`resource-type`(默认 `speechsynth`)、`server-id` - 连接与请求: `max-connections`、`connection-timeout`、`request-timeout`、`enable-keep-alive` - 引擎(ASR/TTS) - `engine.default-provider`: `aliyun`(默认)或自定义 - 识别:`engine.recognition.*`(语言、采样率、超时、VAD、并发池等) - 合成:`engine.synthesis.*`(voice、format、采样率、并发池等) - 阿里云 - `engine.aliyun.access-key-id`、`access-key-secret`、`app-key` - 网关: `nls-gateway-url` - ASR: `engine.aliyun.asr.*` - TTS: `engine.aliyun.tts.*` - 腾讯云(预留) - `engine.tencent.secret-id`、`secret-key`、`app-id` - 区域/端点与 ASR/TTS 细项 - 性能优化 - 线程池:`performance.thread-pool.*` - 连接池:`performance.connection-pool.*` - 限流:`performance.rate-limit.*` - 缓存:`performance.cache.*` - 日志级别 - `logging.level.com.och.mrcp*`、`io.netty`、`root` ## 典型场景配置示例 ```yaml sip: local-ip: 192.168.1.100 enable-udp: true enable-tcp: true udp-port: 8060 tcp-port: 8060 rtp: payload-type: 8 sample-rate: 8000 min-port: 10000 max-port: 30000 mrcp: local-port: 1554 resource-type: speechsynth engine: default-provider: aliyun aliyun: access-key-id: access-key-secret: app-key: ``` ## 开发与调试 - 本地运行:`mvn spring-boot:run` - 修改日志级别:`resources/logback-spring.xml` 或 `application.yml` 的 `logging.level.*` - 观察指标:`/actuator/metrics`,可结合 Prometheus/Grafana ## 常见问题 - 启动报 “JAR not found”:先执行打包 `mvn clean package` - 端口占用:调整 `server.port`、`sip.*-port`、`mrcp.local-port` 或释放占用 - 没有音频/媒体:确认 `rtp.*` 配置与网络连通性(防火墙/安全组) - 识别/合成失败:检查云厂商密钥、网关地址、地域设置与网络可达 - Windows 控制台窗口立即退出:使用 `scripts/start.bat`,会保持窗口并显示健康检查地址 ## 项目信息 - 应用名:`och-mrcp` - 主类:`com.och.mrcp.OchMrcpApplication` - 仓库地址:https://gitee.com/sxwdmjy/och-mrcp