Android 技术分享| 视频通话开发流程 (一)
此文档基于 Android RTM、RTC SDK,其他平台 API 基本一致,可供参考。
RTM:用于搭建呼叫的一整套流程、信令交互
RTC:用于呼叫流程通了之后的音视频交互
由于呼叫和音视频是完全分开的两个 sdk,所以在开发的时候需要注意的情况很多。
点对点呼叫
点对点呼叫就是 2 个人的通话,基本的通话场景中包含发起呼叫、拒绝呼叫、同意呼叫、视频呼叫转语音接听、呼叫正忙等。
下面我将一一介绍这几个功能的实现以及需要注意的地方。
以下功能默认你已基本阅读过 RTM RTC 文档且登录成功了 RTM SDK,RTC SDK 也已经准备好。
主叫-发起呼叫
创建 LocalInvitation 对象
上述方法用于创建一个呼叫对象,⏰ 其中参数 userId 为对方的登录 RTM sdk 的 userId
添加自定义信息
发起呼叫的时候,通常我们都需要告诉对方本次是视频呼叫还是音频呼叫,是否多人呼叫,或者其他跟业务相关的信息。这时候就可以在上面创建的 localInvitation 对象中添加自定义信息。
发送呼叫
有了以上两步,就可以发送呼叫了。主叫发送呼叫之后会收到相关的回调如下,建议将注释 copy 到代码中去,方便处理业务。
熟悉以上回调作用在开发中相当重要,其中同意和拒绝回调中的第二个 response 参数,在通话中我们也可以用到。稍后在转语音接听/通话正忙章节介绍。
同意呼叫
在对方发起呼叫后,被叫会收到以下相关回调。
流程图(同意呼叫后)
<img src="https://docs.anyrtc.io/imgs/rtm/rtm_invite_andoid_image4.png" style="zoom:55%;" />
请注意被叫回调中的 RemoteInvitation 对象,这个对象其实就是包含了主叫的一些信息,比如
通常我们会在收到呼叫的回调中,解析 Content 里的 json,就可以知道本次是音频还是视频呼叫,本次呼叫将要进入的 RTC 频道。在这里,你可以选择拒绝或者同意对方的呼叫,同意拒绝后主叫被叫将会触发哪些回调,请再阅读上面的回调注释。
另外,RemoteInvitation 还有一个特别实用的方法
这个方法可以用来做什么?请往下看。
视频呼叫转语音接听
视频呼叫转语音接听在视频通话中是很常见的,微信也有这个功能。实现这个功能很简单的。只需要在同意的时候,给 RemoteInvitation 对方设置 response ,如下所示
当我们给 RemoteInvitation 对象设置 response 后,并且同意后,主叫会收到
其中第二个参数就是被叫设置的 response,然后我们可以在这解析,判断对方回的 mediaType,是否和本地发起时候的一致,不一致就是对方转语音接听了。
拒绝呼叫/呼叫正忙
流程图(拒绝呼叫)
<img src="https://docs.anyrtc.io/imgs/rtm/rtm_invite_andoid_image5.png" style="zoom:55%;" />
当我们给 RemoteInvitation 对象设置 response 后,并且拒绝后,主叫会收到
其中第二个参数就是被叫设置的 response,然后我们可以在这解析,判断对方拒绝的原因并给予提示。
当然也可以不设置,不设置那就是默认正常拒绝。这些都属于业务逻辑,可以自己更改。
以上就是 RTM 点对点呼叫部分的流程,接下来就是挂断和进入 RTC 频道了。
加入 RTC 频道
我们通常会在被叫同意后,双方开始加入 RTC 频道,RTC 的频道 ID 我们已经在主叫创建 LocalInvitation 对象时定义好了,并且通过自定义信息带给了被叫。所以我们只需要在以下回调中,分别做加入 RTC 频道的逻辑即可
关于加入 RTC 等音视频处理,本文不做过多介绍。
挂断
需要注意的是,在被叫同意/拒绝后,RTM 的呼叫流程其实就已经结束了。我们在通话中挂断需要通过 RTM 信令通知对方。比如向主叫发送一条个人信息
当然还有一些异常的情况,比如双方有个人通话中断线了,直接杀 App 进程了,这种异常情况,可以考虑订阅对方在线状态处理,或者自己定义一套异常的处理措施。
总结
RTM 和 RTC 是两个完全分开的 SDK,RTM 负责通话邀请的信令交互,RTC 负责音视频
LocalInvitation 对象可以设置自定义的信息,并且会在被叫回调 RemoteInvitation 对象出现
RemoteInvitation 对象可以设置回执信息,且返回给主叫
以上就是基于 RTM RTC SDK 实现点对点视频通话的基本流程,基于以上流程,我们也有相应的参考DEMO,
下一篇将介绍如何实现多人呼叫,中途邀请其他人参与呼叫等例子。
版权声明: 本文为 InfoQ 作者【anyRTC开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/2ec2b983b46e392a82f61f8a8】。文章转载请联系作者。
评论