传输流(TS)

传输流(TS)

将具有共同时间基准或具有独立时间基准的一个或多个PES组合而成的单一的数据流称为传输流(Transport Stream)。TS实际是面向数字化分配媒介(有线、卫星、地面网)的传输层接口。对具有共同时间基准的两个以上的PES先进行节目复用,然后再对相互可有独立时间基准的各个PS进行传输复用,即将每个PES再细分为更小的TS包

   TS包由包头、自适应区和包数据3部分组成。每个包长度为固定的188B,包头长度占4 B,自适应区和包数据长度占184B。184B为有用信息空间,用于传送已编码的视音频数据流。当节目时钟基准(PCR-Program Clock Reference)存在时,包头还包括可变长度的自适应区,包头的长度就会大于4B。考虑到与通信的关系,整个传输包固定长度应相当于4个ATM包。考虑到加密是按照8B顺序加扰的,代表有用信息的自适应区和包数据的长度应该是8B的整数倍,即自适应区和包数据为23×8B =184B。

TS包的包头由如图所示的同步字节、传输误码指示符、有效载荷单元起始指示符、传输优先、包识别(PID-Packet Identification)、传输加扰控制、自适应区控制和连续计数器8个部分组成。其中,可用同步字节位串的自动相关特性,检测数据流中的包限制,建立包同步;传输误码指示符,是指有不能消除误码时,采用误码校正解码器可表示1bit 的误码,但无法校正;有效载荷单元起始指示符,表示该数据包是否存在确定的起始信息;传输优先,是给TS包分配优先权;PID值是由用户确定的,解码器根据PID将TS上从不同ES来的TS包区别出来,以重建原来的ES;传输加扰控制,可指示数据包内容是否加扰,但包头和自适应区永远不加扰;自适应区控制,用2 bit表示有否自适应区,即(01)表示有有用信息无自适应区,(10)表示无有用信息有自适应区,(11)表示有有用信息有自适应区,(00)无定义;连续计数器可对PID包传送顺序计数,据计数器读数,接收端可判断是否有包丢失及包传送顺序错误。显然,包头对TS包具有同步、识别、检错及加密功能。

TS包自适应区由自适应区长、各种标志指示符、与插入标志有关的信息和填充数据4部分组成。其中标志部分由间断指示符、随机存取指示符、ES优化指示符、PCR标志、接点标志、传输专用数据标志、原始PCR标志、自适应区扩展标志8个部分组成。

TS包语法结构如下:

Syntax

No. of bits

Mnemonic

transport_packet(){

sync_byte

8

bslbf

transport_error_indicator

1

bslbf

payload_unit_start_indicator

1

bslbf

transport_priority

1

bslbf

PID

13

uimsbf

transport_scrambling_control

2

bslbf

adaptation_field_control

2

bslbf

continuity_counter

4

uimsbf

if(adaptation_field_control=='10'  || adaptation_field_control=='11'){

adaptation_field()

}

if(adaptation_field_control=='01' || adaptation_field_control=='11') {

for (i=0;i<N;i++){

data_byte

8

bslbf

}

}

}

自适应控制区语法结构如下:

Syntax

No. of Bits

Mnemonic

adaptation_field() {

     adaptation_field_length

8

uimsbf

         if(adaptation_field_length >0) {

              discontinuity_indicator

1

bslbf

              random_access_indicator

1

bslbf

              elementary_stream_priority_indicator

1

bslbf

              PCR_flag

1

bslbf

              OPCR_flag

1

bslbf

              splicing_point_flag

1

bslbf

              transport_private_data_flag

1

bslbf

              adaptation_field_extension_flag

1

bslbf

              if(PCR_flag == '1') {

                     program_clock_reference_base

33

uimsbf

                     reserved

6

bslbf

                     program_clock_reference_extension

9

uimsbf

              }

              if(OPCR_flag == '1') {

                     original_program_clock_reference_base

33

uimsbf

                     reserved

6

bslbf

                     original_program_clock_reference_extension

9

uimsbf

              }

              if (splicing_point_flag == '1') {

                     splice_countdown

8

tcimsbf

              }

              if(transport_private_data_flag == '1') {

                     transport_private_data_length

8

uimsbf

                     for (i=0; i<transport_private_data_length;i++){

                            private_data_byte

8

bslbf

                     }

              }

              if (adaptation_field_extension_flag == '1' ) {

                     adaptation_field_extension_length

8

uimsbf

                     ltw_flag               

1

bslbf

                     piecewise_rate_flag

1

bslbf

                     seamless_splice_flag

1

bslbf

                     reserved

5

bslbf

                     if (ltw_flag == '1') {

                            ltw_valid_flag

1

bslbf

                            ltw_offset

15

uimsbf

                     }

                     if (piecewise_rate_flag == '1') {

                            reserved

2

bslbf

                            piecewise_rate

22

uimsbf

                     }

                     if (seamless_splice_flag == '1'){

                            splice_type

4

bslbf

                            DTS_next_AU[32..30]

3

bslbf

                            marker_bit

1

bslbf

                            DTS_next_AU[29..15]

15

bslbf

                            marker_bit

1

bslbf

                            DTS_next_AU[14..0]

15

bslbf

                            marker_bit

1

bslbf

                     }

                     for ( i=0;i<N;i++) {

                            reserved

8

bslbf

                     }

              }

              for (i=0;i<N;i++){

                     stuffing_byte

8

bslbf

              }

         }

}


原文:http://blog.csdn.net/alangdangjia/article/details/9706419

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值