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 控制协议端口,客户端发送 ClientConnectSpeakDetectSpeech 等事件时连接这个端口。

通常业务对接主要使用 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.asrModemrcp.ttsMode 是否与对应 properties 文件匹配。
  6. ASR 模式是否正确配置了 identify-patterns
  7. 如果厂商要求 16k 音频,是否配置了 re-sample=upsample8kTo16k