这两天实验了一下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优先被执行即可。