[通信技术]
技术分享| 如何快速实现音视频在线通话
网络安全
发布于:2021-12-25 13:14
|
阅读数:492
|
评论:0
请问咱们支持像微信一样的音视频呼叫功能吗?
请问呼叫邀请怎么实现?
如果客户端离线了,怎么呼叫到客户?
怎么添加呼叫铃声?以及接收铃声?
经常能听到有用户问上述的问题,今天借此机会向大家讲解下音视频呼叫的整体流程。
前提
在接入anyRTC SDK前,先向大家介绍下音视频呼叫所需要的SDK:视频通话SDK 、实时消息SDK 、第三方推送服务。
视频通话SDK
视频通话SDK,可实现一对一单聊、多人群聊,同时具备纯语音通话和视频通话功能。也可以实现一对一、多对多的音视频互动直播。其原理是进入同一个频道 即可发布自己的音视频流并自动订阅其他用户的音视频流,进而实现音视频通话。
实时消息SDK
实时消息SDK,可以轻松实现点对点消息、频道消息、用户属性、频道属性和发起呼叫邀请、获取离线以及历史信息等功能。更可以自由拓展出更多丰富的功能,如禁言、踢人、权限管理等。其原理是在线用户 的信令的发送与接收,通过信令交换来客户所需要的功能。
第三方推送服务
第三方推送服务,当集成了实时消息 SDK 的用户下线后,消息需要通过第三方推送服务才能送达,一般应用中都会集成推送服务,当实时消息用户下线后,通过推送服务也可以进行消息传递,实现音视频呼叫。
实现音视频呼叫功能,前提已经集成了视频通话SDK 、实时消息SDK 、第三方推送服务。
一对一呼叫
一对一呼叫邀请使用RTM 的呼叫邀请接口进行:具体逻辑查看呼叫邀请文档,本章节结合呼叫邀请文档进行阐述。
流程:
用户登录RTM-》选择需要呼叫的用户-》使用RTM方法判断用户是否在线-》用户不在线-》发送离线推送消息-》等待对方同意与否-》对方同意后-》使用RTC 进入协商的频道进行通话。
用户登录RTM-》选择需要呼叫的用户-》使用RTM方法判断用户是否在线-》用户在线-》发送RTM呼叫邀请消息-》等待对方同意与否-》对方同意后-》使用 RTC 进入协商的频道进行通话。
问题:
1、如何知道目前对方不在线?
在进行呼叫之前调用:queryPeersOnlineStatus方法进行查询用户是否在线,用户在线走RTM 呼叫邀请方法,用户不在线使用推送服务进行消息传达。
平台方法iOSqueryPeersOnlineStatusAndroidqueryPeersOnlineStatusWeb/小程序queryPeersOnlineStatus2、推送消息如何做?呼叫端和被叫端怎么处理?
首先需要先集成第三发推送服务,客户端跟服务端都需要对应集成。
呼叫端在呼叫用户的时候,先判断对方是否在线,如果对方不在线,向自己的业务服务发送一条邀请消息,此时呼叫端播放铃声 ,业务服务收到客户端的邀请消息后,使用第三方推送提供的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的推送诟病也会慢慢消除,安卓统一 联盟会慢慢把推送标准统一,功耗更低、集成更便捷、保达率更高的推送机制即将来临。
免责声明:
1. 本站所有资源来自网络搜集或用户上传,仅作为参考不担保其准确性!
2. 本站内容仅供学习和交流使用,版权归原作者所有!© 查看更多
3. 如有内容侵害到您,请联系我们尽快删除,邮箱:kf@codeae.com