日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Asterisk权威指南/第二章 Asterisk架构

發(fā)布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asterisk权威指南/第二章 Asterisk架构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Asterisk和其他傳統(tǒng)的PBX完全不同,因為Asterisk的撥號計劃以同樣的方式處理所有的入局信道(incoming channels)。

傳統(tǒng)的PBX在邏輯上區(qū)分工作站信道(連接電話機)和電話局信道(連接到外部世界)。這意味著,你不可能無縫地在一個工作站端口配置一個外部網(wǎng)關(guān)。同樣,傳統(tǒng)PBX也很難實現(xiàn)對離站(off-site,不在座位上或外出辦事)資源的訪問,比如前臺如果外出辦事就什么事都做不了,因為她哪怕能打電話回公司,也是不能訪問內(nèi)部資源的。

Asterisk在內(nèi)部不區(qū)分工作站信道和電話局信道,而是一律統(tǒng)稱信道。有很多種信道類型(驅(qū)動不同),但Asterisk撥號計劃以不加區(qū)別(接口一致)的方式處理這些信道,也就是說,一個內(nèi)部用戶可能位于電話局端口,但撥號計劃可以把他當成在工作站端口一樣。如果你沒有用過傳統(tǒng)PBX,可能還體會不到Asterisk這種方式的強大和靈活。下圖顯示了兩種架構(gòu)的區(qū)別。


目錄

  • 1模塊
    • 1.1應用程序
    • 1.2橋接模塊
    • 1.3電話詳單記錄模塊
    • 1.4信道事件日志模塊
    • 1.5信道驅(qū)動
    • 1.6編碼解碼器
    • 1.7格式解釋器
    • 1.8撥號計劃函數(shù)
    • 1.9PBX模塊
    • 1.10資源模塊
    • 1.11附加模塊
    • 1.12測試模塊
  • 2文件結(jié)構(gòu)
    • 2.1配置文件
    • 2.2模塊
    • 2.3資源庫
    • 2.4spool
    • 2.5日志
  • 3撥號計劃
  • 4硬件
  • 5Asterisk版本
    • 5.1以前的版本方案
    • 5.2現(xiàn)在的版本方案
  • 6結(jié)束語

模塊

Asterisk是基于模塊構(gòu)建的。一個模塊提供特定的功能,是一個可裝載的組件,比如信道驅(qū)動(chan_sip.so),或者一項可以連接到外部技術(shù)的資源(func_odbc.so)。Asterisk按照/etc/asterisk/modules.conf配置文件裝載模塊。后面我們會討論各個模塊的使用。這里我們只會介紹模塊的概念,以及模塊的各種類型。

運行一個不加載任何模塊的Asterisk也是有可能的,盡管它什么都做不了。你只有理解了Asterisk模塊化的特點,才能充分理解Asterisk的架構(gòu)。

Note:你可以啟動一個沒有加載任何模塊的Asterisk,然后手工在控制臺一個個地添加;這種方法一般用于性能調(diào)優(yōu),可以保證僅加載所需要的模塊。

Asterisk模塊類型包括:

  • 應用程序(即撥號計劃中的命令)
  • 橋接模塊
  • 呼叫詳單記錄模塊
  • 信道事件日志模塊
  • 信道驅(qū)動
  • 編碼解碼器
  • 格式解釋器
  • 撥號計劃函數(shù)
  • PBX模塊
  • 資源模塊
  • 附加模塊
  • 測試模塊

接下來我們會列出分屬各個類型的所有模塊,他們的用途,以及我們所認為的受歡迎程度和重要程度(有一些很常用,但有一些不太有用,僅僅是為了兼容而保留)。這些模塊的細節(jié)會在本書中陸續(xù)介紹,根據(jù)各自的情況,有些會被全面的討論,有些則根本不會涉及。

下面這些術(shù)語反映了我們對各個模塊的看法:

  • 不重要
這個模塊是個老古董。如果你要使用它,就不要指望能在社區(qū)中得到很好的支持。
  • 不可靠
新設(shè)計的或者試驗性的模塊,不要用于生產(chǎn)環(huán)境。
  • 很有用
很時新,有人維護,受歡迎而且被推薦。
  • 可以用
能夠用,但用得不多,可能不完整。不推薦。
  • 不好說
新出現(xiàn)的模塊,時間短,完整性和受歡迎程度都不太好說。
  • 已廢棄
已經(jīng)被更好的模塊取代了。
  • 有局限
有局限性,不能滿足要求。
  • 很重要
必須的。

應用程序

應用程序用于撥號計劃中,能夠處理呼叫流程。比如Dial()就是一個很重要的應用程序,負責建立出局連接。

名稱用途評價
app_adsiprog給兼容模擬電話加載模擬顯示服務(wù)接口(ADSI)腳本。不重要
app_alarmreceiver支持接受警報設(shè)備的報告。不重要
app_amd檢測電話答錄機。不穩(wěn)定
app_authenticate比較雙音多頻(DTMF)輸入和一個給定的字符串(通常是密碼)。很有用
app_cdr寫CDR記錄。很有用
app_celgenuserevent為CEL產(chǎn)生用戶自定義事件。不好說
app_chanisavail檢測信道的狀態(tài)。不穩(wěn)定
app_channelredirect強制另一個信道進入撥號計劃的另一個地方。很有用
app_chanspy允許一個信道收聽另一個信道。很有用
app_confbridge電話會議(新版)。不好說
app_controlplayback播放提示,并提供快進和倒帶功能。很有用
app_dahdibarge允許在DAHDI信道中插話。(已廢棄,見app_chanspy)已廢棄
app_dahdiras在DAHDI信道上建立RAS服務(wù)器。不重要
app_db訪問Asterisk內(nèi)置的伯克利數(shù)據(jù)庫。(已廢棄,見func_db)已廢棄
app_dial把信道連接起來。(例如,打電話)很重要
app_dictate播放一段錄音,并提供開始/停止功能。很有用
app_directed_pickup應答另外一部分機上的呼叫。很有用
app_directory給出voicemail.conf中的姓名列表。很有用
app_disa提供撥號音并接受DTMF輸入。很有用
app_dumpchan在Asterisk控制臺打印信道變量。很有用
app_echo回放從信道中收到的語音。很有用
app_exec包含Exec(),TryExec()和ExecIf()。根據(jù)條件執(zhí)行應用程序。很有用
app_externalivr類似于AGI,但是異步的。很有用
app_fax提供SendFax()和ReceiveFax()很有用
app_festival“文本-轉(zhuǎn)-語音”引擎。可以用
app_flash在信道上執(zhí)行一次瞬間掛機很有用
app_followme根據(jù)followme.conf文件執(zhí)行找到我/跟隨我功能。很有用
app_forkcdr在當前呼叫上開始一條新的CDR記錄。可以用
app_getcpeid獲得ADSI CPE ID。不重要
app_ices把音頻發(fā)送到一個icecast服務(wù)器。可以用
app_image向可以支持的設(shè)備上傳輸圖像。有局限
app_ivrdemo開發(fā)者的示例應用程序。不重要
app_jack使用JACK音頻連接工具包共享音頻。很有用
app_macro觸發(fā)撥號計劃宏。(已廢棄,見GoSub())已廢棄
app_meetme多方會議。很有用
app_milliwatt產(chǎn)生1004赫茲的音頻,以測試模擬電路。很有用
app_minivm提供基本的函數(shù),使得你可以構(gòu)造自己的語音信箱。可以用
app_mixmonitor兩頭錄音,然后合并。很有用
app_morsecode產(chǎn)生莫爾斯電碼。可以用
app_mp3用mpg123播放mp3。不重要
app_nbscat獲得NBS音頻。不重要
app_originate允許發(fā)起一次呼叫。很有用
app_osplookup執(zhí)行OSP查找。可以用
app_page尋呼。很有用
app_parkandannounce自動播報保持的電話。可以用
app_playback播放音頻文件,不接受輸入。很有用
app_playtones播放按鍵音。很有用
app_privacy如果沒有收到CallerID,就要求輸入用戶號碼。不重要
app_queue提供自動呼叫分配。很有用
app_read要求用戶輸入,并把輸入存入變量。很有用
app_readexten要求用戶輸入,并把當前呼叫轉(zhuǎn)移到指定分機和上下文。可以用
app_readfile把文件內(nèi)容存入一個信道變量。(已廢棄,見func_env中的FILE())已廢棄
app_record把收到的音頻存入文件。很有用
app_rpt使用聲卡。(TODO:什么是rpt項目,不懂。)有局限
app_sayunixtime已指定的格式播放時間。很有用
app_senddtmf向呼叫者傳輸DTMF音頻。很有用
app_sendtext向兼容的信道發(fā)送文本。不重要
app_setcallerid在信道上設(shè)置CallerID。(已廢棄,見func_callerid)已廢棄
app_skel開發(fā)者的示例應用程序。很有用
app_sms在支持的地區(qū)發(fā)送SMS消息。有局限
app_softhangup請求關(guān)閉信道。很有用
app_speech_utils語音識別。很有用
app_stack提供GoSub()等堆棧相關(guān)的操作。很重要
app_system執(zhí)行操作系統(tǒng)命令。很有用
app_talkdetect類似于app_background,但允許收到音頻后中斷播放。很有用
app_testC/S測試應用程序。可以用
app_transfer在當前信道上執(zhí)行轉(zhuǎn)移。很有用
app_url向被呼叫信道傳遞URI。有局限
app_userevent在AMI中產(chǎn)生一個定制事件。很有用
app_verbose在CLI中產(chǎn)生一個定制時間。很有用
app_voicemail提供語音信箱功能。很重要
app_waitforring(TODO:不明白)不重要
app_waitforsilence包括WaitForSilent()和WaitForNoise();監(jiān)聽入局信道,有超時限制。很有用
app_waituntil等待一個指定的Linux時間(從1970第一秒開始的計數(shù)值)到來。很有用
app_while包括While(),EndWhile()等,用于循環(huán)。很有用
app_zapateller播放特殊音調(diào),以阻止電話推銷者。可以用

橋接模塊

橋接模塊是Asterisk 1.8的新功能;他們以新的方式執(zhí)行信道之間的橋接。他們每一個都提供不同的特性,用于不同的橋接需求。這些模塊只用于app_confbridge。

名稱用途評價
bridge_builtin_features當使用內(nèi)置用戶特性(在features.conf中定義)時,執(zhí)行橋接。不好說
bridge_multiplexed執(zhí)行復雜的多路轉(zhuǎn)發(fā),用于大型會議室。不好說
bridge_simple執(zhí)行簡單的“信道-到-信道”橋接。不好說
bridge_softmix執(zhí)行簡單的多路轉(zhuǎn)發(fā),用于大型會議室。(TODO:不明白和bridge_multiplexed的區(qū)別)不好說

電話詳單記錄模塊

CDR模塊是為了讓各種形式的話單記錄更方便。你可以把CDR存入文件、數(shù)據(jù)庫、RADIUS、或syslog。

注:CDR不是為了計費而設(shè)計的。計費功能應該使用CEL。

名稱用途評價
cdr_adaptive_odbc通過ODBC寫CDR,允許添加自定義字段。很有用
cdr_csv把CDR寫入CSV文件。可以用
cdr_custom和cdr_csv一樣,但允許添加自定義字段。很有用
cdr_manager把CDR輸出到AMI接口。很有用
cdr_odbc通過ODBC寫CDR。可以用
cdr_pgsql把CDR寫到PostgreSQL。很有用
cdr_radius把CDR寫到RADIUS。可以用
cdr_sqlite把CDR寫到sqlite2數(shù)據(jù)庫。(已廢棄,見cdr_sqlite3_custom)已廢棄
cdr_sqlite3_custom把CDR寫到sqlite3數(shù)據(jù)庫,允許添加自定義字段。很有用
cdr_syslog把CDR寫到syslog。很有用
cdr_tds把CDR寫到Microsoft SQL或Sybase數(shù)據(jù)庫,需要老版tds。可以用

Web接口中會有一些和CDR相關(guān)的報告功能。

信道事件日志模塊

信道事件日志可以完整記錄所有的呼叫活動。這也意味著你需要更小心地規(guī)劃擬撥號計劃,畢竟它不可能自動開始工作。Asterisk的CEL模塊如下:

名稱用途評價
cel_custom寫到磁盤文件。很有用
cel_manager寫到AMI。很有用
cel_odbc寫到ODBC。很有用
cel_pgsql寫到PostgreSQL。很有用
cel_radius寫到RADIUS。可以用
cel_sqlite3_custom寫到sqlite3。很有用
cel_tds寫到Microsoft SQL或Sybase,需要老版tds。可以用

信道驅(qū)動

沒有信道驅(qū)動,Asterisk就不可能建立呼叫。每種協(xié)議或信道類型都有自己特定的信道驅(qū)動。信道模塊可以看做是通往Asterisk內(nèi)核的網(wǎng)管。Asterisk的信道驅(qū)動如下:

名稱用途評價
chan_agent為Queue()提供坐席信道。很有用
chan_alsa提供到高級Linux聲音架構(gòu)(ALSA)的連接。很有用
chan_bridge僅供ConfBridge()內(nèi)部使用。很重要
chan_console提供到portaudio的連接。不好說
chan_dahdi提供到DAHDI接口卡的連接。很有用
chan_gtalk提供到Google Talk的連接。可以用
chan_h323提供H.323連接。(已廢棄,見chan_ooh323)已廢棄
chan_iax2提供IAX2連接。很有用
chan_jingle提供jingle連接。可以用
chan_local把一部分撥號計劃當成信道。很有用
chan_mgcp提供媒體網(wǎng)管控制協(xié)議(MGCP)連接。可以用
chan_misdn連接到支持mISDN的ISDN卡。有局限
chan_multicast_rtp連接到RTP多播流。很有用
chan_nbs網(wǎng)絡(luò)廣播聲音(NBS)連接。不重要
chan_oss開放聲音系統(tǒng)驅(qū)動。很有用
chan_phoneLInux電話接口驅(qū)動,相當老。不重要
chan_sip回話啟動協(xié)議。很重要
chan_skinny思科瘦客戶端控制協(xié)議(SCCP)。可以用
chan_unistim北電Unistim協(xié)議。可以用
chan_usbradioCM108 USB無線電接口卡。可以用
chan_vpbVoicetronix信道。不重要

編碼解碼器

編碼解碼器允許Asterisk轉(zhuǎn)換不同呼叫之間的音頻格式。如果一個呼叫來自PRI電路(使用G.711編碼),需要連接到一個SIP壓縮信道(使用G.729,SIP支持的編碼之一),那么相應的編碼解碼器就會執(zhí)行所需的轉(zhuǎn)換。

注:如果編碼解碼需要復雜的算法,大量的轉(zhuǎn)碼工作會對CPU造成負擔。有些像Sangoma和Digium廠商的卡會提供硬件解碼編碼。

名稱用途評價
codec_adpcm自適應差分脈碼調(diào)制解調(diào)不重要
codec_alaw全世界PSTN(除了美國、加拿大)采用脈沖編碼調(diào)制的A-law算法。很重要
codec_a_muA-law到Mu-law的轉(zhuǎn)換。很有用
codec_dahdi使用Digium硬件解碼。(需要Digium轉(zhuǎn)碼卡)很重要
codec_g722寬頻帶音頻編碼解碼。很有用
codec_g726(TODO:不懂,大概類似于codec_adpcm)不重要
codec_gsm全球移動通訊系統(tǒng)。很有用
codec_ilbc因特網(wǎng)低比特率編碼解碼。不重要
codec_lpc10線性預測編碼生硬合成器。不重要
codec_resample8-bit和16-bit間帶符號線性采樣。可以用
codec_speexspeex編碼。可以用
codec_ulaw用于美國、加拿大的 脈沖編碼調(diào)制的Mu-law算法。很重要

格式解釋器

格式解釋器調(diào)用編碼解碼器的功能,但他們操作文件而不是信道。如果你錄制了一段GSM音頻,要播放到其他非GSM信道,就需要一個格式解釋器。

如果你錄制成了多種格式(GSM,WAV),當某個信道需要該音頻時,Asterisk會選擇一個轉(zhuǎn)換代價最小的格式。

名稱用途評價
format_g723G.723 .g723不重要
format_g726G.726 .g726不重要
format_g729G.729 .g729很有用
format_gsmRPE-LTP (original GSM codec) .gsm可以用
format_h263H.263—video .h263可以用
format_h264H.264—video .h264可以用
format_ilbcInternet Low Bitrate Codec .ilbc不重要
format_jpegGraphic file .jpeg .jpg不重要
format_ogg_vorbisOgg container .ogg可以用
format_pcmVarious Pulse-Coded Modulation formats: .alaw, .al, .alw, .pcm, .ulaw, .ul, .mu, .ulw, .g722, .au很有用
format_siren14G.722.1 Annex C (14 kHz) .siren14不好說
format_siren7G.722.1 (7 kHz) .siren7不好說
format_sln1616-bit signed linear .sln16不好說
format_sln8-bit signed linear .sln .raw很有用
format_vox.vox不重要
format_wav.wav很有用
format_wav_gsmGSM audio in a WAV container .WAV, .wav49可以用

撥號計劃函數(shù)

撥號計劃函數(shù)是對撥號計劃應用程序的補充,提供了一些有用的增強功能,比如字符串處理、日期時間轉(zhuǎn)換、ODBC連接性等。

名稱用途評價
func_aes加密、解密AES字符串。很有用
func_audiohookinherit允許呼叫轉(zhuǎn)移后仍被錄音。很有用
func_base64編碼、解碼base-64字符串。可以用
func_blacklist讀、寫astdb中的黑名單。很有用
func_callcompletion存取信道的呼叫完成配置參數(shù)。不好說
func_callerid存取CallerID。很有用
func_cdr存取CDR變量。很有用
func_channel存取信道信息很有用
func_config包括AST_CONFIG();從配置文件讀取變量。可以用
func_connectedline改變已連接的信道信息(需要電話的支持)。不好說
func_curl使用curl訪問URL。很有用
func_cut對字符串切片或者切塊。很有用
func_db提供astdb函數(shù)。很有用
func_devstate獲得設(shè)備狀態(tài)。很有用
func_dialgroup創(chuàng)建一個同時撥號組。很有用
func_dialplan驗證指定的撥號計劃目標是否存在。很有用
func_enum執(zhí)行ENUM查找。很有用
func_env包括FILE(),STAT(),ENV()。執(zhí)行操作系統(tǒng)動作。很有用
func_extstate返回指定的分機狀態(tài)。很有用
func_global存取全局變量。很有用
func_groupcount存取一個組的信道數(shù)。很有用
func_iconv字符編碼轉(zhuǎn)換。可以用
func_lock包括LOCK(),UNLOCK(),TRYLOCK();用于撥號計劃中的競爭控制。很有用
func_logic邏輯判斷函數(shù),包括ISNULL(),SET(),EXISTS(),IF(),IFTIME(),IMPORT()很有用
func_math數(shù)學函數(shù),包括MATH(),INC(),DEC()很有用
func_md5生成MD5指紋。很有用
func_module檢測模塊是否已經(jīng)裝載。可以用
func_odbc訪問ODBC。很有用
func_pitchshift修改音頻流的音調(diào)。很有用
func_rand生成一個隨機數(shù)。很有用
func_realtime在Asterisk實時架構(gòu)中執(zhí)行查找。很有用
func_redirecting獲取本次呼叫的轉(zhuǎn)發(fā)信息。很有用
func_sha1生成SHA1指紋。很有用
func_shell執(zhí)行shell命令,并返回結(jié)果。很有用
func_speex執(zhí)行聲音調(diào)優(yōu)。很有用
func_sprintf字符串格式化。很有用
func_srv執(zhí)行SRV查找。很有用
func_strings字符串處理函數(shù)。很有用
func_sysinfo獲取系統(tǒng)信息,例如內(nèi)存,交換空間和CPU負荷等。很有用
func_timeout存取信道的超時時間。很有用
func_uri把字符串做URI安全編碼。很有用
func_version獲取Asterisk版本信息。可以用
func_vmcount獲取語音信箱的消息數(shù)。很有用
func_volume設(shè)置信道音量。很有用

PBX模塊

PBX模塊提供增強的控制和配置機制。

名稱用途評價
pbx_ael提供AEL支持。(很少有人用,如果不想用傳統(tǒng)的撥號計劃配置文件的話,大多數(shù)人會選擇AMI+AGI)可以用
pbx_config用于解釋extensions.conf,最傳統(tǒng)、用得最多的撥號計劃語言。很有用
pbx_dundi執(zhí)行遠程Asterisk數(shù)據(jù)查找。很有用
pbx_loopback類似于撥號計劃的include,有點過時。不重要
pbx_lua支持使用lua編寫撥號計劃。很有用
pbx_realtime提供Asterisk實時架構(gòu)相關(guān)的功能。很有用
pbx_spool和Asterisk外呼文件有關(guān),提供外呼連接池。很有用

資源模塊

資源模塊用于集成外部資源。例如res_odbc用于訪問ODBC數(shù)據(jù)庫連接。

名稱用途評價
res_adsi提供ADSI。(盡管大多數(shù)ADSI功能Asterisk是不用的,但語音信箱用到這個資源)很重要
res_ael_share為pbx_ael提供共享程序。(如果你使用AEL的話,這個模塊就很重要。)很重要
res_agi提供Asterisk網(wǎng)管接口。很有用
res_ais使用注入OpenAIS一類的AIS實現(xiàn), 提供分布式消息等待指示和設(shè)備狀態(tài)通知。很有用
res_calendar提供日歷系統(tǒng)的集成。很有用
res_calendar_caldav提供CalDAV特定的能力。很有用
res_calendar_exchange提供微軟Exchange的特定能力。很有用
res_calendar_icalendar提供蘋果/谷歌的iCalendar特定能力。很有用
res_clialiases創(chuàng)建CLI別名。很有用
res_clioriginate從CLI發(fā)起一次呼叫。可以用
res_config_curl使用curl拉取配置信息。很有用
res_config_ldap從LDAP拉取配置信息。可以用
res_config_odbc從ODBC拉取配置信息。很有用
res_config_pgsql從PostgreSQL拉取配置信息。可以用
res_config_sqlite從SQLite拉取配置信息。可以用
res_convert使用CLI執(zhí)行文件編碼轉(zhuǎn)換。可以用
res_crypto提供加密功能。很有用
res_curl為其他curl模塊提供公共服務(wù)。很有用
res_fax為其他fax模塊提供公共服務(wù)。很有用
res_fax_spandsp為使用spandsp的傳真功能提供插件。很有用
res_http_post為Asterisk的HTTP服務(wù)器提供POST上傳功能。可以用
res_jabber提供Jabber/XMPP資源。很有用
res_limit允許調(diào)整Asterisk進程的系統(tǒng)限制。可以用
res_monitor提供呼叫錄音資源。很有用
res_musiconhold提供等待音樂(MOH)功能。很重要
res_mutestream提供音頻流的禁音和放音功能。不好說
res_odbc為其他ODBC模塊提供公共功能。很有用
res_phoneprov(TODO:提供來自Asterisk HTTP 服務(wù)器的電話?不懂。)不好說
res_pktccops提供PacketCable COPS資源。不好說
res_realtime為Asterisk實時架構(gòu)(ARA)提供CLI命令。很有用
res_rtp_asterisk提供RTP。很重要
res_rtp_multicast提供多播RTP。不好說
res_security_log啟用安全日志。不好說
res_smdi通過SMDI協(xié)議提供語音信箱通知。有局限
res_snmp向SNMP管理的網(wǎng)絡(luò)提供系統(tǒng)狀態(tài)信息。可以用
res_speech通用語音識別API。有局限
res_timing_dahdi通過DAHDI內(nèi)核接口提供時鐘。很有用
res_timing_kqueue通過某些操作系統(tǒng)的特性提供時鐘。不好說
res_timing_pthread使用標準pthread API提供時鐘;不是很有效率,但移植性好。很有用
res_timing_timerfd通過新版Linux內(nèi)核的timerfd API提供時鐘。很有用

附加模塊

附加模塊是社區(qū)開發(fā)的模塊,用法和版權(quán)條款都和Asterisk的主代碼不一樣。它們位于不同的目錄,缺省是不會編譯和安裝的。要啟用這些模塊就要使用menuselect構(gòu)建配置工具。

名稱用途評價
app_mysql在撥號計劃中執(zhí)行MySQL查詢。(已廢棄,見func_odbc)已廢棄
app_saycountpl用波蘭語播報計數(shù)。(已廢棄,已經(jīng)集成到say.conf中)已廢棄
cdr_mysql在MySQL中記錄CDR。(我們推薦cdr_adaptive_odbc)可以用
chan_mobile允許手機通過藍牙接聽或撥打電話。有局限
chan_ooh323支持H.323協(xié)議。可以用
format_mp3支持播放MP3文件。可以用
res_config_mysql使用MySQL數(shù)據(jù)庫作為實時配置后端。很有用

測試模塊

測試模塊被Asterisk開發(fā)團隊用來驗證新代碼。它們會被頻繁地添加或修改,對你沒什么用,除非你要開發(fā)Asterisk。

如果你是Asterisk開發(fā)者,你也許會對Asterisk測試套件有興趣,你可以執(zhí)行自動測試并將結(jié)果反饋給Asteisk項目。通過不斷地添加測試用例,Asterisk可以防止代碼腐爛。通過添加你自己的測試用例,升級的時候會更有把握些。

更多信息可以參考:

  • http://blogs.asterisk.org/2010/04/29/installing-the-asterisk-test-suite/
  • http://svn.asterisk.org/svn/testsuite/asterisk/trunk/README.txt
  • #asterisk-testing@'Freenode IRC network'


文件結(jié)構(gòu)

Asterisk是一個復雜的系統(tǒng),由很多資源組成。這些資源以不同的方式使用文件系統(tǒng)。既然Linux在這一點上很靈活,那就很有必要搞清楚什么數(shù)據(jù)存在什么地方(比如語音信箱文件、日志文件等)。

配置文件

Asterisk配置文件包括extensions.conf,sip.conf,modules.conf,以及各種信道、資源、模塊和函數(shù)用到的參數(shù)定義文件。這些文件一般位于/etc/asterisk,在做Asterisk的配置和管理工作時你經(jīng)常會進到這個目錄。

模塊

Asterisk的模塊一般會安裝到/usr/lib/asterisk/modules目錄。你一般不用關(guān)心這個目錄;但你知道模塊在什么地方有時候也很有用。例如,如果你升級Asterisk,并且用menuselect構(gòu)建配置工具選擇了不同的模塊,老的(不兼容)模塊又沒有刪除,安裝腳本會提示警告信息。 應該從modules目錄中刪除 這些老的模塊文件 。要么手工刪除,要么調(diào)用make uninstall。

資源庫

有些模塊是需要外部數(shù)據(jù)源的。例如,等待音樂(MOH)就需要音樂文件才能播放。系統(tǒng)的語音提示也需要存儲到硬盤的某個地方。/var/lib/asterisk就是存放系統(tǒng)語音提示、AGI腳本、等待音樂(MOH)和其他資源文件的地方。

spool

spool是Linux操作系統(tǒng)的一種任務(wù)緩沖和資源共享機制。例如,Linux的打印任務(wù)和待發(fā)郵件都是先寫到spool然后在處理的。對Asterisk來說,spool用來存儲臨時性數(shù)據(jù),諸如語音消息,呼叫錄音,呼叫文件等。Asterisk的spool文件位于/var/spool/asterisk目錄。

日志

Asterisk能夠產(chǎn)生幾種不同的日志文件。/var/log/asterisk是存放CDR,CEL,調(diào)試(debug)日志,隊列日志,消息,錯誤和其他輸出的地方。這個目錄對調(diào)試、排錯至關(guān)重要。

撥號計劃

撥號計劃是Asterisk的核心。所有接入Asterisk的信道都要經(jīng)過撥號計劃。撥號計劃包含呼叫流腳本,處理所有呼叫。

有三種方式可以編寫撥號計劃:

使用傳統(tǒng)的撥號計劃語法:/etc/asterisk/extensions.conf

使用Asterisk擴展邏輯(AEL)語言:/etc/asterisk/extensions.ael

使用LUA腳本語言:/etc/asterisk/extensions.lua

本書后面會有幾章專門介紹撥號計劃語法(這也是用得最多的方式)。一旦你學會了這種語法,你可以考慮選擇轉(zhuǎn)向AEL或者LUA,看你自己。

硬件

Asterisk可以和各種技術(shù)通訊。一般來說,這種通訊是基于某種網(wǎng)絡(luò)連接的;當然,和傳統(tǒng)的電信網(wǎng)絡(luò)通訊(像PSTN)是需要特殊硬件的。

很多公司生產(chǎn)這種硬件,比如Digium(Asterisk的贊助商、所有人和主要開發(fā)者), Sangoma, Rhino, OpenVox,Pika,Voicetronix,Junghanns,Dialogic,Xorcom,beroNet,還有很多其他的。我們推薦Digium和Sangoma,當然其他廠商的產(chǎn)品可能更適合你的需求。

大多數(shù)硬件都是針對Digium Asteirsk硬件設(shè)備接口(DAHDI)設(shè)計的。這些硬件會有不同的安裝要求和文件位置。

在“第七章 外部連接性”中,我們會更詳細地討論DAHDI;當然,我們也會僅限于DAHDI的討論。你在安裝硬件的時候應該參考廠商的文檔。


Asterisk版本

Asterisk的發(fā)布方案在過去幾年中已經(jīng)經(jīng)歷了幾個來回了,本節(jié)的目的是為了幫助你理解版本號的含義。需要注意的是1.6.x系列的版本策略的變化,它跟所有其他的Asterisk版本都不一樣(從1.0到1.8,包括可以預見的未來)

以前的版本方案

當我們只有Asterisk 1.2和Asterisk 1.4的時候,所有的開發(fā)工作都在主線上進行,1.2分支和1.4分支上只進行缺陷修復。Asterisk 1.2已經(jīng)被標記為EOF(End of Life),不會再進行任何缺陷修復和安全更新。在1.6.x之前,所有的缺陷修復只會在1.4上進行。

由于所有的開發(fā)工作都在主線上進行,除非創(chuàng)建1.6分支,否則人們不可能得到新特性和新功能。也不是完全不可能,主要是由于主線上可能發(fā)生任何變化,要在生產(chǎn)環(huán)境上部署主線的話就要求管理員非常精通Asterisk(C源代碼級的精通)。

為了減輕管理員的壓力,也為了用戶盡快用上新特性(等幾個月而不是等幾年),一個新的版本方案建立了。1.6分支實際上變成了一個系列1.6.0,1.6.1,1.6.2,等等……,每添加一個新特性就升一個小版本號。目標是每3、4個月就能得到一個新版本,為管理員提供一個更短更清晰的升級路線。如果你需要新特性的話,只需要等上幾個月就可以了。

這些分支的標簽看起來就會像這樣: 1.6.0.1 -- 1.6.0.2 -- 1.6.0.3 -- 1.6.0.4 -- etc. 1.6.1.1 -- 1.6.1.2 -- 1.6.1.3 -- 1.6.1.4 -- etc. 1.6.2.1 -- 1.6.2.2 -- 1.6.2.3 -- 1.6.2.4 -- etc.

圖示如下:

所以到目前為止,我們有了這樣一些分支:1.2,1.4,1.6.0,1.6.1,1.6.2(沒有分支1.6)。在這些分支中,我們又創(chuàng)建標簽,比如1.2.14,1.4.30,1.6.0.12,和1.6.2.15。

很不幸,并不是像我們想的那樣每3、4個月就出一個小版本:至少也要6-8個月。不僅如此,1.6.x這種版本方案也有自己的問題。人們很困惑,不知道應該運行那個版本。(TODO)

現(xiàn)在的版本方案

開發(fā)團隊從1.6.x系列中吸取了教訓。出發(fā)點是好的,但實施起來完全不是那么回事。所以,1.8的版本方案又變回去了,和1.2、1.4一樣。

雖然開發(fā)團隊仍然想盡快提供新特性使用(目前的目標定在一年一次),并且認識到對一個穩(wěn)定的版本提供長期支持也很重要。你可以認為1.4是一個長期支持版本(LTS),1.6.x系列可以看作是1.4的一部分。然后1.8是下一個長期支持版本(包括四年的缺陷修復和五年的安全更新)。

(TODO)


結(jié)束語

Asterisk由很多技術(shù)構(gòu)成,其中很多自身就很復雜。所以,理解Asterisk的架構(gòu)是很重要的。當然,Asterisk的設(shè)計還是很優(yōu)秀的,在我們看來,它很好地平衡了復雜度和靈活性。

總結(jié)

以上是生活随笔為你收集整理的Asterisk权威指南/第二章 Asterisk架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。