直播云-基础知识
帧(Frame):视频每一瞬间的画面都是由一张静态图片组成,其中每一张静态图片被称为一帧,而每一帧又是由许多像素组成的平面图片;在传统的胶片电影、手绘动画中,每一帧相当于是一格胶片或一张绘画;
帧的类型
关键帧(Keyframe):Intra-frames,是内部编码帧
过渡帧:
B-frames(Bi-directional predicted frames):双向内插帧
P-frame(Predicted frames):前向预测帧
简单地讲,I帧是一个完整的画面,而P帧和B帧记录的是相对于I帧的变化。没有I帧,P帧和B帧就无法解码。
Group of Picture(以下简称GoP)顾名思义就是有一组帧组成的一个序列,GoP由I帧开始,后面跟随者一组B帧和P帧,直到下一个I帧之前的帧为一个GoP。了解了GoP之后,就会发现播放器只有在拿到某个GoP中的I帧之后才能播放视频。
GOP:一组连续的画面,起始为I帧;
GoP设置比较小时:
好处:由于GoP设置小可以降低I帧间隔时间,对于直播来说可以实现秒开的功能。
坏处:由于GoP时间比较短,会导致I帧的比例增高,压缩比降低。同样码率情况下视频的质量会有所下降。
例如一个RTMP直播流的GoP设置为2秒,如果客户端接入时间刚好是第4秒,那么客户端会获取一个包含I帧的Packet,由于I帧是自描述的,所以客户端可以直接解码出该帧的画面并显示出来。但是当客户端的接入之间为第5秒,那么他会获得一个包含B帧或者P帧的Packet,由于客户端拿到的数据是一个不完整的GoP,所以客户端只好抛弃当前获取的Packet中视频的数据,而且只有当获取到包含下一个GoP的I帧的Packet时才能解码出图像。因此客户端会等待1秒才能播放出画面。
由此我们可以得出一个结论:GoP的大小会影响RTMP播放端的首帧加载时间。也就是说首帧加载时间最久为一个GoP的时间。当然,如何客户端运气够好的话,可以瞬间播放。
为了优化首帧加载时间,我们可以在流媒体服务器端增加一个缓存,把上一个GoP缓存在内存中。如果客户端接入的话,我们首先放出来的是上一个GoP。这样客户端接到的数据永远是一I帧开头的数据。
不过这种方案对于延迟要求比较高的场景下就不适合。毕竟GoP的缓存会增加一个延迟,具体延迟的时间也是跟GoP大小相关的。如果要实时性,那么GoP缓存并不能很好的解决问题,只能通过减少关键帧间隔的方式来进行调优了。
http://blog.sina.com.cn/s/blog_56ab14d50102wjlz.html
http://wiki.baidu.com/pages/viewpage.action?pageId=353475905
视频码率(比特率Bit rate):每秒传输的比特数量,即经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示,单位bps、Kbps、Mbps;800Kbps意味着每秒传输8000000个比特,即相当于每秒传输100KB的数据量;
码率在一定程度上能够反映视频、音频的质量,但也不是绝对的(取决于源文件的质量);理论上码率越高,画质、音质越好,编码后的文件也就越大,如果使用流媒体的方式播放,对网络带宽要求也就越高(例如我们在线看视频,如果网络带宽较低就会出现播放卡顿的现象);
常用视频码率:低清200 kbps,标清600 kbps,高清1200 kbps;
视频编码解码(Encoding/Decoding):由于录制的视频原片体积较大,为了节省存储空间存储、便于分发传输,需要对视频的原始像素数据做编码Encoding处理,通过特定的编码算法、遵循特定的编码标准,可以将视频的体积压缩(compress)到合适的水平;当视频分发到观看者时,通过解码(Decoding)即可播放;编码的目标是尽可能以较低的码率、文件体积实现高品质的数据传输;
假如一部120分钟的电影,帧率为24fps,原片的每一帧大小为1M(以目前iPhone拍照的体积算,实际上电影高清摄像机应该远大于该数字),那么这部原片所占的磁盘空间为120*60*24*1M=172800M(约168.75GB),如果不经过编码压缩非常不便于传输。
一般支持h264、h265,默认为h264
编码级别:baseline, main, high,
从低到高分别为:Baseline、Main、High。
Baseline(最低Profile)级别支持I/P 帧,只支持无交错(Progressive)和CAVLC,一般用于低阶或需要额外容错的应用,比如视频通话、手机视频等;
Main(主要Profile)级别提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),同样提供对于CAVLC 和CABAC 的支持,用于主流消费类电子产品规格如低解码(相对而言)的mp4、便携的视频播放器、PSP和Ipod等;
High(高端Profile,也叫FRExt)级别在Main的基础上增加了8x8 内部预测、自定义量化、无损视频编码和更多的YUV 格式(如4:4:4),用于广播及视频碟片存储(蓝光影片),高清电视的应用。
AVC 的规格主要是针对兼容性的,不同的规格能在相同级别上的平台应用。至于Baseline@L x.x、Main@L x.x、High@L x.x形式则是在不同级别下的码流级别,数值越大码流就越大,更耗费资源。所以就码流而言High@L3.0
目前手机主要分辨率有720p(720×1280),1080p(1080×1920),2k(2560×1440)。16:9 横向像素×竖向像素
码率:影响体积,与体积成正比:码率越大,体积越大;码率越小,体积越小。
帧率(FPS):影响画面流畅度,与画面流畅度成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。如果码率为变量,则帧率也会影响体积,帧率越高,每秒钟经过的画面越多,需要的码率也越高,体积也越大。
https://blog.csdn.net/pc9319/article/details/79621352
如果清晰度和流畅度不变,分辨与视频画质,大小正相关。但是前提条件是清晰度不变,单纯的增加分辨并不能带来更好的画质.
结果显示,同等分辨率的前提下,显示屏幕越大,主观感受越差。
>当图像的分辨率大于显示器的分辨率时有两种显示方法,一种是局部显示,即屏幕的像素有多少就显示多少像素,这时只能看到图片的某一部分,可以上下左右的移动来看完整的内容。另一种方法是在屏幕内显示完整的图像,这时图片的像素会被压缩,如2560X1600的图片会删去一部分像素,以1920X1080的分辨率(显示屏的分辨率)来显示。这时可以看到完整的图片内容,不过在细节上是丢失一小部分像素的,就像用数码相机的屏幕也可以看到完整的照片,不过感觉很模糊,放在电脑上看就好多了,因为屏幕的分辨率低。>
>当图像的分辨率小于显示器的分辨率时也有两种显示方法,一种是显示实际大小,即图片的分辨率是多少,就用屏幕上的多少个像素来显示,这时屏幕是以点对点的方式来显示图片,不过图片不是全屏,只在屏幕中央的一部分。另一种方法也是全屏显示,这时图片不是被压缩像素,而是被人为的插入了很多像素,图片看起来很大,满屏显示,不过有效像素很少,比如说可以把一个很小的图标文件放完屏来观看,不过画面惨不忍睹。