PES包的PTS详解
来源:互联网 发布:数据魔方下线 编辑:程序博客网 时间:2024/05/16 11:19
PES包的PTS详解
之前做ts转flv用的是osmf框架,那个东东略复杂,和自己的代码结合后想调整某个地方有些困难,所以还是打算自己来解ts并进行封装。
其中的pts的获取上网查了下,结构图差点没看懂是怎么回事,后来终于搞懂了,浪费了很多时间,这里记录一下吧。
首先是这个图,我被这个图坑了,看了半天没看明白。
上面这个图其实不是很清楚,看了几次还是不知道怎么弄pts,后来在标准上看到了另外一个图,这个就清晰很多了。
其中有箭头指向的表示当前边的flags为1时,将会有后边深色的字段部分。
packet start code prefix:为0x000001;
stream id:
每个字段就不详解了,直接找我要的PTS吧。
先找到original or copy后边得"7 flags",得出是否有pts/dts的标志,标志为高两位,所以 标志= ("7 flags" & 0xc0 ) >> 6;
标志第一位是PTS标识,第二位是DTS标识。
标志:00,表示无PTS无DTS;
01,错误,不能只有DTS没有PTS;
10,有PTS;
11,有PTS和DTS.
接下来,跳过8字节的PES header data length;
虽然由第二个图可以知道PTS有33位,但是它不是直接的33位数据,而是占了5个字节,PTS分别在这5字节中取。
见过上边这个图的就应该比较清楚了,PTS的33位的各部分是如上图那样分布的,如果从左至右的绿色部分分别为PTS1,PTS2,PTS3的话,那么:
PTS = (PTS1 & 0x0e) << 29 + (PTS2 & 0xfffe) << 14 + (PTS3 & 0xfffe ) >> 1;
DTS(如果有)紧接着后边读取5个字节的数据,也是这样求出来的。
本文部分图片转自http://www.yunlipiao.com/208.html。
- PES包的PTS详解
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- pes时处理PTS和DTS的方法
- TS流的解码过程-ES-PES-DTS-PTS-PCR
- 补充一下PES的包结构
- 【转】 TS流的解码过程-ES-PES-DTS-PTS-PCR
- 关于Android Studio加载第三方jar包无法编译的问题解决。
- Android framework系统默认设置修改
- C语言的整型溢出问题
- IC/RFID/NFC 关系与区别
- 使用AOP与注解记录Java日志
- PES包的PTS详解
- 进制转换
- 开始开发 Dashboard Widget【翻译】目录
- 作业报告11 个人所得税计算器(利用模板的)
- 关于EL表达式中requestScope和param区别
- codeforces Round #274(div2) B解题报告
- [诗歌] 断章
- 为什么要使用SLF4J而不是Log4J
- [转] iOS应用程序生命周期(前后台切换、应用的各种状态)详解