• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>

    《FreeSWITCH: VoIP實(shí)戰》: 運行 FreeSWITCH

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


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

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

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

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

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

      發(fā)起呼叫

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

      originate user/alice &echo

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

      呼叫字符串

      上面的例子中,user/alice 稱(chēng)為呼叫字符串,或呼叫 URL。user 是一種特殊的呼叫字符串。我們先來(lái)復習一下第四章的場(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 注冊,在 FreeSWITCH 中就可以看到她的注冊信息:

    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 根據 Contact 字段知道 alice 的 SIP 地址 sip:alice@192.168.4.4:5090。當使用 originate 呼叫 user/alice 這個(gè)地址時(shí),FreeSWITCH 便查找本地數據庫,向 alice 的地址 sip:alice@192.168.4.4:5090 發(fā)送 INVITE 請求(實(shí)際的呼叫字符串是由用戶(hù)目錄中的 dial-string 參數決定的)。

      API 與 APP

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

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

      originate user/alice &park()                                    

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

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

      originate user/alice &hold()              

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

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

      或者,直接錄音:

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

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

      originate user/alice &bridge(user/bob)

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

    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é)習了兩條命令(API),originate 和 uuid_bridge。以及幾個(gè)程序(APP) - echo、park、bridge等。細心的讀者可以會(huì )發(fā)現,uuid_bridge API 和 bridge APP 有些類(lèi)似,我也知道他們一個(gè)是先呼叫后橋接,另一個(gè)是先橋接后呼叫,那么,它們到底有什么本質(zhì)的區別呢?

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

      這就是 API 與 APP 最本質(zhì)的區別。通常,我們在控制臺上輸入的命令都是 API;而在 dialplan 中執行的程序都是 APP(dialplan 中也能執行一些特殊的 API)。大部分公用的 API 都是在 mod_commands 模塊中加載的;而 APP 則在 mod_dptools 中,因而 APP 又稱(chēng)為撥號計劃工具(Dialplan Tools)。某些模塊(如 mod_sofia)有自己的的 API 和 APP。

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

      命令行幫助

       在本章的最后,我們來(lái)學(xué)習一個(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]
    ....

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

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

      小結

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

    分享到: 收藏

    專(zhuān)題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 逊克县| 瑞安市| 郴州市| 平武县| 温州市| 水富县| 霞浦县| 阜阳市| 柞水县| 乳山市| 南昌县| 乐清市| 甘孜| 永昌县| 武穴市| 常熟市| 泸州市| 丰台区| 正定县| 凤冈县| 福州市| 天津市| 万安县| 卢龙县| 德安县| 营山县| 北京市| 清徐县| 五常市| 武义县| 五指山市| 兴国县| 邹城市| 横峰县| 义马市| 张家界市| 天柱县| 庆云县| 双辽市| 朔州市| 华坪县| http://444 http://444 http://444 http://444 http://444 http://444