收藏 分销(赏)

殷登顺终稿10--信息学院--基于ARM的数字电视EPG设计与实现.docx

上传人:pc****0 文档编号:8935914 上传时间:2025-03-08 格式:DOCX 页数:34 大小:1.05MB 下载积分:10 金币
下载 相关 举报
殷登顺终稿10--信息学院--基于ARM的数字电视EPG设计与实现.docx_第1页
第1页 / 共34页
殷登顺终稿10--信息学院--基于ARM的数字电视EPG设计与实现.docx_第2页
第2页 / 共34页


点击查看更多>>
资源描述
学号 14072202166 毕业设计(论文) 题目:基于ARM的数字电视EPG设计与实现 作 者 殷 登 顺 届 别 2011 届 学 院 信息与通信工程学院 专 业 电子信息工程 指导教师 邓 己 媛 职 称 讲 师 完成时间 2011年5月14日 摘要 电子节目指南(EPG)作为数字电视区别于模拟电视的重要应用之一,在广电行业一直被视为研究的热点。随着数字电视的迅速发展,EPG在数字电视中的应用越来越普及。EPG 能帮助用户迅速从大量的节目中查找自己喜欢观看的节目并预知用户未来若干天将要播放的节目,EPG 还能够实现对节目的预约播放,分类设置和家长分级控制等。本文从经济适用的角度出发,采用Hi3110Q海思标清作为主控芯片,8M的flash和32M的DDROM作为存储芯片。采用NEC遥控标准进行用户控制,linux系统架构设计,方便用户使用EPG信息和节目管理。通过测试达到各项要求,并做了录像。 关键词:数字电视;ARM;EPG(电子节目指南);节目管理 ABSTRACT Electronic Program Guide (EPG), as one of the most important applications that digital TV distinguishes from analog TV, has being considered a hot spot of study in the broadcasting field. With the rapid development of digital television, EPG has been widely used in digital television. EPG helps the DTV viewers sort out their favorite programs quickly from hundreds of programs and make the viewers know the programs which will put on in the following days. In the meantime, EPG can provide TV users with many interactive applications, such as program reservation, categorization and parental control etc. From the economical point of view, we adopts Hi3110Q standard definition provided by helicons as the master chip, the 8M flash and 32M DDROM as memory chip.We also adopt the NEC remote control standard as the users’ control and Linux system architecture design to make it convenient for users to manage the EPG information and to operate the program. It reached every requirement through various tests,a video record has been made at the same time. Keywords: DVB; ARM ; EPG(Electronic Program Guide); Program Management 目录 摘要 I ABSTRACT II 目录 III 一 绪论 1 1.1 数字电视的发展 1 1.2 ARM芯片的发展 1 1.3 EPG的概念及其作用 2 1.4 论文主要完成工作及章节安排 3 二 EPG相关表结构 5 2.1 TS流(Transport Stream) 5 2.2 NIT网络信息表(Nerwork Information Table) 6 2.3 PAT节目关联表(Program Association Table) 6 2.4 PMT节目映射表(Program Map Table) 6 2.5 SDT业务描述表(Service Description Table) 7 2.6 EIT事件信息表(Event Information Table) 7 三 系统设计 9 3.1 总体设计 9 3.1.1 概述 9 3.1.2 总体结构 10 3.2 启动流程及节目搜索设计 10 3.2.1 系统启动过程 10 3.2.2 节目搜索过程 12 3.2.3 开机节目播放过程 13 3.3 界面设计 13 3.3.1 一周指南界面 13 3.3.2 节目管理界面 14 3.4 功能设计 15 3.4.1 DMUX部分设计 15 3.4.2 一周指南功能 16 3.4.3 节目管理功能 19 3.4.4 遥控接收 22 四 编译调试 24 4.1 运行标准库 24 4.2 Makefile配置文档 24 4.3 调试 25 五 工作总结 28 参考文献 29 致谢 30 一 绪论 1.1 数字电视的发展 数字电视就是应用数字技术生产、播出、传输和接收音视频信号的电视技术系统[1]。数字技术把声音、图表、活动画面、数据等所有的信息都变成同一性质的比特(bit)。比特打破了所有信息传输防暑的区隔,可以在双绞铜线、同轴电缆、电力线、光缆、卫星、地面无线等各种传输方式上任意穿梭,且易于加工和处理。有线数字电视即是数字电视的一种,而且是出现最早。发展时间最长、技术相对最成熟的数字电视传播媒体。无论是在欧美国家、日本,还是在中国,有线数字电视媒体都已拥有了庞大的用户群,而且潜力巨大。 有线数字电视是相对于模拟电视而言的,传统的模拟系统是使用模拟技术对信号进行处理,产生的是模拟的电信号[2]。而数字电视节目的采集、制作、编辑、播出、传输、接收的全过程都采用数字技术,产生的是由0和1组成的数字信号。从技术角度解释,数字电视节目可以是以数字方式拍摄、制作和存储的电影和电视,也可以是库存的资料片经数字化处理所制成的电影和电视[2]。 电视数字化是广播电视发展的必然趋势[3],是继黑白电视到彩色电视后的又一次革命。20世纪80年代末,为应对信息社会的快速发展,从根本上满足人们对高质量视听享受的要求,欧美科学家们提出了数字电视的概念。然而,数字电视的意义超出了数字电视本身,它有可能引发一场信息技术的革命,推动产业换代,创造新的商业机会和就业机会,甚至导致资源和财富的重新分配。 1.2 ARM芯片的发展 从第一片ARM处理器设计研发出来距今已有20多年。经过20多年的发展,ARM已成为32位嵌入式应用领域、全球范围内最广泛使用的处理器[4]。ARM处理器因其卓越的性能和显著优点,已成为高性能、低功耗、低成本嵌入式处理器核的代名词,得到了众多半导体长假和整机厂商的大力支持。ARM处理器已经占据了绝大部分32位、64位高端嵌入式处理器的市场,形成了移动通信、手持计算、多媒体数字消费等嵌入式解决方案事实上的标准,优良的性能和广泛的市场定位也极大地增加和丰富了ARM的资源,加速了基于ARM处理器面向各种应用的系统芯片的开发和发展,使得ARM技术获得更加广泛的应用,确立了ARM技术和市场的领先地位。 ARM体系结构版本1对第一个ARM处理器进行描述,其地址空间是26位,仅支持26位寻址空间,不支持乘法或协处理器指令。基于该体系结构的是第二个ARM处理器,应用在BBC微计算机中。以ARM2为核的Archimedes(阿基米德)和A3000仍是26位地址的机器,但包含了对32位结果的乘法指令和协处理器的支持。ARM的版本3法神了较大的变化,主要改进在于地址空间扩展大了32位,除了版本3G外的其他版本是向前兼容的,也支持26位的地址空间,它具有分开的CPSR和SPSR,并增加了未定义和异常中止模式,一边在监控模式下支持协处理器仿真和虚拟存储器。版本4增加了有符号、无符号半字和有符号字节的Load和Store指令,并未结构定义的操作预留一些SWI空间,引入了系统模式(使用用户寄存器的特权模式),几个未使用指令空间的角落作为未定义指令使用,这是第一个具有全部正式定义的体系结构版本。版本5主要有两个变种版本5T、5TE组成,它是体系结构版本4T的扩展及,假如了BLX、CLZ和BRK指令。ARM体系版本6在降低耗电量的同时,还强化了图形处理性能。通过追加有效进行多媒体处理的SIMD功能,将语音及图像的处理功能提高到了元机型的4倍,它还支持多微处理器内核。 ARM处理器是基于精简指令集计算机RISC(Reduced Instruction Set Computer)体系结构的计算机系统,它使用了标准的、固定长度的32为指令格式。在ARM技术的发展过程中,从ARM7开始,ARM核被普遍认可和广泛使用。在ARM7中,将ARM体系结构完全扩展到32位(在此之前的ARM处理器只有26位的地址空间),采取3级流水线结构,并将主频提升到40MHz。另外,还开发出集成了一个8Kb cache的CPU核。比较有特色的是ARM7可支持一种称为Thumb的模式,可运行新的16位指令集。 1.3 EPG的概念及其作用 电子节目指南(EPG)是节目导航工具[5],是数字电视的重要组成部分。它在数字电视前端为用户提供一个交互界面,为用户提供节目单信息,方便用户收视。区别于传统节目单的是,电子节目单不仅可以让用户可以方便地浏览和查询节目,了解节目信息,快速定位节目位置,还可以为用户提供丰富的信息服务。EPG给用户提供一个容易使用的、界面友好的、可以快速访问节目的平台,允许观众依据主题或其它类别对特定的节目进行搜索,要求该节目按需播放。EPG的主要功能包括[6]: 1、提供节目信息:这是电子节目指南最基本的功能,通常会按频道或节目分类,提供节目列表,给出节目的开始时间、播出时长、节目简介等节目相关信息。通常只提供7天的节目信息。在此基础上,电子节目单通常只会对之后2个小时的节目提供全景式的信息。这样的做法对观众来讲是非常方便的,因为有调查显示观众通常只会对正在播出的节目和即将播出的节目有进一步了解的需要。 2、频道收藏:通过频道收藏功能,用户可以将自己经常收看的频道添加到频道收藏列表,以后通过该列表,用户就可以从众多的频道中方便快捷地找到这些频道。 3、节目预定:用户可以对自己感兴趣的节目进行预定,一旦用户对某些节目提前进行了预定,那么在这个节目开播之前,他就会在电视屏幕上收到提示,提醒他收看该节目。 4、搜索引擎:通过搜索引擎,用户可以快速找到自己想看的节目。目前该功能还基本上只局限于根据主题或者分主题进行搜索。在美国,可以通过关键字进行查询的网络搜索引擎已经取得了很大的发展。 另外,EPG由于其内容丰富多样,深得用户喜爱,用户对EPG信息的浏览次数和时间相对较多,因此,EPG页面也是优良的广告载体,很多商家都非常乐于在其上播出广告,这给运营商带来丰厚的物质回报。据统计,EPG在已开展的各种数字电视业务中使用率最高,几乎所有运营商都将它视为数字电视运营的必备业务。 电子节目指南为数字电视用户提供了一个友好的交互平台,在不久的将来,电子节目指南除了用于预告电视节目,还可以提供如电子商务、天气预报、公共信息查询、互动电子游戏、股票交易等更加丰富的功能。 EPG信息的组成如图1.1所示,它由基本EPG信息和扩展EPG信息两部分组成[7]。基本EPG信息是指完全可以用《数字电视广播业务信息规范/GY/z174-2001》中的网络信息表NIT、业务群关联表BAT、业务描述表 SDT、事件信息表EIT等进行描述的EPG信息。扩展EPG信息是指在基本EPG信息之外,通过数据轮播传递的EPG信息,这些信息的入口采用EPG映射表EMT进行描述,信息的内容被封装成具有多级目录结构的文件系统,称为扩展EPG内容信息(XECI)。一个EPG系统至少应该包括现行传送流的NIT信息、SDT信息、EIT信息及TDT信息。 图1.1 EPG信息组成 1.4 论文主要完成工作及章节安排 研究的基本内容主要是通过对数字电视机顶盒的了解,分析数字机顶盒EPG的需求,分析数字电视系统的平台组成,了解它的压缩编码技术以及主要的传输方式、数字电视接收机的工作原理,设计数字机顶盒的EPG界面显示,实现SI数据的存储和EPG界面显示,然后对实现的EPG系统进行测试。拟解决的主要问题有: 1、数字电视机顶盒EPG的需求分析; 2、EPG框架和界面的设计; 3、分析PSI/SI每个表的作用和它们之间的关系,对每个表所包含的描述符作归纳和总结; 4、对节目搜索的分析研究; 5、SI数据的提取和存储; 6、EPG的OSD显示的实现。 论文章节安排如下: 第一章绪论给出了数字电视的研究动态、发展趋势和相关的基本知识; 第二章介绍本次EPG设计所涉及的相关表; 第三章详细的给出了EPG整体设计思想和各功能模块设计; 第四章介绍linux下编译的相关知识; 最后对论文工作进行了总结和展望。 二 EPG相关表结构 在DVB接收机中通常都使用电子节目指南(EPG)来达到快速查找节目的目的,而生成EPG的数据又来源于DVB码流中的有业务信息SI/PSI信息。本章主要介绍EPG将用到的相关SI/PSI表。 2.1 TS流(Transport Stream) TS[11]是transport stream的简称,就是“传输流”。DVB数据广播采用的数据格式就是TS码流。 TS流是基于Packet的位流格式,每个包是188字节或者204字节(一般是188字节,204字节的格式仅仅是在188字节的Packet后部加上16字节的CRC数据,其他格式是一样的),整个TS流组成如下所示: Packet 1 Packet 2 ...... Packet 在实际使用中,因为TS流已经内部具有很强的错误处理能力,所以一般使用较多的是188字节一个包的格式,204字节一个包的格式据说一般在高清节目中使用较多。 所有的Packet格式都是统一的,包括一个Packet header和Packet datas。其中Packet header包含了同步字节(该字节固定是0x47,表示这个包的数据开始是正确的),该Packet的唯一号码(即PID)和其他一些信息。格式如下: typedef struct { unsigned sync_byte :8;/*8 bits的同步字节*/ unsigned transport_error_indicator :1;/ *1 bit的错误指示信息,1表示当前Packet至少有1bit的传输错误,0表示所有数据都正确 */ unsigned payload_unit_start_indicator :1;/* 负载单元开始标志 */ unsigned transport_priority :1;/ *1 bit的传输优先级标志,1表示高优先级,0表示低优先级 */ unsigned PID :13;/* 13 bits的Packet ID号码,唯一的号码对应不同的包 */ unsigned transport_scrambling_control :2;/* 2 bits的加密标志,00表示没有加密,其他表示已被加密 */ unsigned adaptation_field_control :2;/* 2 bits的附加区域控制 */ unsigned continuity_counter :4;/* 4 bits的包递增计数器 */ }PACKET_HEADER; 2.2 NIT网络信息表(Nerwork Information Table) 网络信息表NIT[12]传递了与通过一个给定的网络传输的TS流的物理结构相关的信息,以及与网络自身特性相关的信息。original_network_id 和 transport_stream_id 两个标识符相结合唯一确定了网络中的TS流。各网络被分配独立的network_id值作为网络的唯一识别码。当NIT表在生成TS流的网络上传输时,network_id和original_network_id将取同一值。 当转换频道时,为了使存取时间最小,可以在非易失性存储器上存储NIT表信息。除现行网络外,也可以为其他网络传输NIT表信息。现行网络的NIT表与其他网络的NIT表使用不同的table_id值来区分。 NIT表被切分成网络信息段(network_information_section)。任何构成NIT表的段,都要由PID为0x0010的TS包传输。描述现行网络(即包含NIT表的TS所在的网络)的NIT表的任何段的table_id值应为0x40,且具有相同的table_id_extension(network_id)。指向一个现行网络之外的其它网络的NIT表的任何段的table_id值应取0x41。 2.3 PAT节目关联表(Program Association Table) PAT提供了相应的节目映射表(PMT)的位置(传输流TS)包的包标识符(PID)的值,同时还提供网络信息表(NIT)的位置。PAT表携带以下信息[12]: (1) TS流ID:transport_stream_id,该ID标志唯一的流ID。 (2) 节目频道号:program_number,该号码标志TS流中的一个频道,该频道可以包含很多的节目(即可以包含多个Video PID和Audio PID)。 (3) PMT的PID:program_map_PID,表示本频道使用的哪个PID做为PMT的PID,因为可以有很多的频道,因此DVB规定PMT的PID可以由用户自己定义。 2.4 PMT节目映射表(Program Map Table) 节目映射表标识并指示了组成每路业务的流的位置,及每路业务的节目时钟参考(PCR)字段的位置。PMT表中包含的数据如下[12]: (1) 当前频道中包含的所有Video数据的PID。 (2) 当前频道中包含的所有Audio数据的PID。 (3) 和当前频道关联在一起的其他数据的PID(如数字广播,数据通讯等使用的PID)。 2.5 SDT业务描述表(Service Description Table) 业务描述表包含了描述系统中业务的数据,例如业务名称、业务提供者等。业务描述表SDT[12]中的每一个子表,都用来描述包含于一个特定的传输流中的业务。该业务可能是现行传输流中的一部分,也可能是其他传输流中的一部分,可以根据table_id 来确定区分上述两种情况。 SDT表被切分成业务描述段(service_description_section)。任何构成SDT表的段,都要由PID为0x0011的TS包传输。描述现行TS(即包含SDT表的TS)的SDT表的任何段的table_id值应为0x42,且具有相同的table_id_extension(tranport_stream_ id)以及相同的original_network_id。指向一个现行TS之外的其它TS的SDT表的任何段的table_id值应取0x46。 2.6 EIT事件信息表(Event Information Table) 事件信息表提供如下信息:节目段的标识号、起始时间、节目长度、播放状态、是否加密;指向特定信息的链接信息;节目段多语种的简短介绍;节目段的详细介绍;两段同样节目段的时间偏移;基本码流类型,如视频的幅型比、伴音的类型、字幕的类型等;使用的加密系统;节目类型,如电影/戏剧、新闻、综艺、体育、少儿、音乐、艺术、社会政治、文教等;节目限定年龄的级别;给出实现交互式回传信道的电话号码;为满足各节目段的码率而提供的缓存大小信息及私有数据等。事件信息表中还提供了类似于广播电视报所提供的节目表的内容。EIT表格定义如下[12]: table_id :8; /* 表ID,如果当前表是当前/后续信息,则table_id是0x4e(当前流)或0x4f(其他流),否则如果是时间段信息,则table_id是0x50-0x5f(当前流)或者0x60-0x6f(其他流) */ section_syntax_indicator :1;/* 段语发标志符,应该是'1' */ reserved_future_use:1;/* 未来保留位,应该是'0' */ section_length: 12;/* 段长度,单位是bytes,从service_id开始到CRC_32(含)结束 */ service_id :16; /* 频道号,同PMT中的program_number */ version_number :5;/* EIT版本号码,内容有更新则此字段递增1 */ current_next_indicator :1;/* 当前下次应用标志,一般是'0' */ section_number :8;/*当前段号码 */ last_section_number :8;/* 最后段号码 */ transport_stream_id :16;/* bits的TS流ID */ original_network_id :16;/* 原始网络ID */ segment_last_section_number :8;/* 未知功能 */ last_table_id :8;/* 未知功能 */ 随后是N个Event的信息: event_id :16;/* 环境ID,流唯一数字 */ start_time :40;/* 开始时间UTC格式 */ duration :24;/* 持续时间(节目长度),BCD格式 */ running_status :2;/* 运行状态,定义和PMT中的running_status相同 */ free_CA_mode :1;/* 是否加密标志,'0'表示没有加密 */ descriptors_loop_length :12;/* 描述符总长度,单位Bytes */ descriptors();/* N个描述符列表 */ EIT表就是本次设计的重点解析的表,有过EPG的很多信息都是通过解析EIT表得到。 三 系统设计 3.1 总体设计 3.1.1 概述 系统设计阶段的主要目的是将系统分析阶段所提出的反映了用户信息需求的系统逻辑方案转换成可以实施的基于计算机与通信系统的物理(技术)方案。而系统的总体结构设计是系统设计阶段的主要活动之一,是为了实现系统总体功能,提高系统的各项指标。这一阶段的主要任务就是将整个系统合理的划分成各个功能模块,正确处理模块之间与模块内部的联系以及它们之间的调用关系和数据联系,定义各模块的内部结构等等。 本次设计的使用的主控芯片Hi3110Q是海思半导体面向全国推出的高性能、低成本的机顶盒解调解码法案,具有极高的集成度和优良的性价比适用于经济型、基本型机顶盒。Hi3110Q具有更好的业务支持能力、硬件音视频解码、高速、集成QAM和大量板级器件、2D图形加速、PCM混音、低功耗、快速唤醒、瞬播等特点。设计为纯软件设计,采用C语言进行编程,Source Insight进行程序编辑,在linux下对程序编译。 根据系统需求,本次EPG设计要求拥有一周指南功能,能够查看当前节目在一周之内所要播出的节目列表,并且可以对自己所喜欢的节目进行预约,不管你到时候观看的是什么频道的节目,一旦预约的节目时间到了以后就会弹出提示框提示用户是否要转到预约的节目频道去。还有节目编辑功能,能够对电视节目和广播节目进行喜爱选择、锁定、删除、排序操作;界面要友好美观,便于操作;要提供小视频预览功能,便于用户观看当前选中的节目是不是自己想选择的;使用红外遥控器操作,要求系统能够及时恰当的相应遥控器,既不太慢也不太快。 3.1.2 总体结构 图3.1 总体结构和模块外部设计图 如图3.1所示,本次设计主要设计两个模块,一周指南和节目管理模块。 一周指南模块主要实现将电视节目一周内所要播出的节目列表表现出来,列出详细的节目信息,开始时间和结束时间,这个是EPG功能的精华所在。用户可以通过节目预约来预约节目。当预约的节目即将播放的时候,如果你观看的不是预约节目所在的电视频道,这个时候就会弹出提示框通知用户是否要跳转到预约的节目频道。 节目管理主要有四个管理项目,1、节目喜爱的选择,喜爱选择以后会将选中节目放到喜爱列表当中,用户可以单独的打开喜爱列表选择自己喜爱的节目。2、节目加锁,节目加锁是针对父母控制的,有些频道如果不希望自己的孩子经常观看,可以对节目进行加锁。加锁以后观看加锁节目就会用球用户输入正确的密码以后才能观看,取消加锁也需要输入正确的密码才能取消。3、节目删除,这个一般很少有用户去选择,删除的节目在节目列表中将看不到,可以在节目管理中进行管理。4、节目排序,很多时候自动搜索下来的节目排序,用户并不是很喜欢,这个时候可以根据用户的喜好,对节目的顺序进行从新排序。 3.2 启动流程及节目搜索设计 3.2.1 系统启动过程 UBOOT 启动参数区 Linux内核镜像 根文件系统rootfs 应用程序app 应用数据区 图3.2 FLASH布局及启动过程 如图3.2所示为flash的布局和系统启动的基本过程: 1、启动UBOOT CPU上电,执行位于NOR FLASH的UBOOT。 2、从UBOOT跳转内核 UBOOT根据参数区的数据,得知相关信息,从FLASH加载内核镜像到内存,然后直接执行跳转指令,跳到内核的内存地址,UBOOT消亡,由内核接管工作。 3、内核启动 1)首先保存UBOOT留下的两个参数,在关闭MMU的状态下,执行内核自解压程序,内核自解压,此时借用UBOOT对串口寄存器的配置,向串口地址打印“解压内核成功”信息。 2)创建内核页表,启动MMU,跑完汇编阶段代码,继续跳到start_kernel执行内核C代码阶段的初始化。 3)内核以自己全新的方式初始化内存以及处理器平台的初始化。 4)解析启动参数的部分选项,所有启动参数的解析均通过宏__setup来注册实现。 5)执行编译到内核的外部设备驱动程序的初始化函数。 6)启动根文件系统中1号进程init。如果找不到则打印失败信息。 4、进入用户空间,启动app 1)Init执行根文件系统中的/etc/inittab,/etc/inittab其中关键的一句话是: ::sysinit:/etc/init.d/rcS,相关的执行/etc/init.d/rcS。跟着/etc/init.d/rcS.调用/etc/init.d/autorun,/etc/init.d/autorun。工作包括:驱动加载是在此文件;创建设备节点;把app的分区挂接到/mnt目录;启动DHCP网络地址获取。 2)当用户时登录时,会进而执行/etc/profile。Profile文件里导出库搜索路径。 3)/etc/profile中执行./test.sh真正的执行chechca和demo。 5、app的启动 执行root.c的main函数。 UM_S32 main(UM_S32 argc, UM_CHAR *argv[]) { //待机处理流程处理 return normal_main(); } UM_S32 normal_main() { system_hw_init(); //向hld链表注册设备操作函数并打开相应的设备 libpub_init(&config) //创建libpub线程 multicas_init(); //CA线程 ret = ap_task_init(); //control主线程 key_Init(); //按键接收线程 while(1) { osal_task_sleep(10*1000); } return 0; } 3.2.2 节目搜索过程 图3.3 电视节目搜索过程 节目搜索过程如3.3所示,当开机检测flash没有节目信息的时候,这个时候会弹出一个提示框,要求用户选择是否进行节目搜索。或则在节目播放过程中用户有需求进行节目搜索。当节目开始搜索的时候,如果是在第一次进行节目搜索。系统并不知道哪些频点上面有节目,哪些频点是还没有节目。这个时候系统会找到内置的一个主频点,在主频点上开始搜索NIT表。 NIT表上记录了节目存放的频点、调制方式、符号率以及一些相关信息。如果不是第一次搜索可以不用去搜索NIT表。接下来系统会去分别搜索PAT表和SDT表,搜索PAT表是为了电视节目,SDT表是为了寻找业务描述。 搜索节目时,先先找到PAT表,从PAT表中找到stream_type和elementary_PID,判断stream_type=0x02那么得到的elementary_PID就是video的PMT PID,如果stream_type=0x04那个得到的elementary_PID就是audio的PMT PID,得到PMT PID以后就可以去找PMT表,通过解析PMT表从中得到音视频的数据,将数据经过一定的处理输出到电视设备,这个时候就可以看到电视节目了。 但是现在数字电视并不仅仅满足于只能观看电视节目而已,还有很多的增值业务,像本次设计的EPG业务,这个时候就需要去搜索SDT表,从中得到业务相关描述。SDT表中EIT_schedule_flag可以表述当前的TS流中是不是存在EPG信息,根据这个字段决定是否去搜索EIT表获取EPG信息。 3.2.3 开机节目播放过程 开机正常播放节目时调用函数api_play_channel(UM_U32 channel, UM_BOOL b_force, UM_BOOL b_check_password, UM_BOOL bID);该函数调用SetCurPlayProgInfo(UM_U16 prog_mode,UM_U32 node_pos,UM_U32 prog_id) 记录当前播放的节目信息prog_mode, prog_id节目模式和节目的ID,然后调用sys_data_save(1)函数将节目相关数据保存到flash中。下次开机的时候最开始会调用static UM_U16 creat_cur_view()这个函数从flash中获取上次保存的节目相关信息。然后将节目相关信息用api_play_channel函数调用上次保存的节目。如果没有节目,系统会提示用户进行自动搜索节目。 3.3 界面设计 3.3.1 一周指南界面 图3.4 一周指南界面 一周指南的截面图如图3.4所示,有星期的切换和与之对应的列表框,右边是一个小视频预览窗口,用户可以一边进行操作一边观看电视节目。进入该节目以后,用户可以通过左右键切换日期。 当选中某个日期的时候对应的左边的列表框就会显示出这天的节目列表。然后用户可以通过上下键切换到不同的节目。通过红键可以对选中的节目进行预约。预约成功以后会有一个图标提示用户,预约是在节目还没有播出之前才能预约,如果节目正在播出或者是已经播完是不能预约的。Scrollbar是列表的滚动条,可以观看焦点下移的进度。 3.3.2 节目管理界面 图3.5 节目编辑界面 节目编辑主要对节目进行管理,如图3.5所示在左边选中所以编辑的节目,然后按下相应的键,就可以对节目进行操作。可以对节目进行喜爱选择、加锁、删除、排序。 按下遥控器的红键进行喜爱节目的选择,喜爱节目选择以后会加入喜爱列表进行专门的浏览和管理,在这里不进行喜爱列表的研究。黄键进行节目加锁,这个是针对父母控制的,当打开父母控制的时候,想要观看到加锁的节目就必须输入正确的密码,对加锁节目解锁的时候也需要进行密码校验。蓝键进行删除节目,删除的节目将放在节目编辑列表的后面,并且不能对其进行其他操作,节目列表当中也看不到删除的节目。绿键进行节目排序,当按下节目排序以后会弹出一个输入框在里面输入你想要让节目移动到的位置,如果不需要输入框可以继续按上下键移动节目,这时候输入框自动消失。 退出界面的时候,会检测是不是对节目进行了编辑,如果没有对节目进行任何的操作,那么直接退出界面,如果进行了一定的操作,就会弹出提示框要求用户选择是否保存更改。 3.4 功能设计 3.4.1 DMUX部分设计 SIE 是SI搜索模块和SI监控模块的引擎;它从DMUX中获取PSI/SI段数据并传递给SI搜索和SI监控模块。 首先,SIE模块使用前必须进行初始化,通过调用sie_module_init()完成初始化过程。此函数将会为SIE进程的创建和运行设定条件。 模块初始化后,可以通过调用sie_open_dmx()打开SI引擎。函数的参数包括DMUX设备的地址和存储数据的buffer。当SI引擎被打开后,SIE进程就开始轮询DMUX设备了(等待直到数据到来)。函数原型如下: INT32 sie_open_dmx(struct dmx_device *dmx, INT32 max_filter_nr, UINT8 *buffer, INT32 buflen); 打开完SIE后,就是对数据进行滤波,需要调用sie_alloc_fiter ()来申请过滤器。过滤器是DMUX输出数据的通道。实际上,此函数并没有对此过滤器做太多的动作,只是创建一个“request”。函数原型如下: struct si_filter_t *sie_alloc_filter(UINT16 pid, UINT8 *buffer, UINT32 length, UINT16 max_sec_length); 过滤器后必须通过配置才能够正常工作。通过调用sie_config_fiter来设置过滤条件,设置的条件用于限制过滤器只能捕获与设置参数一致的数据。实际上,此函数同样并没有对此过滤器做太多的动作,只是设置“request”。函数原型如下: INT32 sie_config_filter(struct si_filter_t *filter, struct si_filter_param *fparam); 通过以上设置后,就可以通过调用sie_enable_filter来使能过滤器。这个函数所做的事情才是真正与过滤器有联系。它把“request”的参数设到过滤器中,并调用dmx_async_req_section()函数来激活过滤器工作。至此,SI引擎才实际开始工作。函数原型如下: INT32 sie_enable_filter(struct si_filter_t *filter); 整个过程如图3.6示: sie_mod
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服