MTK IMS框架简析(1)——代码架构及模块初始化

1.前言

随着4G技术的诞生和国内运营商网络的全面升级,以往流量贵上网慢的问题不再有,而类似微信这类即时通讯软件也得到快速的普及,互联网行业的发展还延伸到金融/零售等线上线下的各行各业,短短几年内国内IT产业迎来全面的机遇。而得益于移动网络技术的突破,政策的开放和乔帮主的1%的智慧,成就了今天高效的互联网+社会。

4G协议中定义了包含volte和RCS等基于运营商核心网实现的功能,将发挥网速优势消灭CS域,同时提供高清语音通话和多媒体IM通讯功能,当年还在卖短信挣钱的运营商们想到这些肯定心理暗爽。但实际成本高昂,除了要进一步升级核心网,还要联合芯片商和终端厂商合作开发或集成volte和RCS方案才能产生威力,而且体验也是一个大问题,因此对此支持少之又少,目前深圳只有中移动支持volte,但了解和使用的人其实不多。

中国移动早年开始捣鼓Ophone的时候(欲通过4G升级占领终端继延续统治),第三方软件厂们已经发力开始在IM上厮杀,一向财大气粗运营商们眼看着江山四分五裂,又只能靠卖流量卖手机甚至卖宽带来抢客户了。。。

言归正传,目前高通和MTK等芯片大厂都已完美支持volte,就以MTK为例分析下功能实现。

2. 代码结构

MTKIMS相关代码由4部分构成,有Google添加的框架,和MTK实现的Service部分:

//原有框架中拓展出ims相关类,如ImsPhone/ImsPhoneCallTracker/ImsCallConnection/ImsPhoneCall等
/frameworks/opt/telephony/src/java/com/android/internal/telephony/imsphone

//实现了Parcelable的公共类,和一些aidl接口
/frameworks/base/telephony/java/com/android/ims

//为Ims服务提供接口,ImsManager提供通话/开关volte/更新和获取ims状态等接口。
/frameworks/opt/net/ims/

//mtk实现部分,实现了与rild-ims的对接方式ims CommandsInterface实现
/vendor/mediatek/proprietary/packages/services/Ims/

接下来依次分析以上4个目录的架构和职责。

telephony框架

/frameworks/opt/telephony/src/java/com/android/internal/telephony/imsphone
此部分代码主要为volte通话功能添加
ImsPhone为在PhoneBase的子类,而PhoneBase直接持有ImsPhone的实例,在原有的GsmPhone和CdmaPhone类中增加对ims的判断,例如拨号方法dial中,会先判断当前是否支持volte,再决定使用imsPhone的dial还是的当前phoneBase中的dial方法。

为什么不把ImsPhone像GsmPhone和CdmaPhone那样独立出来?
这样设计可能更精简。对于telephony框架添加的部分只涉及到通话功能,且Volte只作为一个可选业务,基于当前网络的数据业务承载,这样设计只需要在原来GsmPhone和CdmaPhone通话相关的接口加入volte的判断即可。
这里写图片描述

上图看到架构基本与GsmPhone/CdmaPhone一致,都有CallTracker / Connection / Call / Phone,ImsPhoneCallTracker拥有ImsManager实例,总管电话业务,负责执行操作和更新电话状态。而ImsPhone是这一层的管家,掌握通话的控制入口ImsPhoneCallTracker,实时关注Service state,上报状态到应用层等。

opt/net/ims

/frameworks/opt/net/ims/更像中间层的处理,只向上提供接口。
ImsManager就是提供IMS操作接口的类,接口功能包括开关volte功能 / 打电话 / 设置补充业务(呼叫转移等) / 设置IMS服务属性 (但不包括短彩信操作) 等等。
ImsManager.java中的一段说明:

/**
 * Provides APIs for IMS services, such as initiating IMS calls, and provides access to
 * the operator's IMS network. This class is the starting point for any IMS actions.
 **/
ImsManager是IMS服务的起始点,并为IMS服务提供接口,如建立通话和接入ims网络等。

ImsManager成员及作用:
1. IImsService —— aidl实例,负责ims服务状态相关的操作。
2. ImsCall和ImsCallSession —— 负责通话的建立和状态跟踪,通过listener来同步消息,对接com.mediatek.ims中的ImsCallSessionProxy。
3. ImsUt —— 负责补充业务,对接ImsUtStub。
4. ImsConfig

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值