使用opensips和rtpengine来转发sip信令与rtp流
opensips部署在内外网双网卡服务器上时,sip信令我们可以通过opensips的路由脚本来做内外网转发,但是,语音媒体无法直接送达到内网的freeswitch上,因为opensips本身并不会处理媒体方面的事情,所以我们还需要搭建一个连通内外网的媒体代理,常用的有rtpproxy、rtpengine等。
从图中可以看出,做内外网的这种方式通话,其实差别只是在rtp流的走向,我们使用rtpengine的作用也是如此,它是在opensips中使用的时候会更改sdp信息中的媒体通信的ip和端口,从而实现了sip电话端和软交换端都将媒体流发送到rtpengine上,之后rtpengine会根据相应的逻辑做两侧的映射,至于sip信令方面直接在opensips中写路由转发即可。
一般是会先判断信令的来源是内网向外网发出还是外网向内网发出,以便赋值我们想要改变的sdp的内容。
这种分支路由我是在主路由开始就会走一遍,但是经过测试会发现有时会有漏掉的场景,所以在我们的真正转发INVITE信令的子路由中,定义t_on_reply(“reply”)路由,在t_on_reply(“reply”)路由中再做一次类似上面的offer和answer,但是判断条件就不是判断信令的method了,判断状态码即可。