×

Asterisk 中控制RTP Relay

hqy hqy 发表于2020-01-02 13:46:58 浏览2181 评论0

抢沙发发表评论

 今天遇到一个问题,要实现RTP packet经过server转发,而不是直接在两个MTA之间直传。这样server只需要建立通话,一旦通话建立后,就算server断电也不影响通话(只是挂断时候可能出现异常).

mportant;">
[mta3231.ht.com]
context=hitrontest
host=dynamic
;dtmfmode=inband
;digitmap=([0-9]xxx)
;disallow=all
;allow=g722
canreinvite=nonat
digitmap=([0-9]xxx|*xx)
ncs=1;use NCS 1.0 signalling
pktcgatealloc= 0 ; Allocate DQOS gate on CMTS
hangupongateremove= 1 ; Hangup the channel if the CMTS close the gate
wcardep=aaln/*
callerid = "3231" <3231>
threewaycalling=no
callwaiting = no
callreturn = no
;cancallforward = yes
;canreinvite = no
transfer = yes
;dtmfmode = inband
line= aaln/1
我用的是MGCP,不是SIP,后根据;
canreinvite:格式:canreinvite =update|yes|no|nonat。
在SIP协议,邀请用于发起呼叫,重定向媒体。在初始邀请后相同对话中发起的任何邀请都被视作重邀请(reinvite)。
配置canreinvite=no让Asterisk媒体通道经过自己,而不允许RTP信息直接在端点之间传送。
Asterisk在以下的任何情况下都不会发起重邀请:如果客户端的任何一方配置为canreinvite=no;如果客户端不能协商编码,Asterisk需要执行语音编码转换;如果客户端的任何一方配置为nat=yes;如果Asterisk在呼叫中需要监听双音多频(DTMF)音(用于呼叫前转或者其他功能)。配置canreinvite=yes“允许RTP媒体直接” 。canreinvite = nonat“允许reinvite当本地,否认reinvite当NAT” 。配置canreinvite=update“使用UPDATE,而不是邀请” 。配置canreinvite = nonat“更新时使用的地方,否认当NAT” 。
设置canreinvite=no。在sip协议中,邀请用于发起呼叫,重写向媒体。在初始邀请后相同对话中发起的任何邀请都被视作重邀请(reinvite).例如:假设双方正在交换媒体信息。如果一方呼叫等待,asterisk设置为播放呼叫等待音乐,asterisk会发起到第二个客户端的重邀请,告诉将他的媒体流定向到PBX。然后就可以传输音乐流,或者一个等待客户的通知。最开始的用户再到PBX的重邀请中发起一个接机的命令,然后pbx发起一个重邀请到第二方,要求它将媒体流重新定向到发起方,结束呼叫等待音乐,重新连接客户端。
通常,当二个端点建立起呼叫,他们直接从一端到另一端传输媒体。asterisk通常在媒体通道打破这个规则,允许它听到电话键盘上的拨号音。这是必须的,因为如果asterisk不能确定呼叫长度,计费将不准确。canreinvite=no让asterisk媒体经过自己,而不允许rtp信息直接在端点之间传送。
asterisk在以下情况下不会发起重邀请:
1.客户端的任何一方配置为canreinvite=no
2.客户端不能协商编码,asterisk需要执行语音编码转换
3.客户端的任何一方配置为nat=yes
4.如果asterisk在呼叫中需要监听双音(DTMF)音(用于呼叫前转或者其他功能)


添加canreinvite=nonat实现了RTP经过server转发。 


打赏

本文链接:https://www.kinber.cn/post/1132.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客