1. 程式人生 > 其它 >web技術分享| 快速實現一個呼叫邀請 SDK

web技術分享| 快速實現一個呼叫邀請 SDK

什麼是呼叫邀請 SDK?

微信的音視訊呼叫想必大家都用過吧,它就是呼叫邀請在社交場景的表現形式之一,同時呼叫邀請還被運用到很多場景:

  • 娛樂場景:PK 連麥、搶麥
  • 教培場景:舉手發言
  • 企業服務:類企業微信
  • 金融服務:遠端面籤、保險定損
  • 更多:應急指揮排程、健康醫療

呼叫邀請需要具備以下功能:

  • 一套完善的呼叫邀請流程
  • 音訊&視訊通訊能力
  • 自由靈活,方便業務邏輯拓展
  • 開放的媒體控制權限(管理自己的媒體輸入裝置等)

一個線上體驗的 Demo

這裡有一個簡單基礎的 DEMO,請點選體驗

快速實現呼叫邀請 SDK

要實現一個呼叫邀請 SDK 並非易事,我們面臨的問題有很多,其中比較突出的有:應用場景廣泛,如何實現在不同場景下實現不同的業務邏輯?

應用場景的不同意味著需要處理的業務邏輯不同,如果針對不同場景去開發,既費時又費力,非明智之舉。那麼如何開發一個既要具備呼叫流程和音視訊通話能力,還要滿足在不同場景下可以實現不同業務邏輯的 SDK 呢?要想解決這個問題,我們可以給呼叫邀請的流程新增多個的生命週期,在不同的生命週期內做不同的事情,從而在不同場景下實現不同業務的邏輯 ,因此,呼叫邀請 SDK 需要具備兩個核心模組,呼叫邀請流程實時音訊通訊

呼叫邀請流程 :基於 IM 或者信令服務 以及訊息推送服務 實現的一對一或者群組訊息通知服務。

實時音訊通訊 :基於 webRTC 實現的一對一、多人的音視訊通話解決方案。

其中呼叫邀請流程十分重要,決定了什麼時候加入音視訊通話,什麼時候退出音訊通話。

基本功能

為了方便理解,下面我們以 主叫被叫 兩個使用者身份理解呼叫邀請的大致流程以及基礎功能:

主叫 :發起呼叫邀請的使用者

  • 發起呼叫邀請 :一對一、多人
  • 結束通話/取消呼叫邀請 :結束正在進行的通話或者取消(未接受/拒絕)的邀請
  • 事件通知 :呼叫邀請的狀態和流程通知

被叫 :接收到呼叫邀請的使用者

  • 接受邀請 :收到呼叫邀請之後,可執行接受邀請操作
  • 拒絕邀請 :收到呼叫邀請之後,可執行拒絕邀請操作
  • 事件通知 :呼叫邀請的狀態和流程通知

同時我們還需要考慮很多異常的問題和潛在因素,例如:

  • 呼叫邀請超時、對方應答、未及時應答
  • 異常斷網,回話保持
  • 通話佔線
  • 使用者不線上,傳送推送訊息
  • 等等

使用者 :每一個登入系統的使用者

  • 登入/登出系統
  • 管理媒體輸入裝置:開啟/關閉、切換
  • 監聽呼叫邀請

呼叫邀請的生命週期

上面我們將使用者劃分成了兩個身份,那麼每個身份在每個呼叫邀請流程中都不一樣,也就意味著主叫的生命週期和被叫的生命週期是不一樣的,因此我們需要將整個呼叫邀請流程按照主叫和被叫 兩個身份來劃分,分別是主叫的生命週期被叫的生命週期

  • 主叫的生命週期 ,主叫發起邀請之後,直到邀請流程結束,這個過程中所有可能發生的事件,我們都會提供回撥方法來實現。

    • 對方未應答
    • 對方是否收到邀請
    • 對方接受邀請
    • 對方拒絕邀請
    • 邀請失敗及原因
  • 被叫的生命週期 ,被叫在收到邀請之後,直到邀請流程結束,這個過程中所有可能發生的事件,我們都會提供回撥方法來實現。

    • 未及時應答
    • 接受邀請成功
    • 拒絕邀請成功
    • 主叫取消邀請
    • 邀請失敗及原因

這樣我們就可以在不同的生命週期內做不同的事情,從而實現不同場景在業務上的需求 。下面我們列舉了一些在不同情況下,主叫和被叫對應的生命週期:

發起呼叫邀請

取消呼叫邀請

接受呼叫邀請

拒絕呼叫邀請

呼叫邀請未響應

對方忙線中

不線上使用者進行呼叫(推送通知)

總結

最後我們用一個公式來表示:

訊息通知服務 = (IM || 信令服務 + 訊息推送服務) + 生命週期;
呼叫邀請 SDK = 訊息通知服務 + 音視訊通話;