一、概念普及
我们经常看的直播是如何呈现到手机的?
日常我们观看视频,影响画面质量的都有哪些因素?
分辨率?码率?帧率?还是啥?
1、首先了解一下直播是如何实现的
对于一个实时音视频应用共包括几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等很多环节。每一个细分环节,还有更细分的技术模块。比如,前后处理环节有美颜、滤镜、回声消除AEC、噪声抑制NS、静音控制VAD、自动增益控制AGC等,采集有麦克风阵列等,编解码有VP8、VP9、H.264、H.265等。
2、分辨率
单位英寸中所包含的像素点数;分辨率代表大小,和清晰度无关。
720p -> 1280x720
1080p -> 1920x1080
3、码率
编码器每秒编出的数据大小,单位是kbps,比如800kbps代表编码器每秒产生800kb的数据。 这个和网络带宽单位一样都是表示处理能力,后面会细说。
4、帧率
frame per second 每秒钟要多少帧画面
帧率越大,画面越流畅;
帧率越小,画面越有跳动感。看幻灯片效果;
对视频而言24FPS已经是肉眼极限,所以一般20帧的FPS就已经可以达到很好的用户体验了。
3D游戏的场景渲染场景在这里不适用,这个越高越好。
5、RGB和YUV
RGB常常用于图像的存储,并且十分简单。但是在视频领域中,RGB就不那么常见了。我们知道,视频其实是由一张张连续的图片序列组成的,我们假设有一个1080p(1920 * 1080)分辨率、帧率为30帧的视频,如果不对视频进行压缩,并且使用RGB进行存储的话,仅仅一分钟的视频就能达到 ( 1920 * 1080 * 8 * 30 * 60 )bit (约等于27G)。这明显是不现实的,所以我们需要对视频数据进行压缩。
但由于RGB的三个分量是存在相关性的,这不利于我们对数据进行压缩编码。所以我们需要一种数据相关性没那么强的颜色空间,我们接下来要介绍的YUV,就是这么一种颜色空间。
YUV同样使用三个分量来存储数据,他们分别是:
-Y:用于表示明亮度(Luminance或Luma);
-U: 用于表示色度(Chrominance或Chroma);
-V:用于表示色度(Chrominance或Chroma);
Y其实就是我们常说的灰度值,是图片的总体轮廓,而U和V则用于描述色彩颜色和颜色饱和度。
上面的第一张图片为YUV图片的原图,下面的图片分别为只有Y分量、只有U分量、只有V分量数据的图片。可以看到只有Y分量的图片能够看清楚图片的轮廓,但图片是黑白的。
YUV的类型
常见的YUV有YUV444,YUV422,YUV420,不同类型之间的主要区别是使用了不同的方式进行U、V分量的采样。
如上图所示,其中实心黑点表示像素点的Y分量,空心圆圈表示采用该像素点的UV分量。
YUV444
YUV444中每个Y分量分别对应一个U分量和一个V分量。
YUV422
YUV422中每两个Y分量共用一个U分量和一个V分量。
YUV420
YUV420中每四个Y分量共用一个U分量和一个V分量。
假设储存一张2*2像素的图片时:
RGB:(8+8+8)*4=96bit
YUV444:(8+8+8)*4=96bit
YUV422:(8+4+4)*4=64bit
YUV420:(8+2+2)*4=48bit
YUV444存储的数据量与RGB相同,但YUV422和YUV420却只需要存储RGB的数据量的 2/3 和 1/2 。
YUV中的Y指的是亮度信息。也就是说,只靠Y数据,可以完美实现黑白图像。也就是黑白电视;彩色电视出现以后,为了兼容之前的黑白数据,厂商发明了UV数据。YUV一起就可以实现彩色,单独使用Y可以实现黑白,这样一套数据格式就同时兼容了黑白设备和彩色设备。
人眼对亮点信息更敏感。也就是说,可以压缩UV数据,而人眼难以发现。
所以压缩算法的第一步,往往先把RGB数据转换成YUV数据。对Y少压缩一点,对UV多压缩一点,以平衡图像效果和压缩率。
既然YUV更有优势,为什么还要保留RGB呢?
因为目前人类发明的所有彩色的输入输出设备,本质上都只支持RGB数据。哪怕设备允许YUV的输入输出,那也是经过内部的数据转换而间接支持。
视频为什么不用RGB?
针对性不同:RGB关注人眼对色彩的感应;YUV侧重人对亮度的敏感。
带宽小
假设一张1920x1080的图片,可以假设为视频的某一帧
RGB:1920 * 1280 * 3 / 1024 / 1024 = 7.03MB
YUV420: = RGB/2 = 3.51MB
6、视频播放流
码率如果为10Mb/s,代表1秒钟有10M bit的视频数据,对于YUV420格式的1080P视频而言,一帧图像是35Mbit,1秒钟30帧图像的话,则有1050Mb/s,可见其数据量之大,不压缩根本无法网上传播,所以就有了YUV。不要以为1080P的视频就一定是高清的,清晰度还跟视频码率密切相关,对于1080P的视频而言,蓝光视频的码率是20Mb/s,一般下载的视频码率大都是10Mb/s,一些IPCamera/无人机的码率是2~8Mb/s,而很多视频网站的码率甚至低于5M/s,其实有时还不如高码率的720P清晰。
经过压缩/编码处理的视频流数据叫“编码流”,因目前常用H264压缩/编码算法又叫“H264流”
没有经过压缩/编码处理的视频叫“原始流”
视频的编解码是“原始流”与“编码流”的相互转换
二、什么是好的画质
好的画质是分辨率、帧率和码率三者之间的平衡,基于业务需要。
下面是目前常见的几种分类(参考):
视频画质等级
SD(Standard Definition):标清。物理分辨率在 1280x720 以下的一种视频格式。
分别是:
480i/p:640x480, 704x480, 720x480, 848x480等
576i/p:720x576, 768x576, 1024x576等
HD(High Definition):高清。有三种显示格式,分别是:
720p:960x720,1280x720
1080p:1440x1080,1920x1080(p:逐行扫描,非交错式,场频为24或30)
1080i :1440x1080,1920x1080(i:隔行扫描,交错式,场频60 )
FHD(Full High Definition):全高清。分辨率一般是:1080p
UHD(Ultra High Definition):超高清、或 4k UHD。分辨率一般是 4K
FUHD(Full Ultra High Definition):8k超高清、或 8k UHD
综上