請問咱們支援像微信一樣的音影片呼叫功能嗎?
請問呼叫邀請怎麼實現?
如果客戶端離線了,怎麼呼叫到客戶?
怎麼新增呼叫鈴聲?以及接收鈴聲?
經常能聽到有使用者問上述的問題,今天藉此機會向大家講解下音影片呼叫的整體流程。
前提
在接入anyRTC SDK前,先向大家介紹下音影片呼叫所需要的SDK:視訊通話SDK、實時訊息SDK、第三方推送服務。
視訊通話SDK
視訊通話SDK,可實現一對一單聊、多人群聊,同時具備純語音通話和視訊通話功能。也可以實現一對一、多對多的音影片互動直播。其原理是進入同一個頻道即可釋出自己的音影片流並自動訂閱其他使用者的音影片流,進而實現音視訊通話。
實時訊息SDK
實時訊息SDK,可以輕鬆實現點對點訊息、頻道訊息、使用者屬性、頻道屬性和發起呼叫邀請、獲取離線以及歷史資訊等功能。更可以自由拓展出更多豐富的功能,如禁言、踢人、許可權管理等。其原理是線上使用者的信令的傳送與接收,透過信令交換來客戶所需要的功能。
第三方推送服務
第三方推送服務,當集成了實時訊息 SDK 的使用者下線後,訊息需要透過第三方推送服務才能送達,一般應用中都會整合推送服務,當實時訊息使用者下線後,透過推送服務也可以進行訊息傳遞,實現音影片呼叫。
實現音影片呼叫功能,前提已經集成了視訊通話SDK、實時訊息SDK、第三方推送服務。
一對一呼叫
一對一呼叫邀請使用RTM 的呼叫邀請介面進行:具體邏輯檢視呼叫邀請文件,本章節結合呼叫邀請文件進行闡述。
流程:
- 使用者登入RTM-》選擇需要呼叫的使用者-》使用RTM方法判斷使用者是否線上-》使用者不線上-》傳送離線推送訊息-》等待對方同意與否-》對方同意後-》使用RTC 進入協商的頻道進行通話。
- 使用者登入RTM-》選擇需要呼叫的使用者-》使用RTM方法判斷使用者是否線上-》使用者線上-》傳送RTM呼叫邀請訊息-》等待對方同意與否-》對方同意後-》使用 RTC 進入協商的頻道進行通話。
問題:
1、如何知道目前對方不線上?
在進行呼叫之前呼叫:queryPeersOnlineStatus(https://docs.anyrtc.io/cn/RealTimeMessage/api-ref/rtm_android/rtmclient#querypeersonlinestatus)方法進行查詢使用者是否線上,使用者線上走RTM 呼叫邀請方法,使用者不線上使用推送服務進行訊息傳達。
平臺 |
方法 |
iOS |
queryPeersOnlineStatus(https://docs.anyrtc.io/cn/RealTimeMessage/api-ref/rtm_ios/rtmkit#querypeersonlinestatus) |
Android |
queryPeersOnlineStatus(https://docs.anyrtc.io/cn/RealTimeMessage/api-ref/rtm_android/rtmclient#querypeersonlinestatus) |
Web/小程式 |
queryPeersOnlineStatus(https://docs.anyrtc.io/cn/RealTimeMessage/api-ref/rtm_web/classes/rtmClient#querypeersonlinestatus) |
2、推送訊息如何做?呼叫端和被叫端怎麼處理?
- 首先需要先整合第三發推送服務,客戶端跟服務端都需要對應整合。
- 呼叫端在呼叫使用者的時候,先判斷對方是否線上,如果對方不線上,向自己的業務服務傳送一條邀請訊息,此時呼叫端播放鈴聲,業務服務收到客戶端的邀請訊息後,使用第三方推送提供的RESTful API 介面向被邀請方傳送該邀請訊息,訊息傳送成功後,向呼叫端傳送離線訊息已傳送成功,此時呼叫端做等待60s等待對方答覆的邏輯。
- 被叫端收到推送訊息,點選推送訊息進入應用,判斷訊息型別為呼叫訊息,進入等待同意通話頁面並播放響鈴。
- 如果被叫端點選結束通話按鈕,此時停止播放鈴聲,併發送一條拒絕的訊息給呼叫方。呼叫方收到拒絕訊息停止播放鈴聲,並在頁面中給予一條提示:對方結束通話。
- 如果被叫端點選同意按鈕,此時停止播放鈴聲,併發送一條同意的訊息給呼叫方,並初始化RTC SDK進入協商的通訊頻道。呼叫方收到同意的訊息停止播放鈴聲,並初始化RTC SDK進入協商的通訊頻道。
3、呼叫時異常了該怎麼處理?
一般的異常是信令都已送達,程式可能崩潰會導致流程進行不下去,一般有2中方式進行異常處理:
- anyRTC RTM SDK的訂閱對方線上狀態功能能夠幫助開發者解決中間異常問題,如果收到對方下線,頁面上做友情提示即可。
- 呼叫中每個狀態都有超時回撥,根據超時回撥進行友情提醒或中斷呼叫邀請。
4、響鈴怎麼處理?
- 推送鈴聲為推送訊息的時候可自定義響鈴的內容
- 傳送呼叫等待鈴聲以及接收邀請後的響鈴,Native端可根據SDK 的混音介面實現。
不建議使用系統自帶的播放器去播放響鈴,因為SDK的通話和音樂播放會對音訊Session造成影響。
5、推送服務商有什麼好的建議?
目前市面上的推送服務比如:個推、極光、友盟都是可以去整合的,Android端的最好配置下主流的平臺(華為、小米、OPPO、vivo、魅族等推送廠商通道)利用廠商的通道去推送,保達率會高很多。測試期間用免費的推送通道即可,上線後建議去購買他們的商業版本服務。
一對多呼叫
一對一的呼叫流程是使用RTM 呼叫管理介面進行完成,如果進行一對多呼叫,需要使用 RTM 點對點訊息,自定義信令進行訊息投遞,中間環節跟 RTM 呼叫管理介面使用無異。
注意事項
- 呼叫多人的時候,需要對每個人進行點對點發送訊息,傳送訊息前,同樣的要用RTM 檢測對方是否線上,對方不線上傳送推送訊息,對方線上傳送點對點訊息。
- 呼叫後,如果對方線上需要訂閱對方的線上狀態。
- 傳送訊息後,同樣也做60s倒計時等待。
問題
1、通話中的邀請功能怎麼實現?
多人呼叫場景中,還會有通話過程中邀請其他人加入,該操作流程跟前面的一對多呼叫流程保持一致即可。
2、通話中的會控功能如何實現?
可以使用RTM 點對點訊息,傳送自定義訊息,只需要協商好信令內容,識別對應的指令即可。
總結
上述呼叫流程 anyRTC 已開源到Github(https://github.com/anyRTC-UseCase/ARCall),開發者可參考該流程快速實現音影片線上通話。該開源專案包含的平臺有iOS,Android,Web和uni-app,功能暫未包含推送功能,推送功能可參考本文描述自行新增。
全真網際網路時代的當下,文字交流已經無法滿足快節奏的生活現狀,越來越多的應用在加入實時互動功能,實時交流已是大勢所趨。iOS 的 CallKit 框架最近也有鬆動的跡象,微信最新版本也已經開始灰度測試,相信該功能將會在國內全部開發,讓國內的蘋果使用者享受電話級音影片音影片通訊。Android的推送詬病也會慢慢消除,安卓統一聯盟會慢慢把推送標準統一,功耗更低、整合更便捷、保達率更高的推送機制即將來臨。