• <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>
     首頁(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ì)把任何它“聽(tīng)到”的聲音(或視頻)再返回(說(shuō))給對(duì)方。因此,如果這時(shí)候用戶 1000 接了電話,無(wú)論說(shuō)什么都能聽(tīng)到自己的聲音。

      呼叫字符串

      上面的例子中,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í)間才有人接電話,由于她聽(tīng)不到任何聲音,實(shí)際上她在奇怪電話到底有沒(méi)有接通。相對(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 接聽(tīng)電話以后,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ù)可以有也可以沒(méi)有。用豎線(|)分開的參數(shù)列表表示“或”的關(guān)系,即只能選其一。

      FreeSWITCH 的命令參數(shù)沒(méi)有統(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í)是很有幫助的。

    分享到: 收藏

    專題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 巴林右旗| 阳春市| 扶风县| 瑞金市| 仙桃市| 茌平县| 临城县| 平舆县| 蒙山县| 台江县| 云霄县| 辽宁省| 澄城县| 安远县| 苍梧县| 玉屏| 日土县| 阿拉善左旗| 红原县| 临西县| 怀安县| 沧州市| 浑源县| 定兴县| 屏东市| 中超| 九台市| 迁安市| 屏边| 巴塘县| 汝阳县| 德化县| 甘谷县| 宁南县| 东丰县| 中卫市| 民县| 新和县| 当涂县| 河北省| 宁南县| http://444 http://444 http://444 http://444 http://444 http://444