TS流的结构

TS流由很多个TS包组成,而每个TS包的结构包括:4B的包头,可变长的调整字段,有效净荷(payload)。现在分别说一下这三部分的结构和作用。

  1. 包头

    包头最小为4字节,这四字节分为8个部分分别为:8bit的同步字节,1bit的传送数据包差错指示,1bit的净荷单元起始指示,1bit的传送优先级,13bit的PID,2bit的传送干扰控制,2bit的适应域控制,4bit的连续计数器。这8个部分具体的作用是:

    同步字节:Sync byte,8位。这是包的标识符,值是固定的为0X47。它的作用就是用来判断是否为一个包。

    传输数据包差错指示:transport_error_indicator, 1位。因为只有一位所以只可能有两种情况0和1。为1时表示传送包中有错误的位。当为0时表示传送包中没有错误或者错误已经被纠正。

    净荷单元开始指示:payload_unit_start_indicator, 1位。也只有两种情况,这个字段用来表示TS包的有效净荷带有PES包或PSI的情况。

    当TS包中的净荷为PES包数据时:该位为1时,表示该TS包的有效净荷PES包的第一个字节开始;为0时,表示TS包的开始不是PES包。

    当TS包中的净荷为PSI数据时:该位为1时,表示TS包中带有PSI中的第一个字节,为0时,表示不到有PSI部分的第一个字节。

    如果这个包是空包,该位为0.

    传输优先级:transport_priority,1位。为1时表示该包的优先级比相关具有相同PID的包的优先级要高。

    PID:这个有13位,用来判断有效净荷中的数据类型。其中可能的数据类型为PSI/SI表或者音视频数据即PES包。PSI/SI表中有一些表的PID是固定不变的,其中PAT(节目关联表)的PID为0X0000,CAT(条件访问表)的PID为0X0001.

    0X0003-0X000F为保留。NIT(网络信息表)的PID为0X0010.还有一些PID为SI中的表,音视频PES包,PMT(节目映射表)等。最后空包的PID为0X1FFF即8191为固定的。

    传输干扰控制:transport_scrambling_control, 2位。作用是用来表示传送流包有效净荷的加扰方式。

    适应域控制:adaptation_field_control. 2位。作用是用来指示传输流首部是否跟随有调整字段或有效净荷。为00时表示保留;为01时表示没有调整字段,有效净荷长度为184B;为10时表示没有有效净荷,仅仅含有183B长度的调整字段;为11时表示有调整字段和有效净荷。

    连续计数器:continuity_counter, 4位。它随着PID相同的TS包的增加而增加。但是当适应域控制位为“00”或者“10”时,连续计数器是不增加的。

  2. 可变长的调整字段

    调整字段包括对较高层次的解码功能有用的相关信息,组成为8bit的调整字段长度,1bit不连续指示器,1bit随机存取指示器,PCR标识符,基本优先级指示器,拼接点标识符,传送专用数据标识,调整字段扩展标识和相应标识符。

  3. 有效净荷

    在有效净荷中包括两类的信息:已经被压缩的音视频信息和与之相关的符号化表。这些符号化的表有PSI(节目专用信息表)和SI(业务信息表),这些表以分段的形式传送。

    PSI包括PAT(节目关联表),PMT(节目映射表),CAT(条件访问表),NIT(网络信息表)。但是NIT是可选的。

    先说说PAT表:

    找PAT表:每一个TS流只有一个一个PAT表,要查找节目信息必须从PAT表开始,然而要找到PAT表必须先提取出TS包头的PID,看看PID是否为0X0000,应为PAT表的PID固定为0X0000。

    PAT表中的信息:PAT中储存的是节目号和对应节目的PMT表的PID。其中如果节目号为0,则对应的PID为NIT表的PID。

    PAT表的语法结构:

    PAT表可以分为很多个段,其中每个段的语法结构是一样的,PAT表格的整体字头为固定的8B。

    PAT段的数据结构:

    Program_association_section()

    {

    Table_id          8

    Section_syntax_indicator  1

    ‘0’                  1

    Reserved            2

    Section_length         12

    Transport_stream_id     16

    Reserved              2

    Version_number         8

    Current_next_indicator    1

    Last_section_number     8

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

    {

    Program_number    16

    Reserved           3

    If(program_number== ‘0’)

    {

    Network_id     13

    }

    Else

    {

    Program_map_PID   13

    }

    }

    CRC_32                  32

    }

    Table_id : 8bit 这个是固定的为0X0. 它可以区分这个段是PAT段,CAT段还是PMT段。

    Section_syntax_indocator: 1bit 对于PAT置为0X1.

    Section_length: 12bit 这个字段指示分段的字节数,由当前字段到CRC。用这个可以计算出节目的个数。该字段的值不能超过1021.

    Transport_stream_id: 16bit 这个表示传输流的标识符。用来区别于其他的传输流。

    Version_number: 5bit PAT的版本号

    Current_next_indicator: 1 bit   为1时表示传送的PAT当前可以使用。为0时表示传送的表不能使用下一个表变为有效。

    Section_number: 1B 表示段号。

    Last_section_number: 1B  为最后一个段号,即段的数量。

    Program_number: 2B 表示节目号,如果为0则后面的PID为NIT的PID。

    Network_id :13bit NIT的PID。

    Program_map_PID: 13bit 对应节目的PID。

    CRC: 32bit 为校验码。

    PMT:

    PMT表包含了与单路节目复用有关的控制信息,PMT典型的构成包括一路视频打包的基本码流,多路音频码流和辅助数据。每一路的PES被分配了唯一的PID。PMT表格的整体字头为12B。数据结构与PAT表相似,但是table_id是不一样的固定为0X2,以区别于其他的表。其中PMT特有的字段有:

    Stream_type: 8bit 用来描述PES流的类型,类型有视频,音频,私有数据和私有段等。

    CAT:

    条件访问表提供了在一个或多个CA系统的授权管理信息或者访问控制信息,给出了有条件接受系统的信息及EMM的传送位置,音视频数据使用的加密方法信息,为加扰系统携带控制信息的PID条目。CAT的数据结构和其他的表区别不大,只是在CA_descriptor()上有区别。

    NIT:

    一个数字电视系统只对应两个NIT表,及当前网络表(Table_id为0X40)和其他网络表(table_id为0x41)。

    NIT表主要是提供有关物理网络的信息,每个网络都有唯一的识别符,网络信息主要携带网络识别符,网络名称,传输系统参数(频率,调制方式,FEC外码,符号率,FEC内码)。每个运营商都要注册唯一的一个network_id.NIT中特有的字段:

    Network_id: 16bit 充当一个标号,每一个运营商都有自己的network_id。

    Original_network_id: 16bit 用来标识原始传输系统的network_id。

    SI包括BAT(业务关联表),SDT(业务描述表),EIT(事件信息表),RST(运行状态表),TDT(时间日期表),TOT(时间偏移表),ST(填充表),SIT(选择信息表),DIT(间断信息表)。这里介绍BAT,SDT和EIT。

    BAT:

    BAT提供了所涉及的有关节目业务组的信息,包括节目业务组名称及节目业务组所包含的节目业务清单。BAT的PID固定为0X0011,table_id为0X4A。BAT数据结构中特有的字段:

    Bouquet_id: 16bit 它充当一个标号来标识业务组。

    EIT:

    EIT表用于传送与在特殊MPEG复用中出现或将要出现的所有节目段相关的信息。EIT表分为4类,由不同的table_id来区别。EIT表可以分为很多个段,但是每个段都必须由PID值为0x0012的TS包传送。EIT数据结构中特有的字段:

    Service_id: 16bit  作用是在一个TS内从任何其他业务中标识这个业务。与对应的PMT表中的program_id相同。

    Event_id: 16bit 包含了所描述的节目段的标号在一个业务内是唯一的。

    Start_time:  40 bit 包含了节目段的起始时间。

    Duration: 24bit 包含时分秒的信息,按4bitBCD码编码。

    Runing_status: 3bit 表示节目段的状态。

    Free_CA_mode: 1bit 置0时,表示节目段的所有的成分流没有加扰,为1时表示由一个CA系统控制访问一个或多个流。

    SDT:

    SDT表PID固定为0X0011,SDT提供了节目的节目业务组,节目业务的类型(PLA,NTSC,SECAM等),指向特定信息的链接信息,实现多画面的控制信息等。重要的是节目名称也包含在SDT中。描述现行TS的SDT表的任何段的table_id应为0x42,而且具有相同的transport_stream_id)以及相同original_network_id。指向一个现行TS之外的其他TS的SDT表的任何段的table_id应为0x46.

对TS流的一些理解TS流的结构相关推荐

  1. MPEG-2传输流的码流分析(PS与TS码流)

    0 引言 目前,我国数字电视的信道传输的三种主要传输方式都有了统一明确的国家标准.其主要差别是信道编码.调制方法,但视频和音频信源处理和系统层复用都是以MPEG-2为基础的编码方案.MPEG-2标准自 ...

  2. 将RTSP流保存为本地TS文件

    1.功能:将RTSP流保存为本地TS文件 2.存在问题: 保存mp4文件播放不了,还未解决-希望路过的大佬帮忙瞅瞅 _ 3.流程: 0)初始化:并注册所有的解封装器.封装器和协议,初始化网络库: 1) ...

  3. TS流讲解--什么是ts流

    一 从TS流开始 数字电视机顶盒接收到的是一段段的码流,我们称之为TS(Transport Stream,传输流),每个TS流都携带一些信息,如Video.Audio以及我们需要学习的PAT.PMT等 ...

  4. 理解HLS流及数字视频的基础知识

    HLS (HTTP Live Streaming) HLS是一种基于HTTP的流媒体协议. HLS的工作原理 HLS的工作原理是将流分解为一系列小数据包. 在流会话开始时,HLS下载一个扩展名为M3U ...

  5. java中字符流 字节流_理解Java中字符流与字节流的区别

    1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个"流动的方向",通常可 ...

  6. java 中的流_深入理解Java中的流(Stream)

    首先,流是什么? 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流"的方式进行.设备可以是文件,网络,内存等. 流具有方向性,至于是输入 ...

  7. 利用双向注意流进行机器理解

    利用双向注意流进行机器理解 本文基于Bi-Directional Attention Flow For Machine Comprehension一文 1. 概述 Machine Comprehens ...

  8. 【IPC】关于码流类型的理解

    [IPC]关于码流类型的理解 1.背景 2.疑虑 3.总结 3.资源 1.背景 对于IPC网络摄像机,可以设置的码流类型有主码流.子码流,可能还会有第三码流. 这些码流类型又有多种分辨率. 那么设置这 ...

  9. TS声明文件重点理解和使用技巧总结

    TypeScript 是 JavaScript 的超集,相比 JavaScript,其最关键的功能是静态类型检查 (Type Guard).然而 JavaScript 本身是没有静态类型检查功能的,T ...

最新文章

  1. Centos6.7安装docker1.7.1
  2. 嵩天python笔记_第一篇python笔记
  3. console java_Java Console writer()方法与示例
  4. Java Set基础知识
  5. 五、集合——3-Set集合
  6. 自治时代:Oracle 公有云离我们很近,自治数据库离我们还远
  7. jmeter 跳板机_Jmeter接口测试进阶
  8. android 电话 流程,android电话系统和ril分析(1)————概述和电话系统流程
  9. 【函数的定义、调用(嵌套调用、递归调用)、声明、函数的分类(有无返回值、有无参数)、变量(自动变量与静态变量、局部变量与全局变量、只读变量)】(学习笔记7--函数)
  10. VS2012下基于Glut glRotatef glTranslatef示例程序:
  11. 多x多y的origin图_孖记士多 X 阿婆牛杂!广州的两大本土老字号,搞在一起了!...
  12. springboot1.5.4 集成cxf完整实例
  13. 什么是P问题、NP问题和NPC问题
  14. YOLOv3的批量图片检测以及批量输出(windows下)
  15. Unity3D音频系统Aduio声音丨音乐控制丨音频播放丨音频暂停丨音频控制
  16. 类似三角形数的一般推导公式
  17. 数据结构与算法——深入理解哈希表
  18. Planet比Google earth更好用的地图下载神器Basemaps Viewer不用写代码全球高清影像框选下载tif格式
  19. Windows 2012 R2服务器的80端口被IIS占用的最好处理办法
  20. mysql支持emoji表情符

热门文章

  1. Android 距离传感器修复 修复打电话黑屏 无法快速唤醒屏幕的BUG
  2. H264(AVC)/H265(HEVC)/H266(VVC):GOP的区别
  3. 宠物店小程序开发线上预约
  4. 如何控制项目边界,与客户项目负责人结成同盟军
  5. PDF删除水印与添加水印方法介绍
  6. python: pc端QQ窗口发送多条消息
  7. 【转载】KaTeX 数学公式大全
  8. PyTorch二分类时BCELoss,CrossEntropyLoss,Sigmoid等的选择和使用
  9. html5手机触屏效果,html5手机触屏touch事件的详细介绍
  10. 计算机网络复习 ---- IP地址分类