Android IMS 语音通话 vs 视频通话 vs 视频彩铃

背景

以下内容基于Android P code。

主要差异

视频通话比语音通话主要是多了判断是否为视频通话,及视频的显示和传输。如下:

video call 视频界面显示控制

界面通过IVideoProvider控制camera的显示并设置TextureView等,Ims service通过IVideoCallback来通知一些media的更新。如下

                                                         图、视频通话进程交互

判断是否为视频通话

视频通话同ims语音通话逻辑几乎相同,不一样的地方在于他们的video state不同,因为应用通过video state来判断是否为视频通话。

设置video state及通过video state更新界面的流程如下:

webp

                                                                                图、video state

1. 拨号时,拨号盘调用TelecomManager#placeCall()的参数中带有video state,Telecom将这个video state传给Telephony,并放入Phone的参数中,CallTracker在拨号时会把这个video state转换成ImsCallProfile中的call type,Ims service 拨号时从profile中拿出这个call type再判断是否拨打视频电话。

2. 来电时,IImsCallSession中有包含call type的ImsCallProfile,并从中拿到video state更新ImsPhoneConnection。之后通知Telephony应用来电,Telephony通话Telecom来电,在Telecom和Telephony建立连接后,从ImsPhoneConnection中拿出video state放入telecom/Connection中,并返回该Connection给Telecom/Call,Telecom/Call更新VideoState。

3. Telecom在和InCallUI建立连接后,会把Telecom/Call的信息更新到telecom/Call中,telecom/Call判断为视频电话后会建立VideoCall,并通知InCallUI/Call更新,以此触发界面更新。

视频显示及传输

视频显示其实就是在通话界面加两块TextureView,一块用来显示本机camera拍下的视频画面即preview TextureView,一块用来显示对端camera拍下来并传输过来的视频画面即remote TextureView。其具体显示流程如下:

                                                                      图、视频显示及传输流程

 

视频与语音通话互切

语音通话切视频通话

如图:

                                                                          图、发起方

                                                                          图、被动方

视频彩铃

视频彩铃和视频通话的不同点在于:

1. 视频彩铃仅在alerting状态显示,而视频通话各个状态都可以。

2. 视频彩铃显示网络端在本端投放的视频,而视频通话显示本端和对端相机拍摄的画面。

因此,判断视频彩铃的依据为:

1. call state为alerting。

2. video state仅有RX,没有TX。



作者:朱兰婷
链接:https://www.jianshu.com/p/b47c0b9ee316
 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页