以安卓系统技术leader主导云魔百盒项目开发 工作职责: 1. 带领团队,负责整个项目的技术方案选定 2. 负责培训和指导新人 3. 虚机安卓 rom的定制修改 4. ffmpeg在安卓上编解码 2021.3~2022.3 项目背景:实现安卓的完全虚拟化:安卓系统运行在服务器上的虚机(即QEMU)。安卓应用安装至虚机中安卓,通过通 信套件传输应用画面至机顶盒,用户看到的画面即为应用画面,用户可以通过画面与应用交互。通信套机分为服务端和 客户端,服务端运行在虚机中安卓,客户端运行在机顶盒。 技术要点: 服务器端:qemu运行安卓系统,安卓系统安装通信套件服务端,服务端通过minicap获取帧数据,帧数据使用ffmpeg编 码(编码库为h264或者vp8)生成压缩数据,通过netty传输至机顶盒通信套件客户端。 机顶盒端:机顶盒上安装通信套件客户端,客户端通过netty获取压缩数据,将压缩数据解码后,使用opengl进行绘 制。 --安装虚机安卓应用以及管理应用私有数据目录: 所有虚机安卓共用一份应用模板,将其安装文件从默认安装路径修改为指定路径,同时使用9p协议映射指定安装目录至 服务器的对应目录,服务器上所有的安卓可以共享此目录。应用的私有数据设计为根据用户和应用而定。 --选定和实现虚机安卓画面分合流方案 简述:合流为minicap同时抓取界面流和视频流,分流为minicap只抓取界面流。 分流方案:使用vp8编码yuv(rgb转yuv)和透明度 界面流有原始帧数据(rgb)和透明度,透明部分显示视频,通过ffmpeg使用vp8编码时,分别使用编码器编码生成两 个压缩包,包含两个压缩包的裸流放进容器里,提取容器里数据转化为字节流再发送。机顶盒客户端收到字节流后填充 容器,从容器分别提取两个压缩包发送至解码器分开解码,解码后的帧数据调用opengl绘制。 合流方案:虚机安卓屏幕有界面流和媒体流,采用合流时,虚机上minicap获取屏幕上所有帧数据,通过x264编码压缩 传输至机顶盒,机顶盒客户端解码后渲染显示。 --实现照相机虚拟化方案: 虚机安卓上没有照相机,当应用打开照相机时,通过hal虚拟化,将打开照相机指令通过socket发送至通信套件,机顶 盒客户端收到通信套件请求后,打开照相机。照相机拍照时,图像通过机顶盒通信套件传输至虚机安卓,虚机通信套件 与hal使用共享内存方式传输至hal,hal再往框架层发送。 2022.4~ 安卓的容器docker方案: 与安卓完全虚拟化相比,docker方案占用资源更小。 技术要点: --适配编译脚本 --适配安卓图形库,绘图库更改为SwiftShader。 --修改框架层中native层 --修改omx --适配hal层:适配gralloc --移植arm转x86转换库 --适配视频应用