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更新界面的流程如下:
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