即时通讯开发之实时音视频的技术基础概念

随着移动互联网的普及,实时音视频技术已经在越来越多的场景下发挥重要作用,已经不再局限于IM中的实时视频聊天、实时视频会议这种功能,在远程医疗、远程教育、智能家居等等场景也司空见惯。虽然实时音视频技术的应用越来越普及,但对于程序员来说,这方面的技术门槛仍然存在(准备地说是仍然很高),想要在短时间内全面掌握实时音视频相关的技术难度非常大。

即时通讯开发之实时音视频的技术基础概念_第1张图片

 

所以,想学习实时音视频开发,一般都是先学习音视频相关的技术知识,至于网络技术,完全可以分开学习。

不过,作为想从事这方面工作的小白面视者,是无法在短时间内全面掌握音视频技术,但可以通过快速了解相关的知识概念,在自已在脑中快速组织起相应的知识图谱,有助于日后针对相关知识点逐个深入学习和研究,也算是一种高效的技术学习方法。

什么是视频?

根据人眼视觉暂留原理,每秒超过 24 帧的图像变化看上去是平滑连续的,这样的连续画面的播放叫视频。

什么是分辨率?

分辨率是以横向和纵向的像素数量来衡量的,表示平面图像的精细程度。视频精细程度并不只取决于视频分辨率,还取决于屏幕分辨率。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

即时通讯开发之实时音视频的技术基础概念_第2张图片

 

1080P 的 P 指 Progressive scan(逐行扫描),即垂直方向像素点,也就是 "高",所以 1920 * 1080 叫 1080P, 不叫 1920P。

上采样

当 720P 的视频在 1080P 屏幕上播放时,需要将图像放大,放大操作也叫上采样。

“上采样”几乎都是采用内插值方法,即在原有图像的像素点之间采用合适的插值算法插入新的元素,所以图像放大也称为图像插值。

常见插值算法技术原理:

    1)邻插值算法:将四个像素(放大一倍)用原图一个像素的颜色填充,较简单易实现,早期的时候应用比较普遍,但会产生明显的锯齿边缘和马赛克现象;
    2)双线性插值法:是对邻插值法的一种改进,先对两水平方向进行一阶线性插值,再在垂直方向上进行一阶线性插值。能有效地弥补邻插值算法的不足,但还存在锯齿现象并会导致一些不期望的细节柔化;
    3)双三次插值法:是对双线性插值法的改进,它不仅考虑到周围四个直接相邻像素点灰度值的影响,还考虑到它们灰度值变化率的影响,使插值生成的像素灰度值延续原图像灰度变化的连续性,从而使放大图像浓淡变化自然平滑。除此之外还有很多更复杂效果更优的算法,比如小波插值、分形等等。

下采样

当 1080P 的视频在 720P 屏幕上播放时,需要将图像缩小,缩小操作也叫下采样。

“下采样”的定义为:对于一个样值序列,间隔几个样值取样一次,得到新序列。

对于一幅分辨率为 MxN 的图像,对其进行 s 倍下采样,即得到 (M/s)x(N/s) 分辨率的图像(s 应为 M、N 的公约数),就是把原始图像 sxs 窗口内的图像变成一个像素,这个像素点的值就是窗口内所有像素的均值。

最佳体验为屏幕与视频分辨率相同且全屏播放,视频分辨率过高的话屏幕没有能力去呈现,视频分辨率过低的话无法发挥屏幕的能力。

什么是比特率?

比特率即码率,在不同领域有不同的含义,在多媒体领域,指单位时间播放音频或视频的比特数,可以理解成吞吐量或带宽。

单位为 bps , 即 bits per second,每秒传输的数据量,常用单位有:kbps、mbps 等。

计算公式:码率(kbps)= 文件大小(kb)/ 时长(s)

通俗一点理解就是取样率,取样率越大,精度就越高,图像质量越好,但数据量也越大,所以要找到一个平衡点:用最低的比特率达到最少的失真。

在一个视频中,不同时段画面的复杂程度是不同的,比如高速变化的场景和几乎静止的场景,所需的数据量也是不同的,若都使用同一种比特率是不太合理的,所以引入了动态比特率。

简称为 VBR,即 Variable Bit Rate,比特率可以随着图像复杂程度的不同而随之变化。

图像内容简单的片段采用较小的码率,图像内容复杂的片段采用较大的码率,这样既保证了播放质量,又兼顾了数据量的限制。

比如 RMVB 视频文件,其中的 VB 就是指 VBR,表示采用动态比特率编码方式,达到播放质量与体积兼得的效果。

简称为 CBR,即 Constant Bit Rate,比特率恒定。

图像内容复杂的片段质量不稳定,图像内容简单的片段质量较好。上面列出的计算公式显然是针对 CBR ,除 VBR 和 CBR 外,还有 CVBR(Constrained VariableBit Rate) 、ABR (Average Bit Rate) 等等。

什么是采样率?

定义:每秒从连续信号中提取并组成离散信号的采样个数,单位为赫兹(Hz)。对于取样率、采样率和抽样率,没必要纠结它们的区别,都是同义词。

采样率本身就是一个可泛化的概念,对于视频来说,若非要用采样率来描述的话,那就要分为两个层面:帧频和场频。

    1)从帧频层面来说:采样率就是指帧率,指 1 秒钟显示多少帧图像;
    2)从场频层面来说:采样率就是指像素频率,指 1 秒钟显示多少个像素。


像素频率是显示器的一个指标,可以理解成显示器的最大带宽,可以起到限制分辨率和刷新率的作用。

什么是帧率?

定义:用于测量显示帧数的量度。单位为 FPS(Frames per Second,每秒显示帧数)或赫兹(Hz)。

帧率越高,画面越流畅、逼真,对显卡的处理能力要求越高,数据量越大。

文章开头,我们提到每秒超过 24 帧的图像变化看上去是平滑连续的,这是针对电影等视频而言,对游戏来说 24 帧不一定就是流畅的。

为什么 24fps 的电影感觉流畅,而 24fps 的游戏就感觉很卡呢?

第一个原因:两者图像生成原理不同

电影的一帧在一段时间曝光,每一帧都包含一段时间的信息,而游戏的画面则是由显卡计算生成的,一帧只包含那一瞬间的信息。

前者为电影的一帧,后者为游戏的一帧,可以看到在电影中动作会出现拖影,给人以动感的效果,连贯而不卡。

第二个原因:电影的FPS是稳定的,而游戏则是不稳定的

电影若为 24fps,那就表示每隔 1/24 秒刷新一次画面,帧间隔是固定的。

游戏若为 60fps,表示大约每隔 1/60 秒刷新一次画面,帧间隔是不稳定的,即使 1 秒能显示 60 帧,那也可能是前半秒显示了 59 帧,后半秒显示了 1 帧。

你可能感兴趣的:(实时音视频)