传输流(TS)将具有共同时间基准或具有独立时间基准的一个或多个PES组合而成的单一的数据流称为传输流(TransportStream)。TS实际是面向数字化分配媒介(有线、卫星、地面网)的传输层接口。对具有共同时间基准的两个以上的PES先进行节目复用,然后再对相互可有独立时间基准的各个PS进行传输复用,即将每个PES再细分为更小的TS包TS包由包头、自适应区和包数据3部分组成。每个包长度为固定的188B,包头长度占4B,自适应区和包数据长度占184B。184B为有用信息空间,用于传送已编码的视音频数据流。当节目时钟基准(PCR-ProgramClockReference)存在时,包头还包括可变长度的自适应区,包头的长度就会大于4B。考虑到与通信的关系,整个传输包固定长度应相当于4个ATM包。考虑到加密是按照8B顺序加扰的,代表有用信息的自适应区和包数据的长度应该是8B的整数倍,即自适应区和包数据为23×8B=184B。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个部分组成。TS包语法结构如下:自适应控制区语法结构如下:SyntaxNo.ofBitsMnemonicadaptation_field(){adaptation_field_length8uimsbfif(adaptation_field_length0){discontinuity_indicator1bslbfrandom_access_indicator1bslbfelementary_stream_priority_indicator1bslbfPCR_flag1bslbfOPCR_flag1bslbfsplicing_point_flag1bslbftransport_private_data_flag1bslbfadaptation_field_extension_flag1bslbfif(PCR_flag=='1'){program_clock_reference_base33uimsbfreserved6bslbfprogram_clock_reference_extension9uimsbf}if(OPCR_flag=='1'){original_program_clock_reference_base33uimsbfreserved6bslbfSyntaxNo.ofbitsMnemonictransport_packet(){sync_byte8bslbftransport_error_indicator1bslbfpayload_unit_start_indicator1bslbftransport_priority1bslbfPID13uimsbftransport_scrambling_control2bslbfadaptation_field_control2bslbfcontinuity_counter4uimsbfif(adaptation_field_control=='10'||adaptation_field_control=='11'){adaptation_field()}if(adaptation_field_control=='01'||adaptation_field_control=='11'){for(i=0;iN;i++){data_byte8bslbf}}}original_program_clock_reference_extension9uimsbf}if(splicing_point_flag=='1'){splice_countdown8tcimsbf}if(transport_private_data_flag=='1'){transport_private_data_length8uimsbffor(i=0;itransport_private_data_length;i++){private_data_byte8bslbf}}if(adaptation_field_extension_flag=='1'){adaptation_field_extension_length8uimsbfltw_flag1bslbfpiecewise_rate_flag1bslbfseamless_splice_flag1bslbfreserved5bslbfif(ltw_flag=='1'){ltw_valid_flag1bslbfltw_offset15uimsbf}if(piecewise_rate_flag=='1'){reserved2bslbfpiecewise_rate22uimsbf}if(seamless_splice_flag=='1'){splice_type4bslbfDTS_next_AU[32..30]3bslbfmarker_bit1bslbfDTS_next_AU[29..15]15bslbfmarker_bit1bslbfDTS_next_AU[14..0]15bslbfmarker_bit1bslbf}for(i=0;iN;i++){reserved8bslbf}}for(i=0;iN;i++){stuffing_byte8bslbf}}}1)ES-ElementaryStreams(原始流),对视频、音频信号及其他数据进行编码压缩后的数据流称为原始流。原始流包括访问单元,比如视频原始流的访问单元就是一副图像的编码数据。(2)PES-PacketizedElementaryStreams(分组的原始流),原始流形成的分组称为PES分组,是用来传递原始流的一种数据结构(3)节目是节目元素的集合。节目元素可能是原始流,这些原始流有共同的时间基点,用来做同步显示。(4)传输流和节目流TS-TransportStream翻译为“传输流”PS-ProgramStream翻译为“节目流”PS用来传输和保存一道节目的编码数据或其他数据。PS的组成单位是PES分组。TS用来传输和保存多道节目的编码数据或其他数据,TS的组成单位是节目。PS适用于不容易发生错误的环境,以及涉及到软件处理的应用,典型应用如DVD光盘的文件存储TS适用于容易发生错误的环境,典型应用就是数字电视信号的传输。TS和PS是可以互相转换的,比如从TS中抽取一道节目的内容并产生有效的PS是可能。(5)传输流分组和PES分组原始流分成很多PES分组,保持串行顺序,一个PES分组只包含一个原始流的编码数据。PES分组长度很大,最大可为64K字节。PES分组分为“分组首部(header)”和“有效负载(payload)”。“有效负载”指跟随在首部字节之后的字节。首部的前4个字节构成分组的起始码,标识了该分组所属原始流的类型和ID号。TS分组也就是传输流数据形成的数据包。每个TS分组长度为188字节,包括“分组首部”和“有效负载,前4个字节是分组首部,包含了这个分组的一些信息。有些情况下需要更多的信息时,需在后面添加“调整字段(adaptionfield)”。两者之间的关系:PES分组是插入到TS分组中的,每个PES分组首部的第一字节就是TS分组有效负载的第一字节。一个PID值的TS分组只带有来自一个原始流的数据。(6)PSI全称ProgramSpecificInformation,意为节目专用信息。传输流中是多路节目复用的,那么,怎么知道这些节目在传输流中的位置,区分属于不同节目呢?所以就还需要一些附加信息,这就是PSI。PSI也是插入到TS分组中的,它们的PID是特定值。MPEG-2中规定了4个PSI,包括PAT(节目关联表),CAT(条件访问表),PMT(节目映射表),NIT(网络信息表),这些PSI包含了进行多路解调和显示节目的必要的和足够的信息。应用中可能包括更多的信息,比如DVB-T中定义了SDT(服务描述表),EIT(环境信息表),BAT(节目组相关表),TDT(时间日期表)等,统称为DVB-SI(服务信息)。PSI的PID是特定的,含PSI的数据包必须周期性的出现在传输流中。PMT(ProgramMapTable)节目映射表PMT所在分组的PID由PAT指定,所以要先解出PAT,再解PMT。PMT中包含了属于同一节目的视频、音频和数据原始流的PID。找到了PMT,解多路复用器就可找到一道节目对应的每个原始流的PID,再根据原始流PID,去获取原始流。PAT(ProgramAssociationTable)节目关联表PAT所在分组的PID=0PAT中列出了传输流中存在的节目流PAT指定了传输流中每个节目对应PMT所在分组的PIDPAT的第一条数据指定了NIT所在分组的PID,其他数据指定了PMT所在分组的PID。CAT(ConditionalAccessTable)条件访问表CAT所在分组的PID=1CAT中列出了条件控制信息(ECM)和条件管理信息(EMM)所在分组的PID。CAT用于节目的加密和解密NIT(NetworkInformationTable)网络信息表NIT所在分组的PID由PAT指定NIT提供一组传输流的相关信息,以及于网络自身特性相关的信息,比如网络名称,传输参数(如频率,调制方式等)。NIT一般是解码器内部使用的数据,当然也可以做为EPG的一个显示数据提供给用户做为参考。几种PSI之间的关系,如下图所示:首先PAT中指定了传输流中所存在的节目,及每个节目对应的PMT的PID号。比如Program1对应的PMT的PID=22,然后找到PID=22的TS分组,解出PMT,得到这个节目中包含的原始流的PID,再根据原始流的PID去找相应的TS分组,获取原始流的数据,然后就可以送入解码器解码了。数据结构(1)TS分组前面提到,TS分组由188个字节构成,其结构如下:transport_packet(){sync_byte//8transport_error_indicator//1payload_unit_start_indicator//1transport_priority//1PID//13transport_scrambling_control//2adaptation_field_control//2continuity_counter//4if(adaptation_field_control=='10'||adaptation_field_control=='11'){adaptation_field()}if(adaptation_field_control=='01'||adaptation_field_control=='11'){for(i=0;iN;i++){data_byte//8}}}