欧美,精品,综合,亚洲,好吊妞视频免新费观看,免费观看三级吃奶,一级a片女人自慰免费看

 首頁(yè) > 新聞 > 專家觀點(diǎn) >

《FreeSWITCH: VoIP實(shí)戰(zhàn)》: 運(yùn)行 FreeSWITCH

2012-08-15 13:55:53   作者:杜金房   來(lái)源:FreeSWITCH    評(píng)論:0  點(diǎn)擊:


  其它一些 “/”開頭的指令與 Event Socket 中相關(guān)的命令相同,如:

/event       -- 開啟事件接收
/noevents    -- 關(guān)閉事件接收
/nixevent    -- 除了特定一種外,開啟所有事件
/log         -- 設(shè)置 log 級(jí)別,如 /log info 或 /log debug 等
/nolog       -- 關(guān)閉 log
/filter      -- 過(guò)濾事件

   另外,一些“重要”命令不能直接在 fs_cli 中執(zhí)行,如 shutdown 命令,在控制臺(tái)上可以直接執(zhí)行,但在 fs_cli中,需要執(zhí)行 fsctl shutdown。

  除此之外,其它命令都與直接在 FreeSWITCH 控制臺(tái)上執(zhí)行是一樣的。它也支持快捷鍵,最常用的快捷鍵是 F6(reloadxml)、F7(關(guān)閉 log輸出)、F8(開啟 debug 級(jí)別的 log 輸出)。

  在 *nix上,兩者都通過(guò) libeditline 支持命令行編輯功能。可以通過(guò)上、下箭頭查看命令歷史。

  發(fā)起呼叫

  可以在 FreeSWITCH 中使用 originate 命令發(fā)起一次呼叫,如果用戶 1000 已經(jīng)注冊(cè),那么:

  originate user/alice &echo

  上述命令在呼叫 1000 這個(gè)用戶后,便執(zhí)行 echo 這個(gè)程序。echo 是一個(gè)回音程序,即它會(huì)把任何它“聽到”的聲音(或視頻)再返回(說(shuō))給對(duì)方。因此,如果這時(shí)候用戶 1000 接了電話,無(wú)論說(shuō)什么都能聽到自己的聲音。

  呼叫字符串

  上面的例子中,user/alice 稱為呼叫字符串,或呼叫 URL。user 是一種特殊的呼叫字符串。我們先來(lái)復(fù)習(xí)一下第四章的場(chǎng)景。FreeSWITCH UA 的地址為 192.168.4.4:5050,alice UA 的地址為 192.168.4.4:5090,bob UA 的地址為 192.168.4.4:26000。若 alice 已向 FreeSWITCH 注冊(cè),在 FreeSWITCH 中就可以看到她的注冊(cè)信息:

freeswitch@du-sevens-mac-pro.local> sofia status profile internal reg


Registrations:
=============================================================================================
Call-ID:        ZTRkYjdjYzY0OWFhNDRhOGFkNDUxMTdhMWJhNjRmNmE.
User:           alice@192.168.4.4
Contact:        "Alice" <sip:alice@192.168.4.4:5090;rinstance=a86a656037ccfaba;transport=UDP>
Agent:          Zoiper rev.5415
Status:         Registered(UDP)(unknown) EXP(2010-05-02 18:10:53)
Host:           du-sevens-mac-pro.local
IP:             192.168.4.4
Port:           5090
Auth-User:      alice
Auth-Realm:     192.168.4.4
MWI-Account:    alice@192.168.4.4

=============================================================================================

  FreeSWITCH 根據(jù) Contact 字段知道 alice 的 SIP 地址 sip:alice@192.168.4.4:5090。當(dāng)使用 originate 呼叫 user/alice 這個(gè)地址時(shí),F(xiàn)reeSWITCH 便查找本地?cái)?shù)據(jù)庫(kù),向 alice 的地址 sip:alice@192.168.4.4:5090 發(fā)送 INVITE 請(qǐng)求(實(shí)際的呼叫字符串是由用戶目錄中的 dial-string 參數(shù)決定的)。

  API 與 APP

  在上面的例子中,originate 是一個(gè)命令(Command),它用于控制 FreeSWITCH 發(fā)起一個(gè)呼叫。FreeSWITCH 的命令不僅可以在控制臺(tái)上使用,也可以在各種嵌入式腳本、Event Socket (fs_cli 就是使用了 ESL庫(kù))或 HTTP RPC 上使用,所有命令都遵循一個(gè)抽像的接口,因而這些命令又稱 API Commands。

  echo() 則是一個(gè)程序(Application,簡(jiǎn)稱 APP),它的作用是控制一個(gè) Channel 的一端。我們知道,一個(gè) Channel 有兩端,在上面的例子中,alice 是一端,別一端就是 echo()。電話接通后相當(dāng)于 alice 在跟 echo() 這個(gè)家伙在通話。另一個(gè)常用的 APP 是 park()

  originate user/alice &park()                                    

  我們初始化了一個(gè)呼叫,在 alice 接電話后對(duì)端必須有一個(gè)人在跟也講話,否則的話,一個(gè) Channel 只有一端,那是不可思議的。而如果這時(shí) FreeSWITCH 找不到一個(gè)合適的人跟 alice 通話,那么它可以將該電話“掛起”,park()便是執(zhí)行這個(gè)功能,它相當(dāng)于一個(gè) Channel 特殊的一端。

  park() 的用戶體驗(yàn)不好,alice 不知道要等多長(zhǎng)時(shí)間才有人接電話,由于她聽不到任何聲音,實(shí)際上她在奇怪電話到底有沒有接通。相對(duì)而言,另一個(gè)程序 hold()則比較友好,它能在等待的同時(shí)播放保持音樂(lè)(MOH, Music on Hold)。

  originate user/alice &hold()              

  當(dāng)然,你也可以直接播放一個(gè)特定的聲音文件:

  originate user/alice &playback(/root/welcome.wav)                                    

  或者,直接錄音:

  originate user/alice &record(/root/voice_of_alice.wav)                                    

  以上的例子實(shí)際上都只是建立一個(gè) Channel,相當(dāng)于 FreeSWITCH 作為一個(gè) UA 跟 alice 通話。它是個(gè)一條腿(one leg,只有a-leg)的通話。在大多數(shù)情況下,F(xiàn)reeSWITCH 都是做為一個(gè) B2BUA 來(lái)橋接兩個(gè) UA 進(jìn)行通話話的。在 alice 接聽電話以后,bridge()程序可以再啟動(dòng)一個(gè) UA 呼叫 bob:

  originate user/alice &bridge(user/bob)

  終于,alice 和 bob 可以通話了。我們也可以用另一個(gè)方式建立他們之音的通話:

originate user/alice &park()
originate user/bob &park()
show channels
uuid_bridge <alice_uuid> <bob_uuid>

  在這里,我們分別呼叫 alice 和 bob,并把他們暫時(shí) park 到一個(gè)地方。通過(guò)命令 show channels 我們可以知道每個(gè) Channel 的 UUID,然后使用 uuid_bridge 命令將兩個(gè) Channel 橋接起來(lái)。與上一種方式不同,上一種方式實(shí)際上是先橋接,再呼叫 bob。

  上面,我們一共學(xué)習(xí)了兩條命令(API),originate 和 uuid_bridge。以及幾個(gè)程序(APP) - echo、park、bridge等。細(xì)心的讀者可以會(huì)發(fā)現(xiàn),uuid_bridge API 和 bridge APP 有些類似,我也知道他們一個(gè)是先呼叫后橋接,另一個(gè)是先橋接后呼叫,那么,它們到底有什么本質(zhì)的區(qū)別呢?

  簡(jiǎn)單來(lái)說(shuō),一個(gè) APP 是一個(gè)程序(Application),它作為一個(gè) Channel 一端與另一端的 UA 進(jìn)行通信,相當(dāng)于它工作在 Channel 內(nèi)部;而一個(gè) API 則是獨(dú)立于一個(gè) Channel 之外的,它只能通過(guò) UUID 來(lái)控制一個(gè) Channel(如果需要的話)。

  這就是 API 與 APP 最本質(zhì)的區(qū)別。通常,我們?cè)诳刂婆_(tái)上輸入的命令都是 API;而在 dialplan 中執(zhí)行的程序都是 APP(dialplan 中也能執(zhí)行一些特殊的 API)。大部分公用的 API 都是在 mod_commands 模塊中加載的;而 APP 則在 mod_dptools 中,因而 APP 又稱為撥號(hào)計(jì)劃工具(Dialplan Tools)。某些模塊(如 mod_sofia)有自己的的 API 和 APP。

  某些 APP 有與其對(duì)應(yīng)的 API,如上述的 bridge/uuid_bridge,還有 transfer/uuid_transfer、playback/uuid_playback等。UUID 版本的 API 都是在一個(gè) Channel 之外對(duì) Channel 進(jìn)行控制的,它們應(yīng)用于不能參與到通話中卻又想對(duì)正在通話的 Channel做點(diǎn)什么的場(chǎng)景中。例如 alice 和 bob 正在暢聊,有個(gè)壞蛋使用 uuid_kill 將電話切斷,或使用 uuid_broadcast 給他們廣播惡作劇音頻,或者使用 uuid_record 把他們談話的內(nèi)容錄音等。

  命令行幫助

   在本章的最后,我們來(lái)學(xué)習(xí)一個(gè)如何使用 FreeSWITCH 的命令行幫助。

  使用 help 命令可以列出所有命令的幫助信息。某些命令,也有自己的幫助信息,如 sofia:

freeswitch@du-sevens-mac-pro.local> sofia help

USAGE:
--------------------------------------------------------------------------------
sofia help
sofia profile <profile_name> [[start|stop|restart|rescan]
    [reloadxml]|flush_inbound_reg [<call_id>] [reboot]|[register|unregister]
....

  其中,用尖括號(hào)(< >)括起來(lái)的表示要輸入的參數(shù),而用方括號(hào)([ ])括起來(lái)的則表示可選項(xiàng),該參數(shù)可以有也可以沒有。用豎線(|)分開的參數(shù)列表表示“或”的關(guān)系,即只能選其一。

  FreeSWITCH 的命令參數(shù)沒有統(tǒng)一的解析函數(shù),而都是由命令本身的函數(shù)負(fù)責(zé)解析的,因而不是很規(guī)范,不同的命令可能有不同的風(fēng)格。所以使用時(shí),除使用幫助信息外,最好還是查閱一下 Wiki 上的幫助(http://wiki.freeswitch.org/wiki/Mod_commands),那里大部分命令都有相關(guān)的例子。關(guān)于 APP,則可以參考 http://wiki.freeswitch.org/wiki/Mod_dptools。本書的附錄中也有相應(yīng)的中文參考。

  小結(jié)

  本章介紹了如何啟動(dòng)與控制 FreeSWTICH,并提到了幾個(gè)常用的命令。另外,本章還著重講述了 APP 與 API 的區(qū)別,搞清楚這些概念對(duì)后面的學(xué)習(xí)是很有幫助的。

分享到: 收藏

專題