OpenHarmony中的ims通话介绍
1. telephony分层结构图
在OpenHarmony中,telephony分层结构图如下:

telephony中各个部件介绍如下:
| 部件名称 | 组件职责 |
|---|---|
| call_manager | 通话管理 主要管理CS(Circuit Switch,电路交换)、IMS(IP Multimedia Subsystem,IP多媒体子系统)和OTT(over the top,OTT解决方案)三种类型的通话,负责申请通话所需要的音视频资源,并处理多路通话时产生的各种冲突。通话管理主要分为UI交互、服务管理、系统通话管理、通话音频管理、通话视频管理和蓝牙通话管理六大模块。 |
| cellular_call | 蜂窝通话 提供基于运营商网络的基础通话实现,包含基于2G/3G的CS(Circuit Switch,电路交换)通话和基于4G/5G的IMS(IP Multimedia Subsystem,IP多媒体子系统)通话,包含VoLTE/ VoWIFI/ VoNR语音、视频、会议,支持CS和IMS通话之间的域选控制和切换,支持紧急通话。 |
| cellular_data | 蜂窝数据 提供蜂窝数据联网能力,包括蜂窝数据开启和关闭、蜂窝数据异常检测与恢复、蜂窝数据状态管理、蜂窝数据漫游管理、APN管理、网络管理交互等功能。蜂窝数据模块作为电话子系统可裁剪部件,依赖于core_service核心服务、ril_adapter。 |
| sms_mms | 短彩信 提供短信收发和彩信编解码功能,主要功能有GSM/CDMA短信收发、短信PDU(Protocol data unit,协议数据单元)编解码、Wap Push接收处理 、小区广播接收、彩信通知、 彩信编解码和SIM卡短信记录增删改查等。 |
| state_registry | 状态注册 提供各种消息事件的订阅以及取消订阅的能力。事件类型包括网络状态变化、信号强度变化、小区信息变化、蜂窝数据连接状态变化、通话状态变化等等。 |
| telephony_data | 蜂窝数据存储 提供电话服务子系统中的SIM卡、短彩信、APN、SIM卡账户等模块持久化数据存储,提供DataAbility访问接口。 |
| core_service | 蜂窝通信核心服务 提供SIM卡服务、搜网服务和RIL管理,以及获取RIL Adapter服务。 通过HDI实现与RIL Adapter进行通信;通过发布订阅,来实现与各功能模块的通信。 |
| ims_service | IMS服务(闭源部件) 提供IMS服务注册,IMS通话,IMS短信相关API实现,通过HDF与RIL Adapter Ext进行通信 |
| ril_adapter | RIL适配 提供厂商库加载,业务接口实现以及事件调度管理。主要用于屏蔽不同Modem厂商硬件差异,为上层提供统一的接口,通过注册HDF服务与上层接口通讯。 |
| ril_adapter_ext | RIL适配扩展(闭源部件) 提供蜂窝通信的RIL扩展接口,用于各个Modem厂商进行差异化能力扩展。 |
2. ims分层结构图
4G/5G通话由ims_service实现。
ims_service实现ims服务注册,ims通话,ims短信等业务。

图中的ims_service和ril_adapter_ext需要开发者自己来适配,在OpenHarmony中没有该部分。
IMS的适配通常是由厂商来适配。

以通话为例,ims通话流程图如下

3. android分层结构图
简单介绍下anroid中ims结构图
在android中,IMS在CS通话的基础上增加了telephony/ims net/ims vendor/ims 和ims相关的media模块。
其中:
telephony/ims:主要包括了对外接口ImsPhone,通话管理中心ImsPhoneCallTracker,某一路通话ImsPhoneCall,某一路通话连接ImsPhoneConnection。需要实现的提供IMS相关服务的ImsService。
net/ims:主要包括提供了IMS services API的ImsManager,以及ImsManager创建的负责处理 IMS语音和视频通话连接的ImsCall。
vendor/ims:主要包括了ImsService的实现类,提供ims相关的服务。负责和modem和media打交道,这一模块由各个芯片厂商定制,所以各个芯片厂商的实现方式都不同。但都有一个实现 ImsService的类。

4. android的IMS框架
在android系统中,IMS框架图如下

5. 打电话流程图
在OpenHarmony中,拨打电话的流程如下

可以看到,在cellular_call中,根据通话类型来区分CS通话和IMS通话。
其中CS通话部分OpenHarmony中已经实现。
而IMS部分,在OpenHarmony中是缺失的,这就是开发者需要补齐的部分。
6. 通话流程
- 主叫:
Application->cellular_call->core_service->RIL->Modem->基站
- 被叫:
基站->Modem->RIL->core_service->cellular_call->Application

7. cellular_call(蜂窝通话)
在CellularCallService::Dial()中判断CS通话和IMS通话

在IMSControl中转换号码格式,判断号码是否为MMI

判断Modem的状态

填充参数,转到CellularCallConnectionIMS

填充ImsCallInfo结构体,调用IMS服务

ImsCallClient中调用ImsCallProxy

调用IMS服务

8. ims_service(ims服务)(厂商实现)
该模块由芯片厂商实现,提供ims服务注册,ims通话(4G通话和5G通话),ims短信相关接口实现。
ims_service通过HDF,与ril_adapter_ext部件通信(厂商实现)。
ims_service示例代码如下
base/telephony/cellular_call/vendor/ims/

ims_service需要实现的接口如下

比如ims_service需要实现打电话的接口,在ims_call_stub.cpp中映射

ImsCallStub中会转到ImsCall中

ImsCall中的Dial接口,需要厂商去实现

9. ril_adapter_ext(ril适配扩展)(厂商实现)
可以参考base/telephony/ril_adapter的实现方式,厂商实现自己的ril_adapter_ext库

-
对于上层来说,call_namager和cellular_call来说,4G通话和5G通话是一样的。
-
上层不感知4G和5G通话,上层只感知CS通话和IMS通话。
-
4G通话和5G通话的区别,在ims_service和ril_adapter_ext里面,在ims和ril中去判断走4G通话还是5G通话
-
VoNR(Voice over New Radio),是VoLTE(Voice over LTE)的演进版本。相比于VoLTE,VoNR除了空口变成了NR之外,其他IMS相关的基本架构和流程与VoLTE并无大的变化。
-
在VoNR业务中,空口承载有三条,IMS信令承载、IMS voice承载和IMS video承载。而为了支撑VoNR+所增加的业务需求,新增了一条承载,称为IMS DC(即Data Chennel)。
更多推荐

所有评论(0)