版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
具有状态保持机制的EPG系统研究与实现
摘要首先介绍了IPTV系统中EPG模块的功能与工作过程;分析了EPG模块开发过程中的菜单状态保持问题。然后针对一个实际的IPTV系统的EPG模块进行分析,参考操作系统中的参数传递机制,提出一种构造状态信息栈来保存EPG菜单状态信息的机制,这个机制能够在一定程度上提高EPG开发速度、降低代码维护代价。关键词IPTV;EPG;参数传递;状态保持0引言IPTV系统是近几年发展起来的一种基于流媒体技术的网络多媒体服务,使得运营商可以利用宽带IP网向用户提供在线观看影视节目的业务,而IPTV用户通过与机顶盒进行交互即可观看到数量众多、画质清晰的电视节目或电影。1999年英国的VideoNetworks公司首先向用户提供IPTV服务,随后IPTV在世界范围内受到电信运营商的重视。随着Internet的普及与技术发展,IPTV业务也在迅速发展,截至到2004年底全球已有超过50家电信运营商推出了IPTV业务,IPTV用户超过100万,中国国家广电总局也于2005年5月向上海文广新闻传媒集团颁发了我国首张IPTV牌照。EPG系统在实现过程中首要考虑到是否便于用户操作,从这点出发,EPG的设计通常会采用功能模块化与菜单层次化相结合的原则,功能模块化是指相近的功能统一集中在同一个入口处;菜单层次化是指从一个功能入口进入EPG之后进一步向用户展示详细一些的功能选单。例如IPTV系统提供电影、电视和自定义设置三项功能,每个功能下又有细分的功能,那么我们就在EPG首页上提供三个入口:电影、电视、设置,当用户选择电影按钮后EPG又会向用户展示战争片、动画片、喜剧片、影片搜索等详细功能分类,用户可以根据EPG的指示一层一层的选择下去直到找到用户需要的功能。正如用计算机访问网站一样,计算机上的浏览器保存了最近访问过的页面,为我们实现了后退的功能,我们会经常使用这个功能返回到前一个页面以选择相近的功能,但是IPTV系统却不能像计算机上浏览器那样简单的返回到直接的上级菜单,运营商会根据业务需求定义较复杂的返回逻辑,如触发某个事件后返回上n级菜单;理想的EPG系统要实现从某级菜单返回到上一级菜单后仍然恢复成上一级菜单离开时的状态,如光棒位置、用户输入的数据等。但机顶盒不如计算机功能强大,其存储能力有限,浏览器也相对简单,这就要求菜单返回机制与状态保持机制由EPG来实现。下面以某大型IPTV系统为例说明具有状态保持机制的EPG设计思路与实现。1EPG工作模式EPG是运营商根据业务需求定义的一组与用户交互界面的集合,考虑到HTML页面擅长表现文本、静态图片和动画内容,易于制作等特点,目前多数的IPTV工程中都使用B/S架构实现EPG功能。EPG工作过程如图1所示,所有的界面都是由Web服务器调用Web程序动态生成的HTML页面,而机顶盒(SetTopBox,简称STB)充当了浏览器的角色。首先Web服务器向用户展示主界面,①用户通过STB的遥控器移动EPG界面上的光棒选择界面上的某功能选项,STB将用户的动作反馈给Web服务器;②Web服务器将用户的动作反馈给EPG模块,EPG根据用户的动作进行必要的数据处理生成新的EPG页面;③Web服务器将新EPG页面传送给STB。这样就完成了用户与EPG之间的一次交互。图1EPG架构图2状态保持机制设计状态保持的必要条件分析展示给用户的EPG菜单实际上是根据运营商业务的需求制作的web页面,在实际工程中我们采用PHP作为web页面开发工具,在最终HTML页面中使用JavaScript进行动态数据处理和用户动作处理。用户进入某个EPG菜单时首先会向EPG系统提供必要的参数,如显示指定电视台的节目单时需要提供电视台的id,按关键词搜索电影需要输入关键词,可能存在翻页的菜单需要提供当前页号等。EPG根据接收到的参数可以生成基本的EPG菜单了,STB把web服务器发送来的EPG菜单显示给用户,这时用户有一些行为会影响EPG菜单,如通过遥控器移动光棒选择一个选项,然后进入下级菜单,或在输入框中输入一些字符等,如果从当前菜单进入到下一级菜单时,这些状态都是需要保留的,而这些状态都处于JavaScript的控制之下。基于以上分析,我们可以把影响构造菜单的因素分为PHP的参数与JavaScript动态数据两部分,由于PHP的参数解析动作在服务器端完成,我们称PHP的参数为server端状态;JavaScript的执行动作由STB完成,我们称这部分状态为client端状态。如果能在进入下一级菜单之前将本级菜单的server端状态和client端状态都保存起来,待下级菜单返回到本级菜单时再恢复回来就可以达到状态保持的目的了。状态保持机制的设计在汇编语言程序设计中,通常函数被调用后首先做的工作是保存一些重要的寄存器的值并保护好调用者使用的堆空间,以便函数结束时能够正确的返回到调用者。当函数调用有多层嵌套时,程序堆空间的使用情况如图2所示,函数1被调用时首先分配一定的空间保存寄存器及其他变量的值;接下来函数2被调用,函数2也分配一定的空间保存环境数据;嵌套函数依次分配属于自己的一段空间,彼此互不干扰。图2程序堆空间使用方式示意图菜单状态保持也可以认为是程序对当前运行时环境的保持,受到汇编语言中函数保存现场机制的启发,EPG各级菜单也可将自己的所有状态信息保存到类似的堆空间里,当各级菜单返回时从堆空间中取出属于自己的那部分数据,这样就实现了状态恢复的功能。3状态保持机制实现与应用状态信息堆栈的构造与实现Web应用程序的开发与运行环境与汇编语言程序的开发与运行有着根本的区别,web程序无法像汇编程序那样操纵自己运行时的内存空间,为了实现菜单状态保持的功能,我们有必要自行构造一个类似的堆栈空间用来保存各级菜单的运行状态。在web开发中有三种数据保存形式:①保存到服务器端的SESSION中;②保存在HTML表单/URL中;③保存在客户端的Cookie中。三种方式各有优劣,第一种方式依靠服务器的存储空间,部分无需让客户端知晓的数据就可以不必在网络中传输了;第二种方式会把所有的数据在网络中传来传去,不占用任何一方的存储空间;第三种方式利用客户端的存储空间,服务器端程序对Cookie实施有效管理。考虑到IPTV系统多采用分布式服务器的结构,第一种方式将数据保存在SESSION中会对分布式结构造成一定的障碍,所以尽量不会考虑这种方式。在实际工程中,我们使用HTML表单元素当作堆栈空间用来保存状态信息,形如图3所示:图3web程序的状态堆栈空间图3所示为用户经过menu1和menu2进入menu3后状态堆栈的情况,其中menu_stack与state_stack是两个模拟的栈,左边为栈底,后边为栈顶,栈元素之间使用特殊字符“*”分隔,我们在服务器端和客户端分别用PHP和JavaScript实现了一组函数对这种堆栈进行操作。menu_stack中保存了用户所经过的菜单路径,state_stack记录了每个菜单对应的状态信息,图3中state1与state2分别是menu1与menu2的状态信息,由于状态信息可能会包含
多个参数值,参数值也具有很多种类型,其中有可能存在栈分割符“*”或其他一些影响JavaScript正常工作的字符,所以在具体实现时各状态信息需要经过一定编码处理。常见的编码方式有base64编码、QP(Quote-Printable)编码、URL编码方式等,经过分析,对状态信息的编码方式应满足以下条件:①编码之后的结果不会影响到JavaScript正常工作;②编码之后的结果长度尽量短,减轻网络负担;③算法易于服务器端程序和客户端程序实现。在工程中我们使用base64对状态信息进行编码,假设menu1中的状态信息为:tv_channel_id=20&display_date=20051001,经过base64编码之后状态信息就变成了dHZfY2hhbm5lbF9pZD0yMCZkaXNwbGF5X2RhdGU9MjAwNTEwMDE=。有了状态信息堆栈,我们就可以利用它构造比较复杂的菜单流程了。状态信息堆栈的应用以实际的工程为例,在引入状态信息堆栈之后,EPG菜单的前进和后退操作都是在将HTML表单中的数据POST给下一个PHP页面,不同之处在于前进操作会把本级菜单的状态放入堆栈之中,而后退操作则是由上一级菜单从堆栈顶部取出自己原来的状态信息。于是EPG菜单可能从两个渠道获取到自己需要的参数,一个是通过HTML原有的参数传递机制获得,包括GET方式与POST方式等;另一个是从状态堆栈中恢复以前保存的参数,这可以在HTML表单中放入一个指示菜单动作的变量menu_direction以示区别,在最后确定用户动作时通过JavaScript设置这个变量的值。流程如图4所示:图4引入状态信息栈后的程序工作流程有了以上的基础我们可以在代码中方便的实现菜单间的流程逻辑。(1)基本的前进与后退functionforwardbeginpush_to_stack(self_state);set_direction(down);goto_next_page();endfunctionbackwardbeginset_direction(up);goto_next_page();end(2)后退到上N级菜单functionback_to(N)beginpop_from_stack(N-1);backward();end(3)后退到指定菜单functionback_to_menu(menu_name)beginwhiletop_of_stack()menu_namebeginpop_from_stack(1);endbackward();end在以上几个函数的基础上我们可以根据业务逻辑需要构造出更为复杂的处理函数。状态信息堆栈的应用分析实现状态信息栈的过程中需要兼顾服务器的效率与性能。这主要从网络流量负担与程序处理效率两个方面进行考虑。在实际工程中平均一个菜单具有个参数,平均参数名称长度为个字符,平均参数值长度为个字符,即每级菜单自身产生的状态信息经过编码后不超过300个字符,工程中菜单最深达到8级,最后一级菜单需要为状态信息栈付出不足3K的网络流量,这样的开销在web应用程序中可以忽略不计。Web服务器需要向大量的客户端提供服务,所以服务器端程序的效率显得尤为重要。在设计状态信息栈时不仅需要考虑算法的效率,还要考虑尽量把工作量移向客户端,服务器端程序仅完成必要的工作,剩余的工作由客户端程序完成。4结论本文讨论了EPG系统状态保持机制的设计与实现方式。这种机制将每个菜单内部的多个参数封装成统一格式,并通过构造状态信息栈的方式在各级菜单间用相同的方法保存和使用,在引入状态保持机制后,研发人员在EPG开发过程中无需考虑菜单间的参数传递问题,只需考虑
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB 7956.10-2025消防车第10部分:机场消防车
- 2025年中职环境运营管理(管理技术)试题及答案
- 2025年中职(网络安防系统安装与维护)监控系统安装阶段测试试题及答案
- 2025年高职小学教育(小学教学方法)试题及答案
- 2025年中职工业设计(产品创新设计)试题及答案
- 2025年高职播音与主持(节目主持)试题及答案
- 2025年大学大一(动物科学)动物解剖学试题及答案
- 2025年大学教育学(教育技术研发)试题及答案
- 2025年高职计算机网络技术(网络故障排除)试题及答案
- 2025年大学工业机器人技术(编程优化)试题及答案
- 人工智能安全风险测评白皮书(2025年)
- 北京工业大学《土力学与地基基础》2024 - 2025 学年第一学期期末试卷
- 2024-2025学年陕西省汉中市十校联盟高一上学期期末考试历史试题
- 急诊科火灾应急预案演练脚本范例
- 医药公司储运部年终总结
- 国家事业单位招聘2025中国工艺美术馆招聘拟聘人员笔试历年参考题库附带答案详解
- IPC7711C7721C-2017(CN)电子组件的返工修改和维修(完整版)
- 疫情供应商应急预案范文(3篇)
- 《曹刿论战》第二课时课件
- 四川省峨边运兴电冶有限责任公司原产品高碳铬铁升级技改为特种合金中碳铬铁项目环评报告
- 三沙市社区工作者招聘笔试真题2024
评论
0/150
提交评论