PS流格式

概念:

将具有共同时间基准的一个或多个PES组合(复合)而成的单一的数据流称为节目流(Program Stream)。

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

构成:

PS包由包头、系统头、PES包3部分构成。包头由PS包起始码系统时钟基准(SCR-System Clock Reference)的基本部分SCR的扩展部分PS复用速率4部分组成。

 

维基百科对应的图表(包头、系统头):

 

字节顺序,如下所示:

 

4B的包起始码:

 


byte 0


byte 1


byte 2


byte 3


7


6


5


4


3


2


1


0


7


6


5


4


3


2


1


0


7


6


5


4


3


2


1


0


7


6


5


4


3


2


1


0


0000 0000 0000 0000 0000 0001
start code


1011 1010
PACK identifier

PACK identifier -- 0xBA

 

系统时钟基准(SCR-System Clock Reference)的基本部分SCR的扩展部分


byte 4


byte 5


byte 6


byte 7


byte 8


byte 9


7


6


5


4


3


2


1


0


7


6


5


4


3


2


1


0


7


6


5


4


3


2


1


0


7


6


5


4


3


2


1


0


7


6


5


4


3


2


1


0


7


6


5


4


3


2


1


0


01


SCR 32..30


1


SCR 29..15


1


SCR 14..00


1


SCR_ext


1

 

PS复用速率:


byte 10


byte 11


byte 12


byte 13


7


6


5


4


3


2


1


0


7


6


5


4


3


2


1


0


7


6


5


4


3


2


1


0


7


6


5


4


3


2


1


0


Program_Mux_Rate


1


1


reserved


pack_stuffing_length

 

  • SCR and SCR_ext together are the System Clock Reference, a counter driven at 27MHz, used as a reference to synchronize streams. The clock is divided by 除以300 (to match the 90KHz clocks such as PTS/DTS), the quotient 商 is SCR (33 bits), the remainder 余数 is SCR_ext (9 bits)
  • Program_Mux_Rate -- This is a 22 bit integer specifying the rate at which the program stream target decoder receives the Program Stream during the pack in which it is included. The value of program_mux_rate is measured in units of 50 bytes/second. The value 0 is forbidden.
  • pack_stuffing_length -- A 3 bit integer specifying the number of stuffing bytes which follow this field.
  • stuffing byte -- This is a fixed 8-bit value equal to '1111 1111' that can be inserted by the encoder, for example to meet the requirements of the channel. It is discarded by the decoder.

 

两个头之后便是PES包(payload):

参考一段代码理解:http://read.pudn.com/downloads104/sourcecode/multimedia/mpeg/427188/PESdecode/pesdecode.cpp__.htm

可以看到PTS/DTS(流识别码,用于区别不同性质ES)是打在PES包里面的,这两个参数是解决视音频同步显示,防止解码器输入缓存上溢或下溢的关键。PTS表示显示单元出现在系统目标解码器(STD: system target decoder)的时间,DTS表示将存取单元全部字节从STD的ES解码缓存器移走的时刻。每个I、P、B帧的包头都有一个PTS和DTS,但PTS与DTS对B帧都是一样的,无须标出B帧的DTS。对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTS和DTS。

关于音视频的同步:

除了PTS和DTS的配合工作外,还有一个重要的参数是SCR(system clock reference)。在编码的时候,PTS,DTS和SCR都是由STC(system time clock)生成的,在解码时,STC会再生,并通过锁相环路(PLL-phase lock loop),用本地SCR相位与输入的瞬时SCR相位锁相比较,以确定解码过程是否同步,若不同步,则用这个瞬时SCR调整27MHz的本地时钟频率。最后,PTS,DTS和SCR一起配合,解决视音频同步播放的问题。

时间: 2024-09-21 00:45:40

PS流格式的相关文章

RTP协议全解析(H264码流和PS流)

写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个比较全面的解析, 其中借鉴了很多文章,我都列在了文章最后,在此表示感谢. 互联网的发展离不开大家的无私奉献,我决定从我做起,希望大家支持.   原创不易,转载请附上链接,谢谢http://blog.csdn.net/chen495810242/article/details/39207305 1.RTP Header解析                                                   

细说PS矢量格式的详解

假设我们写了一首新的乐曲,要把它交给唱片公司,可以通过两种方式: 把这首乐曲弹奏出来并录制在磁带上. 把这首乐曲的乐谱写下来.这两种方式的最大区别在于记录的形式.前者是记述性的.包含乐曲的音频信息.其中的所有信息都是固定的,如演奏速度. 乐器音色等.如果你想把笛子换成排箫,那就要重新录制一遍.后者是描述性的,不包含音频信息,只包含对乐曲音律的描述.如果要改变演奏速度或乐器音色,只 要在乐谱中修改一下就好.点阵图像就属于记述性,以点为记录的对象.而矢量图像属于描述性,以线段和计算公式作为记录的对象

视音频编解码基本术语及解释

         整理了一些基本视音频术语,用于入门和查询使用. H264: H264是视频的标准,是MPEG4-10,基于内容的高效编码方式. H.264/MPEG-4第10部分,或称AVC(AdvancedVideo Coding,高级视频编码),是一种视频压缩标准,一种被广泛使用的高精度视频的录制.压缩和发布格式.第一版标准的最终草案于2003年5月完成. H.264/MPEG-4 AVC是一种面向块的基于运动补偿的编解码器标准.由ITU-T视频编码专家组与ISO/IEC联合工作组--即动

关于对H264码流的PS的封装的相关代码实现

1.写在开始之前:            最近因为新工作要维护别人留下的GB模块代码,先熟悉了流程,然后也试着封装了下ps流,结果也能通过测试正常预览了,当然,其中开发读文档的头疼,预览花屏,卡帧的事情都有遇到,当时慢慢的看文档,整理逻辑,也就都顺利解决了,下面把大致的一些流程代码贴出来分享下.既然是对接国标,自然少不了通读它的标准文档和相关的RFC文档了!具体的我就不说了,可以用百度google下的. 注意:因为是GB要求ps封装后再加上rtp头的格式来的, 所以下面代码中我也加上了rtp头,

<摘录>TS,PS,PES包格式

PES是打包过的ES,已经插入PTS和DTS,一般是一个pes包为一帧图像 PES包格式: PES再打包成TS流或PS流,往往一个PES会分存到多个ts包中, start_code: 0x00 00 01 stream_id:  pes包头长:  信息区:包含附加信息以及PTS和DTS PS流: 每一个pes header包含pts和dts,在解码时,pes-->es,音视频的同步,除了使用pts和dts以外,还会用到SCR(system clock reference),在编码时,都是由STC

【H.264/AVC视频编解码技术详解】五. H.264的码流封装格式

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 本节视频免费 H.264的语法元素进行编码后,生成的输出数据都封装为NAL Un

音视频封装格式和编码格式

音视频封装格式.编码格式知识        常见的AVI.RMVB.MKV.ASF.WMV.MP4.3GP.FLV等文件其实只能算是一种封装标准. 一个完整的视频文件是由音频和视频2部分组成的.H264.Xvid等就是视频编码格式,MP3.AAC等就是音频编码格式. 例如:将一个Xvid视频编码文件和一个MP3音频编码文件按AVI封装标准封装以后,就得到一个AVI后缀的视频文件,这个就是我们常见的AVI视频文件了.        由于很多种视频编码文件.音频编码文件都符合AVI封装要求,则意味着

H264码流打包分析(精华)

H264码流打包分析 SODB 数据比特串-->最原始的编码数据 RBSP 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit"1")若干比特"0",以便字节对齐. EBSP 扩展字节序列载荷-- >在RBSP基础上填加了仿校验字节(0X03)它的原因是: 在NALU加到Annexb上时,需要填加每组NALU之前的开始码 StartCodePrefix,如果该NALU对应的slice为一帧的开始则

Java编程那些事儿90——装饰流使用1

11.3.3 装饰流使用 除了按照流的方向可以把流划分为输入流和输出流两类,按照流读写数据的基本单位把流划分为字节流和字符流两类以外,还可以按照流是否直接连接实际数据源,例如文件.网络.字节数组等,将流又可以划分为实体流和装饰流两大类. 其中实体流指直接连接数据源的流类,如前面介绍的FileInputStream/FileOutputStream和FileReader和FileWriter,该类流直接实现将数据源转换为流对象,在实体流类中实现了流和数据源之间的转换,实体流类均可单独进行使用. 而