技术分享| RTC通讯中常用的图像格式

在RTC通讯过程中 , 图像需要采集、美化、压缩编码、传输、解码、显示 , 这个过程中会涉及到很多图像格式 , 常用的如YUV、RGB , 其中YUV和RGB各自也有很多分类 。今天我们就详细的介绍一下这些图像格式 。
YUV是视频、图片、相机等应用中使用的一类图像格式 , 是所有“YUV”像素格式共有的颜色空间的名称 。与RGB格式(红-绿-蓝)不同 , YUV是用一个称为Y(相当于灰度)的“亮度”分量和两个“色度”分量表示 , 分别称为U(蓝色投影)和V(红色投影) , 由此得名 。
YUV也可以称为YCbCr , 虽然这些术语意味着略有不同 , 但它们往往会混淆并可互换使用 。
Y表示亮度 , CbCr表示颜色 。怎么表示颜色 , 可以看下面这幅坐标图:
技术分享| RTC通讯中常用的图像格式
文章图片

文章图片
Y表示亮度分量:如果只显示Y的话 , 图像看起来会是一张黑白照 。
U(Cb)表示色度分量:是照片蓝色部分去掉亮度(Y) 。
V(Cr)表示色度分量:是照片红色部分去掉亮度(Y) 。
要说清楚YUV , 我们时刻需要记住要从bit数 , 和存储结构两方面考察 , 所以得分别说清楚这两点:
YUV的采样格式:空间-间:不同空间 , 即描述一个像素的bit数不同 , 比如yuv444 , yuv422 , yuv411 , yuv420 。即我们在采集图片、视频帧时 , 是如何获取每个像素的Y、U、V三个分量的 。
YUV的存储格式:空间-内:相同空间 , 即描述一个像素的bit数相同 , 但是存储方式不同 , 比如对于yuv420而言 , 又可细分为yuv420p , yuv420sp , nv21 , nv12 , yv12 , yu12 , I420 。即Y、U、V三个分量的值 , 是以什么方式存储在内存或者文件中的 。
首先 , 我们可以将YUV格式按照数据大小分为三个格式 , YUV420 , YUV422 , YUV444 。由于人眼对Y的敏感度远超于对U和V的敏感 , 所以有时候可以多个Y分量共用一组UV , 这样既可以极大得节省空间 , 又可以不太损失质量 。这三种格式就是按照人眼的特性制定的 。YUV420 , 由4个Y分量共用一套UV分量YUV422 , 由2个Y分量共用一套UV分量YUV444 , 不共用 , 一个Y分量使用一套UV分量
按照多个Y分量共用一个UV的方式 , 我们可以把YUV分为420 , 422 , 444三种类型 , 而在这三种类型之下 , 我们又可以按照YUV的排列储存顺序 , 将其细分为好多种格式 , 这些格式数量繁多 , 又不好记忆 , 这为我们学习过程中造成了不少困难 。下面我就为大家一一介绍 。
首先 , 我们将可以按照YUV的排列方式 , 再次将YUV分成三个大类 , Planar , Semi-Planar和Packed 。PlanarYUV三个分量分开存放Semi-PlanarY分量单独存放 , UV分量交错存放PackedYUV三个分量全部交错存放
注意:Interleaved是属于Packed的 , 但是在422中 , 用Interleaved更加形象一些 。
按照这三种方式 , 我们就可以将YUV格式进行比较细致的分类了 。
具体分类我们总结了一张图:
技术分享| RTC通讯中常用的图像格式
文章图片

文章图片
那么什么是RGB图像格式呢 , 其实他并不陌生 , 从初中开始接触的色光的三原色 , 告诉我们我们可以看到的光可以由这三种颜色按一定的比例去混合得到;后来在HTML以及Android开发中设置元素/控件的颜色时 , 可以通过一串数字 , 得到某个特定的颜色 。这就是RGB的应用 。
RGB色彩模式是工业界的一种颜色标准 , 是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的 , RGB即是代表红、绿、蓝三个通道的颜色 , 这个标准几乎包括了人类视力所能感知的所有颜色 , 是运用最广的颜色系统之一 。