APP下载

嵌入式数据库SQLite在数字电视EPG系统中的应用

2011-06-07孙萍萍

电视技术 2011年19期
关键词:节目单机顶盒频道

孙萍萍

(杭州职业技术学院,浙江 杭州 310018)

0 引言

数字电视能够为用户提供数倍于模拟电视的节目数量,电子节目指南(Electronic Program Guide,EPG)可以帮助用户从众多的节目中找到自己感兴趣的节目,是数字电视机顶盒必备的功能。

目前国内较多机顶盒开发方案不能支持Flash文件系统,需要开发人员在存取数据时直接对Flash块(Block)进行读写,不利于EPG数据的统一管理。支持Flash文件系统的机顶盒开发方案中,一般以链表的结构来组织EPG数据,由于EPG相关的SI表种类繁多,相互关系复杂,数据量大,而机顶盒CPU资源有限,使得数据处理时间长,实时性差,导致用户体验效果不好[1]。

嵌入式数据库管理系统是近几年发展起来的一项比较新的数据管理技术,它以传统的数据库技术为基础,并结合嵌入式环境的具体特点,实现对嵌入式设备上的数据进行方便、统一的管理。目前嵌入式数据库技术已经从研究领域逐步走向广泛的应用领域,并显示出其优越性[2]。

SQLite是完全开源的嵌入式数据库,由C语言实现,易于移植,系统开销小,笔者将其移植到MIPS平台之上,实现了在机顶盒软件中嵌入SQLite数据库,可提高系统处理数据的效率,节省处理数据时所占用的资源。

1 嵌入式数据库

嵌入式数据库是指运行在本机上、不用启动服务端的轻型数据库,这种数据库嵌入到了应用程序进程中,与应用程序紧密集成,被应用程序所启动,并伴随应用程序的退出而终止[3]。嵌入式数据库的这种独特运行模式允许嵌入式数据库通过SQL来轻松管理应用程序数据,而且占用的系统资源较少。最终用户不用维护数据库,甚至感受不到数据库的存在。

1.1 嵌入式数据库SQLite

SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它是完全独立的,没有外部依赖性;体积很小,完整配置也不过250 kbyte;支持多数SQL92标准,可以在所有主要的操作系统上运行,并且支持大多数计算机语言;支持大小高达2 Tbyte的数据库,每个数据库完全存储在单个磁盘文件中,而且可以在不同字节顺序的计算机之间自由共享;支持ACID(原子的、一致的、独立和持久的)事务[4]。

1.2 SQLite架构分析

SQLite内部由 SQL编译器(SQL Compiler)、内核(Core)、后端(Backend)以及附件(Accessionies)几个组件组成,如图1所示。

SQL语句通过接口(Interface)进入到SQL编译器,由标记处理器(Tokenizer)分解成分析器(Parser)可以识别的各个标志符,然后由分析器重新组合标志符,并调用代码生成器(Coder Generator)生成虚拟机器码,交由虚拟机去执行,最终完成SQL语句制定的任务。虚拟机(Virtual Machine)是SQLite内部结构的核心,不仅完成与数据操作相关的全部操作,而且还是客户和磁盘存储之间信息进行交换的中间单元。数据库按照B-Tree的形式存储在磁盘上,通过可调整的页面缓冲(Pager)获得对数据的快速查找和存储,为了在POSIX和WIN32之间提供一些可移植性,SQLite 提供了一个操作系统接口[5](OS Interface)。

图1 SQLite内部架构

1.3 SQLite主要接口

SQLite目前最新版本是 SQLite 3.7.3,提供了 83 个API接口,在本文中用到的主要接口有sqlite3_open,sqlite3_close,sqlite3_prepare,sqlite3_step,sqlite3_finalize[5]等,各接口的使用方法可参见参考文献[5]。

2 EPG简介

EPG为用户收看电视节目和享受信息服务提供了一个良好的导航机制,使用户能够方便快捷地找到自己关心的节目,查看节目的附加信息。

2.1 EPG主要功能

EPG应包含以下基本功能[6]:

1)节目单;

2)当前节目播放。

EPG还可以包含以下高级功能(可选):

1)节目附加信息,如节目情节介绍等;

2)节目分类,按节目内容进行分类,如体育、影视等;

3)节目预定,在节目单上预约一段时间之后将要播放的节目,届时自动播放;

4)家长分级控制,对节目内容进行分级控制。

2.2 EPG数据来源

EPG信息必须通过TS流中的SI进行传送。通过SI中的NIT,PAT,PMT,SDT,EIT 可以获得 EPG 所需的基本信息[6]。

如图2所示,通NIT可以获取整个网络的频点参数,通过PAT,PMT,SDT可获得当前频点各频道的频道参数,通过EIT可获得各频道的节目单和当前正在播放的节目信息。这些信息之间是有关联的,比如要获得某个节目的频点信息,可以通过该节目的TS_ID和ON_ID在频点参数表中查询获得,要获得某个节目的节目单,可以通过serviceID在节目单列表中进行查询。在这些信息之间进行组合,可以实现EPG的各种功能。

图2 EPG数据来源示意图

3 使用SQLite建立EPG数据库

本文硬件开发环境采用MIPS BCM7405平台,其应用框图如图3。软件平台使用嵌入式Linux操作系统和yaffs2文件系统。要在嵌入式平台上使用SQLite需要对SQLite进行交叉编译,交叉编译SQLite的资料很多,在此不再赘述。

图3 开发平台应用框图

3.1 EPG软件模块设计

EPG信息主要来源于TS流中的PSI和SI表,因此要实现EPG功能必须进行PSI和SI的过滤和解析。网络频点参数和频道列表在频道搜索过程中即可生成,而且不会经常发生改变,所以可以把频道搜索抽离为一个独立的功能模块。而EIT又分EIT pf(记录当前和下一节目信息)和EIT schedule(记录一段时间的节目单),可能会随时发生更新,因此EIT和其他表的接收策略不同。在本文的软件设计方案中,数字电视模块启动后将创建一个后台线程,在该线程中一直对EIT进行接收,软件通过所接收到的section中service_id字段来判断其属于哪个频道,通过version_num字段来判断某个频道的当前节目或节目单是否更新,通过 section_num,last_section_num,segment_last_section_num来判断某个频道的当前节目或节目单是否接收完毕。对于EPG数据库的查询,则是提供了一套EPG数据查询API,用于从EPG数据库中获得所需要的数据。EPG软件模块关系如图4所示。

图4 EPG软件模块关系图

3.2 创建表和索引

EPG数据库将创建三个表,分别为Transponder,Service和EIT。其中Transponder中存储网络参数,Service中存储节目参数,EIT中存储节目单列表,EIT也是三个表中最庞大的一个。通过sqlite3_prepare和sqlite3_step等接口的调用执行创建表和索引的SQL语句来实现表和索引的创建。

Transponder表的结构如表1,以TS_ID和ON_ID为唯一索引。

表1 表Transponder结构

创建Transponder表和索引的SQL语句如下:

Service表的结构如表2,以TS_ID,ON_ID,SvcID为唯一索引。

表2 表Service结构

创建Service表和索引的SQL语句如下:

表EIT的结构如表 3,以 TS_ID,ON_ID,svcID,evtID为唯一索引。其中source表示是当前/下一节目还是节目单,evtData采用BLOB类型,记录事件详细信息。

表3 表EIT结构

创建EIT表和索引的SQL语句如下:

3.3 表的插入与更新

表Transponder和表Service在频道搜索时即可生成,其中数据较为固定,不会经常发生变化,在执行过一次频道搜索后不需进行更新,直至检测到频道参数发生变化或再次执行频道搜索操作。而节目单是会随时发生变化的,所以表EIT需要在系统启动时进行创建或清空,在播放过程中需进行插入和更新。

通过sqlite3_prepare、sqlite3_bind_* 和sqlite3_step等接口的调用执行SQL的INSERT语句来实现表和索引的创建。比如向EIT表中插入一条记录需要执行如下SQL语句:

该语句通过sqlite3_prepare接口进行编译,其中的“?”作为占位符,调用sqlite3_bind_*接口将对应的参数一个个传入,调用sqlite3_step执行该语句。

3.4 表的查询

EPG功能中大部分是对EPG信息的查看,因此EPG数据库的查询操作是用得最多的。比如从EIT表中获取某个频道(以svcID为100为例)某个时间段(以aaa~bbb为例)的节目单,需要执行如下SELECT语句:

通过调用 sqlite3_prepare,sqlite3_step,sqlite3_column_bytes,sqlite3_column_blob,sqlite3_column_int等接口可以获取到一个事件的列表,其中的evtData包含有事件信息,将其中的内容通过界面进行展示即可实现节目单查看的功能。

4 结论

本文将嵌入式数据库SQLite用在数字电视机顶盒的EPG系统中,介绍了使用SQLite对EPG数据进行管理的方法。通过实际验证表明,将SQLite引入到数字电视EPG系统中是可行的,并且SQLite提供的数据库接口非常丰富,不但把开发人员从复杂的数据处理中解放出来,而且使得实现EPG功能的方法更加灵活多样。随着高档电子消费品的快速发展,能够对视频、音频、文字、图像进行存储和快速检索的嵌入式数据库会成为研究的热点[7],在数字电视终端中引入嵌入式数据库将是必然趋势,SQLite等较成熟的嵌入式数据库将会得到更广泛的应用。

[1]张东胜.DMB-T/H数字电视接收端系统的构建[D].天津:天津大学,2007:49-55.

[2]陈晓春,周祖成,罗建平.数字电视接收终端实时数据库的实现[J].电视技术,2003,27(8):43-45.

[3]赵鹏,周余,王自强,等.基于Linux2.6和SQLite的手机地址簿的实现[J].电子测量技术,2009,32(6):61-64.

[4]李俊凤.SQLite数据库在嵌入式中间件系统中的应用[J].计算机与现代化,2010(5):184-188.

[5]林轩.SQLite3 C/C++开发接口简介[EB/OL].[2009-10-09].http://www.sqlite.com.cn/MySqlite/5/252.html.

[6]GY/T 230—2008,数字电视广播业务信息规范[S].2008.

[7]史恒亮,白光一.嵌入式数据库的现状和发展趋势[J].计算机系统应用,2010,19(2):205-208.

猜你喜欢

节目单机顶盒频道
机顶盒上别盖布
安全使用机顶盒注意五点
4K频道开播,你准备好了吗
幽你一默
到底谁先唱
寒假快乐频道
频道
有线电视高清数字电视机顶盒测试系统的构建
坐在节目单上
What is Apple Watch All About?