碰到的 MRCPv2 串线以及解决思路
最近碰到了一个朋友的 MRCPv2 串线,表现大约是:
fs1 和 fs2 同时发到 mrcp server 的同一个 rtp 端口
目前尚不清楚 mrcp server 是否能避免这种情况(其实是有思路的,接收到 rtp 包时检查网络地址和网络端口跟 sip 协商的是否一致,但要熟悉 mrcp 源码)
产生这个错误的流程大约是(通过 wireshark 分析出来的):
- fs1 asr session 开始
- mrcp server 分配某个 rtp 端口,比如 5000
- fs1 rtp 送 mrcp server 的 5000 端口
- mrcp server crash,但 fs1 不知道,继续发 5000 端口
- mrcp server 重新启动
- fs2 asr session 开始
- mrcp server 分配 5000 端口(上一次的跟他没关系了,因为已重启,没有记忆)
- fs1 和 fs2 同时送 rtp 到 mrcp server 的 5000 端口
此外,sip 包还有这样的流程:
fs ---->bye ---> mrcp server
<---481
解决思路:
同时增加 sip 信令代理和媒体代理
fs --- kamailio+rtpengine --- mrcpserver 集群
mrcp 可以直通(fs直连 mrcp server,比如 1554 端口)
所有 sip 信令要经过 kamailio
所有的媒体都经过 rtpengine
rtpengine 有个配置参数叫端口学习模式(我以前的文章里面有),如果配置为 off, 等于关闭掉 rtp auto nat
参考链接:
https://blog.csdn.net/qq_56167818/article/details/137874482