一款支持全场景融合业务的跨平台浏览器进程通信实现
摘要:随着广电业务的丰富多样性,迫切需要一款能支持多场景业务的机顶盒浏览器,既要支传统DVB直播业务、IPQAM形式的RTSP互动视频业务(包括点播、时移、回看),又要支持互联网流媒体形式的互动视频业务;既要能支持传统增值业务,又要能支持HTML5/CSS3标准的新型业务。在机顶盒浏览器的实现过程中,服务于各业务场景切换的,高效稳定的进程间通信必不可少。
关键词:浏览器、JavaScript扩展、全场景融合业务、高性能、标准兼容性、适配性、稳定性、进程通信进程间通信 共享内存
0引言
为满足人民众的视频娱乐等需求,广电在原有DVB直播业务基础上,引入了多种类型的业务,不仅有传统NGOD规范的互动视频业务,也有第三方的增值业务,还有互联网流媒体形式的互动视频业务;互动视频、增值业务引用了丰富完善的js接口规范,广电终端机顶盒有高中低配置的多种型号,操作系统版本也由于历史原因存在多个版本。为了保持后续业务的
统一性、扩展性,能快速让新业务上线,迫切需要一款能够支持全场景融合业务的浏览器,同时兼容多种型号的智能机顶盒。本文重点阐述不同场景切换过程中,进程间通信的实现。
1对浏览器的需求阐述
浏览器标准及兼容性好,支持HTML5/CSS3新特性,兼容早期页面技术规范;功能齐全,完整支持js技术规范,包括内置对象和本地对象,满足各种业务场景的开发要求;高性能,浏览器采⽤的是V8引擎解析javascript代码,V8引擎相对于传统的JS引擎效率上有很⼤的提⾼,底层采用opengl硬件加速,绘图性能更高;流媒体支持丰富,基于标准播放框架,兼容多种流媒体格式,成熟稳定;适配性好业务统一,兼容适配多款智能机顶盒,无需大网升级机顶盒,确保上层网页应用一致性,做到业务开发一个版本,多款机顶盒展现形式一致;稳定性好,浏览器通过跨进程调用系统提供的DVB播放能力,避免造成资源冲突,确保底层资源统一调度管理;扩展性强,可以基于此方案快速新增JS接口扩充能力,满足新增业务需求场景;
1.1标准及兼容性
1995年,W3C,指万维网联盟,由Tim Berners-Lee创建于1994年10月,是一个非盈利的会员组织,这个组织的工作是对web标准化工作,这个组织创建并维护www的标准,修改了HTML1.0,确立并标准化了HTML.2.0。在随后的1996年的HTML3.2,1997年HTML4.0,1999年HTML4.01,W3C在原来工作上一步步完善了HTML的标准化工作,并修缮了HTML文档。但是在随后的几年里,HTML的发展几乎在原地踏步,HTML 4.0似乎达到一个顶峰,逐渐衍生出XHTML,XHTML是一种可扩展的超文本标记语言,是一种置标语言,语法比超文本语言更加严谨,所以在2000年W3C在原HTML基础上做出XHML 1.0。在随后几年,慢慢完善,衍生到XHTML 2.0。2004年,WHATWG,网页超文本应用技术工作小组,是一个以推动网络HTML 5 标准为目的而成立的组织。在2004年,由Opera、Mozilla基金会和苹果这些浏览器厂商组成,确立了HTML5的草案。WHATWG成立的原因是W3C意图放弃HTML,而力图发展XHTML(可扩展标记记语言下的一个子集)技术。2007, Mozilla Foundation, Apple, Opera Software 建议 W3C跟随WHATWG’的HTML5,将新的HTML(标准通用标记语言下的一个应用)命名为"HTML5"。同年,新HTML工作组采纳了他们的建议,在2008年将衍生的XHTML合并为HTML5正式版。
HTML发展历程漫长,经历了多个版本的迭代演进,现网页面难免存在多种技术规范的页面。
因此,既支持HTML5/CSS3新特性,又能兼容现网早期页面技术规范,成为一个尤为重要的需求。本浏览器基于新版本的webkit内核,能最大程度支持HTML5/CSS3新特性,同时,针对现网一些特殊页面写法,浏览器通过动态注入css样式、动态自适应绘制焦点、干预焦点流程等方式兼容现网页面。
1.2兼容需求
现网业务基于广电js技术规范开发定制,存在大量与数字电视相关的js内置对象和本地对象,本浏览器通过修改浏览器内核,达到可以动态注入js内置对象和本地对象,完整实现js技术规范定义的接口。
实现完整的js技术规范,使得浏览器能支撑现网所有互动点播、回看业务,第三方增值业务,同时也能支撑纯IP化的流媒体互动点播业务。
2通过Binder机制通信,实现稳定场景切换
在Android中binder是一种非常重要的进程间通信方式,Binder的整个设计是C/S结构,客户端进程通过获取服务端进程的代理,并通过向这个代理接口方法中读写数据来完成进程间的
数据通信。通过binder机制实现进程通信,相对于linux中的其他进程通信方式(管道、消息队列、共享内存、信号量、Socket等),Binder 机制有如下优点:
1)安全。每个进程都会被Android系统分配UID和PID,不像传统的在数据里加入UID,这就让那些恶意进程无法直接和其他进程通信,进程间通信的安全性得到提升。
2)高效。像Socket之类的IPC每次数据拷贝都需要2次,而Binder只要1次(内存映射)。
2.1 binder机制实现原理
Android等Linux操作系统将内存空间划分为用户空间和内核空间:每个进程独占自己的用户空间且不可直接被其他进程访问,以确保用户进程运行安全;内核空间为共享空间,可以通
过系统服务调用被所有进程共享访问。
图1
Binder IPC进程间通是基于内存映射(mmap)来实现的。通信过程:
1.首先 Binder 驱动在内核空间创建一个数据接收缓存区;
2.接着在内核空间开辟一块内核缓存区,建立内核缓存区和内核中数据接收缓存区之间的映射关系,以及内核中数据接收缓存区和接收进程用户空间地址的映射关系;
3.发送方进程通过系统调用 copy_from_user() 将数据 copy 到内核中的内核缓存区,由于内核缓存区和接收进程的用户空间存在内存映射,因此也就相当于把数据发送到了接收进程的用户空间,这样便完成了一次进程间的通信。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。