基于嵌入式Linux的網(wǎng)絡(luò)語(yǔ)音平臺(tái)的設(shè)計(jì)與構(gòu)建
以內(nèi)核態(tài)運(yùn)行的程序主要包括SLIC控制模塊、DSR控制模塊及接口和DSR數(shù)據(jù)模塊這三部分,它們基本完成了底層所需的功能要求。用戶態(tài)的程序都是運(yùn)行在其上,對(duì)其進(jìn)行管理控制,以實(shí)現(xiàn)上層的應(yīng)用。
(1)SLIC控制模塊
由于整個(gè)平臺(tái)包含有FXS和FXO接口,故SLIC控制模塊也可以相應(yīng)地分為兩部分。
對(duì)于FXS接口程序部分,其主要是模擬PSTN局端功能,對(duì)提供撥號(hào)音、電池電流與振鈴電壓和檢測(cè)來(lái)自電話的環(huán)路關(guān)閉進(jìn)行相應(yīng)地控制。當(dāng)有控制信息需要輸出時(shí),驅(qū)動(dòng)程序通過(guò)向SLIC芯片的C1、C2和C3管腳寫入相應(yīng)的電平,實(shí)現(xiàn)對(duì)SLIC的控制(具體數(shù)值可參看表1)??梢愿鶕?jù)SLIC所處的狀態(tài)進(jìn)行劃分,設(shè)置如下四種狀態(tài):fxs_ring,fxs_take,fxs_onhook,fxs_offhook。當(dāng)其處在fxs_ring狀態(tài)下就可以為FXS接口提供撥號(hào)音、振鈴等信號(hào);當(dāng)其處在fxs_take狀態(tài)下表明用戶剛剛摘機(jī);當(dāng)其處在fxs_offhook狀態(tài)下表明該終端用戶為主動(dòng)呼叫者,需要處理摘機(jī)以后的操作;當(dāng)其處在fxs_onhook狀態(tài)下表明用戶掛機(jī)。
相應(yīng)的,當(dāng)SLIC有中斷輸入時(shí),中斷處理程序會(huì)根據(jù)當(dāng)前的狀態(tài)來(lái)判斷。如果確定是用戶進(jìn)行了摘機(jī)或掛機(jī)操作后,查詢最后一次硬中斷后該路SLIC的電平,為0則處于摘機(jī)狀態(tài),否則處于掛機(jī)狀態(tài)。這里中斷的處理較為重要。其內(nèi)容包括:中斷源是由哪個(gè)FXS端口發(fā)出的,并根據(jù)所處的狀態(tài)來(lái)開(kāi)啟相應(yīng)狀態(tài)下的定時(shí)器,以保證狀態(tài)變化間的時(shí)間間隔。
對(duì)于FXO接口程序部分,其主要是模擬電話機(jī)的功能,所以功能相對(duì)要簡(jiǎn)單些。在程序中主要設(shè)定有fxo_ring、fxo_onhook和fxo_offhook這三個(gè)狀態(tài)。當(dāng)其處在fxo_offhook狀態(tài)下表明用戶摘機(jī)。當(dāng)其處在fxo_onhook狀態(tài)下驅(qū)動(dòng)程序就把DAA芯片的引腳拉高,表明用戶掛機(jī)。相應(yīng)的,當(dāng)有控制信息需要輸入時(shí),其檢測(cè)DAA芯片的引腳來(lái)進(jìn)行判斷,這里同樣要啟動(dòng)相應(yīng)的定時(shí)器,來(lái)判斷回路上是否有振鈴電平或何時(shí)回路上振鈴信號(hào)結(jié)束等信息。當(dāng)程序判斷處在fxo_ring狀態(tài)下,則表明線路上有振鈴信號(hào)并做相關(guān)處理。
(2)DSR控制模塊及接口
DSR控制模塊及接口主要實(shí)現(xiàn)用戶對(duì)串行語(yǔ)音數(shù)據(jù)通信接口HSS以及底層引擎NPE的控制。既與來(lái)自上層應(yīng)用程序進(jìn)行信息交互,又為上層應(yīng)用程序和SLIC硬件之間提供控制接口。與一般的設(shè)備驅(qū)動(dòng)一樣,主要包括DSR_open()、DSR_close()、DSR_read()、DSR_write()和DSR_ioctl()這些函數(shù)。其中DSR_read()和DSR_write()主要負(fù)責(zé)從DSR讀取消息和向DSR寫入消息。DSR_ioctl()主要負(fù)責(zé)控制DSR的相關(guān)配置參數(shù)讀入與讀出和傳遞SLIC控制信息給底層的SLIC控制模塊。參數(shù)包括根據(jù)當(dāng)前所處狀態(tài)判斷后所得出的C1、C2和C3管腳寫入相應(yīng)的電平值、查詢當(dāng)前SLIC的工作狀態(tài)信息、SLIC振鈴信號(hào)的產(chǎn)生和停止等。DSR的相關(guān)配置參數(shù)包括DSR中DSP通道數(shù)目、通道編碼器的類型、編解碼器輸出語(yǔ)音數(shù)據(jù)幀的大小等。
(3)DSR數(shù)據(jù)模塊
DSR數(shù)據(jù)模塊主要實(shí)現(xiàn)話音數(shù)據(jù)在內(nèi)核與用戶態(tài)之間的交互。包括從內(nèi)核中讀取數(shù)據(jù),向內(nèi)核中發(fā)送數(shù)據(jù)。為了有效把握數(shù)據(jù)傳輸節(jié)奏,需要建立一種內(nèi)部緩存機(jī)制。包括從DSR讀取到數(shù)據(jù)緩存后發(fā)送給用戶態(tài)的應(yīng)用程序和用戶態(tài)的應(yīng)用程序向DSR發(fā)送數(shù)據(jù)的緩存。緩存內(nèi)的數(shù)據(jù)查詢也是每隔一段時(shí)間后再進(jìn)行的。但注意緩存不應(yīng)開(kāi)的過(guò)大,以免通話延時(shí)的加大。為了消除由于網(wǎng)絡(luò)丟包而造成語(yǔ)音信息不完整的問(wèn)題,DSR數(shù)據(jù)模塊也建立了相應(yīng)的機(jī)制來(lái)控制。
用戶的應(yīng)用程序主要運(yùn)行在用戶態(tài),針對(duì)DSR模塊和網(wǎng)絡(luò)上收發(fā)的語(yǔ)音數(shù)據(jù)和控制信令進(jìn)行處理操作。以編程實(shí)現(xiàn)直接內(nèi)向呼叫、呼叫轉(zhuǎn)移網(wǎng)絡(luò)、呼叫等待和三方呼叫等功能。對(duì)于底層通話平臺(tái)來(lái)說(shuō),主要關(guān)心的是處理電話和IP網(wǎng)絡(luò)間的銜接問(wèn)題,這需要做好如下幾個(gè)接口:DSR控制接口、DSR數(shù)據(jù)接口和網(wǎng)絡(luò)接口,以實(shí)現(xiàn)語(yǔ)音數(shù)據(jù)收發(fā)、通話信令收發(fā)和DSR控制消息收發(fā)的管理。
網(wǎng)絡(luò)接口模塊用來(lái)接受網(wǎng)絡(luò)上傳遞進(jìn)來(lái)的數(shù)據(jù),做出相關(guān)處理后將壓縮的語(yǔ)音數(shù)據(jù)通過(guò)DSR數(shù)據(jù)接口傳遞給內(nèi)核處理,同時(shí)也負(fù)責(zé)將從DSR數(shù)據(jù)接口傳遞來(lái)的壓縮后的語(yǔ)音數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上。如果從網(wǎng)絡(luò)上傳遞進(jìn)來(lái)的數(shù)據(jù)是通話信令,則在做出相關(guān)處理后將具體的控制信息通過(guò)DSR控制接口發(fā)送給內(nèi)核,或者根據(jù)底層操作的內(nèi)容把相應(yīng)的信令信息通過(guò)網(wǎng)絡(luò)接口發(fā)送到網(wǎng)絡(luò)上。例如,對(duì)DSR的相關(guān)控制消息包括打開(kāi)與關(guān)閉DSR編解碼功能、打開(kāi)與關(guān)閉在向電話輸出的電話信令音和開(kāi)啟與關(guān)閉檢測(cè)用戶鍵盤撥號(hào)等功能。
2 測(cè)試
為了保證當(dāng)前系統(tǒng)能正確工作,需要對(duì)其底層功能進(jìn)行測(cè)試。因?yàn)榫幋a壓縮的語(yǔ)音數(shù)據(jù)由實(shí)時(shí)傳送協(xié)議RTP負(fù)責(zé)傳遞,故主要采用用戶數(shù)據(jù)UDP包的形式接收與發(fā)送。出于這個(gè)角度考慮,可以實(shí)現(xiàn)將電話手柄的MIC采集的聲音返回至同一電話手柄的聽(tīng)筒內(nèi)。首先編寫一個(gè)小程序來(lái)實(shí)現(xiàn)將話筒收集的語(yǔ)音數(shù)據(jù)發(fā)送至網(wǎng)絡(luò)上,同時(shí)接受來(lái)自網(wǎng)絡(luò)的數(shù)據(jù)并還原成模擬話音。假設(shè)網(wǎng)絡(luò)上有一臺(tái)IP地址為192.168.0.1的主機(jī)。其運(yùn)行一個(gè)UDP數(shù)據(jù)包環(huán)回程序負(fù)責(zé)將網(wǎng)上接收到的UDP數(shù)據(jù)包轉(zhuǎn)發(fā)回源發(fā)送端。開(kāi)始測(cè)試前,先設(shè)定一些必要的控制信息,如對(duì)方IP地址和語(yǔ)音編解碼方式等。將網(wǎng)線和話筒線連至網(wǎng)口和RJ11接口,撥通IP地址為192.168.0.1主機(jī)的電話,看看電話手柄的聽(tīng)筒內(nèi)將能夠聽(tīng)到話筒MIC所收集的話音。如果話音正確,則表明底層的功能已實(shí)現(xiàn)。
基于IXP421的網(wǎng)絡(luò)語(yǔ)音平臺(tái)方案實(shí)現(xiàn)了底層的相關(guān)功能,而上層的應(yīng)用較為靈活,且有很強(qiáng)的擴(kuò)展性,例如實(shí)現(xiàn)VPN功能及多媒體業(yè)務(wù),還需要開(kāi)發(fā)相應(yīng)的軟件,本文并未涉及到。隨著網(wǎng)絡(luò)語(yǔ)音相關(guān)技術(shù)的逐步走向成熟,相信會(huì)有越來(lái)越多的人因之受益。
linux相關(guān)文章:linux教程
評(píng)論