3.机顶盒软件堆叠
上篇说完了基本的硬件组成,这篇谈一谈软件栈。
对于一个完整软件来说,层次架构,可配置性,可移植性,都是必不可少的。包括os,tcp/ip协议栈,都具有这种属性。
1.隔离硬件变化,不同的芯片产商,会提供不同的sdk,封装自己的硬件操作接口。但是这对跨平台软件来说,正是一个问题所在。
隔离平台变化,不同的芯片厂商,针对自己的芯片移植了不同的os(例如linux/psos/vxworks/ecos/ucos/os21/...),线程,文件io,锁这些东西,都是会变化的。
所以我们构建在os/driver之上的第一层就是porting层。这个层次上,软硬件功能基本是一一对应的。不会有虚拟设备之类东西出现。
例如,关乎业务最重要的设备,demux。
硬件具体的channel和filter资源数,porting软件上能访问到是一模一样的。
2.要能隔离不同应用需求。这里的应用,专指UI级别的,客户往往会订制不同的UI,但是我们的业务逻辑,比如epg,搜索,切台,是不会变的。我们只需要提供固定接口给UI层。国内比较主流的方式是使用浏览器的方式。通过扩展JS对象,使应用层具有操作硬件的能力。手机平台tizen,也是采用的这种方案。js中除去标准的dom对象外,扩展一些关于业务的对象,比如dvb/ca之类的。
满足这两个基本需求后,我们可以思考一下,机顶盒的功能点有哪些,然后可以针对这个,定义不同的js扩展对象。
播放节目,换台,搜索,pvr,vod,push vod,push mail,epg,local player,区域控制,节目排序/喜爱/少儿锁,数据广播,ts流升级。。。。。
这些都是业务功能。同时,数据广播(oc)是很多附加功能的支撑,比如,天气预报,新闻资讯,股票信息,电子书等等,这些数据都是通过oc播发出来。
另外我们还会有支撑功能。比如一些java虚拟机,图形特效,图片解码,字体解析等等。
说完这些。我们就大概知道了这个软件栈的形态。
在取得一个整体框架的认识后,下篇我们将讨论一些重点功能的实现方式。