请问咱们支持像微信一样的音视频呼叫功能吗?

请问呼叫邀请怎么实现?

如果客户端离线了,怎么呼叫到客户?

怎么添加呼叫铃声?以及接收铃声?

经常能听到有用户问上述的问题,今天借此机会向大家讲解下音视频呼叫的整体流程。

前提

在接入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的推送诟病也会慢慢消除,安卓统一联盟会慢慢把推送标准统一,功耗更低、集成更便捷、保达率更高的推送机制即将来临。

技术分享| 如何快速实现音视频在线通话相关推荐

  1. 【复】基于 WebRTC 的音视频在线监考模块的设计与实现(上)

    文章目录 前言 什么是 WebRTC? WebRTC 架构 WebRTC 通讯内容 WebRTC 通讯协议 WebRTC 连接建立过程 后记 前言 最近在做关于考试系统的项目,其中有一项需求分析是要做 ...

  2. 如何在陪玩游戏系统开发中,快速实现音视频通信?

    其实在陪玩游戏系统开发过程中,快速实现音视频通信的方法就是寻找或调用别家的API,毕竟音视频通信涉及到的技术比较繁杂,像音视频采集.解码.处理等环节.而且采用三方的API,不仅能够实现更好的体验效果, ...

  3. 【音视频开发系列】一学就会,快速掌握音视频开发的第一个开源项目FFmpeg

    快速掌握音视频开发的第一个开源项目:FFmpeg 1.为什么要学FFmpeg 2.FFmpeg面向对象思想分析 3.FFmpeg各种组件剖析 视频讲解如下,点击观看: [音视频开发系列]一学就会,快速 ...

  4. 对话七牛云技术总监陈辉:音视频行业中的新系统新规划和新增长

    编者按: 从去年七牛云音视频团队发布音画质量分析系统到现在已有半年多的时间,得到了很多业内玩家和客户的认可.在即将召开的 LiveVideoStackCon 2022 音视频技术大会上海站,七牛云将以 ...

  5. 网易技术干货 | 云信移动端音视频UI自动化测试实践

    本篇文章来自网易云信高级测试工程师,在从事测试工作的五年时间中,她做过Android端.Windows端.Web端.服务端测试,在UI自动化.接口自动化.音视频测试方面均有所积累.本文将结合应用实践, ...

  6. 网易云信亮相LiveVideoStackCon 2019,分享BBR在实时音视频领域的应用

    8月23日,LiveVideoStackCon音视频技术大会在北京隆重举办.本届会议以"多媒体技术赋能新世界"为主题,聚焦音频.视频.图像.AI等技术的最新探索与应用实践.大会汇集 ...

  7. 【推荐】技术人必看的音视频学习资源清单

    学习是一个不断精进的过程,没有standard destination. 我们经常听到技术人各种学习困扰: "音视频这种新兴领域发展太快了,感觉囤积的学习资源好容易过时." &qu ...

  8. 直播技术总结(四)音视频数据压缩及编解码基础

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/60480109 音视频压缩技术是编 ...

  9. 如何快速学习音视频开发?

    总体来讲,音视频开发是有一定的技术门槛的,我觉得至少需要在这个领域踏踏实实积累个3-5年,才能对音视频相关的开发知识有一个整体.深刻的理解. 从技术上来讲,需要从如下两个大类知识点上去积累: C/C+ ...

最新文章

  1. 基数排序算法LSD实现
  2. AngularJS $q 和 $q.all 单个数据源和多个数据源合并(promise的说明)
  3. LeetCode 464 Can I Win(min-max博弈算法)
  4. OpenCASCADE绘制测试线束:简单的向量代数和测量之矢量代数命令
  5. git把本地代码上传(更新)到github上
  6. python如何卸载模块cmd_使用cmd python模块时,如何使程序正常崩溃?
  7. mysql使用手册_mysql使用手册
  8. 【剑指offer】面试题39:数组中出现次数超过一半的数字
  9. Windows中更新python模块的命令
  10. 对称二叉树c++_二叉树:我对称么?
  11. c++ 文件操作方式
  12. JAVA简历1到三年
  13. android铃声格式转换,m4r格式转换器——iphone铃声制作工具(mp3转换m4r)
  14. 动态矩阵控制(DMC)的简单理解及其示例
  15. 苹果开发者账号实名认证相关问题
  16. HTML5实现动态视频背景
  17. 自动抢红包-辅助功能的使用
  18. 信息传递与交换是不是计算机网络的功能,计算机网络的主要功能是信息交换和____...
  19. LayUI # 清空下拉框的值
  20. openstack(Dashboard)web界面

热门文章

  1. 企业微信的渠道活码怎么用?到底有什么好处?
  2. PHP 手机号码运营商判断2022年最新号段
  3. 源码之家(源代码下载分享)
  4. matlab在大气科学,MATLAB入门在大气科学中的应用学术沙龙活动圆满成功
  5. 大数据工具和数据库区别和关联
  6. python常用的颜色英文表达_python 中颜色的表示
  7. hotspot解释器和JIT
  8. 【历史上的今天】6 月 30 日:冯·诺依曼发表第一份草案;九十年代末的半导体大战;CBS 收购 CNET
  9. 线程池系列三:动态修改线程池队列大小
  10. Oracle获取指定月最后一天日期(last_day函数)