1.  TS->PES->ES(H264)。

2. 下面是一段携带PAT的TS的数据

47 40 00 30    A6 00

FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00(从第一个FF到这里是A6个)

00 B0 0D E5 18 EF 00 00 00 01 E0 42 9D C9 35 9E

2.1 TS数据固定长度188个字节,不足188个字节,添加调整字段 0XFF补充。

2.2 TS头部为前4个字节,上面的为(47 40 00 30)

01000111  0          1         0000000000000000110000

2.2.1  同步字节(sync byte): 1B,其值固定为0x47,该字段是MPEG-2 TS传送包标识符;

2.2.2  传输误差指示符(transport error indicator): 1bit,其值为1时,表示在相关的传送包中至少  有一个不可纠正的错误位,只有在错误纠正之后,该位才能被重新置0;

2.2.3  有效载荷单元起始符(payload unit start indicator): 1bit, 当TS包带有PES包数据时,置为1,表示TS包的有效净荷以PES包的第一个字节开始;置为0,表示该TS包的开始不是PES包;当TS带有PSI数据时,置为1,表示TS包带有PSI部分的第一个字节,即第一个字节带有指针       pointer_field;置为0,表示TS包不带有一个PSI部分的第一个字节,即有效净荷中没有指针 pointer_field。空包时,该位置为0;

2.2.4  传输优先级(transport_prority): 1bit, 置为1,表示相关的包比其他具有相同PID,但是此字段 置0的包有更高的优先级;

2.2.5 PID: 13bit, 表示传送包的有效净荷中的数据的类型

0x0000   节目关联表(program association table, PAT)

上面的数据为PAT数据,通过PAT 可以找到PMT

0x0001   条件访问表(conditional access table, CAT)

0x0002    传送流描述表(transport stream description table, TSDT)

0x0003~0x000F  保留

0x0010~0x1FFE      可以分配为network PID, Program map PID,  elementary PID, 或其它

0x1FFF     空包(8191)

2.2.6  传输加扰控制(transport scrambling control): 2bit,该字段用来指示传送流包有效净荷的加扰方式;

2.2.7  自适应字段控制(adaption field control): 2bit,表示传送流包首部是否跟随有调整字段和/或有效净荷。

00      保留

01      没有调整字段,仅含有184B长度的有效净荷

10      没有有效净荷,仅含有183B长度的调整字段0XFF

11     0~182B的调整字段0XFF 后为有效净荷

如上面的为11,所以先填充0XFF,后面是有效数据

2.2.8   连续计数器(continuity counter): 4bit,随着具有相同PID TS包的增加而增加,达到最大则恢复为0。

2.3TS头部信息以后为自适应字段,前两个字节包含重要信息,其意义如下图

2.3.1  自适应字段长度  1B,表示后续TS数据的长度,不包含PES。

如上面的为(A6),所以一直到FF 00 都为调成的调整字段

00 B0 0D E5 18 EF 00 00 00 01 E0 42 9D C9 35 9E 为有效数据,因为我们已经从PID得知该TS数据为PAT数据,所以该有效数据按照PAT解析。

解析得到 program_number=1,program_map_PID=0x42

3. 下面是一段携带PMT的TS的数据

47 40 42 30                                                                                      A1    00

01000111   0    1     0    0000001000010    00    11     0000                161

PID  0000001000010   0X42 从PAT中得知该PID为PMT数据

adaption field control   11   先填充0XFF,后面是有效数据

FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00(共161个)

02 B0 12 00 01 D7 00 00 E0 44 F0 00 1B E0 44 F0 00 F1 67 5E F2(这些为PMT数据)

解析PMT数据,得到stream_type=27(264数据),elementary_PID=0X44

4.下面是一段携带PES的数据

47 40 44 30                                                                                    07

01000111   0   1   0    0000001000100    00    11   0000

PID  0000001000100   0X44 从PMT中得知该PID为视频数据              7个TS填充数据,剩下的为PES

10 18 3D 40 51 7E 00

00 00 01PES包起始前缀,占3B;

E0224    stream_id,流ID,占1B;

FF E9PES_packet_length  PES包长度,也就是一帧数据的总长度;

80

C0

0A10: PES_header_data_length

31 C1 ED 1A 69PTS

11 C1 ED 1A 69DTS

00 00 00 01 09 E0 00 00 00 01 67 42 40 20 F4 03 C0 11 3F 2C 20 00 00 03 00 20 00 00 06 50 80 00 00 00 01 68 CE 06 F2 00 00 00 01 65 88 84 0F C4 18 44 20 C1 B3 0F 00 24 ED A6 37 00 01 03 D1 E4 42 C8 A5 93 A0 A3 47 7F 2E CB 41 69 6F 76 4D AB AB 8A 48 70 0F 9F 88 2D 68 5A 91 51 69 48 7B 7F 95 05 FA 71 81 A8 02 00 01 00 55 0A FD 89 61 92 2C 8B 3F FD E0 2C 04 07 80 A8 A2 E3 B2 26 C2 9F 0E 0C 30 00 10 01 50 05 A6 4D C0 04 0C 00 E4 EB 00 70 4D C2 00 00 A8 05 05 CB 20 46 7B

5.下面是一段只携带264数据的TS数据

47 00 44 11

01000111   0 0 0 0000001000100    00   01   0001

adaption field control   01  出来TS头4个字节,后面的都是数据

9C 45  22 2C 07 0C 62 94 B1 22 7F B6 41 7F B2 E9 E9 64 39 A9 FF E5 D1 C9 C0 10 CA 14 F6 E2 10 58 1C 17 AA CC 3B 24 0F 79 9E 2C 47 11 B0 34 1B 65 A6 7E B7 25 2B FB 92 BB 6F 06 AB 57 62 96 C7 0D 6C BC CE 59 AB E4 B3 D1 83 DA 8C 87 10 01 C0 08 0F C1 FD 42 E8 12 6B B2 EA 65 4C 78 00 02 00 20 41 7E E2 18 28 4E FA 1E B3 0C 49 25 9B 97 09 D2 89 F8 34 FE 81 FA 69 E8 C6 37 F3 EA F9 7E 22 11 1B 34 01 81 99 66 5A CC 68 87 FE A7 81 8D 8F 19 3F 20 96 57 A2 02 C5 27 F6 F4 4F 83 10 AB CF C2 70 F1 7F 30 78 99 74 58 27 FE 89 A2 91 83 89 95 05 AA DF 7C 04 81 8C 25

java 解析 ts_解析TS - xxdd的个人空间 - OSCHINA - 中文开源技术交流社区相关推荐

  1. mysql+优化器+软解析_MySQL执行计划 - osc_93u9qofu的个人空间 - OSCHINA - 中文开源技术交流社区...

    执行计划,SQL语句过来,会先解析,词法解析,语法解析,之后生成执行计划,计划上会算出使用全盘扫秒还是依靠索引, mysql不缓冲执行计划,oracle有 体系结构 1.优化器--->执行计划 ...

  2. java空格转义_java转义字符 - simpower的个人空间 - OSCHINA - 中文开源技术交流社区...

    1. 注意regex的写法 String   newName=name.replaceFirst("d:\\\\racke\\\\","http://192.168.0. ...

  3. java kml_当Java遇上KML - sheva.wen的个人空间 - OSCHINA - 中文开源技术交流社区

    最近有个需求,java读取kml,想到的方案大概有两个.一.按一般xml解析,二.用GIS相关的java库解析.由于KML格式具有一定的复杂性,懒人放弃按xml解析,转而考虑用java的GIS库,首先 ...

  4. java -p_javap命令详解 - JackieYeah的个人空间 - OSCHINA - 中文开源技术交流社区

    一.用法 javap [ 选项 ] classes 二.描述 javap命令反汇编一个或多个类文件.它的输出由使用的选项决定.如果没有使用选项,javap命令将打印输出传递给它的类的包, protec ...

  5. java中的v递归的思想,Java中的递归思想 - osc_9lqilnv7的个人空间 - OSCHINA - 中文开源技术交流社区...

    递归: 递归的概念:方法自身调用自身则称为递归. 递归的分类: 间接递归:方法A调用方法B,方法B调用方法C,方法C调用方法A. 直接递归: 方法A调用方法A.(常用) 递归的注意事项: 递归一定要出 ...

  6. java虚拟机jvm_java虚拟机jvm - zhuyuansj的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java内存结构和java内存模型的区别.往往很多人会搞起来.这里主要对这2种进行解释并进行操作.经实践会JVM调优和不会JVM调优差别确实很大,足足可以提升服务器一倍的性能. java内存结构:所谓 ...

  7. java hashmap 去重_HashMap去重 - osc_sj1kgo4z的个人空间 - OSCHINA - 中文开源技术交流社区...

    package util; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import ...

  8. java桌球教程视频,Java桌球小游戏1 - osc_wov79fj7的个人空间 - OSCHINA - 中文开源技术交流社区...

    版本三.使小球动起来 package cn.xjion.game; /** * 水平滚动 * @author xjion * */ import java.awt.*; import javax.sw ...

  9. java kcp,重新认识KCP - osc_rreaoxa0的个人空间 - OSCHINA - 中文开源技术交流社区

    什么是KCP KCP是一种网络传输协议(A Fast and Reliable ARQ Protocol),可以视它为TCP的代替品,但是它运行于用户空间,它不管底层的发送与接收,只是个纯算法实现可靠 ...

  10. 永真命题java怎么表达,147.命题逻辑 - osc_pll3h24t的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.语句 1.1命题 一个或真或假,而不能两者都是的陈述句. 说明: 1)命题是陈述句,而不能是疑问句.命令句.感叹句等: 例如(1)把门关上! (2)你到哪里去? 2)如果命题为真,我们就说它的真值 ...

最新文章

  1. 不妨对苹果保持一点宽容
  2. python 数组在最前面插入数据_Python 按照现有规则将数值插入到数组中
  3. mysql workbench创建数据库的时候PK,NN等的含义
  4. 学习web前端要了解的HTML5知识有哪些?
  5. c lambda表达式 select 改变字段名称_C博客作业01--分支、顺序结构 - 吖黑大帅
  6. Mybatis 参考
  7. 主成分分析与因子分析
  8. 用python处理mp4与gif格式互转,简单到爆!
  9. Qt教程(新手入门级)
  10. 苹果公司的电脑产品及其历史
  11. C++ Primer 笔记——IO类
  12. js延迟(异步)加载的6种方式 为什么要延迟加载js呢?
  13. 联想m920t装红旗linux中SPik,联想ThinkCentre M920t台式机装win10系统及bios设置(uefi+gpt)...
  14. flex:1 的含义 以及属性值1的含义
  15. python产品质量分析_产品评论 使用Python分析Amazon Smart产品评论
  16. 智能合约 与 外部账号之间转账,智能合约与智能合约之间转账
  17. tanner2019安装教程
  18. android studio安装成功界面,Android studio安装与配置
  19. 计算机网络第二章--物理层
  20. 1、RunLoop应用简介

热门文章

  1. 安排,Java智慧农业物联网项目视频2020
  2. 2022年3月显示器主观科普与配置选型
  3. 毕业季音乐计算机简谱,毕业季简谱(歌词)-贺敬轩演唱-桃李醉春风记谱
  4. 深入了解示波器(五):实时采样与等效时间采样
  5. 第一次使用GeoLite2-City.mmdb的经历---通过ip地址获取经纬度以及该ip地址所属地区
  6. Android——Binder机制
  7. 好家伙!MIT博士生凭借「扭动奥利奥饼干」发了篇论文!
  8. 浅析企业供应链管理和供应链战略
  9. 继谷歌之后 雅虎退出中国音乐市场
  10. winform 窗口伸缩 panel控件太多闪烁问题