pjsip開發(fā)——Account

Account提供正在使用該應(yīng)用程序的用戶的身份(或身份)。一個(gè)帳戶有一個(gè)與之相關(guān)的SIP統(tǒng)一資源標(biāo)識(shí)符(URI)。

必須在應(yīng)用程序中創(chuàng)建至少一個(gè)Account,因?yàn)槿魏瓮獍l(fā)請(qǐng)求都需要一個(gè)Account上下文。如果不需要用戶關(guān)聯(lián),應(yīng)用程序可以通過(guò)調(diào)用Account.create()來(lái)創(chuàng)建一個(gè)無(wú)用戶帳戶。無(wú)用戶帳戶識(shí)別本地端點(diǎn)而不是特定用戶,并且它對(duì)應(yīng)于特定的傳輸ID。

還有一個(gè)Account必須設(shè)置為默認(rèn)Account,當(dāng)pjsua使用更嚴(yán)格的匹配規(guī)則無(wú)法將傳入請(qǐng)求與任何帳戶匹配時(shí),用作帳戶身份。

自定義Account類

要使用Account類,通常根據(jù)需求來(lái)自定義自己的實(shí)現(xiàn)類,以便接收該帳戶的通知。例如:

   public MyBuddy addBuddy(BuddyConfig bud_cfg) {
    /* Create Buddy */
        MyBuddy bud = new MyBuddy(bud_cfg);
        try {
            bud.create(this, bud_cfg);
        } catch (Exception e) {
            bud.delete();
            bud = null;
        }

        if (bud != null) {
            buddyList.add(bud);
            if (bud_cfg.getSubscribe())
                try {
                    bud.subscribePresence(true);
                } catch (Exception e) {
                }
        }

        return bud;
    }

    public void delBuddy(MyBuddy buddy) {
        buddyList.remove(buddy);
        buddy.delete();
    }

    public void delBuddy(int index) {
        MyBuddy bud = buddyList.get(index);
        buddyList.remove(index);
        bud.delete();
    }

    @Override
    public void onRegState(OnRegStateParam prm) {
        MyApp.observer.notifyRegState(prm.getCode(), prm.getReason(),
                prm.getExpiration());
    }

    @Override
    public void onIncomingCall(OnIncomingCallParam prm) {
        System.out.println("======== Incoming call ======== ");
        MyCall call = new MyCall(this, prm.getCallId());
        MyApp.observer.notifyIncomingCall(call);
    }

    @Override
    public void onInstantMessage(OnInstantMessageParam prm) {
        System.out.println("======== Incoming pager ======== ");
        System.out.println("From     : " + prm.getFromUri());
        System.out.println("To       : " + prm.getToUri());
        System.out.println("Contact  : " + prm.getContactUri());
        System.out.println("Mimetype : " + prm.getContentType());
        System.out.println("Body     : " + prm.getMsgBody());
    }
}

在其子類中,應(yīng)用程序可以實(shí)現(xiàn)帳戶回調(diào),基本用于處理與該帳戶相關(guān)的事件,如:

  • SIP注冊(cè)的狀態(tài)
  • 傳入呼叫
  • 傳入存在訂閱請(qǐng)求
  • 不是從伙伴傳入的即時(shí)消息

應(yīng)用程序需要覆蓋派生類中的相關(guān)回調(diào)方法來(lái)處理這些特定事件。

如果未處理事件,將調(diào)用默認(rèn)操作:

  • 來(lái)電將不被處理
  • 傳入的存在訂閱請(qǐng)求將被接受
  • 來(lái)自非伙伴的傳入即時(shí)消息將被忽略

創(chuàng)建帳號(hào)

我們需要配置AccountConfig并調(diào)用Account.create()來(lái)創(chuàng)建帳戶。至少,pjsua只需要帳戶的ID,這是一個(gè)URI來(lái)標(biāo)識(shí)帳戶(或者在SIP術(shù)語(yǔ)中,它被稱為記錄地址/ AOR)。

    public MyAccount addAcc(AccountConfig cfg) {
        MyAccount acc = new MyAccount(cfg);
        try {
            acc.create(cfg);
        } catch (Exception e) {
            acc = null;
            return null;
        }

        accList.add(acc);
        return acc;
    }

以上創(chuàng)建的帳戶不會(huì)執(zhí)行任何操作,除非在發(fā)件人的“發(fā)件人”標(biāo)題中提供身份。該帳戶不會(huì)注冊(cè)到SIP服務(wù)器或任何東西。

通常,將希望該帳戶認(rèn)證并注冊(cè)到SIP服務(wù)器,以便可以接收來(lái)電。為此,需要在AccountConfig中配置一些更多設(shè)置,如下所示:

accCfg = new AccountConfig();
accCfg.setIdUri("sip:localhost");
accCfg.getNatConfig().setIceEnabled(true);
accCfg.getVideoConfig().setAutoTransmitOutgoing(true);
accCfg.getVideoConfig().setAutoShowIncoming(true);

帳戶配置

在AccountConfig中可以指定更多的設(shè)置,如:

  • AccountRegConfig,指定注冊(cè)設(shè)置,如注冊(cè)服務(wù)器和重試間隔。
  • AccountSipConfig,用于指定SIP設(shè)置,如憑證信息和代理服務(wù)器。
  • AccountCallConfig,用于指定呼叫設(shè)置,例如是否需要可靠的臨時(shí)響應(yīng)(SIP 100rel)。
  • AccountPresConfig來(lái)指定狀態(tài)設(shè)置,例如是否啟用在線發(fā)布(PUBLISH)。
  • AccountMwiConfig,指定MWI(留言等待指示)設(shè)置。
  • AccountNatConfig,用于指定NAT設(shè)置,例如是否使用STUN或ICE。
  • AccountMediaConfig,用于指定媒體設(shè)置,如安全RTP(SRTP)相關(guān)設(shè)置。
  • AccountVideoConfig,用于指定視頻設(shè)置,如默認(rèn)捕獲和渲染設(shè)備。

Account對(duì)象能夠進(jìn)行的操作:

  • 管理注冊(cè)
  • 管理好友/聯(lián)系人
  • 管理在線狀態(tài)

關(guān)于上述詳細(xì)類信息參考可以參照官方文檔pjsip-book

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,678評(píng)論 19 139
  • 1 Spring框架 1.1 Spring框架 Spring框架是一個(gè)分層架構(gòu),由7個(gè)定義良好的模塊組成。Spr...
    Kevin_Junbaozi閱讀 1,743評(píng)論 0 20
  • 今天下午我回到家,女兒已經(jīng)到家了。自己做的泡面吃。而我在路上買點(diǎn)吃了。她吃完了就開始寫作業(yè)了,過(guò)了一會(huì)女兒把作業(yè)寫...
    肖琳的媽媽閱讀 227評(píng)論 0 0
  • 文.孫亮 借助風(fēng)的速度 去追趕你離去的腳步 眼神像滾落的雨珠 跌跌撞撞打濕了 你或許永不歸的歸途 回憶衍生模糊 留...
    朦朧詩(shī)人孫亮閱讀 226評(píng)論 2 6
  • 親子閱讀第307天(2月19日) 今天晚上給崽崽講了一個(gè)名叫《上善若水》的故事。故事講的是世間萬(wàn)物都需要水...
    vv167閱讀 313評(píng)論 0 0

友情鏈接更多精彩內(nèi)容