Category

其他asterisk相关

asterisk direct media 配置

By | 其他asterisk相关 | No Comments

asterisk direct media 配置

在 VoIP 通话中, direct media指通话两方的语音流(RTP包)不经过第三方直接通信,一般这里的第三方指外呼服务器(Outbound Proxy),在 asterisk 系统中,一般 asterisk 会同时处理信令(SIP)和媒体(RTP),例如提供等待音乐,解决NAT问题等,但在某些情况下,我们希望通话双方直接通信而不经过asterisk转发,以提高整个系统的处理能力,这里我们介绍一下 asterisk 的 direct media 配置。

首先的参数是 sip.conf 中的 derectmedia, 默认为 no, 既默认所有通话的rtp包都会经由 asterisk 转发. 在 asterisk 1.6.2 以前的版本中, 这个参数名称为 canreinvite

其次需要注意的是拨号命令 Dial 中使用的参数, 当 Dial 包含以下参数时  ”t”, ”T”, “h”, “H”, “w”, “W” or “L”, asterisk 不会支持 directmedia, 例如 Dial(SIP/1001,45,t)

查看是否有媒体流经过 asterisk 可以使用命令

asterisk cli> rtp set debug on

asterisk direct media

 

asterisk 语音编码转换

By | 其他asterisk相关 | No Comments

asterisk 语音编码转换

asterisk作为VoIP系统,其一大特性是对RTP媒体流的处理能力,由于开源解码器的存在,以及可以运行在价格低廉的X86硬件系统上,经常被用于完成不同系统间的语音编码转换,以取代价格相对昂贵的硬件设备。

常见的编码转换场景例如 局域网内使用ulaw,alaw或者g722编码,外呼时使用g729编码以节省带宽

asterisk 中支持的语音编码

查看 asterisk 支持的编码格式命令为

core show translation

asterisk 语音编码转换图中看到的数字表示两种编码转换所需要的时间,数值越小,则表示转码速度越快,-表示不支持此种编码转换

使用 module load codec_ tab键 可以查看/加载系统支持的语音编码

astercc_us*CLI> module load codec_<tab>
codec_a_mu.so codec_adpcm.so
codec_alaw.so codec_dahdi.so
codec_g722.so codec_g726.so
codec_gsm.so codec_lpc10.so
codec_ulaw.so codec_g729-ast16-icc-glibc-x86_64-pentium4.so

加载和卸载 asterisk 模块的命令分别为  module load .so 以及 module load .so,例如

astercc_us*CLI> module unload codec_g729-ast16-icc-glibc-x86_64-pentium4.so
Unloaded codec_g729-ast16-icc-glibc-x86_64-pentium4.so
== Unregistered translator 'lintog729' from format slin to g729
== Unregistered translator 'g729tolin' from format g729 to slin
astercc_us*CLI> module load codec_g729-ast16-icc-glibc-x86_64-pentium4.so
Loaded codec_g729-ast16-icc-glibc-x86_64-pentium4.so
== Registered translator 'g729tolin' from format g729 to slin, cost 1000
== Registered translator 'lintog729' from format slin to g729, cost 5999
Loaded codec_g729-ast16-icc-glibc-x86_64-pentium4.so => (g729 Coder/Decoder, based on IPP)

http://asterisk.hosting.lv/ 上可以下载针对不同 asterisk 版本和CPU编译的 g729 g723 so文件, cpu类型可以通过以下命令查看

cat /proc/cpuinfo

文件需要下载到相应的 asterisk 库目录, 一般为 /usr/lib/asterisk/modules 或者 /usr/lib64/asterisk/modules

在 asterisk 系统中,当需要连接的两个终端使用的编码没有交集而asterisk又支持这两种编码的转换,这时 asterisk 就会进行编码转换。

使用 sip show peer 名称 命令,可以查看该系统中为该终端设定的编码及顺序

astercc_us*CLI> sip show peer astercc-5000
....
Defaddr->IP : 0.0.0.0 Port 5060
Prim.Transp. : UDP
Allowed.Trsp : UDP
Def. Username:
SIP Options : (none)
Codecs : 0x28010e (gsm|ulaw|alaw|g729|h263|h264)
Codec Order : (ulaw:20,alaw:20,gsm:20,g729:20)
Auto-Framing : No
100 on REG : No
....

修改编码可以通过修改 sip 配置文件实现,例如我们改为仅支持729编码

[astercc-5000]
callerid=5000 <5000>
accountcode=1235430313
secret=temp321
callgroup=1
pickupgroup=1
language=cn
type=friend
qualify=yes
port=5060
nat=yes
host=dynamic
dtmfmode=rfc2833
context=hosted-dialout
directmedia=no
call-limit=1
disallow=all
allow=g729

保存,重载 asterisk sip配置

astercc_us*CLI> sip reload
Reloading SIP
== Parsing '/etc/asterisk/sip.conf': == Found
== Parsing '/etc/asterisk/sip_general_astercc.conf': == Found
== Parsing '/etc/asterisk/sip_hostedpbx_registrations.conf': == Found
== Parsing '/etc/asterisk/sip_custom.conf': == Found
== Parsing '/etc/asterisk/sip_hostedpbx_devices.conf': == Found
== Parsing '/etc/asterisk/sip_hostedpbx_trunks.conf': == Found
== Parsing '/etc/asterisk/users.conf': == Found
== Using SIP TOS bits 96
== Using SIP CoS mark 4
== Parsing '/etc/asterisk/sip_notify.conf': == Found

再次查看 会发现该终端的编码已经改变

astercc_us*CLI> sip show peer astercc-5000
....
Defaddr->IP : 0.0.0.0 Port 5060
Prim.Transp. : UDP
Allowed.Trsp : UDP
Def. Username:
SIP Options : (none)
Codecs : 0x100 (g729)
Codec Order : (g729:20)
Auto-Framing : No
100 on REG : No
....

在Ubuntu环境安装asterisk+FreePBX常见问题以及解决办法

By | 其他asterisk相关 | No Comments

 一.编译asterisk和安装Freepbx多处依赖错误

 

1.configure: error: no acceptable C compiler found in $PATH

解决办法:apt-get install gcc

2.configure: error: C++ preprocessor “/lib/cpp” fails sanity check

解决办法:apt-get install g++或者apt-get install build-essential

3.

configure: *** XML documentation will not be available because the ‘libxml2’ development package is missing.

configure: *** Please run the ‘configure’ script with the ‘–disable-xmldoc’ parameter option

configure: *** or install the ‘libxml2’ development package.

解决办法:安装 libxml2-dev也没用,直接./configure ‘–disable-xmldoc’

4.

configure: error: *** termcap support not found (on modern systems, this typically means the ncurses development package is missing)

解决办法:apt-get install ncurses-dev

5.

[FATAL] PEAR must be install (reauires DB.php). Include path: .:/usr/share/pear:/usr/local/src/PEAR

解决办法:pear install db

 

二.Unknown SQL engine

错误表现:安装完FreePBX后进入admin页面,显示错误:未知数据库引擎.

 

FATAL ERROR

Unknown SQL engine: []

Trace Back

/var/www/html/admin/common/db_connect.php:57 die_freepbx()

[0]: Unknown SQL engine: []

/var/www/html/admin/bootstrap.php:75 require_once()

[0]: /var/www/html/admin/common/db_connect.php

/var/www/html/admin/config.php:61 require()

[0]: /var/www/html/admin/bootstrap.php

 

解决办法:

vi /etc/apache2/httpd.conf

默认是空文件,添加两行

User asterisk

Group asterisk

/etc/init.d/apache2 restart

重启apache后问题解决.

 

三.Registering 无法注册分机

错误表现:在FreePBX中添加分机后,软电话无法正常注册分机.长时间Registering

 

解决办法:

执行 asterisk -r 命令,摁s键后tab键,看是否有sip命令.如果没有

则执行module load chan_sip.so,加载sip模块.

重启asterisk后问题解决.

如果不是以上问题,则是asterisk的端口被防火墙封死,执行iptables -F

 

四.分机之间无法打通电话

错误表现:软电话可以正常注册多个分机.但拨打另一个分机号码后无法打通电话.

执行asterisk -r 打开asterisk控制台

当客户端软电话注册分机时显示如下错误

chan_sip.c:8876 process_sdp: No compatible codecs, not accepting this offer!

 

解决办法:

在软电话设置中确保selected codecs包含a-law或u-law


或者在FreePBX的分机设置中allow和disallow选项中设置对应的编码格式

 

 

 

在CentOS环境安装asterisk+FreePBX常见问题以及解决办法

By | 其他asterisk相关 | No Comments

一.Unknown SQL engine

错误表现:安装完FreePBX后进入admin页面,显示错误:未知数据库引擎.

 

FATAL ERROR

Unknown SQL engine: []

Trace Back

/var/www/html/admin/common/db_connect.php:57 die_freepbx()

[0]: Unknown SQL engine: []

/var/www/html/admin/bootstrap.php:75 require_once()

[0]: /var/www/html/admin/common/db_connect.php

/var/www/html/admin/config.php:61 require()

[0]: /var/www/html/admin/bootstrap.php

Unknown SQL engine

Unknown SQL engine

 

解决办法:

vim +231 /etc/httpd/conf/httpd.conf 将用户、组修改为 asterisk

vim +327 /etc/httpd/conf/httpd.conf 将 None 修改为 All

或者直接用sed替换

sed -i ‘231,232s/apache/asterisk/i;327s/none/All/i’ /etc/httpd/conf/httpd.conf

service httpd restart

重启apache后问题解决.

 

二.Asterisk 未启动

错误表现:安装完FreePBX后进入admin页面,Server Status面板显示错误:Asterisk未运行,而它是关键服务

 

Asterisk ERROR

Asterisk is not running, this is a critical service!

asterisk error

asterisk error

 

解决办法:

vim +$ /etc/asterisk/manager.conf

dddd 删除最后两行,ZZ保存退出.

或者直接用sed删除两次最末行

sed -i ‘$d’ /etc/asterisk/manager.conf

sed -i ‘$d’ /etc/asterisk/manager.conf

service asterisk restart

重启asterisk后问题解决.

 

三.Registering 无法注册分机

错误表现:在FreePBX中添加分机后,软电话无法正常注册分机.长时间Registering

 

Zoiper Registering

Zoiper Registering

 

eyeBeam Registering

eyeBeam Registering

 

解决办法:

执行 asterisk -r 命令,摁s键后tab键,看是否有sip命令.如果没有

则执行module load chan_sip.so,加载sip模块.

重启asterisk后问题解决.

如果不是以上问题,则是asterisk的端口被防火墙封死,执行service iptables stop.

 

四.分机之间无法打通电话

错误表现:软电话可以正常注册多个分机.但拨打另一个分机号码后无法打通电话.

Zoiper Wrong Codecs

Zoiper Wrong Codecs

 

eyeBeam Wrong Codecs

eyeBeam Wrong Codecs

 

执行asterisk -r 打开asterisk控制台

当客户端软电话注册分机时显示如下错误

chan_sip.c:8876 process_sdp: No compatible codecs, not accepting this offer!

 

解决办法:

在软电话设置中确保selected codecs包含a-law或u-law

 

Zoiper Selected Codecs

Zoiper Selected Codecs

 

 

eyeBeam Selected Codecs

eyeBeam Selected Codecs

 

或者在FreePBX的分机设置中allow和disallow选项中设置对应的编码格式

 

FreePBX Extensions Codecs

FreePBX Extensions Codecs

 

 

 

索克维尔旗下产品 · CXMind AI联络中心 · WCC全渠道联络中心