视频头文件解析--ts

本文详细介绍了TS分组的结构,包括同步字节、PID、加密标志等关键信息,并探讨了PAT和PMT数据结构及其在视频封装中的作用。解析步骤包括验证TS流、检查PID、解析PAT和PMT,以获取视频和音频PID。
摘要由CSDN通过智能技术生成

数据结构:

typedef struct pmt_es_component_tag

{

   D_UINT8  stream_type;

   D_UINT8  bfree;

   D_UINT16 elementary_PID;

}pmt_component_t;

 

typedef struct pid_tag

{

   PID_STATE   state;

   PID_TYPE     type;

   D_UINT16     pid;

   D_UINT8      ch_idx;

   D_UINT8      bfree;

}ts_pid_t;

 

typedef struct

{

   D_UINT16 prog_number;

   D_UINT16 pcr_pid;

   D_UINT16 video_pid;

   D_UINT16 video_stream_type;

   D_UINT16 audio_pid;

   D_UINT16 audio_pids_cnt;

   D_UINT16 audio_pids[MAX_AUDIO_PER_CHANNEL];

   D_UINT16 audio_stream_type[MAX_AUDIO_PER_CHANNEL];

   D_UINT8  bfree;

}PMTEXT_T;

 

ts分组结构

TS分组前面提到,TS分组由188个字节构成,其结构如下:

transport_packet()

{

    sync_byte                                   8bit

    transport_error_indicator                   1 bit

    payload_unit_start_indicator                1 bit

    transport_priority                          1 bit

    PID                                         13bit

    transport_scrambling_control                2 bit

    adaptation_field_control                    2 bit

    continuity_counter                          4 bit

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

    {

        adaptation_field()

    }

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

    {

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

        {

            data_byte                           8 bit

        }

    }

}

前面32bit的数据即TS分组首部,它指出了这个分组的属性。

sync_byte 同步字节,固定为0x47 ,表示后面的是一个TS分组,当然,后面包中的数据是不会出现0x47的

transport_error_indicator传输错误标志位,一般传输错误的话就不会处理这个包了.

payload_unit_start_indicator这个位功能有点复杂,字面意思是有效负载的开始标志,根据后面有效负载的内容不同功能也不同,后面用到的时候再说。

transport_priority传输优先级位,1表示高优先级,传输机制可能用到,解码好像用不着。

PID 这个比较重要,指出了这个包的有效负载数据的类型,告诉我们这个包传输的是什么内容。前面已经叙述过。

transport_scrambling_control加密标志位,表示TS分组有效负载的加密模式。TS分组首部(也就是前面这32bit)是不应被加密的,00表示未加密。

adaption_field_control翻译为“调整字段控制”,表示TS分组首部后面是否跟随有调整字段和有效负载。01仅含有效负载,10仅含调整字段,11含有调整字段和有效负载为00的话解码器不进行处理。空分组没有调整字段

continuity_counter一个4bit的计数器,范围0-15,具有相同的PID的TS分组传输时每次加1,到15后清0。不过,有些情况下是不计数的。如下:(1)TS分组无有效负载(2)复制的TS分组和原分组这个值一样(3)后面讲到的一个标志discontinuity_indicator为1时

adaptation_field()调整字段的处理

 

data_byte有效负载的剩余部分,可能为PES分组,PSI,或一些自定义的数据。

 

PAT数据结构如下:

program_association_section()

{

        table_id                                                                                       8

       section_syntax_indicator                                          1

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值