Featured image of post opensips dtmf 按键失效问题

opensips dtmf 按键失效问题

背景

项目上使用的是opensips(3.3.10)+rtpengine(13.1.0.0+0~mr13.1.0.0 git-heads/mr13.0.1.2-3ac08574)用做注册代理。

软电话通过opensips注册到uas, 按键进行ivr流程。

问题现象

软电话通过opensips外网ip进行注册, 按键进行ivr流程, 按键无效,但是说话能识别。

uas没有日志,所以不能通过日志分析问题。

排查分析

  • 通过抓包发现按键信息确实发送给了uas, uas也收到了按键消息,但是uas没有响应。 sip

  • 切换到内网测试opensips,把opensips转到同一个uas上, 按键有效!!!

  • 通过对比纯内网和带外网的opensips的服务器上抓包,发现问题出在opensips转发invite信令。 sip

sdp信息中的ip外网ip, opensipsuas是纯内网交互,这个的ip要是内网ipsdp

解决方法

  • opensips.cfgt_on_branch("per_branch_ops")请求rtpengine获取sdp信息时,传递media-address=内网ip。 强制生成的sdp信息中的ip内网ip
1
rtpengine_manage(" media-address=172.16.7.239 ");
  • 修改之后,验证成功,按键有效。

疑问: sip服务器为何因为sdp信息中的ip外网ip而没有响应按键不得而知(第三方的,没人能解答)。

延伸

按键dtmf 类型

按键主要有三种类型,在抓包中的表现形式为:

  • rfc2833 rfc2833

通过wireshark抓包的sip信令上,可以看到rfc2833和语音RTP流是分开的,能够很直观的区分.

点击此信令,能够看到的详细信息: rfc2833

  • inbound

inboud 按键和语音RTP流是一起的, 无法区分。

inbound

通过播放该rtp流, 可以听到按键声音,也可以看到按键的波形。

inbound

  • INFO

INFO是指按键信息以SIP INFO的方式发送,直接抓sip信令就能看到。 info

按键信息: info

INFObody中,可以看到按键信息。

opensips 内外网ip的问题

使用opensips做网关时, 比较重要的就是内外网ip的转换问题。 这里包括两个部分:

  1. sip信令中的Record-Route, 使用 record_route_preset不要用record_route
  2. sdp信息中的c, 使用media-address设置。

以下列的sip信令为例: sip

需要修改的地方:

  1. 在转发INVITEuas时,Record-Route要改成内网ip, sdpc改成内网ip
  2. 收到uas183或者200 OK信令时, 转发给uacRecord-Route要改成外网ip, sdpc改成外网ip
本博客已稳定运行
发表了42篇文章 · 总计72.26k字
本站总访问量 次 · 您是本站第 位访问者
粤ICP备2025368587号-1| 使用 Hugo 构建
主题 StackJimmy 设计