TS数据结构分析

上传人:豆浆 文档编号:874904 上传时间:2017-05-20 格式:DOCX 页数:12 大小:195.21KB
返回 下载 相关 举报
TS数据结构分析_第1页
第1页 / 共12页
TS数据结构分析_第2页
第2页 / 共12页
TS数据结构分析_第3页
第3页 / 共12页
TS数据结构分析_第4页
第4页 / 共12页
TS数据结构分析_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《TS数据结构分析》由会员分享,可在线阅读,更多相关《TS数据结构分析(12页珍藏版)》请在金锄头文库上搜索。

1、TS 数据结构分析1.TS 包得数据结构2./ Transport packet headertypedef struct TS_packet_headerunsigned sync_byte : 8; /同步字节,固定为0x47 ,表示后面的是一个 TS 分组,当然,后面包中的数据是不会出现 0x47 的unsigned transport_error_indicator : 1; /传输错误标志位,一般传输错误的话就不会处理这个包了unsigned payload_unit_start_indicator : 1; /有效负载的开始标志,根据后面有效负载的内容不同功能也不同unsigned

2、 transport_priority : 1; /传输优先级位,1 表示高优先级unsigned PID : 13; /有效负载数据的类型unsigned transport_scrambling_control : 2; /加密标志位,00 表示未加密unsigned adaption_field_control : 2; /调整字段控制,。01仅含有效负载,10 仅含调整字段,11 含有调整字段和有效负载。为 00 的话解码器不进行处理。unsigned continuity_counter : 4; /一个 4bit 的计数器,范围 0-15 TS_packet_header; TS

3、包头定义:typedef struct TS_packet_headerunsigned sync_byte : 8; /同步字节 , 固定为 0x47,表示后面的是一个 TS 分组unsigned transport_error_indicator : 1; /传输误码指示符unsigned payload_unit_start_indicator : 1; /有效荷载单元起始指示符unsigned transport_priority : 1; /传输优先, 1 表示高优先级,传输机制可能用到,解码用不着unsigned PID : 13; /PIDunsigned transport_s

4、crambling_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 c

5、har buf4; memcpy(buf, TS_header, 4);TS_header-transport_error_indicator = buf1 7;TS_header-payload_unit_start_indicator = buf1 6 & 0x01;TS_header-transport_priority = buf1 5 & 0x01;TS_header-PID = (buf1 & 0x1F) transport_scrambling_control = buf3 6;TS_header-adaption_field_control = buf3 4 & 0x03;TS

6、_header-continuity_counter = buf3 & 0x0F; / 四位数据,应为 0x0F xyy 09.03.18return 0;3.PSI全称 Program Specific Information,意为节目专用信息。传输流中是多路节目复用的,那么,怎么知道这些节目在传输流中的位置,区分属于不同节目呢?所以就还需要一些附加信息,这就是 PSI。PSI 也是插入到 TS 分组中的,它们的 PID 是特定值。MPEG-2 中规定了 4 个 PSI,包括 PAT(节目关联表) ,CAT(条件访问表 ),PMT(节目映射表),NIT(网络信息表),这些 PSI 包含了进行

7、多路解调和显示节目的必要的和足够的信息 .PSI的 PID 是特定的,含 PSI 的数据包必须周期性的出现在传输流中。PMT (Program Map Table )节目映射表 PMT 所在分组的 PID 由 PAT 指定,所以要先解出 PAT,再解 PMT。PMT 中包含了属于同一节目的视频、音频和数据原始流的 PID。找到了 PMT,解多路复用器就可找到一道节目对应的每个原始流的 PID,再根据原始流PID,去获取原始流。PAT (Program Association Table )节目关联表 PAT 所在分组的 PID=0 PAT 中列出了传输流中存在的节目流 PAT 指定了传输流中每

8、个节目对应 PMT 所在分组的 PIDPAT 的第一条数据指定了 NIT 所在分组的 PID ,新濠天地娱乐场 66bb.org 其他数据指定了 PMT所在分组的 PID,一个节目包含多少个节目就含有多少 PMT。CAT (Conditional Access Table )条件访问表 CAT 所在分组的 PID=1CAT 中列出了条件控制信息(ECM)和条件管理信息(EMM) 所在分组的 PID。CAT 用于节目的加密和解密 NIT( Network Information Table)网络信息表NIT 所在分组的 PID 由 PAT 指定 NIT 提供一组传输流的相关信息,以及于网络自身特

9、性相关的信息,比如网络名称,传输参数(如频率, 调制方式等) 。NIT 一般是解码器内部使用的数据,当然也可以做为 EPG 的一个显示数据提供给用户做为参考。几种 PSI 之间的关系,如下图所示:首先 PAT 中指定了传输流中所存在的节目,及每个节目对应的 PMT 的 PID 号。 比如 Program 1 对应的 PMT 的 PID=22,然后找到PID=22 的 TS 分组,解出 PMT,得到这个节目中包含的原始流的 PID,再根据原始流的PID 去找相应的 TS 分组,获取原始流的数据,然后就可以送入解码器解码了。PSI 由四张表构成:PAT,PMT,CAT 和 NIT,这四张表分别描述

10、了一个 TS 所包括的所有 ES 流的传输结构。首先的一个概念是,TS 是以包形式传播,在编解码端都需要以一定的包 ID 来标识 TS 流里承载的内容,比如,PAT 表会存在于一个或多个 TS 包里,所以要用一个特别的包 ID 来表示,另外,不同的 ES 流也需要不同的包 ID 来标识。我们有了PAT 和 PMT 这两种表,解码器就可以根据 PID,将 TS 上从不同 ES 来的 TS 包区分出来进行解码。TS 的解码分两步进行,其一,是从 PID 为 0 的 TS 包里,解析出 PAT 表,然后从 PAT表里找到各个节目源的 PID,一般此类节目源都由若干个 ES 流组成,并描述在 PMT

11、表里面,然后通过节目源的 PID,就可以在 PMT 表里检索到各个 ES 的 PID。其二,解码器根据 PMT 表里的 ES 流的 PID,将 TS 流上的包进行区分,并按不同的 ES 流进行解码。所以,TS 是经过节目复用和传输复用两层完成的,即在节目复用时,加入了 PMT,在传输复用时,加入了 PAT。同样在节目解复用时,可以得到 PMT,在传输解复用时,可以得到 PAT。4.PAT 表数据结构 数据结构 PAT Table/PAT Tableprogram_association_section() table_id : 8; /固定为 0x00 ,标志是该表是 PATsection_s

12、yntax_indicator : 1; /段语法标志位,固定为 1 0 : 1; /0reserved : 2; /保留section_length : 12; /表示这个字节后面有用的字节数,包括CRC32。假如后面的字节加上前面的字节数少于 188,后面会用 0XFF 填充。假如这个数值比较大,则 PAT 会分成几部分来传输。transport_stream_id : 16 /该传输流的 ID,区别于一个网络中其它多路复用的流。reserved : 2 /保留version_number : 5 /范围 0-31 表示 PAT 的版本号,标注当前节目的版本这是个非常有用的参数,当检测到这

13、个字段改变时,说明 TS 流中的节目已经变化了,程序必须重新搜索节目current_next_indicator : 1 /表示发送的 PAT 是当前有效还是下一个PAT 有效。section_number : 8 /分段的号码。 PAT 可能分为多段传输,第一段为 00,以后每个分段加 1,最多可能有 256 个分段last_section_number : 8 /最后一个分段的号码 for (i=0; i program;unsigned reserved_3 : 3; / 保留位unsigned network_PID : 13; /网络信息表(NIT)的 PID,节目号为 0 时对应的 PID 为 network_PIDunsigned CRC_32 : 32; /CRC32 校验码 TS_PAT; HRESULT CTS_Stream_Parse:adjust_PAT_table( TS_PAT * packet, unsigned char * buffer)packet-table_id = buffer0;packet-section_syntax_indicator

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号