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