《Asterisk 使用资料》.docx
- 文档编号:13938748
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:40
- 大小:47.33KB
《Asterisk 使用资料》.docx
《《Asterisk 使用资料》.docx》由会员分享,可在线阅读,更多相关《《Asterisk 使用资料》.docx(40页珍藏版)》请在冰点文库上搜索。
《Asterisk使用资料》
Asterisk目录及配置文件
/etc/asterisk/ Asterisk主目录,包含其它关于Asterisk的配置文件; *zaptel.conf这个配置文件放在/etc,因为其它软件也可以使用Zaptel这个硬件及其驱动,所以不是放在/etc/asterisk里.
/usr/lib/asterisk/modules/ 这个目录包含所有可以加载Asterisk模块(应用程序\编辑器\格式和有用通道),在Asterisk启运时会加载这些模块(可以编辑modules.conf).
/var/lib/asterisk/ 比较重要的是astdb文件与agi-bin目录; astdb包含Asterisk当地数据库信息.
sounds/ 所有声音提示的文件在里面,包括Asterisk原代码中的sounds.txt文件
mohmp3/ 如果配置了音乐保持,应用程序会在这个目录下查找mp3(用CBR从文件中去除身份标签).
keys/ 使用公钥和私钥系统认证与一个由RSA数字签名形成的一对等连接.公钥和私钥的扩展名分别为.pub和.key
firmware/ 这个目录含了很多Asterisk相兼容的设备固件,它只有iax/这个子目录,其中有Digium的IAXy的二进制固件镜像.
images/ 只有在较多的支持并且利用图解式的图像设备被发布,这个目录将会与相应的目录有更大的关联.
/var/lib/asterisk/agi-bin agi-bin包含所有脚本,可以通过许多已经建立的AGI应用程序与Asterisk连接.
/var/spool/asterisk
outgoing/
gcall/
tmp/
voicemail/
================配置文件================
/etc/asterisk/asterisk.conf 主要配置文件,
/etc/zaptel.conf 硬件接口的基本层.修改这个配置文件要用modprobe装载LinuxKernel使用模块.
/etc/asterisk/zapata.conf 为硬件配置Asterisk的接口.
/etc/asterisk/extensions.conf 拨号方案.
/etc/asterisk/sip.conf SIP协议配置文件
/etc/asterisk/iax.conf 呼入和呼出IAX通道
/etc/asterisk/extensions.conf 拨号方案配置文件
/etc/asterisk/moduprobe.conf 加载模块配置文件
Asteriskdeveloper\'sdocumentation翻译计划byserva
今天,Asterisk已经成为一个VOIP业界使用最广泛的一个集成电信级别PBX的工具,IPPBX如今已经成为VOIP商家争夺的一块重要市场,在我们越来越熟悉使用Asterisk的同时,我们希望能够越来越深入的了解asterisk,特别是对于开发人员,如果有自己特定的需求,在复杂的asterisk文件夹和asterisk的源代码文件中迷失了方向,不知所措。
在使用asterisk后,我们知道,Asterisk就是一台企业级的电话交换机,它功能的特点有:
语音邮件,电话会议,呼叫路由,呼叫列队,呼叫转移,音乐保持等。
然后这些功能是如何实现的,SIP和H323之间是如何进行通话的?
甚至,我们也许也要问更基础一点的问题,SIP和SIP之间是如何进行通话?
信令是如何控制,通话流程是怎么样?
包括语音是如何进行交换传输的?
这些都是我们开发人员希望了解,或者说对asterisk有不同需求的人,需要了解的。
但是对于那么复杂的asterisk的代码,我们如何下手?
飞云提出了对http:
//www.asterisk.org/doxygen/进行中文的翻译,这样可以使得有需要的人,能够初步的了解Asterisk的文件结构和文件的大概功能,可以使得更多的人参与到我们的队伍中来,一起完成对asterisk所有源码的注释。
在http:
//www.asterisk.org/doxygen/中,我们可以看到modules这个选项,在1.4版本中,出现了Main文件夹,将之间版本的直接放在asterisk的根目录下的一些文件,转移到Main文件夹中,其中Main文件夹中很多文件就是对应的Main_optionsmodule。
AMIfunctions主要对应的源码放在manager.c文件中。
此外,还有CLI_functions,CDR,AsteriskChannelDrivers,Dialplanapplications等。
对asterisk源码的重要性和规整,如下表,按照modules来放置。
Format和codec的部分,由于需要的知识比较广,也比较专业,偏向于编码方面,而对于asterisk本身而言,在意的不是format或者codec本身,而是他们提供出来的接口,使得asterisk在媒体数据交换的时候,可以查到对应的编码,或者可以调用对应的压缩算法而已。
所以我建议,只需要翻译有代表的几个。
上面的列表中,列出来的只是.c的文件,我们翻译的时候,会对应到很多相应的.h文件,其中很多.h文件包含了大量的数据结构的定义,是对于理解asterisk非常有帮助的。
在http:
//www.asterisk.org/doxygen/中,filelist中对应的文件,都会有DataStructures,而每个文件的DataStructures里面包含的结构,都可以DataStructures总的列表中找到StructReference,所以,我们在翻译的时候,以.c文件为主要翻译的对象,其中有函数的说明,程序中代码段的注释,还有其他的一些文字性的说明,然后.c文件对应的DataStructures需要翻译到总的列表中的StructReference、也是归于.c文件翻译的范围之内。
此外,在http:
//www.asterisk.org/doxygen/中,还有Modules,Directories和RelatedPages目录,Modules,Directories目录需要翻译当前页连接文件的内容。
这个对于代码是相关联的。
而RelatedPages目录的东西,属于周围相关文档,可以参照翻译的人数来决定。
翻译只是我们熟悉的第一步,其实http:
//www.asterisk.org/doxygen/中,做的代码注释和介绍,是比较有限的,很多方面都没有补齐,我们的最终的目的是注释并掌握整个asterisk的源代码,便于我们自己利用。
我们需要通过上面的翻译完成之后,按照翻译整理出一个asterisk的框架结构,包括,核心,扩展,以及应用等。
这样可以使得,在代码注释有更多的人,真正能够入手到代码注释,这样可以保证代码注释的质量。
模块 文件 功能 重要性 分工
Main_options
asterisk.c ASTERISK的核心执行程序,执行着PBX的核心程序和CLI的接口程序 * 飞云
pbx.c PBX的核心程序 * 大头,篇幅较大,后期还要增加人手
channel.c channel驱动的管理和功能接口 * voipmaker&steven(原来是serva,篇幅较大,后期还要增加人手)
rtp.c rtp和rtcp协议的实现,NAT的RTP穿越的实现,转换成asterisk特有的frame形式的实现 * amy
config.c 配置文件的读取和解析,转换成对应的数据结构
file.c 通用文件读写接口,包括日志,音频文件等。
frame.c asterisk的特有的音频形式的处理
io.c I/O管理,对所有的asterisk的channel,或者是rtp做统一的管理
loader.c asteriskl的模块启动程序
app.c extension功能的调度和通用功能的接口 * meng9999
say.c asterisk报声音等的接口
sched.c asterisk的任务调度管理函数(有定时器的功能)
dsp.c 软件方式实现dsp的功能
db.c asterisk的数据库管理接口
translate.c 语音或者视频数据的codec转换程序
astmm.c asterisk内存管理程序
Dialplan
applications app_exec.c 所有的app总的执行调度程序 * liumin
app_dial.c dial函数和retrydial函数对应的实现 * wky,篇幅较大,后期还要增加人手
app_macro.c macro函数执行和实现
app_echo.c echo函数实现
app_meetme.c meetme会议的实现,提供函数接口给extension调用
app_mixmonitor.c MixMonitor函数,录音包括混音的功能
app_queue.c 队列的实现
app_read.c Read函数的实现,可以用来读取变量的值
app_voicemail.c 语音信箱,包括录制语音,读取语音,发送语音邮件等功能
app_stack.c Stack应用,Gosub,Return等函数的实现
app_dictate.c Dictate函数实现,模拟指示的生成和发送
app_chanspy.c 监听所有channel语音信息的实现
app_mp3.c mp3文件播放函数的实现
app_playback.c 可以播放任何的asterisk支持的声音文件格式 * (前面有两个空格的)QQ糖
app_softhangup.c 挂机extension函数的实现
app_transfer.c extension函数,转移一路通话
AsteriskChannel
Drivers chan_sip.c SIP协议实现 * 大唐盛世,篇幅较大,后期还要增加人手
chan_h323.c H323协议的实现 * 肉夹馍
chan_local.c local的实现,asterisk在extension中独有的channel驱动程序 * kices
chan_agent.c * leeb
chan_zap.c zaptel的应用层驱动,为zaptel的硬件调用和控制提供接口
chan_features.c
chan_mgcp.c mgcp协议实现
chan_iax2.c iax2协议实现,asterisk特有的通信协议,信令和媒体属于同一端口
chan_phone.c
chan_skinny.c
CDRDrivers
cdr.c CallDetailRecord的生成程序
cdr_csv.c 文本方式的cdr
cdr_custom.c 用户化的cdr
cdr_manager.c CDR的管理程序
cdr_tds.c freetds方式的cdr
cdr_odbc.c odbc环境的cdr生成
cdr_pgsql.c pagesql方式的cdr
cdr_radius.c radius方式的cdr *VOIP计费
cdr_sqlite.c sqlite方式的cdr
AMIfunctions
manager.c asterisk的管理接口 * do-feel
astman.c 经过封装的asterisk管理接口
MediaFile
Formats format_g723.c 723的asterisk编码实现
format_g729.c 729的asterisk编码实现
format_h263.c h263的asterisk编码实现
format_wav.c 线性的asterisk编码实现
format_pcm.c pcm的asterisk编码实现
format_h264.c h264的asterisk编码实现
Codecfunctions
codec_a_mu.c alaw到ulaw的编码转换实现
codec_ulaw.c ulaw的解编码
codec_alaw.c alaw的解编码
Res functions
res_features.c 呼叫转移,呼叫等待等功能的实现 * serva
res_musiconhold.c musiconhold的实现
Asterisk基本配置
Asterisk译为星号(*)在很多应用中被用做通配符,Astrisk做为PBX系统的完美名称,原因之一是Asterisk可以连接数目庞大的接口类型,包括:
1、模拟接接口,如你的电话线或模拟电话.
2、数字线路,如T-1和E-1线路
3、Voip协议,如SIP和IAX
目前正式版本是IAX2,但是IAX1的所有格式都已经停掉.所以当说到IAX都是特拽IAX2
使用接口配置文件
1.Zaptel.conf:
硬件接口基层配置,我们将建立一个FX0和一个FXS通道.
2.zapata.conf:
硬件配置Asterisk的接口.
3.extension.conf:
拨号方案文件.
4.sip.conf:
配置SIP协议的文件
5.iax.conf:
配置呼入和呼出IAX通道的文件
FXO与FXS通信
区别:
区别简单,就在于连接的那端提供拨号音.FXO不生成拨号音,而是接收.FXS端口提供拨号音和震铃电压,在有呼叫的时候提醒用户.两者接口都提供双向通讯(同时双方向的通讯传输).
如果Asterisk有个兼容FXO端口,就可以把电话线接入这端口,可以使用这根电话线呼叫和接收电话呼叫.同理,如果有个FXS端口,可以连接一部模拟电话,Asterisk就可以呼叫这部电话,可能也可以呼叫.(端口:
通过配置使用的信令进行定义)
FXS卡必须像中心局(CO)进行运转,使用FXO信令.同理,FXO卡连接CO,就意味着它需要像终端进行运转,使用FXS信令.
Zaptel配置(FXO)
在/etc/zaptel.conf文件,用于配置硬件,可以定义FXS端口与FXO信令的配置:
fxsks=1 ;定义fxs端口采用通道1以ks信令协议
;fxoks=2 ;定义fxo端口采用通道2以ks信令协议
loadzone=us
defaultzone=us
信令协议:
Loopstart(ls),groundstart(gs),kewlstart(ks),使用ks外信令协议,把fxoks中的ks替换ls或gs,Asterisk的模拟电路推荐ks信令协议.
******编辑完zaptel.conf文件,需要使用/sbin/ztcfg-vv装载配置到硬件(不须要详细输出可以省略-vv);修改信令方法需要重启.在编辑sip.conf和iax.conf文档后,分别需要装载chan_iax2.so和chan_sip.so
Zapata配置
[trunkgroups] ;定义一个主干组
;defineanytrunkgroups
[channels] ;硬件通道和他们选项信令方式.
;hardwarechannels ;硬件通道
;default ;默认
busydetect=yes ;增加这两行,要不FXO口不能检测到挂机信号。
busycount=5
usecallerid=yes ;设置来电显示
hidecallerid=no ;设置去电不隐藏号码
callwaiting=yes ;设置呼叫等待
threewaycalling=yes ;开启三方通话(先闪断,再呼叫第三方,再闪断,就可以实现三方通话)
transfer=yes ;转叫前转(需要三方通话支持)
echocancel=yes ;回声消除
echotraining=yes ;回音练习(会话前发个声音,用于测试回声)
;definechannels ;定义通道
context=from-test ;Context内执行指令需要在extensions.conf内定义[from-test]
signalling=fxs_ks ;FXO通道使用FXS信令
channel=>2;PSTN放在端口2上
允许zaptel和其它设备通过PCI硬件安装到系统中,编辑udev
[root@askasterisk]#vi/etc/udev/rules.d/50-udev.rules
#在末尾添加上以下
KERNEL="zapctl", NAME="zap/ctl"
KERNEL="zaptimer", NAME="zap/timer"
KERNEL="zapchannel", NAME="zap/channel"
KERNEL="zappseudo", NAME="zap/pseudo"
KERNEL="zap[0-9]*", NAME="zap/%n"
Dialplan配置
基本的拨号方案,使用Echo()校验工作通道双向通讯;
[from-test]
exten=>s,1,Answer()
exten=>s,n,Echo()
SIP
SIP(会话初始协议),通常用于VOIP电话,进行呼叫建立,呼叫协商,呼叫结束.它帮助两个端互相通认,但它不处理媒体;当呼叫建立后,他通过实时传输协议(RTP)在电话A到电话B直接传输媒体.
SIP和RTP
SIP是一个应用层的信令协议.他使用的端口是5060(通常)进行通信.SIP可以通过UDP和TCP传输层协议进行传输.Asterisk目前没有TCP用于传输SIP信息.
RTP用于端点间传输媒体(语音),Asterisk中RTP使用大数字的无特权端口(默认10,000到20,000)
SIP优点:
普通的被接受和结构灵活.其它的VOIP协议还有H.323,IAX,MGCP.
SIP配置
/etc/asterisk/sip.conf文件中:
[general]
context=default
srvlookup=yet ;建立一个逻辑和可解析地址的方法,你可以达到这个地址,还可以获取DNS很多好处
[10000]
username=10000 ;用户名
type=friend ;可以定义用户(user)\端(peer)\朋友(friend)
secret=123456 ;认证密码
record_out=Always;去电录音Adhoc须要时,Never从不,Always总是
record_in=Never ;来电录音
callgroup ;呼叫组,默认为"1"
pickupgroup ;代接组
disallow ;不允许编码
allow ;允许编码
port=5060 ;端口号
qualify=yes ;监视Asterisk服务器与电话之间是否延时(默认2,000可达;yes可替换毫秒)
context=default ;指令的地点
host=dynamic ;要求号码要注册,以便Asterisk如何找到电话.(static则不需要注册)
dtmfmode=rfc2833;
mailbox=10000@device
callerid=test1<10000>
canreinvite=no ;
用户户类型是用于认证呼入呼叫;端类型用于呼出呼叫;朋友类型两种都用.(这个常用在sip.conf与iax.conf中用到)
IAX
IAX(InterAasteriskeXchange)协议通常用于服务器间通信.IAX和SIP协议最大区别在于媒体(语音)在端点之间传输的方式不同.
Asterisk默认情况是在5060端口接收SIP信令,在10000-20000端口接收RTP(媒体)流.而IAX所有的信令和媒体流都通过一个端口4569进行传输.这种方式的好处是IAX协议能更适合在NAT相关拓扑的应用.
IAX用户习惯对进入PBX系统的呼叫进行鉴权和处理.对从PBX系统呼出的呼叫,Asterisk应用IAX的iax.conf文件的端点进入(条目)对远端进行鉴权)
通过iax.conf设置进行呼叫的鉴权和处理:
[general] ;至少需要一个主要段落,主要定义IAX协议的相关设置.
jitterbuffer=no
register=>remote_number:
password@domain ;注册到远程服务器上,告诉服务器当前位置(互联网位置)在哪
[REC_SERVER]
type=user ;用user来定义呼入呼叫的类型
context=incoming ;进行呼入呼叫鉴定
auth=rsa
inkeys= ;公钥,是Asterisk标准
通过extensions.conf设置一个incoming的context:
[incoming]
exten=>remote_number,1,Dial(SIP/number) ;拨打远程号码时(呼入)转移到number(内部)号码上
--------以上是IAX入局配置,下面配置出局IAX连接--------
在iax.conf设置呼出条目
[REMOTE_SERVER]
type=peer ;用peer定义呼出类型
host=my.receiving.server.ca ;接收服务器域名或IP地址
username=number ;接收服务器认证用户(账户号码)
secret=password ;接收服务器认证密码(账户密码)
qualify=yes ;不时检查远端的服务器是否响应用
disallow=all ;用于复位原来设置的所有编码信息
allow=gsm ;支持gsm编码
allow=libc ;支持libc编码
allow=g726 ;支持持g726编码
****使用disallow复位原来设置的所有编码信息.再重新设置支持的编码,优先级从高到低
在extensions.conf设置
[to_remove]
exten=>remove_number,1,Dial(IAX2/REMOVE_SERVER/number)
拨号方案语法
Asterisk的拨号方案在文件extensions.conf中定义(/etc/asterisk/extensions.con)
extensions.conf(四部分:
context,ex
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Asterisk 使用资料 Asterisk 使用资料 Asterisk 使用 资料