Skip to content

运行配置说明 ​

EasyMrcp 的运行配置主要分成四类:

  • application.yaml:服务端口、SIP、FreeSWITCH 注册、RTP 端口池、TCP 控制端口、默认 ASR/TTS 模式
  • asr/*.properties:各 ASR 厂商的鉴权、识别模式、采样率和重采样配置
  • tts/*.properties:各 TTS 厂商的鉴权、发音人、重采样和首尾静音裁剪配置
  • FreeSWITCH 脚本或业务系统:负责把通话 UUID 通过 X-EasyMRCP 与 EasyMrcp TCP 会话绑定

1. application.yaml ​

application.yaml 控制 EasyMrcp 本身的服务行为。下面是常用配置项:

yaml
server:
  port: 8081

sip:
  sipServer: 172.16.2.155
  sipPort: 5060

mrcp:
  asrMode: aliyun-funasr
  ttsMode: xfyun

rtp:
  nettyThreads: 8
  asr:
    reorderWindowPackets: 2
    maxConsecutiveLossFill: 3
  asrStartPort: 20000
  asrStopPort: 22000
  ttsStartPort: 23000
  ttsStopPort: 25000

tcp:
  server:
    port: 9090

1.1 服务端口 ​

配置项说明
server.portSpring Boot HTTP 服务端口。
tcp.server.portEasyMrcp 自定义 TCP 控制协议端口,客户端发送 ClientConnect、Speak、DetectSpeech 等事件时连接这个端口。

通常业务对接主要使用 tcp.server.port,默认示例里是 9090。

1.2 SIP 配置 ​

配置项说明
sip.sipServerEasyMrcp 本机 SIP 监听地址,填写运行 EasyMrcp 的服务器 IP。
sip.sipPortEasyMrcp 本机 SIP 监听端口,默认 5060。

sip.sipServer 不应写成 FreeSWITCH 地址,而应写 EasyMrcp 自己绑定的地址。FreeSWITCH 或 IP PBX 后续会把 SIP INVITE 发到这个地址。

1.3 默认 ASR/TTS 模式 ​

配置项说明
mrcp.asrMode默认 ASR 厂商或处理器名称。
mrcp.ttsMode默认 TTS 厂商或处理器名称。

当前源码中可见的 ASR 模式包括:

值说明
aliyun-funasr阿里云 DashScope FunASR。
xfyun科大讯飞 ASR。
funasr本地或自建 FunASR。
tencent-cloud腾讯云 ASR。
example-asr示例 ASR 实现。

当前源码中可见的 TTS 模式包括:

值说明
aliyun阿里云 CosyVoice TTS。
xfyun科大讯飞 TTS。
kokoroKokoro TTS。
tencent-cloud腾讯云 TTS。
example-tts示例 TTS 实现。

如果 ClientConnect 中传入 TtsEngine,当前通话可以覆盖默认 mrcp.ttsMode。

2. FreeSWITCH 注册配置 ​

如果希望 EasyMrcp 主动向 FreeSWITCH 注册成一个 SIP 用户,可以启用:

yaml
fs:
  register:
    enabled: true
    server: 172.16.2.205
    port: 5060
    username: 1020
    password: 1020
    domain: 172.16.2.205
    interval: 1800
配置项说明
fs.register.enabled是否启用注册。
fs.register.serverFreeSWITCH 服务器 IP。
fs.register.portFreeSWITCH SIP 端口,通常是 5060。
fs.register.usernameEasyMrcp 注册到 FreeSWITCH 的号码或账号。
fs.register.password注册密码。
fs.register.domain注册域,通常与 FreeSWITCH 地址一致。
fs.register.interval注册有效期,单位秒。

注册成功后,源码会按有效期的一半自动刷新注册。注册失败时会按固定间隔重试,避免 FreeSWITCH 重启后一直失联。

3. RTP 端口池 ​

yaml
rtp:
  asrStartPort: 20000
  asrStopPort: 22000
  ttsStartPort: 23000
  ttsStopPort: 25000

EasyMrcp 会为每通通话分配本地 RTP 端口。部署时要保证这些 UDP 端口没有被系统防火墙或云安全组拦截。

配置项说明
rtp.asrStartPort / rtp.asrStopPortASR RTP 端口范围。
rtp.ttsStartPort / rtp.ttsStopPortTTS RTP 端口范围。

在普通通话模式下,SIP/SDP 协商会使用这些端口承载音频。在 spy 监听模式下,服务端也会从 ASR RTP 端口池分配一个 rtpPort 返回给客户端。

4. 入站 RTP 重排配置 ​

yaml
rtp:
  asr:
    reorderWindowPackets: 2
    maxConsecutiveLossFill: 3

这两个参数用于处理 RTP 包乱序和轻微丢包:

配置项说明
rtp.asr.reorderWindowPackets等待后续多少个包后,再判定缺失包丢失。
rtp.asr.maxConsecutiveLossFill连续补静音包的最大数量,超过后直接追到下一个真实 RTP 包。

一般不需要改。网络抖动明显时可以适当增大 reorderWindowPackets,但会增加等待时间。

5. ASR/TTS 厂商配置文件 ​

厂商配置位于:

text
asr/*.properties
tts/*.properties

源码里的配置模板在:

text
src/main/resources/asr/
src/main/resources/tts/

部署时建议在运行目录放一份外部配置文件,例如:

text
application.yaml
asr/aliyun-funasr.properties
tts/aliyun-tts.properties

这样可以避免把密钥、服务地址、发音人等运行环境信息写死在源码里。

6. 常见配置检查项 ​

如果服务启动后无法正常通话,可以优先检查:

  1. sip.sipServer 是否填写 EasyMrcp 本机 IP,而不是 FreeSWITCH IP。
  2. fs.register.* 是否能在 FreeSWITCH 侧看到注册成功。
  3. tcp.server.port 是否能被业务脚本或客户端访问。
  4. RTP 端口池是否已放通 UDP。
  5. mrcp.asrMode 和 mrcp.ttsMode 是否与对应 properties 文件匹配。
  6. ASR 模式是否正确配置了 identify-patterns。
  7. 如果厂商要求 16k 音频,是否配置了 re-sample=upsample8kTo16k。