http://blog.sina.com.cn/s/articlelist_1676428144_0_1.html
http://service.ivideostar.com/bbs/forum.php?mod=collection&action=view&ctid=11
http://blog.csdn.net/huangblog/article/details/8740571
http://blog.chinaunix.net/uid-27092216-id-4418554.html
http://www.360doc.com/content/10/0311/19/884768_18394152.shtml
http://www.360doc.com/content/10/0311/07/884768_18394217.shtml
http://www.360doc.com/content/10/0313/11/884768_18581761.shtml
一、基本概念
1)ES
ES--Elementary Streams (原始流)是直接从编码器出来的数据流,可以是编码过的视频数据流(H.264,MJPEG等),音频数据流(AAC),或其他编码数据流的统称。ES流经过PES打包器之后,被转换成PES包。
ES是只包含一种内容的数据流,如只含视频或只含音频等,打包之后的PES也是只含一种性质的ES,如只含视频ES的PES,只含音频ES的PES等。每个ES都由若干个存取单元(AU)组成,每个视频AU或音频AU都是由头部和编码数据两部分组成,1个AU相当于编码的1幅视频图像或1个音频帧,也可以说,每个AU实际上是编码数据流的显示单元,即相当于解码的1幅视频图像或1个音频帧的取样。
2)PES
PES--Packetized Elementary Streams (分组的ES),ES形成的分组称为PES分组,是用来传递ES的一种数据结构。PES流是ES流经过PES打包器处理后形成的数据流,在这个过程中完成了将ES流分组、打包、加入包头信息等操作(对ES流的第一次打包)。PES流的基本单位是PES包。PES包由包头和payload组成。
3)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。
4)PS
PS--Program Stream(节目流)PS流由PS包组成,而一个PS包又由若干个PES包组成(到这里,ES经过了两层的封装)。PS包的包头中包含了同步信息与时钟恢复信息。一个PS包最多可包含具有同一时钟基准的16个视频PES包和32个音频PES包。
5)TS
TS--Transport Stream(传输流)由定长的TS包组成(188字节),而TS包是对PES包的一个重新封装(到这里,ES也经过了两层的封装)。PES包的包头信息依然存在于TS包中。
TS流与PS流的区别在于TS流的包结构是固定长度的,而PS流的包结构是可变长度的。PS包由于长度是变化的,一旦丢失某一PS包的同步信息,接收机就会进入失步状态,从而导致严重的信息丢失事件。而TS码流由于采用了固定长度的包结构,当传输误码破坏了某一TS包的同步信息时,接收机可在固定的位置检测它后面包中的同步信息,从而恢复同步,避免了信息丢失。因此在信道环境较为恶劣、传输误码较高时一般采用TS码流,而在信环境较好、传输误码较低时一般采用PS码流。
6)TS单一码流、混合码流
单一性:TS流的基本组成单位是长度为188字节的TS包。
混合性: TS流由多种数据组合而成,一个TS包中的数据可以是视频数据,音频数据,填充数据,PSI/SI表格数据等(唯一的PID对应)。
二、基本流程
1)A/D转换后,通过MPEG-2压缩编码得到的ES基本流。这个数据流很大,并且只是I,P,B的这些视频帧或音频取样信息。
2)通过PES打包器,打包并在每个帧中插入 PTS/DTS标志,变成PES。原来是流的格式,现在成了数据包的分割形式。
3)PES根据需要打包成PS或TS包进行存储(DVD)或传输(DVB)。因每路音/视频只包含一路的编码数据流,所以每路PES也只包含相应的数据流。
附:
==========================================
http://blog.csdn.net/guofengpu/article/details/52035557
首先是Elementary Stream (简称 ES 流 ),
中文则译为『 基本流』 ;
在MPEG 2编码过程中,这是首先生成的、最初始的信号流,分视频ES流,以及音频ES流等。
然后,就需要将基本流 (ES 流)打包,生成”打包后的基本流“,
英文是 Packetized Elementary Stream , 简称 PES 流!
中文译为『打包后的基本流』,或称为『包化基本流』
最后: 根据MPEG-2 的规范, 可以在(下述)最终生成的2种格式数据流中选择其一!
一种是固定长度的,188个字节的,适用于恶劣传输环境的数据流,
Transport Stream ,简称 TS 流,
中文译为『传输流(或传送流)』!
数字电视广播时(卫星S、有线C、地面波T),基本上都是用TS流传送的,既使丢帧.
或者是从任意时段开始(播放),都能准确同步。
另一种是长度可变的,仅适用于交互式媒体,而不能用于恶劣环境的,叫
Program Stream , 简称 PS 流,
中文译为『节目流』 (或称 『程序流』)
标清的DVD影碟制作,会遇到PS流的。
PS 流的缺点,
是经不起断点、丢帧、丢包、误码等恶劣的传输环境,一旦有了干扰,就玩完!
素材-> 导入/模数转换-> 数字化、音视频非线性编辑-> 输出ES流-> 打包成PES流 -> 集成为 TS 流(或 PS流),
从而实现影视制作、发布/广播的流程。
最终是 TS流(或PS流) -> PES流 ->ES流 ,
将音视频ES流分别交付解码模块,从而实现 音视频的分别处理,完成音频和视频的解析、呈现、观赏的流程。
- 将视频ES流,通过显卡或视频终端设备显示出来;
- 将音频ES流, 通过声卡播放出来!
http://blog.sina.com.cn/s/articlelist_1676428144_0_1.html
http://service.ivideostar.com/bbs/forum.php?mod=collection&action=view&ctid=11
弄明白 几个流之间的联系了吗?
Yuran 给你一点点提示:
- 编码后,如果发现后缀名是MPEG 或 MPG 的、既有声音、同时也有视像的文件,应该是 PS 节目流(或称程序流)。
- 如果后缀名是 M2V 的,观赏时,只有视像,而没有声音的,那铁定的就是 ES 基本流。
另外注意: 以AVCHD为录制标准的高清摄像机,所存储的高清视频文件,其后缀名, 一般都是MTS 或M2TS 的。 想一想:是不是与 TS (传输)流,有点瓜葛呢?!
在蓝光影碟的规范中,TS (传输)流,是非常重要的。
一点小提示:
M2V、 WAV、AC3 等后缀名的音视频文件,属 ES流范畴。
M2P、MPG、MPEG 等后缀名的文件,属 PS 流。
MTS、M2TS、TS 等后缀名的文件,属TS流。
ES流素材的特点:
- 音频、视频各自独立,不能融合。
- 不适于观赏(有音频却没有视频,或有视频而没有音频)。
但凡高阶的影碟制作软件,都只接受ES流的素材。
PS流 :
许多非编爱好者,在制作影碟时,都爱用PS 流, 也就是
音视频合二为一的 MPG、MPEG、VOB等文件。
特点:
- 音频,视频,已经整合在一起。适于观赏。
- 不适于影碟的高阶制作。
- 不适于恶劣条件下的视频传输、节目广播等场合。
标清 DVD 影碟的主导架构,PS 流。
TS流:
广播级的专用规格。可以在恶劣的条件下,完成广播、传输的任务。
目前的三种数字电视广播的规范( TCS)
- Terrestrial (地面波);
- Cable(有线);
- Satellite (卫星);
所有的广电设备,绝大多数,都是基于 TS流的传输。
关于 MKV :
这只是打包、整合工具。
在 MKV的制作工具中,没有明确的限制。 ES 流、PS流、TS流等素材,都可以往里放。
再最终:进行打包、整合而已,这是个万能容器,有容乃大。
http://service.ivideostar.com/bbs/forum.php?mod=viewthread&tid=157&extra=page%3D1
最初 :非编的素材,都是由下列组成的。
- 由模拟视频转码而成的、音视频文件;
- 数码摄像机直接拍摄、采集的数字音视频文件。
- 网络上分享的影音资源。
- 影碟、CD光盘等中的影音素材。
Elementary Stream (简称 ES )基本流:
肯定是音视频分开渲染输出的,分为
- 视频的ES (基本)流;
- 音频的ES(基本)流。
MPEG-2 视频的ES流格式,有M2V;
音频的ES(基本)流的格式,可以是LPCM的WAV ,W64等格式, 有的也认可 AC3 ...
注意:
分离的、音视频ES (基本) 流素材,是给下一步、DVD影碟、或蓝光影碟制作时,整合/汇编 软件用的。
(因此,不作为一般的观赏用。你愿意看:“不带音频的”视频吗?!)
Program Stream (简称 PS) 节目流(或称程序流):
( 注意, PS 节目流,算是完整的、音视频合二为一的出品,可以作为一般的观赏用,比如:用计算机观赏。)
MPEG-2 的PS 节目流,后缀名一般都是 MPG、MPEG、M2P 等格式。
(M2P 中,那个字母 P 的意思,不就是暗指 PS 节目流嘛)。
仅适合于一般的影碟制作。注意:高阶的影碟制作软件,不会接受你的PS (节目)流的素材!
因为:
PS (节目)流算是比较完整的、集成打包后的视频文件了,再也无法实现多视角、多音轨等进阶影碟设计!
Transport Stream (简称 TS ) 传输流:
( 注意, TS 传输流,同样也算是完整的、音视频合二为一的出品,也可作为一般的观赏用,比如:用计算机观赏。)
MPEG-4/AVC/H.264 的TS 传输流,后缀名一般都是 M2TS 等格式。
(M2TS 中,TS 的意思,不就是暗指 TS 传输流嘛)。
仅适合于一般的影碟制作。
注意:高阶的影碟制作软件,不会接受你的TS (传输)流的素材!
因为: TS (传输)流算是比较完整的、集成打包后的视频文件了,再也无法实现 多视角、多音轨等进阶影碟设计!
http://service.ivideostar.com/bbs/thread-238-1-1.html
关于各类影碟所适用的、MPEG 类的编码规格, 目前有下述 三种:
- MPEG-1(仅适用于 VCD 影碟);
- MPEG-2 Part 2 亦称 H.262 (适用于 DVD 影碟 或 蓝光影碟 );
- MPEG-4 亦称 H.264 / AVC ( 仅适用于蓝光影碟 )。
如果,不是为了制作 实体盘(正式影碟的作品)。
仅制作PC用的视频文件( 放在U盘中),送给用户。然后,让他们用PC 播放器,去随意观赏。
则上述三者(MPEG1/2/4)均可。
甚至,还可以选用其它的、编码/封装形式 (RMVB、MKV 、AVI、MOV等)...
有的时候,我还故意做成 FLV/F4V的视频格式,便于亲友观看,甚至还能直接用于 网络上传、共享...
根据MPEG-2 的规范,严格地说,是这样的划分。
MPEG-2 Profiles (类别):
- SP(Simple profile);
- MP(Main profile);
- SNR(SNR Scalable profile);
- Spatial(Spatially Scalable profile);
- HP(High profile);
- 422(4:2:2 profile);
- MVP(Multi-view profile)。
我们接触较多的,是 MP (Main profile;译作 主类 )。
MPEG-2 Levels (级别) :
- LL (Low Level);
- ML (Main Level);
- H-14 (High 1440);
- HL (High Level );
我们接触较多的级别, 则是:
- ML (Main Level ,译作:主级);
- H14L(译作:1440 高级);
- HL (High Level ,译作:高级)。
、=====================
http://blog.chinaunix.net/uid-27092216-id-4418554.html
流格式
PES是打包过的ES,已经插入PTS和DTS,一般是一个pes包为一帧图像
PES包格式:
PES再打包成TS流或PS流,往往一个PES会分存到多个ts包中
每个ES都由若干个存取单元(AU)组成,每个视频AU或音频AU都是由头部和编码数据两部分组成,1个AU相当于编码的1幅视频图像或1个音频帧,也可以说,每个AU实际上是编码数据流的显示单元,即相当于解码的1幅视频图像或1个音频帧的取样。
简而言之:一个AU对应一个帧,一个ES由多个帧组成
start_code: 0x00 00 01
stream_id:
pes包头长:
信息区:包含附加信息以及PTS和DTS
PS流:
每一个pes header包含pts和dts, 在解码时,pes-->es;音视频的同步,除了使用pts和dts以外,还会用到SCR(system clock reference);在编码时,都是由STC(system time clock)生成
ps包长度是可变的
TS也是有多个pes组合而成,ts包由包头和包数据2部分组成,长度固定,包头长4bytes,包数据和自使用区共占184bytes
http://blog.chinaunix.net/uid-28458801-id-5124047.html
例子:
MPEG-2对视频的压缩产生I帧、P帧、B帧。 一个AU对应一个帧,一个ES由多个帧组成。
把帧顺序 I1帧-P4帧-B2帧-B3帧-P7帧-B5帧-B6帧 的编码ES,通过打包并在每个帧中插入PTS/DTS标志,变成PES。在插入PTS/DTS标志时,由于在B帧PTS和DTS是相等的,所以无须在B帧多插入DTS。
而对于I帧和P帧,由于经过复用后数据包的顺序会发生变化,显示前一定要存储于视频解码器的从新排序缓存器中,经过从新排序后再显示,所以一定要同时插入 PTS和DTS作为从新排序的依据。
例如,解码器输入的图像帧顺序为I1-P4-B2-B3-P7-B5-B6,但显示时P4一定要在B2、B3之后,在 PST和DTS的指引下,经过缓存器从新排序,以从建视频帧顺序为:I1-B2-B3-P4-P7-B5-B6。
在没有B帧的情况下,I帧和P帧在编码和解码端的顺序是一致的。
将PES包再打成更小的具固定长度的TS包时在其包头位置加入了PCR和PID(包标识)。PID的值是由用户确定的,解码器根据PID把TS(多节目传输流)上不同节目的TS包区分出来,以重建原来的ES。另外,TS的包头包含一个4bit的连续计数器,连续计数器可对PID包传送顺序计数,据计数器读数,接收端可判断是否有包丢失及包传送顺序错误。所以TS的包头具有同步、识别、检错等功能。
============================================================================================
dts/cts/pts/scr/stc
pts: present time stamp
dts:decoding time stamp
cts: Composition Time Stamp
pts/dts是ES流转化成为PES流时,加入PES流头部的信息。主要是为了解决编码和呈现时的数据顺序不同所导致的问题,这个可以见ES/PS/TS章节中的例子部分。
cts:
I think I have understood the CTS. it is only for B-frames. Because B-frames may depends fowarding frames to decode, so the CTS means when this B-frame can be decoded, usually that means all the depended frames are received.
从上面这段注释看,cts只用于B帧,用于告诉解码端所有B帧倚赖的I,P帧都已收到。
scr:system clock reference
stc:system time clock
Mpeg-2的同步及时间恢复--STC,PCR,DTS,PTS:
|---------------------------------------------------------------|
| TS/PS: Transport stream
| Packetized Stream
| |-------------------------------------------------------
| | PES: Packetized Elementary Stream
| | |-----------------------------------------------
| | | ES:Elementary stream
| | | |------------------------------------
| | | | | | | |
| | | | GOP:Group of pictures
| | | |------------------------------------
| | | | | |
| | |------------------------------------------------
| | | |
| |--------------------------------------------------------
| |
|----------------------------------------------------------------|
============================================================================================
Bitrate:
比特率
在通信和计算机领域,比特率(Bit rate,变量Rbit)是单位时间内传输或处理的比特的数量。比特率经常在通信领域用作连接速度、传输速度、信道容量、最大吞吐量和数字带宽容量的同义词。
比特率是指每秒传送的比特(bit)数。单位为 bps(Bit Per Second),比特率越高,传送数据速度越快。声音中的比特率是指将模拟声音信号转换成数字声音信号后,单位时间内的二进制数据量,是间接衡量音频质量的一个指标。 视频中的比特率(码率)原理与声音中的相同,都是指由模拟信号转换为数字信号后,单位时间内的二进制数据量。
Ffmpeg/X264/GPAC:
Ffmpeg为开源库,集合了各种音频,视频编解码协议。在FFmpeg中没有实现264解码,调用了X264解码。
X264是对H264编码标准的一种具体实现,是一个优秀的h264视频文件格式的编码器。
GPAC: 多媒体框架GPAC(graphics, animation and interactivity),是一个为科研和学术领域开发的多媒体的框架,支持 MPEG-4, VRML, X3D, SVG, LASeR 等 GPAC 包括一个多媒体播放器 Osmo4 以及多媒体打包工具 MP4Box。