TS科普 2 包头

版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎大家积极评论,博主会一一答复! https://blog.csdn.net/cabbage2008/article/details/49281729

 TS 流都是固定等长的188字节包



如下图所示 用UltraEdit打开的一个TS流,我们发现每隔188个字节就有一个47(可以看做是包头)


TS的包头占用四个字节

以第一个包为例:

47 60 00 10 00 00 B0 0D 00 00 C1 00 00 00 01 E0
81 0C 8C BE 32 FF FF ……………………………..
………………………………………………………
………………………………………………………
………………………………….FF

我们将其按照位进行划分 (0~31位,共4个字节 32位)

1. 0~7    位: 同步位置   第一个字节 如 十六进制 47  (01000111)

2. 8~10  位: 第9位是有效载荷单元起始符:(1表示起始符 0 表示后续数据) 一个TS包是188字节  而一帧数据远远大于188字节  所以一帧数据被拆分成多个TS包。
                              起始符为1 的表示该帧的第一个TS包 里面含有当前帧的描述信息 PTS(Presentation Time
                                       Stamp)表示该帧数据的时间位置以及当前帧含有的数据量(TS包个数,大部分不描述
                                        用0代替)
                              起始符为0的TS包  存放当前帧的剩余信息
                          只会出现三个十六进制数字之一: 0 4 6,其它说明包错误    如当前为 6

                         0: 二进制 0000  (有效载荷单元起始符 为0)   这里借用了PID一位
                         4: 二进制 0100  (有效载荷单元起始符 为1)   这里借用了PID一位
                         6: 二进制 0110  (有效载荷单元起始符 为1)   这里借用了PID一位

3. 11~23位:PID(packet ID)  是每个节目的唯一标识    如当前为 0 0 0 (第一个包为 000)(除了pid=000 标识第一个包  其它数字都是随机可选的  无须按某种序列排序)

4. 24~27位:四位刚好可以用一个16进制数字标识   这里表示其负载类型 (其存放有效数据)    当前为1 表示负载中只有有效载荷
                        0:保留值,供未来使用   (碰到丢弃即可)
                        1:负载中只有有效载荷
                        2:负载中只有自适应字段
                        3:先有自适应字段,再有有效载荷
                        
                        自适应字段长度, 占一个字节
                        自适应字段内容,占得字节由长度自适应字段长度决定,多余的字节用0xFF填充

5.28~31位:无须考虑  直接跳过  简单理解为相同PID的顺序码



PES  (Packetized Elementary Stream) 打包的元流 简单说一个个PES包去掉PES包头剩下的就是一帧帧的数据

 有效载荷单元起始符 为1 的TS包会含有部分PES包头



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页