TS流(Transport Stream)是DVB领域的基础概念,它将音视频和PSI/SI等信息打包成传输包后进行传输。在一个ts流中可以传输多组节目服务,是节目复用的基础。传输包的大小事固定的,一般为188字节。如果信息数据不足188,则会插入填充字符。
下面的图是传输流的语法结构,传输流就是这样一个个传输包构成的。通过解析可以得到包内数据。
sync_byte: 同步字节,固定为0x47 ,表示后面的是一个TS分组,后面包中的数据不会出现0x47
transport_error_indicator: 传输错误标志位,一般传输错误的话就不会处理这个包了
payload_unit_start_indicator: 1比特标志位。用来指示传输流分组带有PES分组或PSI数据时的情况。
当传输流分组的有效负载带有PES分组数据时,payload_unit_start_indicator=1表示传输流分组的有效负载将以PES分组的第一个字节开始,即有效负载以0x00 00 01串开始;payload_unit_start_indicator=0表示在传输流的开始不是PES分组的开始,即不是0x00 00 01开始。
当传输流分组的有效负载带有PSI数据时,如果传输流分组带有一个PSI部分地第一个字节,payload_unit_start_indicator应该置为1,表明传输流分组的第一个字节带有point_field,即有效载荷的第一个字节,值为0x00。如果传输流分组不带有一个PSI部分的第一个字节,payload_unit_start_indicator值应该置为0,表明有效负载中没有point_field。
空分组的payload_unit_start_indicator置为0。
transport_priority: 传输优先级位,1表示高优先级,传输机制可以根据此位确定一个原始流中数据的优先级。
PID 指示存储于分组有效负载数据的类型,如PID=0x0000表示PAT,0x0001表示CAT等。
transport_scrambling_control: 加密标志位,表示TS分组有效负载的加密模式。TS分组首部(包括调整字段t)不应被加密,00表示未加密。
adaption_field_control: 调整字段控制,表示TS分组首部后面是否跟随有调整字段和有效负载。01仅含有效负载,10仅含调整字段,11含有调整字段和有效负载,00为保留值,解码器应丢弃该字段为00的分组。空分组是此字段值为01。
continuity_counter : 一个4bit的计数器,相同的PID的TS分组传输时每次加1,然后模16。当adaption_field_control为00或10时(即无有效负载),该值不增加。
adaptation_field: 调整字段
data_byte : 数据字节来自PES分组,PSI部分以及一些自定义的私有数据。空分组的PID为0x1FFF,data_byte 可以是任何值。