来自极客时间的视频教程学习:
1、像素:
    像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个 点

2、分辨率
  


图像(或视频)的分辨率是指图像的大小或尺寸。我们一般用像素个数来表示图像的尺


寸。比如说一张 1920x1080 的图像,前者 1920 指的是该图像的宽度方向上有 1920 个像


素点,而后者 1080 指的是图像的高度方向上有 1080 个像素点。


视频行业常见的分辨率有 QCIF(176x144)、CIF(352x288)、D1(704x576 或


720x576),还有我们比较熟悉的 360P(640x360)、720P(1280x720)、


1080P(1920x1080)、4K(3840x2160)、8K(7680x4320)等。
3、 位深

一般来说,我们看到的彩色图像中,都有三个通道,这三个通道就是 R、G、B 通道。简单



来说就是,彩色图像中的像素是有三个颜色值的,分别是红、绿、蓝三个值。也就是说我



们看到的那个带有颜色的块其实是由 R、G、B 三个值组成的(有的时候还会有 Alpha



值,代表透明度,我们这里不展开讨论)。



通常 R、G、B 各占 8 个位,也就是一个字节。8 个位能表示 256 种颜色值,那 3 个通道



的话就是 256 的 3 次方个颜色值,总共是 1677 万种颜色。我们称这种图像是 8bit 图



像,而这个 8bit 就是位深。

4、 Stride

接下来我们来看一个特别的概念——Stride。这个 Stride 不是图像本身的属性,但是视频



开发者经常会碰到,也是经常会出问题的一个东西。我们团队在工作中就多次遇到过由于



客户没有处理好这个东西,从而导致播放的图像出现“花屏”的情况。



Stride 也可以称之为跨距,是图像存储的时候有的一个概念。 它指的是图像存储时内存中



每行像素所占用的空间。 你可能会问,一张图像的分辨率确定了,那一行的像素值不就确



定了吗?为什么还需要跨距这个东西呢?其实,为了能够快速读取一行像素,我们一般会



对内存中的图像实现内存对齐,比如 16 字节对齐。



举个例子,我们现在有一张 RGB 图像,分辨率是 1278x720。我们将它存储在内存当中,



一行像素需要 1278x3=3834 个字节,3834 除以 16 无法整除。因此,没有 16 字节对



齐。所以如果需要对齐的话,我们需要在 3834 个字节后面填充 6 个字节,也就是 3840



个字节做 16 字节对齐,这样这幅图像的 Stride 就是 3840 了。如下图所示:



视频基础知识学习1_码率


这个地方你一定要注意, 每读取一行数据的时候需要跳过这多余的 6 个字节 。如果没有跳


过的话,这 6 个字节的像素就会被我们误认为是下一行开始的 2 个像素(每个像素 R、


G、B 各占 1 个字节,2 个像素共 6 个字节)。那这样得到的图像就完全错了,显示出来


的就是“花屏”现象,屏幕会出现一条条的斜线。

帧率

1 秒钟内图像的数量就是帧率 。据研究表明,一般帧率达到 10~12 帧每秒,人眼就



会认为是流畅的了。当然,可能会有个体差异。



通常,我们在电影院看的电影帧率一般是 24fps(帧每秒),监控行业常用 25fps,而我



们声网常用的帧率有 15fps、24fps 和 30fps。你可以根据自己的使用场景来具体设定你想



使用的帧率值

码率

我们已经知道,视频的帧率越高,1 秒钟内的图像数据量就会越大。通常我们存储视频的



时候需要对图像进行压缩之后再存储,否则视频会非常大。



那么压缩之后的视频我们一般如何描述它的大小呢?一般对于一个视频文件,我们直接看



视频的大小就可以了。但是在实时通信或者直播的时候,视频是视频流的形式,我们怎么



衡量呢?



这就涉及到我接下来要介绍的概念——码率。码率是指视频在单位时间内的数据量的大



小,一般是 1 秒钟内的数据量,其单位一般是 Kb/s 或者 Mb/s。通常, 我们用压缩工具压



缩同一个原始视频的时候,码率越高,图像的失真就会越小,视频画面就会越清晰 。但同



时,码率越高,存储时占用的内存空间就会越大,传输时使用的流量就会越多。