这两天实验了一下asterisk static realtime方案,将sip.conf的信息保存到mysql数据库里。但是呼叫的时候,总是
报 488 no acceptable here。
这是我的sip.conf文件,数据库里和sip.conf文件一模一样,但是就是不行。
[general]
context=unauthenticated
allowguest=no
srvlookup=yes
udpbindaddr=0.0.0.0
tcpenable=no
videosupport=yes
canreinvite=no
registersip=yes
[1001]
type=friend
host=dynamic
context=LocalSets
nat=yes
secret=123456
dtmfmode=rfc2833
disallow=all
allow=ulaw
allow=alaw
allow=h263
今天用sip show user 1001命令对比了一下数据库和sip.conf的配置信息,发现有一项不同。
这是用sip.conf的时候的账户信息。
这是用数据库存储sip.conf的账户信息。
对比发现,在Codec Order这一项不同。
在进一步用 sip show peer 1001可以查看更详细的账户信息,下面为截图
经过对比可以看到Codecs这一项是空的。
感觉应该把disallow=all这一项从数据库里去掉。去掉后的截图如下
说明asterisk 在读取数据库里的sip.conf信息的时候,先读取的allow在读取的disallow造成1001的编解码都被关闭了。
这个顺序如何调整,还不清楚。不过把他去了就没问题了。
在修改完extconfig.conf文件后,在asterisk终端,输入以下命令即可
module reload extconfig
module reload chan_sip 或 sip reload
另外,如果不删除disallow的话,可以使用cat_metric,var_metric这两个参数来定义优先级,让disallow优先被执行即可。