新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于嵌入式Linux的網絡語音平臺的設計與構建

        基于嵌入式Linux的網絡語音平臺的設計與構建

        作者: 時間:2009-04-09 來源:網絡 收藏

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

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux相關文章:linux教程



        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阿巴嘎旗| 玛纳斯县| 武鸣县| 成都市| 尼玛县| 平湖市| 南郑县| 博爱县| 拜城县| 闽侯县| 罗定市| 威信县| 军事| 鄂尔多斯市| 梁平县| 紫阳县| 门头沟区| 岫岩| 涞源县| 合作市| 陆丰市| 秭归县| 海林市| 浑源县| 乡宁县| 乐东| 澄江县| 鄂托克旗| 吉木萨尔县| 雷州市| 铁岭市| 龙门县| 山丹县| 五大连池市| 泾川县| 科技| 阿拉善左旗| 琼海市| 图片| 永吉县| 盱眙县|