from: http://blog.chinaunix.net/uid-9688646-id-1998407.html

TS 流解码过程:

1. 获取TS中的PAT

2. 获取TS中的PMT

3. 根据PMT可以知道当前网络中传输的视频(音频)类型(H264),相应的PID,PCR的PID等信息。

4. 设置demux 模块的视频Filter 为相应视频的PID和stream type等。

5.从视频Demux Filter 后得到的TS数据包中的payload 数据就是 one piece of PES,在TSheader中有一些关于此 payload属于哪个 PES的 第多少个数据包。因此软件中应该将此payload中的数据copy到PES的buffer中,用于拼接一个PES包。

6. 拼接好的PES包的包头会有 PTS,DTS信息,去掉PES的header就是 ES。

7. 直接将 被被拔掉 PES包头的ES包送给decoder就可以进行解码。解码出来的数据就是一帧一帧的视频数据,这些数据至少应当与PES中的PTS关联一下,以便进行视音频同步。

8. I,B,B,P 信息是在ES中的。

ES是直接从编码器出来的数据流,可以是编码过的视频数据流,音频数据流,或其他编码数据流的统称。ES流经过PES打包器之后,被转换成PES包。PES包由包头和payload组成.

在PES层,主要是在PES包头信息中加入PTS(显示时间标签)和DTS(解码时间标签)用于视频、音频同步。其实,Mpeg-2用于视音频同步以及系统时钟恢复的时间标签分别在ES,PES和TS这3个层次中。在ES层,与同步有关的主要是视频缓冲验证VBV(Video Buffer Verifier),用以防止解码器的缓冲器出现上溢或下溢;在PES层,主要是在PES头信息里出现的显示时间标签PTS(Presentation Time Stamp)和解码时间标签DTS(Decoding Time Stamp);在TS层中,TS头信息包含了节目时钟参考PCR(Program Clock Reference),用于恢复出与编码端一致的系统时序时钟STC(System Time Clock)。

基本流程如下:首先MPEG-2压缩编码得到的ES基本流,这个数据流很大,并且只是I,P,B的这些视频帧或音频取样信息,然后加入一些同步信息,打包成长度可变长度的数据包PES,原来是流的格式,现在成了数据包的分割形式。同时要注意的是,ES是只包含一种内容的数据流,如只含视频,或只含音频等,打包之后的PES也是只含一种性质的ES,如只含视频ES的PES,只含音频ES的PES等。可以知道,ES是编码视频数据流或音频数据流,每个ES都由若干个存取单元(AU)组成,每个视频AU或音频AU都是由头部和编码数据两部分组成,1个AU相当于编码的1幅视频图像或1个音频帧,也可以说,每个AU实际上是编码数据流的显示单元,即相当于解码的1幅视频图像或1个音频帧的取样。PEG-2对视频的压缩产生I帧、P帧、B帧。把帧顺序I1,P4,B2,B3,P7,B5,B6帧的编码ES,通过打包并在每个帧中插入 PTS/DTS标志,变成PES。在插入PTS/DTS标志时,由于在B帧PTS和DTS相等,所以无须在B帧多插入DTS。而对于I帧 和P帧,由于经过复用后数据包的顺序会发生变化,显示前一定要存储于视频解码器的从新排序缓存器中,经过从新排序后再显示,所以一定要同时插入PTS和 DTS作为从新排序的依据。

其中,有否PTS/DTS标志,是解决视音频同步显示、防止解码器输入缓存器上溢或下溢的关键所在。PTS表明显示单元出现在系统目标解码器(STD- System Target Decoder)的时间, DTS表明将存取单元全部字节从STD的ES解码缓存器移走的时刻。视频编码图像帧次序为 I1,P4,B2,B3,P7,B5,B6,I10,B8,B9的ES,加入PTS/DTS后,打包成一个个视频PES包。每个PES包都有一个包头,用于定义PES内的数据内容,提供定时资料。每个I、P、B帧的包头都有一个PTS和DTS,但PTS与DTS对B帧都是一样的,无须标出B帧的DTS。对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTS和DTS。例如,解码器输入的图像帧次序为I1,P4,B2,B3,P7,B5,B6,I10,B8,B9,依解码器输出的帧次序,应该P4比B2、B3在先,但显示时P4一定要比B2、B3在后,即P4要在提前插入数据流中的时间标志指引下,经过缓存器重新排序,以重建编码前视频帧次序I1,B2,B3,P4,B5,B6,P7,B8,B9,I10。显然,PTS/DTS标志表明对确定事件或确定信息解码的专用时标的存在,依靠专用时标解码器,可知道该确定事件或确定信息开始解码或显示的时刻。例如,PTS/DTS标志可用于确定编码、多路复用、解码、重建的时间。

PCR

PCR是TS里面的,即TS packet的header里面可能会有,他用来指定所期望的该ts packet到达decoder的时间,他的作用于SCR类似。

DTS, PTS

对于一个ES来说,比如视频,他又许多I,P,B帧,而P, B帧都是以I,P帧作为参考。由于B帧是前向后向参考,因此要对B帧作decode的话,就必须先decode该B帧后面的P,或者I帧,于是,decode的时间与帧的真正的present的时间就不一致了,按照DTS一次对各个帧进行decode,然后再按照PTS对各个帧进行展现。

有时候PES包头里面也会有DTS,PTS,对于PTS来说,他代表了这个PES包得payload里面的第一个完整地audio access unit或者video access unit的PTS时间(并不是每个audio/video access unit都带有PTS/DTS,因此,你可以在PES里面指定一个,作为开始)。

PES包头的DTS也是这个原理,只不过注意的是:对于video来说他的DTS和PTS是可以不一样的,因为B帧的存在使其顺序可以倒置。而对于audio来说,audio没有双向的预测,他的DTS和PTS可以看成是一个顺序的,因此可一直采用一个,即可只采用PTS。

TS流的解码过程-ES-PES-DTS-PTS-PCR相关推荐

  1. ES PS TS 流的区别

    参考: http://www.360doc.com/content/13/0829/15/13084517_310733557.shtml ES PES TS关系 参考:http://blog.csd ...

  2. 流媒体基础知识TS流 PS流 ES流区别

    IP数据报有首部和数据两部分组成的,首部的前一部分是固定长度20字节,是所有IP数据报必须具有的.首部包括:总长度.标识.MF.DF.片偏移. 数字信号实际传送的是数据流,一般数据流包括以下三种: ( ...

  3. MPEG TS流简介

    TS简介 MPEG-TS(Transport stream)即Mpeg传输流定义于ITU-T Rec. H.222.0和ISO 13818-1标准中,属于MPEG2的系统层.MPEG2-TS面向的传输 ...

  4. TS流解析【PCR】自己的总结

    http://www.cnblogs.com/ztteng/articles/3166025.html http://blog.csdn.net/liuhongxiangm/article/detai ...

  5. (原)关于MEPG-2中的TS流数据格式学习

    关于MEPG-2中的TS流数据格式学习 Author:lihaiping1603 原创:http://www.cnblogs.com/lihaiping/p/8572997.html 本文主要记录了, ...

  6. TS流格式小白入门解读

    一.背景介绍 之前我做了一个项目,要求写一个TS流解析的模块,因此看了ISOIEC 13818-1文档,外加很多人的博客来帮助理解,来了解TS流格式是个什么东西,收货颇多.因此我觉得是时候发点干货回馈 ...

  7. DVB中TS流数据解析

    引  言 数字生活方式是现代文明的一个重要标志.在与人们工作生活密切相关的电脑.手机和电视三大信息平台中,电脑和手机已实现了数字化和网络化,为人们带来了多姿多彩的资讯和娱乐服务,也为相关企业带来了巨额 ...

  8. H264和音频流打包成TS流 (MPEG2-TS)

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 原文:https://blog.csdn.net/hiwubihe/article/details/80865920 [本系列相关文章] H26 ...

  9. ES、PES、PS、TS流

    一.基本概念 1)ES ES--Elementary  Streams  (原始流)是直接从编码器出来的数据流,可以是编码过的视频数据流(H.264,MJPEG等),音频数据流(AAC),或其他编码数 ...

最新文章

  1. VMware VSphere 虚拟化云计算学习配置笔记(一)
  2. you have new email in /var/spool/mail/root/
  3. Gitlab VM安装过程
  4. 如何使用ZBrush和3DMAX雕刻一个百夫长?
  5. IDEA 删除Module
  6. 事务没提交的数据查的出来吗?_“金三银四”面试官:说说事务的ACID,什么是脏读、幻读?...
  7. 计算机基础及photoshop应用试题,全国计算机等级考试计算机基础及Photoshop应用试题答案(1)...
  8. CF1047E Region Separation
  9. Linux批量文件名大小写转换,Linux中批量把文件名大小写转换
  10. ChartControl动态添加曲线,X轴Label间隔显示
  11. 计算机硬盘 半导体存储器 相关概念
  12. 项目计划表格甘特图_甘特图VARCHART XGantt功能模块详细解析!
  13. C++定义复数类(Complex)
  14. BI工具进化图鉴,Qlik Sense和Qlik View有何区别?
  15. 微信图文美化编辑器试试构思编辑器
  16. 【企业安全实战】开源HIDS OSSEC部署与扩展使用
  17. 信息系统高级项目管理师英语词汇(一)-常见计算机技术词汇
  18. python自动输入密码_Python实现自动输密码
  19. 支付宝门店码,全面助力商家快速实现数字化经营
  20. 2023年的 苹果iPhone15/Pro 将有哪些变化

热门文章

  1. unity3d做会减少的血条_2019-2020年Unity3D——人物主角的血条-经验的显示.doc
  2. unity3d Update()和FixedUpdate()的区别
  3. 空间连接时计算总和_【数据技术】城市功能混合程度计算
  4. leetcode算法题--数组中两个数的最大异或值
  5. c语言对空指针memcpy,C语言memcpy 断错误
  6. java mqtt paho_使用eclipse paho在java端实现MQTT消息的收发(客户端与服务端实例)...
  7. 阿里一道Java并发面试题 (详细分析篇)
  8. php7下安装event扩展
  9. Linux实用快捷键
  10. 利用__index和__newindex实现默认值表、监控表、只读表(转)