asterisk架构
?
Asterisk的整體框架
??????? 在我們深入了解各種模塊之前,讓我們先退一步,看一下Asterisk的整體框架:
?
??????? 當前,我們需要在上圖中添加CEL和Bridge模塊,而把CLI和Manager模塊移除(在新版本中,這些模塊重整過)。
CORE模塊是Asterisk地核心。PBX內核是必不可少的組件,內核除了話務橋接功能之外,還提供了讀取配置文件和加載其它模塊的功能。后續我們會詳細說明內核的功能,現在只需要牢記,其它模塊都和內核模塊緊密相連。
??????? 從后勤角度看來,這些模塊通常都是以.so為擴展名的文件,這些文件存放在Asterisk的modules子目錄中(通常是/usr/lib/asterisk/modules)。在Asterisk啟動時,它會加載這些文件,把它們的功能添加到系統中。
| ? | 再哆嗦一點 |
??????? 內核還包含了撥號計規則,這是任何Asterisk系統的執行邏輯。撥號規則包含一系列的操作說明,這些操作說明是Asterisk處理系統入呼和外呼的行為準則。
??????? Asterisk的模塊中,內核部分的文件名是pbx_xxxxx.so。
?
Asterisk的模塊類型
通道驅動模塊
?????? 框架圖的頂部,藍色部分描述的就是通道驅動。通道驅動程序與Asterisk外部的設備通信,并為內核轉換某種特定的信令或協議。
所有從外部呼入的呼叫,在抵達內核之前,都要經過某種通道驅動;所有外呼的呼叫,在抵達外圍設備之前,也一定要經過某種通道驅動。
??????? 例如:SIP通道驅動,用于與使用SIP協議的終端設備通信。它為內核轉換SIP信令。這意味著Asterisk的內核是與信令無關的。因此,Asterisk不僅僅是SIP PBX,它是多協議的PBX。
所有通道驅動都以?chan_xxxxx.so命名,比如說chan_sip.so、chan_dahdi.so
撥號規則應用模塊
?????????? Application為系統提供呼叫相關的功能。這些應用可能是應答、播放提示音、掛機等功能。
應用模塊為系統提供呼叫功能。這些應用,在撥號方案中按(草種)順序腳本化。比如說,一個呼叫進入Asterisk撥號方案,可能會有一個應用作出應答;另一個應用從磁盤中讀取一個文件,播放一段提示音;第三個應用,則讓呼叫方在指定的語音信箱中留言。
有關撥號計劃應用的更詳細信息,請參考:?Dialplan Fundamentals
???????? 所有應用模塊,都以app_xxxxx.so命名,比如說?app_voicemail.so
撥號規則功能模塊
??????? 從某種程度上來說,撥號規則的功能類似于應用,但是,它們不是作用于某個特定通道或呼叫,而是簡單地檢索或設置通道上的某個設定,或者執行文本操作。比如說,某個功能模塊會檢索呼叫的主叫ID信息,過濾某些文本,或為來電者設置一個超時時間。
???????? 撥號規則功能模塊,都以?func_xxxxx.so命名,比如說func_callerid.so
資源模塊
????????顧名思義,資源就是Asterisk需要用到的資源服務。常見資源如呼叫保持音樂、呼叫停泊等。
資源模塊為Asterisk提供可以在呼叫過程中任意時刻調用的一些擴展功能,即使另一個應用正在某個通道上執行,也能夠調用。資源模塊典型應用于事件同步,比如說在呼叫置保持或掛起時播放音樂。
??????? 資源模塊以res_xxxxx.so命名,比如說?res_musiconhold.so
編解碼模塊
???????????一種CODEC,就是某種音頻或視頻的編解碼模塊。通常用于壓縮媒體,以減少帶寬消耗。
??????? 編解碼模塊都以codec_xxxxx.so命名,比如說codec_alaw.so、?codec_ulaw.so
??????? 編解碼模塊提供媒體流的編碼和解碼算法。Asterisk在接收和發送媒體(音頻和視頻)時,都用到編解碼模塊。這個模塊還完成不同編碼算法間的轉換工作。
??????? Asterisk提供了多種媒體格式的支持,包括:ADPCM, 32kbit/s、G.711 alaw, 64kbit/s、G.711 ulaw, 64kbit/s、G.726, 32kbit/s、G.726, 32kbit/s、GSM, 13kbit/s、LPC-10, 2.4kbit/s。
??????? 其它的如G.729A、G.723.1,是需要專利許可的。
文件格式驅動模塊
????? 這些模塊讓Asterisk能夠支持的一系列文件格式。Asterisk利用文件模塊從網絡上獲取媒體流(音頻或視頻),轉換成文件,存儲在磁盤中;或者反過來從磁盤中讀取文件并轉換為媒體流。這些模塊常常關系到編解碼模塊,對于某種編解碼來說,磁盤上可能存在多種可用的文件格式。
?????? 文件格式模塊以format_xxxxx.so命名,比如說?format_wav.so、format_xxxxx.so
呼叫詳細記錄(CDR)驅動
?????? CDR模塊的用途是把呼叫詳細記錄按不同的格式要求存儲。常用的存儲機制包括CSV文件、關系型數據庫(比如PostgreSQL)。通常每一通呼叫生成一條通話記錄,記錄內容包括主叫、被叫、通話時長等等。
?????? CDR模塊都以cdr_xxxxx.so命名,比如說cdr_csv.so、?cdr_pgsql.so
呼叫事件日志(Call Event Log)驅動
???????? CEL和CDR類似,但它更側重于記錄在呼叫過程中,Asterisk內部發生了什么。
???????? CEL記錄呼叫過程中發生的各種事件。正因如此,它通常記錄了比CDR更詳盡的事情。比如說CEL可能會記錄下這樣的內容:ALICE呼叫BOB;BOB的電話在振鈴20秒后,BOB的移動電話響鈴了,再過15秒,呼叫轉到BOB的語音信箱去了,然后ALICE留下一條25秒長的語音留言,然后掛機。系統還能夠自定義需要記錄的事件。
???????? CEL模塊以cel_xxxxx.so命名,比如cel_custom.so、cel_adaptive_odbc.so
橋接模塊
??????? 從Asterisk1.6.2開始,Asterisk引入了橋接呼叫的一種新方法。它依賴各種橋接模塊,控制為呼叫參與者間的媒體流混頻方式。新的橋接方式,是一種更靈活、更高效的設計。
??????? 橋接模塊以?bridge_xxxxx.so命名,比如bridge_simple.so、?bridge_multiplexed.so.
?
?
總結
以上是生活随笔為你收集整理的asterisk架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 世界首富也扛不住了 马斯克:特斯拉拟裁员
- 下一篇: vivo X80成为天玑9000之王:性