H264 ES PS TS流之间的联系
ES流(Elementary Stream)
: 也叫基本码流,包含视频、音频或数据的连续码流.
PES流(Packet Elementary Stream)
: 也叫打包的基本码流, 是将基本的码流ES流根据需要分成长度不等的数据包, 并加上包头就形成了打包的基本码流PES流.
TS流(Transport Stream)
: 也叫传输流, 是由固定长度为188字节
的包组成, 含有独立时基的一个或多个program, 一个program又可以包含多个视频、音频、和文字信息的ES流;
基本概念
ES
ES是只包含一种内容的数据流
,如只含视频
或只含音频
等,打包之后的PES也是只含一种性质的ES,如只含视频ES的PES,只含音频ES的PES等。每个ES都由若干个存取单元(AU)
组成,每个视频AU或音频AU都是由头部和编码数据
两部分组成,个AU相当于编码的1幅视频图像或1个音频帧
,也可以说,每个AU实际上是编码数据流的显示单元,即相当于解码的1幅视频图像或1个音频帧的取样。
PES
PES–Packetized Elementary Streams (分组的ES),ES形成的分组称为PES分组
,是用来传递ES的一种数据结构
。PES流是ES流经过PES打包器处理后形成的数据流,在这个过程中完成了将ES流分组、打包、加入包头信息等操作(对ES流的第一次打包)。PES流的基本单位是PES包。PES包由包头和payload
组成。
PS
PS–Program Stream(节目流)PS流由PS包组成,而一个PS包又由若干个PES包组成(到这里,ES经过了两层的封装)。PS包的包头中包含了同步信息
与时钟恢复信息
。一个PS包最多可包含具有同一时钟基准
的16个视频PES包和32个音频PES包。
TS
TS–Transport Stream(传输流)由定长的TS包组成(188字节),而TS包是对PES包的一个重新封装(到这里,ES也经过了两层的封装)。PES包的包头信息依然存在于TS包中
。
PS和TS区别:
TS流与PS流的区别在于TS流的包结构是固定长度的
,而PS流的包结构是可变长度的
。PS包由于长度是变化的,一旦丢失某一PS包的同步信息,接收机就会进入失步状态,从而导致严重的信息丢失事件。而TS码流由于采用了固定长度的包结构,当传输误码破坏了某一TS包的同步信息时,接收机可在固定的位置检测它后面包中的同步信息,从而恢复同步,避免了信息丢失。因此在信道环境较为恶劣、传输误码较高时一般采用TS码流
,而在信环境较好、传输误码较低时一般采用PS码流
。
PTS、DTS
PTS–PresentationTime Stamp(显示时间标记)表示显示单元出现在系统目标解码器(H.264、MJPEG等)的时间。
DTS–Decoding Time Stamp(解码时间标记)表示将存取单元全部字节从解码缓存器移走的时间。
PTS/DTS是打在PES包
的包头里面的,这两个参数是解决音视频同步显示,防止解码器输入缓存上溢或下溢的关键。每一个I(关键帧)、P(预测帧)、B(双向预测 帧)帧的包头都有一个PTS和DTS,但PTS与DTS对于B帧不一样,无需标出B帧的DTS,对于I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,所以一定要分别标明PTS和DTS。