引 言
数字生活方式是现代文明的一个重要标志。在与人们工作生活密切相关的电脑、手机和电视三大信息平台中,电脑和手机已实现了数字化和网络化,为人们带来了多姿多彩的资讯和娱乐服务,也为相关企业带来了巨额利润。数字电视将带来数字生活方式的又一场惊天动地的革命。
DVB是Digital Video Broadcasting,(DVB是数字视频广播的英文简写)。DVB数字电视标准在1990年前后开始制定,1995年正式成立DVB组织联盟,由欧洲电信标准化组织(ETSI)、欧洲广播联盟(EBU)等组织以及300多个厂商组织联合发起,并成为了国际标准,至今有近20年的历史,已经发展成一个十分成熟的技术。DVB标准提供了一套完整的、适用于不同媒介的数字电视系统孤帆,建立在MPEG-2压缩算法之上。
DVB-S数字卫星直播系统标准,以卫星作为传输介质,将视频音频以及业务信息放入固定长度打包的MPEG-2传输流中。
DVB-C数字有线广播系统标准,以有线电视网作为传输介质,传输材料是同轴电缆/光纤。
DVB-T数字地面广播系统标准,接收端需要能够正确接收和处理发射信号DVB-T设备。
使用不同的传输介质主要区别是调制和解调方式不同,但是信源编码、传输格式都是相同的,使用统一的MPEG-2 TS流复用。
第一章 绪论
1.1 数宇电视和高清晰度电视的含义
数字电视是指从演播室到发射、传输、接收的所有环节都是使用数字电视信号或对该系统所有的信号传播都是通过由0、1数字串所构成的二进制数字流来传播的电视类型。数字电视是基于DVB技术标准的广播式和“交互式”数字电视。采用先进用户管理技术能将节目内容的质量和数量做得尽善尽美并为用户带来更多的节目选择和更好的节目质量效果[2]。
数字电视是未来家庭的数字多媒体处理和显示终端。数字电视是一个大家庭,按照清晰度分为:高清晰度数字电视HDTV(High Definition TV)、增强清晰度数字视EDTV、标准清晰度数字电视SDTV和普通清晰度数字电视PDTV。HDTV是目前数字电视的最高级别,不同清晰度级别的数字电视之间具有向下兼容性,高端产品可以兼容低端产品。
数字电视的图像格式主要有两种:高清晰度电视和标准清晰度电视,其名称均包含着相应的技术要求。
1.2 数字电视的优点
数字电视机相比于普通的电视机,数字电视有以下优势:
①高质量的音画效果:节目信号质量明显提高,画面更清晰,音质更优美。
②内容丰富、自由选择:数字电视提供大量的影视、图文信息、互动节目,用户可选择收看个性化的内容。
③服务领域极大拓宽:提供电子节目指南、股票、电视短信、游戏等多种服务。
④强大的抗干扰能力:不易受外界干扰,避免了串台、串音、噪声等影响。
⑤频道资源得到释放:传1套模拟电视节目的空间现在可以传6-8套数字电视节目[7]。
1.3 中国数字电视的发展
中国数字电视主要由有线数字电视、地面数字电视、卫星数字电视、IPTV网络电视四类通道构成,由于国内目前是有 线数字电视为主体的发展方向,所以在有线数字电视正处于高速发展之中,中国数字电视的高速发展主要依靠有线数字通道拉动。
2006年,中国数字电视用户市场规模达到1355.6万户;
2007年,中国数字电视用户市场 规模达到2963万户;
2008年,中国数字电视用户市场规模达到5317万户;
2009年,中国数字电视用户市场规模达到8326万户;
预计到2015年,中国数字电视用户市场规模达到3.66亿户左右[3]。
未来中国数字电视终端市场增长将依然以有线通道作为发展主体,在有线数字电视市场的带动下,地面数字通道、卫星数字通道也已经开始启动,不断扩大市场规模,中国数字电视用户市场将在有线、地面、卫星、IP等多通道发展中得到快速的发展。
目前,我国各个省、市、自治区试播数字电视节目只在个别有线电视网内试播。试播的电视节目大多为标准清晰度电视节目,其清晰度、图像质量、伴音质量与DVD激光视盘机相同。因此,只在有试播任务的有线电视网内才能收看数字电视节目。用户只要配置有线数字电视接收设备(机顶盒),就可以通过普通模拟电视的AV端子或s端子,收看到高质量的标准清晰度数字电视节目。
数字电视是当今世界广电业的发展潮流,没有人可以怀疑数字电视发展的必然趋势,同样也没有人能够明确地告诉你,数字电视到底何时能真正揭开那层扑朔迷离的面纱。模拟电视被数字电视取代只是一个时问问题,数字电视未来的道路是漫长的,前途是光明的。
1.4 数字电视机顶盒
1.4.1 机顶盒的结构和原理
数字视频变换盒(英语:Set Top Box, 简称STB),通常称作机顶盒或机上盒,是一个连接电视机与外部信号源的设备。它可以将压缩的数字信号转成电视内容,并在电视机上显示出来。信号可以来自有线电缆、卫星天线、宽带网络以及地面广播。机顶盒接收的内容除了模拟电视可以提供的图像、声音之外,更在于能够接收数据内容,包括电子节目指南、因特网网页、字幕等等[15]。
机顶盒由硬件、嵌入式操作系统、MHEG-5引擎和JAVA虚拟机(Java VM)、中间件及应用程序等组成,除了硬件质量以外,软件的体系结构也是影响综合接受解码器IRD质量和功能的非常重要的方面,其层次结构如图1.2所示。
各种CPU的功能可能会有很大的区别。比如,今后可能将MPEG-2音频/视频、图形控制甚至解码、传送控制和条件加收控制嵌入CPU内,将会使IRD具有很强的计算功能。而嵌入式操作系统则关系到与什么芯片配合,并且最终能否得到广泛的应用,从最早的OS9到PISOS、VxWorks、WinCE到开放的Linux。同时还有不同厂家提出的中间件和条件访问系统,如中间件有Open TV和MediaHighway等。加密厂家更多,如DigiCipher、Cryptwork、Indeto Access、等。各种不同的应用与上述不捡之间又有不用的接口,这些应用程序接口API也会使机顶盒能有各种不同的性能。机顶盒和交互式电视机都是涉及到千家万户的问题,必须要有一个统一标准[9]。
在2015年我国停止播出模拟电视节目之前,收视用户有两种选择:一是淘汰旧的模拟电视,更换内置了机顶盒的数字电视;二是保留现在的电视,购买一个机顶盒显然对中国普通老百姓来说,淘汰所有的旧电视几乎是不可能的,对即将到来的数字视时代,他们中的大部分最可能的选择就是机顶盒。据介绍,目前市场上出售的大部机
顶盒都不带中问件,功能相对简单。而未来的机顶盒不但要有接收数字电视的功能还要有股票交易、电视节目指南等功能,这些都需要配置完备的各种软件操作系统。档的机顶盒甚至还要配置互联网接口,实现各种网络功能。当然,不同档次的机顶盒,功能差别较大,销售价格悬殊。
1.4.2 机顶盒的作用
目前中国市场的数字电视机必须配备一个机顶盒才能保证数字电视机收看节目。单从外观上看,机顶盒有些类似我们家里用的VCD机或DVD机。由于目前我们大多数家庭使用的都是只能接收模拟信号的电视机,因此无法直接收看数字信号的电视节目,而机顶盒就是一种将数字电视信号转换成现在电视机能够接收的视、音频信号的设备,是接收数字电视服务的必需设备。它具有类似于电脑的硬件结构和专用的操作系统及应用软件,不仅具有数字信号的解码功能,将数字电视信号转换成普通电视机可以接收到的信号,它还可以对用户授权信息进行解析、解密,它采用中文菜单式的操作,非常直观。用户通过遥控器对机顶盒进行操,一学即会。
对于有线电视网络传输的数字信号,模拟电视机是无法处理显示的。因此,必须在模拟电视机上安装一个将数字信号转换为模拟信号的变换设备,这就是机顶盒。同时,机顶盒还有类似于家用电脑的软硬件体系,可以对用户授权信息进行解读,以提供个性化服务,形成一个多媒体终端。机顶盒无非就以下几点作用,但是少一点可以说对于机顶盒来说都是不完美的!
第一、数字机顶盒支持互动式应用。例如: 互动游戏、视频点播等。
第二、具有高传输速度的数据广播。例如:提供票务信息、股市行情、热门网站、电子报纸等各类信息。
第三、使用机顶盒在互联网可以收发电子邮件。用户可以通过数字机顶盒内置的浏览器发送电子邮件和上网浏览新闻。
第四、拥有数字机顶盒电子节目操作指南。家庭用户可以通过这功能看到一个或者多个频道的电视节目。
第五、具备有条件接收功能。有条件接收的核心是加密和加扰,数字机顶盒应具有解密和解扰的功能。
第六、实现机顶盒软件在线升级功能[11]。
第二章 数字电视信号解析原理
2.1 MPEG-2压缩
将电视的视音频信号数字化后,其数据量是很大的,非常不利于传输,因此数据压缩技术成为关键。实现数据压缩技术方法有两种:
一、改进信道编码
发展新的数字调制技术,提高单位频宽数据传送速率。如,在欧洲DVB数字电视系统中,数字卫星电视系统(DVB-S)采用正交相移键控调制(QPSK);数字有线电视系统(DVB-C)采用正交调幅调制(QAM);数字地面开路电视系统就(DVB-T)采用更为复杂的编码正交频分复用调制(COFDM)。
二、在信源编码过程中进行压缩
IEEE的MPEG专家组已发展制订了ISO/IEC13818(MPEG-2)国际标准,MPEG-2采用不同的层和级组合即可满足从家庭质量到广播级质量以及将要播出的高清晰度电视质量不同的要求,其应用面很广,它支持标准分辨率16:9宽屏及高清晰度电视等多种格式,从进入家庭的DVD到卫星电视、广播电视微波传输都采用了这一标准。
现在我们着重分析在信源编码过程中进行压缩的MPEG-2压缩技术。
DVB(Digital Video Broadcasting)是由DVB组织维护的一系列国际承认的数字电视公开标准。DVB标准提供了一套完整的、适用于不同媒介的数字电视系统规范,建立在MPEG-2压缩算法之上。
静态图像的主要标准称为JPEG标准(ISO/IEC 10918)。它是ISO和IEC联合成立的联合图像专家组JPEG(Joint Photographic Experts Group)建立的适用于单色和彩色、多灰度连续色调静态图像国际标准。该标准在1991年通过,全称为“多灰度静态图像的数字压缩编码”。
视频/运动图像的主要标准是国际标准化组织(ISO)下属的一个运动图像专家组MPEG(Moving Picture Experts Group)制定的MPEG-1(ISO/IEC 11172)、MPEG-2(ISO/IEC 13818)和MPEG-4(ISO/IEC 14496)三个标准。
MPEG-1标准的正式名称叫“信息技术——用于数据率1.5Mbit/s的数字存储媒体的电视图像和伴音编码”,于1991年被ISO/IEC采纳,由系统、视频、音频、一致性测试和软件模拟五个部分组成。
MPEG-2标准的正式名称叫“信息技术——活动图像和伴音信息的通用编码”。MPEG-2的基本位速率为4~8Mbps,最高达15Mbps。MPEG-2包含九个部分:系统、视频、音频、一致性测试、软件模拟、数字存储媒体命令和控制(DSM-CC)扩展协议、先进音频编码(AAC)、系统解码器实时接口扩展协议和DSM-CC一致性扩展测试[20]。
MPEG-4标准的正式名称叫“甚低速率视听编码”,已完成系统、视频、音频以及传输多媒体集成框架(DMIF)等部分的2000编辑版,参考软件的2001编辑版在2001年内通过。
MPEG标准是运动图像专家组制定的一系列利用数字压缩手段使运动图像压缩的国际标准。MPEG-1与MPEG-2是最早推出的两个音频/食品压缩标准。利用MPEG标准进行数字压缩时,首先将模拟视频转换为数字视频后按时序打包,然后每个图像组(GOP: Group Of Pictures)选定一个基准图像,利用运动估计减少图像间的时间沉余,最后将基准图像和运动估计误差进行高散余弦变换、系数量化和墑变换,以便消除空间沉余。
现有MPEG-2音频部分规范了与MPEG-1音频标准的兼容性以及多通道的音频编码。而在MPEG-2视频标准的级数规范中,根据图像的清晰度的不同,他包括4“级”(level)或4中信源格式,并采用分级编码。所谓级是指MPEG-2的输入格式,主要规范了清晰度的4个等级,标识从低清晰度的录像(VCR)到高清晰度电视HDTV,每一种格式编码后都有一个相应的范围。除了根据图像清晰度定义的“级”以外,DVB视频标准还定义了“类”的概念,每一个不同的“类”能根据提供构成编码的压缩工具和压缩算法。
(1)低级(LL: Low Level):图形输入格式的像素是ITU-R Rec.BT 601格式的1/4,即352*240*30或352*288*25。相应的编码的最大输出码率为4MB/s。
(2)主级(ML: Main Level):图像输入格式符合YTU-R Rec.BT 601格式,即720*480*30或720*576*25。相应编码的最大输出码率为15Mb/s。
(3)高级HL 1440(High Level 1440):是1440*1152*25的高清晰度格式。相应编码的最大输出码率为60Mb/s。
(4)高级(HL: High Level):图像输入格式1920*1152*25的高清晰格式。相应编码的最大输出码率为60Mb/s[16]。
现有的数字电视广播系统就利用了MPEG-2的这种可分级性,从而使数字信号能同时覆盖接收条件好的和接收条件差的地区,并使能接收和不能接收的区域过渡更为平滑,同时粗编码的低层信号可以有较强的抗干扰能力,可以有更大的覆盖范围。由于MPEG-2可以在比较大的压缩比的情况下保持较好的图像质量,有利于高速传输与储存。
2.2 MPEG-2的优点
MPEG-2具有如下开放性的优点:
(1)输出码流速率可适应同步或异步传输,无需固定
(2)适应于逐行或隔行扫描系统。
(3)可用于4:2:0,4:2:2,4:4:4等亮度,色度取样。
(4)按清晰度可以将图像分为4个等级,高级解码器可与低级解码器实现向下兼容
(5)按使用工具和方法的不同分为5种类型,即允许分层编码,以保证不同的传输与接收要求。
正是MPEG-2的这种开放性的优点,使其成为广播电视向全数字化过渡的最佳选择,也逐步被大多数人视频专业人士认可,所以美国以及西方各国普遍以MPEG-2标准作为数字HDTV图像压缩编码系统的核心[18]。
2.3 MPEG-2打包TS流的语法结构
为了实现解码同步,在非定长的打包的原始流中插入播出时间标记和解码时间标记以及相关的系列标识符。而传送层采用固定长度为188的数据包,将PES打包为TS流,这样的包结构为未来新增长业务时,在无需新增比特流的情况下,就可在传送层进行服用传送,从而提供了较大的灵活性。TS流的语法结构如图2.1所示:
1B | 1bit | 1bit | 1bit | 13bit | 2bit | 2bit | 4bit | |
sync-byte
| transport_error _indicator
| payload_t _start_ indicator
| transport_priority
| PID
| transport_scrambling_control
| adaptation _field_control
| continuity_counter
|
4B | 184B | |
包头 | adaptation_field
| 数据 |
图2.1 TS流数据的数据结构图[14]
由图可看出,188B长度的TS包由4B的包头,可变长字节的调整字段(Adaptation Filed)以及有效数据净荷组成。这些信息与传送系统有关。而TS包中净荷缩传送的信息主要包括4种类型:
(1)视频、音频的PES包以及辅助数据。
(2)描述单路节目信息的节目映射表(PMT)与描述多路节目复用信息的节目关联表(PAT)以及对CA系统所要求的条件访问表(CAT)。
(3)各种业务信息(SI)表,包括强制性的网络信息表,业务描述表,节目断信息表与实践和日期表,还包括可选的业务组表,运行状态表和时间偏移表。
(4)DVB数据广播信息,包括数据通道,异步数据表、同步、被同步数据流、多协议封装、循环数据、循环对象。
这样的固定长度的包结构具有如下的显著特征:
(1)允许单路数字电视节目由任意组合的PES码流构成,节目可根据需要对PES码流进行增加和删除。
(2)允许对多路节目进行灵活的复用,如果其中某些节目码流发生了变化,比如,某路节目增加了PES码流,或某路节目被删除不再传输了,则只需要将PAT及PMT作相应的修改并将所做的修改通知解码器即可,而不需要对复用器硬件系统作任何修改。
(3)还能够在TS系统层上进行本地节目插入和条件接收等。
每个传送流的前4个字节为包头,包头后面就是需要传送的有用信息,包括音频、视频或数据信息,通常该信息是184B长度。有时在有用信息中插入一段调整时钟(PCR)。传送流的包头由32B组成,他是识别传送流的关键。
2.4 节目专用信息(PSI)
在数字电视中,所有视频、音频、文字、图片等经数字化处理后都变成了数据,并按照MPEG-2的标准打包,形成固定长度(188个字节)的传送包,然后将这些数据包进行复用,形成传送码流(TS),通常一个频道对应一个TS流,一个频道的TS流由多个节目及业务组成。在TS流中如果没有引导信息,机顶盒将无法找到需要的码流,所以在MPEG-2中,专门定义了PSI信息,其作用是自动设置和引导接收机进行解码。PSI信息在复用时通过复用器插入到TS流中,并用特定的PID(包标识符)进行标识。
数字电视与模拟电视节目选择的方式完全不同,模拟电视每个频道对应个节目,只要调到相应的频率,就可以看到图像。而在数字电视中,多个节目被复用到一个码流中,每个节目只占有码流中的部分包,一个物理的频道只能给出包含多个节目的传输流,要观看其中的某个节目,还必须从码流中提取出节目对应的传输包,然后再进行解码。怎样从众多的节目和服务中选取所需要的服务就变得比较复杂。此外,各种影响接收的技术参数对用户来说也是非常难懂的。为此,提供一些必要的服务信息以帮助用户选择节目使非常必要的。
在MPEG-2标准中定义的节目信息PSI,是对单一码流的描述,由于系统通常存在多个码流,为了使使用者能在多码流中快速地找出自己需要的业务,在DVB标准中对MPEG-2的PSI进行了扩充,在PSI四个表的基础上再增加了九个表,形成SI。SI是对整个系统所有码流的描述,描述系统传输内容、广播数据流的编排和时间表等的数据,它包括PSI信息。
PSI由节目关联表(PAT)、条件接收表(CAT)、节目映射表(PMT)和网络信息表(NIT)组成。
2.4.1 TS包头
每个TS包的包头信息鉴别一种应用比特流,他们构成TS包的负荷,所支持的应用包括视频、音频、数据、节目、和系统控制信息等。
4b包头由同步字节,1b传送数据包差错指示器、1b有效净荷单元开始指示器、1b传送优先级、2b传送加扰控制器、2b调整字段控制和4b连续计数器组成。其中有效净荷单元开始指示器表示PES数据包字头或者包含与节目有关的信息PSI的起始端,是否出现在改数据包的净荷中:调整字段控制表示后面是否有调整字段和净荷信息:连续计数器中的数值对于具有相同PID值的数据净荷而言将从0-15连续循环,用以在解码端检测是否有丢失的数据包。
2.4.2 PAT表简介
PAT:节目关联表,针对服用的每一路业务,PAT提供了相应的节目映射表(PMT)的位置(传送流)包的包标识符PID的值,同时还给出了网络信息表(NIT)的位置。
PAT定义了TS中所有的节目。PAT的PID总是为0x000,他是信息的根结点,在TS中很容易被找到。要查找节目信息必须从PAT开始。传送码流中所有节目所对应的PMT的PID,可以根据节目的PID找到相应的PMT包[1]。
PAT是TS中所有节目的完整列表。PAT提供了在TS包中传送节目的初始化信息。每个节目在PAT中都有一个具有号码和对应PID值的条目,节目号码为零用于NIT,ISO将NIT作为私有数据。在PAT中,连同包含所有PMT的PID值一起每个节目被列出来了。
PAT表格的整体字节问8B长度,由表格标识符、表格分段长度、传送比特流标识符、版本号、当前下次指示器、分段号和最后分段号组成。其可变字节的节目表清单由各个16b的节目号和对应的13b的PMT之PID值组成。
PAT语法字段介绍:
table_id: 这是一个1B的字段,该字段标识了一个TS PSI分段的内容是节目关联分段,条件访问分段还是TS节目映射分段等。对于PAT,置为0x0。
section_syntax_indicator: 这是一个1bit的字段,对于PAT,置为0x1.
section_length:这是一个12bit的字段,该字段指示分段的字节数,由分段长的字段开始,包含CRC,其值不超过1021。
Transport_stream_id: 这是一个2个B的字段,作为一个标签,该字段指出在网络中与其他复用流的区别标志,其值由用户定义。
version_number: 这是一个5b字段,该字段指出所有的PAT的版本号。一旦PAT有变化,版本号加1,当增加到31时,版本号循环回到0。
current_next_indicator:这个1b指示位,置为1时,表示传送的PAT当前可以使用;置为0时,表示该传送的表不能使用,下一个表变为有效。
section_number:这是1B字段,给出拉该分段的数目。在PAT中的第一个分段的section_number位0x00,PAT中每一个分段将加1。
last_section_number:这时一个1B字段,该字段指出了最后一个分段号。在整个PAT中即分段号的最大数目。
program_number:这是一个2B字段,该字段指出了节目对于哪一个program_map_PID是可以使用的。如果是0x0000,那么后面的PID是网络PID,则其他值由用户定义。
network_PID:这是一个13b字段,该字段指出含有NIT的TS包的PID值。此值由用户定义。
Program_map_PID: 这是一个13b字段,该字段知道TS包中的PID值。该TS应包含适用于program_number所指明的节目的program_map_section,该字段由节目号指定。一个节目号有一个progarm_map_PID的定义。该字段由用户定义。
CRC_32:这是一个32b字段,用来检验数据正确性的循环冗余校验码。
2.4.3 PMT表简介
PMT:节目映射表:表示并指示了组成每路业务的流的位置,以及每路业务的节目始终(PCR)字段的位置。
节目映射表提供节目号码与组成他们原始码流之间的映射,这种映射表是一个TS中所有节目定义的结合。此表格将在包头中传送,其PID值是编码器或PAT选择的。如果需要的话,可以使用多个PID值。在映射表插入到TS包之前,此映射表将按一定的语法分成一个或多个分段,由节目号码字段program_number识别。
PMT包含了与单路节目复用有关的控制信息。我们已经知道,单路节目的TS是由具有相同时基的多路PES流复用工程的。典型的构成包括一路视频打包的基本码流、多路音频以及1路或多路辅助数据。各路PES被分配到唯一PID,PES与被分配的PID值之间的关心够vhengl一张PMT。PMT完整描述了一路节目是由哪些PES组成的,他们的PID粉笔额是什么灯[1]。
为了使解码器能够根据PID恢复各路PES,需要在传送节目前将PMT传送给解码器。在MPEG-2传送层中,传送PMT的码流称为控制比特流。它与其他PES一样作为一个独立的码流,被转载在TS包的净荷进行传输,并且被分配了一个唯一的PID。PMT表格的整体字节头为12B长度。由表格标识符、表格区段长度、节目号、版本号、当前下次指示器、用于提供本节目收发同步参考的PCR值所在的PES的PID值、节目信息长度和随后的节目描述节目所含节本比特流类型、基本比特流PID、扩展信息长度和扩展可变长基本流描述符组成。
PMT语法字段介绍:
table_id:这是一个1B的字段,对于PMT置为0x02。
section_syntax_indicatior:这是一个1b的字段,对于PMT,值为1。
section_length: 这是一个12b的字段,前两位置为00,表示字段的字节数,包括section_length字段和CRC字段。
program_number:该字段指出该节目对应于可应用的program_map_PID。一个节目定义仅含一个TS的program_map_section,因此一个节目定义长度不超过1026B。
version_numbe:这是一个5b的字段,该字段指出了program_map_section的版本号。当字段中有关信息发生变化时,版本号将以32为模加1。版本号时关于一个节目的定义,因此版本号是关于单一段的定义。
curren_next_indicator:这是一个1b的字段,当字段置为0时,表示当前传送的program_map_section可以;当置为0时,表示当前传送的program_map_section不可用,下一个TS的program_map_section有效。
section_number:这是一个1B长度的字段,该字段值总是0x00。
last_section_number:这是一个1B长度的字段,该字段值总是0x00。
PCR_PID:这是一个13b长度的字段,该字段指示TS包的PID值。该TS包含有PCR字段,而该PCR值对应于由节目号指定的节目。如果对于私有数据流的急忙定义与PCR无关,该字段的值将位0x1FFF。
program_info_length:这是一个12b长的字段,前2位是00。该字段指出跟随其后对节目信息描述的字节数。
stream_type:这是一个1B长度的字段,该字段指定特定PID的节目元素包的类型。即他定义了在TS包中PES流的类型,如下表2.4所示。该处的PID由element_PID指定。
element_PID:这是一个13b长度的字段。该字段指示TS包的PID值。这些TS包含有相关的节目元素。
ES_info_length:这是一个12b长度的字段,前2位为00。该字段指示跟随其后的描述相关节目元素的字节数。
CRC_32:这是一个32b字段,用来检验数据正确性的循环冗余校验码。
2.4.4 NIT表简介
NIT(网络信息表):NIT传送本网络以及与此有关的其他网络的一些信息。每个网络都有唯一的标识符(network_id)。NIT把一些节目集中在一起,提供调谐接收必须的转发器、频率、符号率、调制方式等参数,供接收解码的自动调谐接收。NIT中对该网络中所有的TS流都有描述,网络中的频点列表就从NIT中获得,每个频点的频率、调制方式等都在该表中有说明[6]。
NIT符合ISO/IEC13818-1标准包含用于传送MPEG复用码流的宽带宽带的内容。NIT属于特定的网络提供者,包括所有在设置IRD时所要用的调谐信息,也用于标志调谐信息和网络本身的特征,其中包括network_id及一些描述符。Original_network_id和transport_stream_id的结合允许在整个欧洲电信标准ETS应用领域唯一识别的每个TS。为每个网络赋予单个的network_id值,此值充当网络的唯一的标识代码。在原始网络传输NIT时,network_id和original_network_id取相同的值。
当在信道之间交换是,为了使访问时间最短,IRD可以在非易失存储NIT信息。除实际的网络所需要的NIT与其他网络所需要的NIT之间的差异。
NIT被分割为了一个或多个original_information_section,形成一个NIT部分的任何分段可以以PID值为0x0010的TS包传输,一个NIT的任意分段将取table_id值为0x40,与实际网络不同,该NIT的任意分段参考一个网络:network_id取分配给其他网络的值。
因此,NIT表可以用于提供用于有关传送流的物理网络信息,比如,信道频率、卫星转发器详细情况、调整方式与业务名称等。
section_syntax_indicator:这是一个1bit的字段,置为1.
section_length:这是一个12b的字段,前两位置为00,表示字段的字节数,从section_length字段后开始计算,包含CRC字段,section_length不超过1021,因此整个分段的最大长度为1024B。
network_id:这是一个16b的字段,充当一个标号,从任何其他传输流系统中标识NIT通知的传输系统,已经注册的network_id由ETR162中表4-4给出。 因此,在字段network_id通过插入,表4-4列出的值用于标识在ETR300 468 的应用领域内的网络。
current_next_indicator:这个1b指示位,置为1时,表示传送的CAT当前可以使用;置为0时,表示该传送的表不能使用,下一个表变为有效。
section_number:这是1B字段,该字段表示NIT的分段号码。在NIT中的第一个分段的section_number位0x00,NIT中每一个分段将加1。
network_description_length:这个12b字段以字节为单位给出来下面网络描述符的总长度。
transport_stream_loop_length:这是一个12b字段,以字节为单位规定了下面的TS循环的总长度,但不包括CRC_32。
transport_stream_id:这是一个16b字段,在传输系统内充当标号从任何其他多路复用中标识这个TS。
original_network_id:这个16b字段给出了标号来标识原始传输系统的network_id。
tranwport_descriptors_lrngth:这时一个12b字段,以字节为单位规定了下面TS描述符的总长度。
2.4.5 SDT表简介
SDT(业务描述表):SDT表给出了传送流中每个节目或业务有关的其他节目的名称和参数,包含某节目属于哪一节目业务组、节目业务类型、节目业务提供者、业务运行状态等信息。
提供业务的相关信息,比如说名称、提供者名称、业务类型等,用户在收看某频道时可以根据需要随时查看这些信息。比较典型的是EPG中频道列表中各频道的名称即从SDT获得;当在收看某频道时,可以查看该频道的提供者名称等信息也是从SDT中获得。
SDT列出在特殊MPEG多路复用中与每一业务相关的名称和其他参数。其语法结构如下表。业务描述表SDT包括有关系统中节目业务的信息,如:节目业务名称,节目业务提供者等信息。它的每个子表描述包含在一个特别的TS中的业务。业务可以是实际的TS的部分或其他TS部分。这些业务借助于table_id来标识[7]。
使用如表所列的语法,SDT可分割为一个或多个service_description_section分段。形成一个SDT部分的任何分段以PID值为0x0011的TS包传输。SDT有两种分段:一种分段将有table_id值为0x42。该分段描述符实际的TS,也就是TS包含SDT:另一种分段的table_id值为0x46,与实际TS不同,这些分段将参考一个TS。
SDT语法字段介绍:
section_syntax_indicator:这是一个1bit的字段,置为0x1.
section_length:这是一个12b的字段,前两位置为00,表示字段的字节数,从section_length字段后开始计算,包含CRC字段,section_length不超过1021,因此整个分段的最大长度为1024B。
transport_stream_id:这是一个16b字段,充当一个标号,用来在传输系统内从任何其他多路复用中标识由NIT通知的TS。
version_number:这是一个5b字段是子表的版本编号。并且当在子表中运载的信息发生变化时,version_number的值将以按32为模加1。 当current_next_indicator置为“1” 时,version_number是一个可用的子表的值,当current_next_indicator置为“0” 时,version_number是下一个可用的子表的值 。
current_next_indicator:这个1b指示位,置为1时,表示传送的CAT当前可以使用;置为0时,表示该传送的表不能使用,下一个表变为有效。
section_number:这是1B字段,该字段表示SDT的分段号码。第一个分段的section_number位0x00,section_number随着具有相同table_id、transport_stream_id和original_network_id的每个 附加分段按1递增。
last_section_number:这是1B字段,该字段规定了这个分段是子表部分的最后分段号码,也就是这儿最后分段具有最高serction_number的分段号码。
original_network_id:这个16b字段给出了标号来标识原始网络传输系统的network_id。
service_id:这是一个16b字段,充当一个标识,用来在TS内从任何其他业务中标识这个业务。service_id与在对应的program_map_section中的program_number相同。
EIT_schedule_flag:这是一个1b字段,置为“1”。表示对业务的EIT预定信息在当前TS中;这个标识置为“0”,表示对业务的EIT预定信息部出现在TS中。
EIT_present_follow_flag:这是一个1b字段,置为“1”,表示对业务的EIT_present_following信息在当前的TS中;置为“0”,表示对业务的EIT当前/后续的信息不出现在TS中。
Running_status:这是一个3b字段,表示在表4-6中定义的业务的状态。对于一个NVOD参考业务,runing_status值应置为“0”。
free_CA_mode:这是一个1b字段。当置为“0”时,表示业务的所有成分流没有加扰;当置为“1”时,表示可以由一个CA系统控制访问一个或者更多的流。
descriptor_loop_length:这个12b字段以字节为单位给出来下面描述符的总长度。
CRC_32:这是一个32b字段,包括CRC值。在由附录B定义的解码器处理整个分段后,此值给处了此解码器中寄存器的一个零输出。
2.5 PSI中几个表的关系
从图2.7可以看出PAT表中分别给出了PMT和NIT对应的PID标识符。只要解析出PAT表中我们需要的PID是可以找出对应的PMT表和NIT表,
PMT表中有对应音频/视频PID,SDT表中是可以解析出各路节目的一些我们需要的节目描述信息。然后根据上面各表的描述就可以解析出我们需要的各路数据。
第三章 TS流解析的关键代码
3.1 解析思路
(1)首先定义一些数据结构,将我们所需要的数据放到合适的数据结构中,方便后面的整理输出和传值。
(2)创建一个过滤器模块,此模块是用来过滤TS流中各路节目信号,当搜索到有效的section字段时开始工作,将各路的信号解析出来。
(3)在过滤器工作时,只要找到4个表的任何一个,再调用对应表的的输出回调函数,将我们所需要的数据存储到我们定义的数据结构中,最后输出。
3.1.1 TS解析流程图
3.2 编译器和TS流解析的关键代码
3.2.1编译器VC6.0
首先我做的这段程序是一段包含了C和C++两种语言,程序并没有植入机顶盒的芯片中,而是一个模拟TS流的解析过程。适合程序运行的编译器很多,linux和VC等常见编译工具都能运行。我选择的是VC6.0作为编译环境。
VC++6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库。MFC中封装了大部分Windows API函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。因此,使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。
3.2.2 关键代码
(1)while(!feof(fp)&&(count = fread(buff,sizeof(char),BUFFSIZE,fp)) > 0)
{
Demux_OnData(demux,buff,count);
}
feof(fp)是linux下是否读取文件完成函数,fread为读取文件函数,demux_ondata函数为送TS流到过滤器函数,满足文件没有被读取完成和读取的字节数大于0就将数据送入过滤器中
(2)/* 分析当前新数据 */
for( i=0; i+188<=size; i+=188 )
{
pid = ((uint16_t)(buf[i+1] & 0x1f) << 8) + buf[i+2];
node = demux->list;
while( node )
{
next = node->next;
if( pid == node->pid )
Demux_ParseTs188( demux, node, buf+i );
node = next;
}
}
此段程序表示的是在当前188字节的数据中寻找各路节目的pid标识符,只要找到pid值,就将node指针指向demux链表的下一个节点。然后分析当前pid,在while(node)的条件下我们就将当前数据放到ParseTs188D 解析函数中。
(3)if( 0 < demux->tssize )
{
cpysize = (int)sizeof(demux->tsbuf)-demux->tssize < size ? (int)sizeof(demux->tsbuf)-demux->tssize : size;
memcpy( demux->tsbuf+demux->tssize, buf, cpysize );
demux->tssize += cpysize;
buf += cpysize;
size -= cpysize;
}
此段代码是将上次残留的数据与当前部分数据(不超过188字节)合并成为完整的TS包。在读取文件的过程中我是读取4096个字节的数据,而TS数据包却是188字节,当我们经过4096/188=21次循环后还剩下148的多余字节,不够188字节,所以就必须将这剩下的148字节和下一次读取的4096字节的中拿出部分数据凑够188字节才可以进行下一次数据的读取。
第四章 TS流解析结果及其总结
4.1 解析结果
将一段北京歌华公司的广告作为此次解析实验的TS流文件材料,此段广告包括了4路信号program_number=0时是对应着的NIT表,program_number!=0时对应着各自不同的节目PMT表。
解析结果:
PAT:
图4.1 PAT表解析结果
从上面的TS流打包结构可知,PAT表提供了相应的节目映射表(PMT)的位置(传送流)包的包标识符PID的值,同时还给出了网络信息表(NIT)的位置。program_number字段是不同节目的标识符,即节目编号。program_number这个是一个16位的标志,我们要以16进制来表示比较方便。program_number值如果等于0x0000,那么它指向的就是网络PID,即指向网络信息表NIT。如果program_number值不等于0,那么它指向的就是不同节目数据。
所以此段TS流中含有3路电视信号和1路网络信息表。下一步我们就是要知道这3路节目数据包含了哪些东西,这是下一步PMT表我们需要了解的。完成这一步骤后就是要了解这3路节目数据中提供给我们一些必要的网络信息,例如它提供调谐接收必须的转发器、频率、符号率、调制方式等参数,同时可以知道他对应的频点。
PMT:
(1) rogram_number=0x001f时
从解析结果中可以看出,编号为0x001f节目包含了3种类型的数据,从stream_type类型表中可以看出:
tream_type=0x04表示它是一个音频数据,TS包的PID值为16进制的0x06。
stream_type=0x0b表示它是ISO/IEC13818-6 type B类型数据,TS包的PID值为16进制的0x0a
stream_type=0x05表示它是PES包的包含的私有数据。TS包的PID值为16进制的0x05
(2)当program_number=0x002d时
从解析结果中可以看出,编号为0x002d节目包含了1种类型的数据,从stream_type类型表中可以看出:
tream_type=0x04表示它是一个音频数据,TS包的PID值为16进制的0x06。
(3)当program_number=0x0020时
从解析结果中可以看出,编号为0x0020节目包含了1种类型的数据,从stream_type类型表中可以看出:
tream_type=0x04表示它是一个音频数据,TS包的PID值为16进制的0x06。
NIT:
当program_number=0x0000时,即为NIT的标识符。
从解析结果中可以看出,在传输系统内从任何其他多路复用标识为0x0001的TS流,它的原始传输系统标号为0x4080,它下面的TS循环的总长度为0x49字节。下面的transport_stream_id的依此解释。
SDT:
从解析结果中可以看出,service_id =0x001f ,表示它是哪一路节目。service_id与在对应的program_map_section中的program_number相同。eit_schedule_flag =0x0表示该节目的EIT预定信息部不出现在当前TS中。EIT_present_following_flag =0x0,表示该节目的EIT当前/后续的信息不出现在TS中。
表 4.8 runing_status值的含义表
runing_status值 | 含义 |
0 | 未定义的 |
1 | 没有运行 |
2 | 启动中 |
3 | 暂停 |
4 | 运行 |
5-7 | 未使用,以后待用 |
running_status=0x0的含义可从上表中得出。free_CA_mode =0x这是一个1b字段。当置为“0”时,表示改节目的所有成分流没有加扰descriptors_loop_length
=0x3b下面的节目描述数据的总长度为0x3b字节。