web技術分享| 快速實現一個呼叫邀請 SDK
什麼是呼叫邀請 SDK?
微信的音視訊呼叫想必大家都用過吧,它就是呼叫邀請在社交場景的表現形式之一,同時呼叫邀請還被運用到很多場景:
- 娛樂場景:PK 連麥、搶麥
- 教培場景:舉手發言
- 企業服務:類企業微信
- 金融服務:遠端面籤、保險定損
- 更多:應急指揮排程、健康醫療
呼叫邀請需要具備以下功能:
- 一套完善的呼叫邀請流程
- 音訊&視訊通訊能力
- 自由靈活,方便業務邏輯拓展
- 開放的媒體控制權限(管理自己的媒體輸入裝置等)
一個線上體驗的 Demo
這裡有一個簡單基礎的 DEMO,請點選體驗。
快速實現呼叫邀請 SDK
要實現一個呼叫邀請 SDK 並非易事,我們面臨的問題有很多,其中比較突出的有:應用場景廣泛,如何實現在不同場景下實現不同的業務邏輯?
應用場景的不同意味著需要處理的業務邏輯不同,如果針對不同場景去開發,既費時又費力,非明智之舉。那麼如何開發一個既要具備呼叫流程和音視訊通話能力,還要滿足在不同場景下可以實現不同業務邏輯的 SDK 呢?要想解決這個問題,我們可以給呼叫邀請的流程新增多個的生命週期,在不同的生命週期內做不同的事情,從而在不同場景下實現不同業務的邏輯 ,因此,呼叫邀請 SDK 需要具備兩個核心模組,呼叫邀請流程 和 實時音訊通訊 。
呼叫邀請流程 :基於 IM 或者信令服務 以及訊息推送服務 實現的一對一或者群組訊息通知服務。
實時音訊通訊 :基於 webRTC
實現的一對一、多人的音視訊通話解決方案。
其中呼叫邀請流程十分重要,決定了什麼時候加入音視訊通話,什麼時候退出音訊通話。
基本功能
為了方便理解,下面我們以 主叫 和 被叫 兩個使用者身份理解呼叫邀請的大致流程以及基礎功能:
主叫 :發起呼叫邀請的使用者
- 發起呼叫邀請 :一對一、多人
- 結束通話/取消呼叫邀請 :結束正在進行的通話或者取消(未接受/拒絕)的邀請
- 事件通知 :呼叫邀請的狀態和流程通知
被叫 :接收到呼叫邀請的使用者
- 接受邀請 :收到呼叫邀請之後,可執行接受邀請操作
- 拒絕邀請 :收到呼叫邀請之後,可執行拒絕邀請操作
- 事件通知 :呼叫邀請的狀態和流程通知
同時我們還需要考慮很多異常的問題和潛在因素,例如:
- 呼叫邀請超時、對方應答、未及時應答
- 異常斷網,回話保持
- 通話佔線
- 使用者不線上,傳送推送訊息
- 等等
使用者 :每一個登入系統的使用者
- 登入/登出系統
- 管理媒體輸入裝置:開啟/關閉、切換
- 監聽呼叫邀請
呼叫邀請的生命週期
上面我們將使用者劃分成了兩個身份,那麼每個身份在每個呼叫邀請流程中都不一樣,也就意味著主叫的生命週期和被叫的生命週期是不一樣的,因此我們需要將整個呼叫邀請流程按照主叫和被叫 兩個身份來劃分,分別是主叫的生命週期 和被叫的生命週期 :
-
主叫的生命週期 ,主叫發起邀請之後,直到邀請流程結束,這個過程中所有可能發生的事件,我們都會提供回撥方法來實現。
- 對方未應答
- 對方是否收到邀請
- 對方接受邀請
- 對方拒絕邀請
- 邀請失敗及原因
-
被叫的生命週期 ,被叫在收到邀請之後,直到邀請流程結束,這個過程中所有可能發生的事件,我們都會提供回撥方法來實現。
- 未及時應答
- 接受邀請成功
- 拒絕邀請成功
- 主叫取消邀請
- 邀請失敗及原因
這樣我們就可以在不同的生命週期內做不同的事情,從而實現不同場景在業務上的需求 。下面我們列舉了一些在不同情況下,主叫和被叫對應的生命週期:
發起呼叫邀請
取消呼叫邀請
接受呼叫邀請
拒絕呼叫邀請
呼叫邀請未響應
對方忙線中
不線上使用者進行呼叫(推送通知)
總結
最後我們用一個公式來表示:
訊息通知服務 = (IM || 信令服務 + 訊息推送服務) + 生命週期;
呼叫邀請 SDK = 訊息通知服務 + 音視訊通話;