问题描述
Freeswitch做sip中继,sip信令可以接通但是媒体不通,造成的现象就是,电话接通了,可是听不见声音。
产生背景
- 测试用的Freeswitch1发起sip呼叫,经由一个openips和两台Freeswitch组成的集群,再到一个opensips,最后再转发到测试用的Freeswitch2;
- opensips+Freeswitch的集群以及后续的opensips走内网发送sip消息,测试用的Freeswitch和前面的环境通过外网发送sip消息;
- 环境用的服务器为腾讯云Cent OS7 64位系统。
解决方案
- 由于opensips只做信令转发,不处理媒体,所以问题的原因锁定在Freeswitch上;
- 通过
ip a
查看Freeswitch所安装的服务器能否看到外网网卡,如果没有说明是专用网络而非经典网络,此处为专用网络的解决方案; - 修改Freeswitch安装目录下的conf/sip_profiles/路径下的external.xml和external.xml文件,修改
<param name="ext-rtp-ip" value="auto"/>
中的auto为服务器的外网ip,sip信令路径上的所有Freeswitch都需要做修改; - 安装Freeswitch的服务器,安全策略需要开放UDP的端口,例如
UDP:10000-30000
; - 修改Freeswitch安装目录下的conf/autoload_configs/路径下的switch.conf.xml文件,修改Freeswitch的端口范围在服务器安全策略允许的范围以内
<param name="rtp-start-port" value="10000"/>
和<param name="rtp-end-port" value="30000"/>
; - 确保经由Freeswitch的sip转发,没有设置
bypass_media=true
的属性; - 重启Freeswitch使得配置修改生效。