實驗 一 : RTP 實驗目的 實作部分 了解如何利用RTP在網路上傳送語音封包 加深對RTP、RTCP封包的基本格式的認識 IP Network SIP Signaling RTP Media Stream 利用cclRTP(工研院技轉),處理RTP的傳送與接收,以及聲音的輸出入。
介紹cclRTP(工研院電通所技轉,僅附object code) 處理RTP的傳送與接收(cclRtp.h cclRtp.c rtp.h rtp.c) 處理聲音的輸出入(WavInOut.h WavInOut.c) 將RTP與聲音的輸出入結合,並建立到對方的RTP連線(SimRTPDlg.h SimRTPDlg.c)
實驗流程 (1/3) 硬體需求:音效卡、喇叭、麥克風、區域網路、網路卡、IP CSimRTPDlg::CSimRTPDlg中加入cclRTPStartup(2) 做RTP的一些物件初始化 設定最大channel數為2 RTPOpenPort()開啟RTP port
實驗流程 (2/3) void CSimRTPDlg::OnOK()中把WavIO關閉 加入RTPPeerConnect(ConnectIP,ConnectPort)將RTP連線到對方電腦 IP為ConnectIP port為ConnectPort(這裡內定為9000) 開啟聲音的IO,即可以開始傳送RTP
實驗流程 (3/3) 程式執行後如下: 兩台按連線可通話 輸入對方IP 連線後變掛斷 按Exit離開
程式流程 先執行 CSimRTPDlg::CSimRTPDlg 初始化cclRTP與WavIOObj 開啟RTP port。 按下“連線”按鍵後,程式會呼叫OnOK function 先關閉WavIO 再呼叫RTP連線,並指定target ip與port。 指定好target ip與port之後 程式會先把buffer清掉 再開啟WavIO,並開始錄放聲音
實驗二 : SIP User Mobility 實驗目的 實作部分 藉由Location Server和Redirect Server的設計,深入瞭解SIP的運作及訊息格式。 實作部分 (1)實作一個 Location Server 來接收 SIP REGISTER ,而且 要將 REGISTER 中 Contact header 裡的URI記錄下來 。
(2)實作一個 Redirect Server 來接收 SIP INVITE Requests , 並且對INVITE Request 送出 SIP 302 Moved Temporarily Response,其中要把剛剛紀錄下來的 URI 放在 Contact header中。
Sample [1/5] CCL SIP User Agent (1)Preference (喜好設定)
Sample [2/5] 勾掉(因為不用Proxy) 填入Registar的IP,Port
Sample [3/5] 填入自己的名字 填入想要聽的Port
Sample [4/5] Jay@ntu.edu.tw REGISTER To:Jay@hinet.net Contact:Jay@ntu.edu.tw 200 OK
Sample [5/5] Jay@ntu.edu.tw Flora@nctu.edu.tw SIP:Jay@hinet.net (2)SIP:Jay@ntu.edu.tw (3)SIP:Jay@ntu.edu.tw SIP:Jay@hinet.net
將Location Information 程式實做部分 Location Server, Redirect Server可用各種程式語言實做,包括Java Socket, WinSock, Perl, Berkely Socket … 程式架構如下 : 將Location Information 放置於檔案或資料庫中 接收註冊訊息, 並且進行Parse 接收INVITE訊息, 並且進行Parse 傳回302 Move Temporarily 的 SIP Message
實驗三 : MGCP 實驗目的 使同學瞭解MGCP模擬程式和基本通話流程,熟悉MGCP的命令與訊息,並了解Call Agent程式的運作,並學會開發新的通話服務。 實驗原理 修改 CA 以開發新服務 SS7 CA SG MGCP TGW RGW CO PSTN RTP
實驗流程 (1/4) 加入RGW 加入CA 選擇是否語音支援
實驗流程 (2/4) 初始化CA 編輯更改 初始化RGW 初始化Endpoint
實驗流程 (3/4) 完成模擬環境建構
實驗流程 (4/4) CA會偵測其管轄區域內的電話 RGW其管轄區域內的電話 會自動向CA進行註冊 電話顯示狀態
CA設定 (1/3) 模擬程式選擇的port 模擬程式所在之IP
CA設定 (2/3) 此為接收RGW訊息的位置 為CA所在的電腦IP CA所在的port
CA設定 (3/3) RGW所屬IP RGW所屬port CA所管理的電話端資料 電話端id
RGW設定(無Voice Support) 接收CA訊息的位置 可供使用者選擇訊息需透過哪一個位置(通常都設和RGW相同的Domain Name和不相衝的port) 顯示出此RGW下電話端點ID(endpointID)的範圍
RGW設定(有Voice Support) 接收CA訊息的位置 可供使用者選擇訊息需透過哪一個位置(通常都設和RGW相同的Domain Name和不相衝的port) 選擇此RGW所管的電話端點資料存放位置
電話鍵盤按鍵意義 此視窗顯示所傳送的指令 其意義為: 電話endpointID +指令 此為拿起電話(hd指令) 此為掛上電話(hu指令) 此為傳送指令按鍵 此為電話鍵盤(符號數字指令)
通話服務的開發(1/4) 實驗步驟二: 開發新服務 (話中插撥、隨身碼、熱線…) 決定開發的新服 務的通話流程 畫出 message flow 修改CA的finite state machine
通話服務的開發(2/4) MGCP正常的通話訊息流程 :
通話服務的開發(3/4) 基本通話有限狀態機 (由通話訊息流程決定)
通話服務的開發(4/4) 通話代理人 Call Agent 程式運作 (A),(B)構成 call agent simulator, (B)中mgcLoop會接收來自 (C)RGW 的MGCP Msg, 然後再由(A)應用層根據訊息,目前的通話狀態,還有caller及callee的元件狀態,呼叫對應的執行程式,然後回應Ack給對應的MGCP程序並決定caller,callee的下一狀態。我們主要更改的部分為(A)應用層,即CASim.cpp的部分檔案。
範例 隨身碼(Follow-me Service)