TS流包头偏移量

一、先复习一下TS流包头结构:

TS包头定义(4个字节):

typedef struct TS_packet_header
{
    unsigned sync_byte                        : 8; //同步字节, 固定为0x47,表示后面的是一个TS分组
    unsigned transport_error_indicator        : 1; //传输误码指示符
    unsigned payload_unit_start_indicator    : 1; //有效荷载单元起始指示符
   
    unsigned transport_priority              : 1; //传输优先, 1表示高优先级,传输机制可能用到,解码用不着
    unsigned PID                            : 13; //PID
    unsigned transport_scrambling_control    : 2; //传输加扰控制 
    unsigned adaption_field_control            : 2; //自适应控制 01仅含有效负载,10仅含调整字段,11含有调整字段和有效负载。为00解码器不进行处理
    unsigned continuity_counter                : 4; //连续计数器 一个4bit的计数器,范围0-15
} TS_packet_header;

 

TS包头解析代码:

HRESULT CTS_Stream_Parse::adjust_TS_packet_header( TS_packet_header* TS_header )
{
 unsigned char buf[4];
 
    memcpy(buf, TS_header, 4);
    TS_header->transport_error_indicator        = buf[1] >> 7;
    TS_header->payload_unit_start_indicator    = buf[1] >> 6 & 0x01;
    TS_header->transport_priority                = buf[1] >> 5 & 0x01;
    TS_header->PID                            = (buf[1] & 0x1F) << 8 | buf[2];
    TS_header->transport_scrambling_control    = buf[3] >> 6;
    TS_header->adaption_field_control            = buf[3] >> 4 & 0x03;
    TS_header->continuity_counter                = buf[3] & 0x0F; // 四位数据

 return 0;
}

二、TS包的组成:

上图:

①由Adaption_field_control=2或者=3决定本包存在Adaption_field字段;

②Adaption_field字段:Adaption_field_length+其他内容,在上图中为05 00 ff ff ff ff; Adaption_field_length=0x05

③payload_unit_start_indicator==1时有1字节的pointer_field;==0则无pointer_field(PSI/SI表中,表示这张表没有传完,本包继续传输,续帧);

假设为188Byte的TS包,则结构应该是:

4字节包头 + 调整字段Adaption_field + 1字节pointer_field(payload_unit_start_indicator==1时,)+  数据 data_byte;

1.Adaption_field(调整字段):

if (adaption_field_control == 2 || adaption_field_control == 3)

   {
        adaption_fields() //调整字段的处理:当 PCR_flag=1,则表示本调整字段包含PCR包,可用于统计并计算码率
   }

else  //==0或者1

{

 data_byte()

}

三、含PCR的包的参考图:

14:24 2021/01/15

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值