此文档基于 Android RTM、RTC SDK,其他平台API 基本一致,可供参考。
由于呼叫和音视频是完全分开的两个 sdk,所以在开发的时候需要注意的情况很多。
点对点呼叫
点对点呼叫就是2个人的通话,基本的通话场景中包含发起呼叫、拒绝呼叫、同意呼叫、视频呼叫转语音接听、呼叫正忙等。
下面我将一一介绍这几个功能的实现以及需要注意的地方。
以下功能默认你已基本阅读过 RTM RTC 文档且登录成功了 RTM SDK,RTC SDK 也已经准备好。
主叫
发起呼叫
1.创建 LocalInvitation 对象
? 上述方法用于创建一个呼叫对象,? 其中参数 userId 为对方的登录 RTM sdk 的 userId
2.添加自定义信息
? 发起呼叫的时候,通常我们都需要告诉对方本次是视频呼叫还是音频呼叫,是否多人呼叫,或者其他跟业务相关的信息。这时候就可以在上面创建的 localInvitation 对象中添加自定义信息。
3.发送呼叫
有了以上两步,就可以发送呼叫了。主叫发送呼叫之后会收到相关的回调如下,建议将注释copy到代码中去,方便处理业务。
?熟悉以上回调作用在开发中相当重要,其中同意和拒绝回调中的第二个 response 参数,在通话中我们也可以用到。稍后在转语音接听/通话正忙章节介绍。
取消呼叫
被叫
同意呼叫
在对方发起呼叫后,被叫会收到以下相关回调。
流程图(同意呼叫后)
请注意被叫回调中的 RemoteInvitation 对象,这个对象其实就是包含了主叫的一些信息,比如
通常我们会在收到呼叫的回调中,解析 Content 里的 json,就可以知道本次是音频还是视频呼叫,本次呼叫将要进入的 RTC 频道。在这里,你可以选择拒绝或者同意对方的呼叫,同意拒绝后主叫被叫将会触发哪些回调,请再阅读上面的回调注释。
另外,RemoteInvitation 还有一个特别实用的方法
这个方法可以用来做什么?请往下看。
视频呼叫转语音接听
视频呼叫转语音接听在视频通话中是很常见的,微信也有这个功能。实现这个功能很简单的。只需要在同意的时候,给RemoteInvitation对方设置 response ,如下所示
当我们给 RemoteInvitation 对象设置 response后,并且同意后,主叫会收到
其中第二个参数就是被叫设置的 response,然后我们可以在这解析,判断对方回的 mediaType,是否和本地发起时候的一致,不一致就是对方转语音接听了。
拒绝呼叫/呼叫正忙
流程图(拒绝呼叫)
当我们给 RemoteInvitation 对象设置 response后,并且拒绝后,主叫会收到
其中第二个参数就是被叫设置的 response,然后我们可以在这解析,判断对方拒绝的原因并给予提示。
当然也可以不设置,不设置那就是默认正常拒绝。这些都属于业务逻辑,可以自己更改。
以上就是 RTM 点对点呼叫部分的流程,接下来就是挂断和进入 RTC 频道了。
加入RTC 频道
我们通常会在被叫同意后,双方开始加入 RTC 频道,RTC的频道ID 我们已经在主叫创建 LocalInvitation 对象时定义好了,并且通过自定义信息带给了被叫。所以我们只需要在以下回调中,分别做加入RTC 频道的逻辑即可
挂断
需要注意的是,在被叫同意/拒绝后,RTM 的呼叫流程其实就已经结束了。我们在通话中挂断需要通过 RTM 信令通知对方。比如向主叫发送一条个人信息
当然还有一些异常的情况,比如双方有个人通话中断线了,直接杀App进程了,这种异常情况,可以考虑订阅对方在线状态处理,或者自己定义一套异常的处理措施。
总结
- RTM 和 RTC 是两个完全分开的SDK,RTM 负责通话邀请的信令交互,RTC负责音视频
- LocalInvitation对象可以设置自定义的信息,并且会在被叫回调RemoteInvitation对象出现
- RemoteInvitation 对象可以设置回执信息,且返回给主叫
以上就是基于 RTM RTC SDK实现点对点视频通话的基本流程,基于以上流程,我们也有相应的参考DEMO(
https://github.com/anyRTC-UseCase/ARCall/blob/master/Call-Android/app/src/main/java/org/ar/call/vm/GlobalVM.kt)
下一篇将介绍如何实现多人呼叫,中途邀请其他人参与呼叫等例子。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!