背景

以下内容基于Android N code。

本文会从应用框架、进程交互、流程几个方面,讲解Android手机中视频通话的应用层设计。

应用框架设计

Android电话模块是一个典型的分层结构设计,视频电话在语音通话结构的基础上增加了一些类,但仍遵循原本的分层结构,如下:

分层结构

可以看到,相较于语音通话,视频通话主要增加了以下内容:

在Application层的Telecom应用增加了VideoProviderProxy类,InCallUI增加了一个控制显示视频电话界面的MVP结构。

Framework层的telecom模块增加了VideoCall及VideoProvider,分别为视频电话call的信息存储者和控制者。同时Framework层的telephony模块增加了视频电话相应的Phone、Call、Connection和CallTracker。另外增加了net模块,该模块负责和telephony进行拨号、来电、通话状态变更等通话相关操作的交互,和telecom进行camera、surface等media相关方面的交互。

原本Framework的telephony和RIL层进行交互,改成了Framework的telephony和net进行交互,net模块再和vendor里面的ims模块交互,ims再负责和modem、media进行交互。这一部分的代码虽然都按照google提供的接口实现,但各个芯片厂家的具体实现方式都不一样。

由于要显示视频界面,增加了media层负责设置视频通话的Camera、Surface等操作和信息反馈。视频通话和modem、media层的交互过程都封装在vendor/ims层。

应用间进程交互

进程交互方式

相较于语音通话,主要增加了phone进程和ims进程的交互,之前phone进程和RIL、modem的交互,也改成了ims和modem的交互。

如图:

进程交互

Binder交互过程

其交互过程具体如下:

binder 交互

及InCallUI<->phone<->telecom<->ims,如果用户在界面操作了挂断电话或切换相机的操作要通话telecom、phone进程的两层中转到ims进程,ims再具体下发到modem或者media,反之有消息要传到通话界面也是从ims通话phone和telecom两进程的中转到InCallUI。

具体交互细节如下:

进程交互结节

Phone进程通过ServiceManager.getService(“ims”)拿到沟通ims进程的桥梁。

值得注意的是phone进程和telecom进程分别创建了一个VideoProvider,phone进程的VideoProvider负责phone进程和telecom进程的沟通,telecom进程的VideoProvider负责telecom进程和incallui进程的沟通。

通话流程

因为是分层结构,和语音通话一样来电、挂断是从上到下,而来电和电话状态的变化则是从下到上。

拨号流程

拨号是从上往下,即从APP到FW到ims再到Modem和media。

如下图:

拨号流程

拨号盘通过TelecomManager的接口拨号,并带有VideoState为RX或TX或RX&TX的intent参数,telecom一边向phone进程请求拨号,一边通知incallui显示拨号界面。和语音通话不通的是语音通话是通过GsmCdmaPhone向RIL再向modem发送拨号请求,而视频电话是通话ImsPhone向ims再向modem发送拨号请求。另外视频通话增了向media设置camera、本机预览surface和对端画面surface的过程。

电话状态更新流程

电话状态更新和语音通话一样,从结构上看是从下往上,通过一层层的监听和通知通过观察者模式从Modem通知到RIL到FW到APP。

如下图:

ImsPhoneCallTracker在拨号或者来电创建新的ImsCall时同时会通话ImsCall向ims的IImsCallSession的实现者注册listener,当有状态变更时modem传到ims,ims再通过ImsPhoneCallTracker向其注册的listener通话到ImsPhoneCallTracker,之后状态的传替和语音通话一样。

来电流程

和语音通话不同的是,来电信息由modem通过socket传到RIL再通过binder传到phone,变成了modem通过socket传到ims,ims再发广播通知位于phone进程的ImsPhoneCallTracker。

开机后phone进程起来会根据手机的待机模式构建GsmCdmaPhone,每个phone都会监听ims

service的状态变更,一旦ims可用该GsmCdmaPhone就会创建一个属于自己的ImsPhone,而这个ImsPhone同样会创建为自己管理通话的ImsPhoneCallTracker,用其来拨号和接收来电广播。

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

Android视频通话应用设计相关推荐

  1. 关于Android的一些设计

    谈到应用程序设计,对设计师来说,Android就像是房间里的大象.很多设计师会更希望这是iOS,在那里所有任何人都只需要关心iPhone手机,iPad和App Store.然后没有人可以忽略Andro ...

  2. Android源码设计模式分析项目

    原文链接:https://github.com/simple-android-framework/android_design_patterns_analysis Android源码设计模式分析开源项 ...

  3. Android典型界面设计(3)——访网易新闻实现双导航tab切换

    一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客 ...

  4. android 技能标签功能_iOS和Android用户体验设计差异

    摘要:iOS和Android用户体验设计差异 关键词:iOS,Android,用户体验设计 本文将讨论iOS和Android之间的具体设计差异. 基本差异 1.设计规范 iOS和Android遵循不同 ...

  5. android recycleview长按多选_UI设计中Android和IOS设计差异总结

    由于设计师.产品经理使用的移动设备大部分是iPhone,所以在做设计时,容易忽略Android和iOS的差异,按照iOS的规范进行设计,两端只做一套. 只做一套的会存在两个问题: 1.安卓用户的使用习 ...

  6. android跳蚤市场的功能,基于Android校园跳蚤市场设计与实现.doc

    基于Android校园跳蚤市场设计与实现 基于Android校园跳蚤市场设计与实现 摘要:论文主要实现了一个基于Android平台的校园跳蚤市场系统.该系统上是以Android为终端,实现二手商品信息 ...

  7. android零碎要点---android开发者的福音,59_1 Android的界面设计工具,直接拖拉就可以设计界面,Java技术qq交流群:JavaDream:251572072

    Java技术qq交流群:JavaDream:251572072 2013/5/16 59_1 Android的界面设计工具 -------------------------------------- ...

  8. android 类的设计,Android App的类响应式设计

    导言 根据google的官方显示Android 4.0以上的设备已经有34.2%,由于国内很多的手机都没机会用上google play市场,所以国内市场的情况,得看类似于友盟的季度报告才知道了.个人觉 ...

  9. 基于Java实现的Android拼图游戏设计

    资源下载地址:https://download.csdn.net/download/sheziqiong/85638665 基于Java实现的Android拼图游戏设计 游戏效果 一.Android ...

最新文章

  1. Java编码技巧之高效代码50例
  2. 循环更新数据库java_java – 无限循环数据库检查
  3. 工预-SQLite(weiwan)
  4. SqlServer将特定字符串拆分并进行插入操作
  5. 基于JAVA医院管理信息系统_毕业论文-基于java的医院门诊信息管理系统设计与实现...
  6. VUE3 Composition API详解
  7. 仰睇天路,俯促鸣弦。神仪妩媚,举止详妍
  8. 前端面试——安全相关
  9. python中扑克牌类设计_基于Python实现扑克牌面试题
  10. 一文读懂HTTP, HTTPS, SSL和TLS
  11. 【CH376】关于CH376的一些使用总结
  12. idea看java版本设置_详解IntelliJ IDEA 中如何配置多个jdk版本即(1.7和1.8两个jdk都可用)...
  13. 非抽样小波变换 matlab,基于Matlab和Python的非采样离散小波变换
  14. Winform最基础的DBHelper类
  15. 龙记LKM的设置PO_INV_WIP
  16. 江苏专技岗计算机类真题,2019江苏事业单位统考招聘笔试内容及题型题量
  17. 儒略日和常规日期的转换(Python版)
  18. MySql注入的基本了解
  19. 怎么使用计算机的mrc,彻底搞懂计算器M+、M-、MRC、GT、CE、MU的用法
  20. 提高英语文献阅读能力

热门文章

  1. 数据万象应用书塾直播第七期回顾
  2. [Linux]Linux中设置默认浏览器
  3. 3D模型下载 - 3D模型免费下载
  4. Transformer与注意力机制
  5. M芯片Mac实现安卓模拟器多开
  6. STM32F103VET6实现呼吸灯
  7. 如何设计一个“好的”测试用例
  8. Lucene入门及操作详解
  9. 为什么你看了很多书 ,却依然没有洞见 (深度好文)
  10. 【SSO单点登录】ticket+token+redis 实现sso单点登录 防重放、防盗用、防篡改