MPEG2TS小结讲解.docx
- 文档编号:10084612
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:15
- 大小:27.02KB
MPEG2TS小结讲解.docx
《MPEG2TS小结讲解.docx》由会员分享,可在线阅读,更多相关《MPEG2TS小结讲解.docx(15页珍藏版)》请在冰点文库上搜索。
MPEG2TS小结讲解
MPEG2TS小结
(1) 2010-01-1409:
03:
59
分类:
LINUX
应该说真正了解TS,还是看了朋友推荐的《数字电视业务信息及其编码》一书之后,MPEG2TS和数字电视是紧密不可分割的,值得总结一下其中的一些关系。
ISO/IEC-13818-1:
系统部分;ISO/IEC-13818-2:
视频;ISO/IEC-13818-3:
音频;ISO/IEC-13818-4:
一致性测试;ISO/IEC-13818-5:
软件部分;ISO/IEC-13818-6:
数字存储媒体命令与控制;ISO/IEC-13818-7:
高级音频编码;ISO/IEC-13818-8:
系统解码实时接口;
MPEG2系统任务包括:
1.规定以包传输数据的协议;2.规定收发两端数据流同步的协议;3.提供多个数据流的复用和解复用协议;3.提供数据流加密的协议。
以包形式存储和传送数据流是MPEG2系统之要点。
ES是直接从编码器出来的数据流,可以是编码过的视频数据流,音频数据流,或其他编码数据流的统称。
ES流经过PES打包器之后,被转换成PES包。
PES包由包头和payload组成,具体格式摘录如下:
可以看到PTS/DTS是打在PES包里面的,这两个parameters是解决视音频同步显示,防止解码器输入缓存上溢或下溢的关键。
PTS表示显示单元出现在系统目标解码器(STD:
systemtargetdecoder)的时间,DTS表示将存取单元全部字节从STD的ES解码缓存器移走的时刻。
每个I、P、B帧的包头都有一个PTS和DTS,但PTS与DTS对B帧都是一样的,无须标出B帧的DTS。
对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTS和DTS。
MPEG2TS小结
(2) 2010-01-1409:
05:
07
分类:
LINUX
上节介绍过,ES首先需打包成PES流包,然后PES根据需要打包成PS或TS包进行存储或传输。
其每路ES只包含一路信源的编码数据流,所以每路PES也只包含相对应信源的数据流。
对PS流而言,每个PES包头含有PTS和DTS,流识别码,用于区别不同性质ES。
然后通过PS复用器将PES包复用成PS包。
实际上是将PES包分解为更细小的PS包。
在解码的时候,解复用器将PS分解成一个个PES包,拆包器然后将PES包拆成视频和音频的ES,最后输入至各自解码器进行解码。
一个问题是:
各个ES在解码时,如何保证视音频的同步呢?
除了PTS和DTS的配合工作外,还有一个重要的参数是SCR(systemclockreference)。
在编码的时候,PTS,DTS和SCR都是由STC(systemtimeclock)生成的,在解码时,STC会再生,并通过锁相环路(PLL-phaselockloop),用本地SCR相位与输入的瞬时SCR相位锁相比较,以确定解码过程是否同步,若不同步,则用这个瞬时SCR调整27MHz的本地时钟频率。
最后,PTS,DTS和SCR一起配合,解决视音频同步播放的问题。
PS格式摘录如下:
PS包的长度比较长且可变,主要用于无误码环境里,因为越长的话,同步越困难,且在丢包的情况下,重组也越困难。
所以,PS适合于节目信息的编辑和本地内容应用的application。
MPEG2TS小结(3) 2010-01-1409:
05:
53
分类:
LINUX
TS流也是由一个或多个PES组合而来的,他们可以具有相同的时间基准,也可以不同。
其基本的复用思想是,对具有相同时间基准的多个PES现进行节目复用,然后再对相互有独立时间基准的各个PS进行传输复用,最终产生出TS。
TS包由包头和包数据2部分组成,其中包头还可以包括扩展的自适用区。
包头长度占4bytes,自使用区和包数据共占184bytes,整个TS包长度相当于4个ATM包长。
TS包的包头由如下图摘录所示的同步字节、传输误码指示符、有效载荷单元起始指示符、传输优先、包识别(PID-PacketIdentification)、传输加扰控制、自适应区控制和连续计数器8个部分组成。
其中,可用同步字节位串的自动相关特性,检测数据流中的包限制,建立包同步;传输误码指示符,是指有不能消除误码时,采用误码校正解码器可表示1bit 的误码,但无法校正;有效载荷单元起始指示符,表示该数据包是否存在确定的起始信息;传输优先,是给TS包分配优先权;PID值是由用户确定的,解码器根据PID将TS上从不同ES来的TS包区别出来,以重建原来的ES;传输加扰控制,可指示数据包内容是否加扰,但包头和自适应区永远不加扰;自适应区控制,用2bit表示有否自适应区,即(01)表示有有用信息无自适应区,(10)表示无有用信息有自适应区,(11)表示有有用信息有自适应区,(00)无定义;连续计数器可对PID包传送顺序计数,据计数器读数,接收端可判断是否有包丢失及包传送顺序错误。
显然,包头对TS包具有同步、识别、检错及加密功能。
TS包自适应区由自适应区长、各种标志指示符、与插入标志有关的信息和填充数据4部分组成。
其中标志部分由间断指示符、随机存取指示符、ES优化指示符、PCR标志、接点标志、传输专用数据标志、原始PCR标志、自适应区扩展标志8个部分组成。
重要的是标志部分的PCR字段,可给编解码器的27MHz时钟提供同步资料,进行同步。
其过程是,通过PLL,用解码时本地用PCR相位与输入的瞬时PCR相位锁相比较,确定解码过程是否同步,若不同步,则用这个瞬时PCR调整时钟频率。
因为,数字图像采用了复杂而不同的压缩编码算法,造成每幅图像的数据各不相同,使直接从压缩编码图像数据的开始部分获取时钟信息成为不可能。
为此,选择了某些(而非全部)TS包的自适应区来传送定时信息。
于是,被选中的TS包的自适应区,可用于测定包信息的控制bit和重要的控制信息。
自适应区无须伴随每个包都发送,发送多少主要由选中的TS包的传输专用时标参数决定。
标志中的随机存取指示符和接点标志,在节目变动时,为随机进入I帧压缩的数据流提供随机进入点,也为插入当地节目提供方便。
自适应区中的填充数据是由于PES包长不可能正好转为TS包的整数倍,最后的TS包保留一小部分有用容量,通过填充字节加以填补,这样可以防止缓存器下溢,保持总码率恒定不变。
MPEG2TS小结(4) 2010-01-1409:
06:
32
分类:
LINUX
前面3节总结了MPEG2TS的基本格式,其中包括PES,PS和TS,以及相关字段的介绍。
那么作为一种传输流,TS将内容进行打包/复用,让其媒体内容变成TS传输,并最终在解码端解码。
简单来看,TS是一个传输层的协议栈,它可以承载各种内容的传输,比如MPEG,WMV,H264,甚至是IP,那么其中的传输规范是如何定义的呢?
这个即是PSI(节目特定信息)要做的事情。
PSI由四张表构成:
PAT,PMT,CAT和NIT,这四张表分别描述了一个TS所包括的所有ES流的传输结构。
首先的一个概念是,TS是以包形式传播,在编解码端都需要以一定的包ID来标识TS流里承载的内容,比如,PAT表会存在于一个或多个TS包里,所以要用一个特别的包ID来表示,另外,不同的ES流也需要不同的包ID来标识。
我们有了PAT和PMT这两种表,解码器就可以根据PID,将TS上从不同ES来的TS包区分出来进行解码。
TS的解码分两步进行,其一,是从PID为0的TS包里,解析出PAT表,然后从PAT表里找到各个节目源的PID,一般此类节目源都由若干个ES流组成,并描述在PMT表里面,然后通过节目源的PID,就可以在PMT表里检索到各个ES的PID。
其二,解码器根据PMT表里的ES流的PID,将TS流上的包进行区分,并按不同的ES流进行解码。
所以,TS是经过节目复用和传输复用两层完成的,即在节目复用时,加入了PMT,在传输复用时,加入了PAT。
同样在节目解复用时,可以得到PMT,在传输解复用时,可以得到PAT。
下图很好地概述了其思想。
MPEG2TS小结(5) 2010-01-1409:
14:
19
分类:
LINUX
TS是支持多路复用的,所以它可用来传输经复用后的多层节目。
在复用过程中,要注意的是,解码过程中所需要面对的时间参考和同步问题,因为解复用是需要各种信息同步进行的,所以在复用过程中,就需要插入相关的时间信息:
PTS,DTS,PCR。
在TS形成过程中,PTS和DTS是在ES打包成PES时,根据STC的参考,将其时钟信息注入PES包中的,而之后在PES切成TS时,再将PID和PCR信息注入到TS包中,当多路TS再进行复用的时候,各路TS的PCR将会被提取出来,再进行分析,然后再根据统一的STC参考,将新的PCR生成并注入到TS中去,最后,因为原来PAT表信息不在适用,所以新的PAT表需要再生成,并附加到新的TS流中去。
经过这多层的复用之后,新的TS流即可以进入调制,传输阶段。
过程可参见下图:
解码过程要面对的问题是:
解复用,视音频的同步,解码缓存器无上下溢。
解复用即是将TS在同一信道里不同时序进行传输的节目分离出来;视音频同步由DTS,PTS和PCR三者协调完成,并且PCR是重建系统时间基准的绝对时标,而DTS和PTS是解码和重现时刻的相对时标;对解码缓存器无上下溢的问题,必须借助于系统目标解码器(STD)模型来对其进行实现,基本思想如下:
1.TS流进入解码器后,首先由换向器,按照一定的时序关系,将各种ES流分解出来(其中也包括PSI信息流)。
2.分解过后的ES流会进入各自的传输缓存器,通过之后,其PES流进入各自的主存储器,注意的是:
PSI信息流会进入系统缓存器,最后也到达主存储器。
3.最后,解码器根据DTS信息,从各个主存储器分别提取媒体或系统信息,进行解码,并根据PTS信息,将媒体内容进行显示处理。
什么是DVB-SI?
对PSI(PAT,PMT,CAT,NIT,SDT,EIT)的理解 2010-01-1408:
59:
56
分类:
LINUX
数字电视与传统模拟电视节目选择的方式完全不同,传统电视的每一个频道对应一个节目,只要调到相应的频率,就可以看到节目。
而在数字电视信号中,一路码流对应多路节目,使用复用技术就可以做到了。
一个物理的频道只能给出包含多路节目的一路传输流。
要观看其中的某一路节目,还必须从该传输流中提取出该路节目的压缩包,然后再进行解码。
所以怎样从众多的传输流中,选中一路节目播放,就变得很复杂。
在mpeg-2的传输流(TransportStream)中,节目专用信息PSI(ProgramSpecificInformation),就是规定不同节目和节目中的不同成分如何复用成一个统一的码流。
以PSI为基础可以提供一个码流的构成,从而帮助用户对节目进行选择。
DVB中的服务信息SI(ServiceInformation)则对此进行了进一步的扩展,加入了一些对用户有用的信息,标示节目的类型,服务商,节目的相互关系等。
正确的了解mpeg-2的PSI以及DVB的SI的结构,及其在节目组织,选择中的应用,可以正确理解serviceinformation在DVB解码中的地位。
对于我们做好对数字节目的复用,也能起到帮助作用。
1MPEG-2TS中的PSI
PSI信息主要包括以下的表:
PAT(ProgramAssociationTable):
节目群丛表,该表的PID是固定的0x0000,它的主要作用是指出该传输流ID,以及该路传输流中所对应的几路节目流的MAP表和网络信息表的PID。
PMT(ProgramMapTable):
节目映射表,该表的PID是由PAT提供给出的。
通过该表可以得到一路节目中包含的信息,例如,该路节目由哪些流构成和这些流的类型(视频,音频,数据),指定节目中各流对应的PID,以及该节目的PCR所对应的PID。
NIT(NetworkInformationTable):
网络信息表,该表的PID是由PAT提供给出的。
NIT的作用主要是对多路传输流的识别,NIT提供多路传输流,物理网络及网络传输的相关的一些信息,如用于调谐的频率信息以及编码方式。
调制方式等参数方面的信息。
CAT(ConditionalAccessTable):
条件访问表,PID-0x0001。
除了上述的几种表外,mpeg-2还提供了私有字段,用于实现对MPEG-2的扩充。
2DVB中的SI
Mpeg-2的PSI中提供了不少的相关节目组成和相互关系的信息,从而使得在接收端可以正确的对多路传输流进行分解。
但是这些信息在实际使用时仍显得不够,为此在DVB中采用SI对PSI信息进行了进一步的扩展。
除了在PSI中的信息之外,DVB还定义了一些其他的一些表。
SI的主要用途有:
a、根据NIT,PAT,PMT等信息可以进行自动的频道调谐;
b、更方便的对节目进行选择和定位;
c、实现电子节目指南EPG(ElectronicProgramGuide),等等。
PSI中的信息基本上都是与当前码流相关的,即它们所涉及的内容都与当前码流中的部分信息相关。
与PSI不同的是,SI的信息可以包括不在当前码流中的一些服务和事件,允许用户进行更多的选择和了解更多的其他服务信息。
DVB规定携带SI信息的传输包必须用指定的PID,指定的PID如下表:
TABLETYPE
PIDValue
PAT
0X0000
CAT
0X0001
TSDT
0X0002
RESERVED
0X0003TO0X000F
NIT,ST
0X0010
SDT,BAT,ST
0X0011
EIT,ST
0X0012
RST,ST
0X0013
TDT,TOT,ST
0X0014
NetworkSynchroniztion
0X0015
Reservedforfutureuse
0X0016TO0X001B
Inbandsignaling
0X001C
Measurement
0X001D
DIT
0X001E
SIT
0X001F
在该表中可以看到同一个PID可以对应不同的表,要把这样的表区分开来,需要进一步找到TableID进行识别。
TableID表如下:
Value Description
0x00Program_association_section
0x01Conditional_access_section
0x02Program_map_section
0x03Transport_stream_description_section
0x04TO0x3FReserved
0x40Network_information_section-actual_network
0x41Network_information_section-other_network
0x42Service_description_section-actual_transport_stream
0x43TO0x45Reservedforfutureuse
0x46Service_description_section-other_transport_stream
0x47TO0x49Reservedforfutureuse
0x4ABouquet_association_section
0x4BTO0x4DReservedforfutureuse
0x4EEvent_information_section-actual_transport_stream,P/F
0x4FEvent_information_section-other_transport_stream,P/F
0x50TO0x5FEvent_information_section-actual_transport_stream,schedule
0x60TO0x6FEvent_information_section-other_transport_stream,schedule
0x70Time_data_section
0x71Running_status_section
0x72Stuffing_section
0x73Time_offset_section
0x74TO0x7DReservedforfutureuse
0x7EDiscontinuity_information_section
0x7FSelection_information_section
0x80TO0xFEUserdefined
0xFFReserved
有了这两个ID我们可以在码流中找到我们想要的任何一张表。
SI主要包括以下一些信息表:
NIT(NetworkInformationTable):
NIT的作用主要是对多路传输流的识别,NIT
提供多路传输流,物理网络及网络传输的相关的一些信息,如用于调谐的频率信息以
及编码方式。
调制方式等参数方面的信息。
根据此信息设置IRD(IntegratedReceiver
Decoder)可以进行多路传输流之间的切换。
SDT(ServiceDescriptionTable):
用于描述系统中各路节目的名称,该节目的提
供者,是否有相应的时间描述表等方面的信息。
该表可以描述当前传输流,也可以描
述其他的传输流,这由TableID进行区分。
EIT(EventInformationTable):
该表示对某一路节目的更进一步的描述。
它提供
事件的的名称,开始时间,时间长度,运行状态等。
TDT(TimeandDataTable):
该表提供当前的时间信息,该表用来对IRD的解码
时钟进行更新
BAT(BouquetAssociationTable):
该表提供一系列类似节目的集合。
这些节目
可以不在同一个传输流中,利用该表可以很方便的进行相关节目或某一类节目的浏览
和选择。
RST(RunningStatusTable):
该表提供某一具体事件的的运行状态,可用于按时
自动的切换到指定的事件
TOT(TimeOffsetTable):
该表提供当地时间与TDT之间的关系,该表与TDT
配合使用。
TSDT(TransportStreamDescriptionTable):
由PID0x0002标识,提供传输流的一
些参数.
ST(StuffingTable):
该表表明其内容是无效的,只是作为填充字节。
那么,我们如何运用DVB中的SI信息表呢?
DVBSI的使用
1、网络信息表(NIT)
网络信息表提供一组传输流以及相应的调谐信息。
NIT在IRD(整合接收解码器)启动程序中用到,并且调谐信息可以存储到不变的存储器中。
NIT还可以用来标志调谐信息的变化。
NIT遵从如下规定:
a、当前的传输系统必须包含NIT。
b、当且仅当NIT包含可用的传输系统描述符,当前传输系统才是有效的。
这就指定了NIT包含有效信息的条件。
在一些广播传输系统边界,TS中的NIT也被允许用来描述广播频道中的早期的网络。
IRD不得不选择一个不同的机制来获得当前传输系统的相应的调谐信息。
例如,一个卫星IRD接受到当前传输系统的一个卫星传输系统描述符,那么这个描述符被视为有效,如果一个电缆IRD接收到当前传输系统的一个电缆传输系统描述符也是有效的,但是,如果电缆IRD接收到当前传输系统的一个卫星传输系统描述符,那么这个描述符对于这个IRD就是无效的。
c、如果当前传输系统一个有效的NIT在SI比特流中出现,那么这个NIT应当列出当前传输系统中所有的TS。
d、SI流每10秒钟应当至少包含8个TS包来传输NIT或者空包。
这个规定简化了广播传输边界中NIT的复位(replacement)。
使用这样的复位机制,使得本地频率控制使用低廉设备成为可能。
SI使用两个标志来描述传输系统。
它们分别是network_id和original_network_id。
后者用来作为一个TS中的一个服务的唯一标志符,即使这个TS被传送到了其他的传输系统之中。
一个TS可以被path:
original_network_id/transport_stream_id唯一标识。
一个服务可以被path:
original_network_id/transport_stream_id/service_id唯一标识。
显然,network_id不在这个path之内。
另外,每个original_network_id中都有不同的service_id。
当一个服务(同一个TS内)被传送到另一个传输系统后,只有network_id改变了,original_network_id不受影响。
下面举个例子,考虑如下情况:
有两个服务(A和B),它们源于两个不同的传输系统并且碰巧有相同的service_id和transport_stream_id,它们被传输到一个新的传输系统。
在这个例子中,这两个服务被安排在新network中的不同的TS中。
如果这两个服务被放在同一个TS中,那么必须修改服务的ID号,因为在同一个TS中一个service_id不能够分配给多个服务,并且一个TS仅仅可以对应一个original_network_id。
2、BAT信息
BAT提供一组服务,这些服务提供了一个基础,IRD在这些基础之上向用户展示有效的服务。
BAT的传输是可选的。
下面的规则提高了SI比特流的连贯性并且简化了IRD的工作。
SI比特流应当在每个BAT子表中列出集锦的所有服务。
注意:
一个服务可以属于多个bouquet。
这一规定使得IRD可以通过不同的TS得到一个服务。
如果IRD将bouquet中服务信息提供给用户,那么列在bouquet中的服务就得到保证,否则一些服务将会丢失。
一个bouquet可以把不同网络传输的多个TS中的服务集中起来。
如果BAT中所有服务都被列在SDT中,IRD对bouquet中所有服务信息的访问将会变得容易。
同样的,如果NIT信息给出所有TS中service的容量,IRD对service的访问将会变得容易。
3、SDT信息
SDT用来罗列TS中service的名称以及其他参数。
每一个TS中都有一个独立的SDT子表。
为了提高对service的采集,定义了下列规则:
强制传输当前TS的SDT。
SDT列出的SI比特流至少包括TS中所有服务。
另外:
当前TS(例如table_id=0x46)中SDT描述其他TS时,应当列出这个TS的所有service。
强烈推荐service_id,在一个network中一旦把一个service_id分配给了一个特定的服务,那么这个service_id将不再变化,以便于IRD实现收藏频道列表之类的功能。
4. EIT信息
事件信息表用来传递当前的,将
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MPEG2TS 小结 讲解