技术分享| 如何快速实现音视频在线通话
請問咱們支持像微信一樣的音視頻呼叫功能嗎?
請問呼叫邀請怎么實現?
如果客戶端離線了,怎么呼叫到客戶?
怎么添加呼叫鈴聲?以及接收鈴聲?
經常能聽到有用戶問上述的問題,今天借此機會向大家講解下音視頻呼叫的整體流程。
前提
在接入anyRTC SDK前,先向大家介紹下音視頻呼叫所需要的SDK:視頻通話SDK、實時消息SDK、第三方推送服務。
視頻通話SDK
視頻通話SDK,可實現一對一單聊、多人群聊,同時具備純語音通話和視頻通話功能。也可以實現一對一、多對多的音視頻互動直播。其原理是進入同一個頻道即可發布自己的音視頻流并自動訂閱其他用戶的音視頻流,進而實現音視頻通話。
實時消息SDK
實時消息SDK,可以輕松實現點對點消息、頻道消息、用戶屬性、頻道屬性和發起呼叫邀請、獲取離線以及歷史信息等功能。更可以自由拓展出更多豐富的功能,如禁言、踢人、權限管理等。其原理是在線用戶的信令的發送與接收,通過信令交換來客戶所需要的功能。
第三方推送服務
第三方推送服務,當集成了實時消息 SDK 的用戶下線后,消息需要通過第三方推送服務才能送達,一般應用中都會集成推送服務,當實時消息用戶下線后,通過推送服務也可以進行消息傳遞,實現音視頻呼叫。
實現音視頻呼叫功能,前提已經集成了視頻通話SDK、實時消息SDK、第三方推送服務。
一對一呼叫
一對一呼叫邀請使用RTM 的呼叫邀請接口進行:具體邏輯查看呼叫邀請文檔,本章節結合呼叫邀請文檔進行闡述。
流程:
- 用戶登錄RTM-》選擇需要呼叫的用戶-》使用RTM方法判斷用戶是否在線-》用戶不在線-》發送離線推送消息-》等待對方同意與否-》對方同意后-》使用RTC 進入協商的頻道進行通話。
- 用戶登錄RTM-》選擇需要呼叫的用戶-》使用RTM方法判斷用戶是否在線-》用戶在線-》發送RTM呼叫邀請消息-》等待對方同意與否-》對方同意后-》使用 RTC 進入協商的頻道進行通話。
問題:
1、如何知道目前對方不在線?
在進行呼叫之前調用:queryPeersOnlineStatus方法進行查詢用戶是否在線,用戶在線走RTM 呼叫邀請方法,用戶不在線使用推送服務進行消息傳達。
| iOS | queryPeersOnlineStatus |
| Android | queryPeersOnlineStatus |
| Web/小程序 | 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,開發者可參考該流程快速實現音視頻在線通話。該開源項目包含的平臺有iOS,Android,Web和uni-app,功能暫未包含推送功能,推送功能可參考本文描述自行添加。
全真互聯網時代的當下,文字交流已經無法滿足快節奏的生活現狀,越來越多的應用在加入實時互動功能,實時交流已是大勢所趨。iOS 的 CallKit 框架最近也有松動的跡象,微信最新版本也已經開始灰度測試,相信該功能將會在國內全部開發,讓國內的蘋果用戶享受電話級音視頻音視頻通信。Android的推送詬病也會慢慢消除,安卓統一聯盟會慢慢把推送標準統一,功耗更低、集成更便捷、保達率更高的推送機制即將來臨。
總結
以上是生活随笔為你收集整理的技术分享| 如何快速实现音视频在线通话的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转载文章-【工具】10分钟快速搭建属于自
- 下一篇: 怎样用计算机中的画笔,Word2010中