本文作者Ahab,原题“视频相关的理论知识与基础概念”,收录时有修订和改动。
1、引言随着移动互联网的普及,实时音视频技术已经在越来越多的场景下发挥重要作用,已经不再局限于IM中的实时视频聊天、实时视频会议这种功能,在远程医疗、远程教育、智能家居等等场景也司空见惯。
虽然实时音视频技术的应用越来越普及,但对于程序员来说,这方面的技术门槛仍然存在(准备地说是仍然很高),想要在短时间内全面掌握实时音视频相关的技术难度非常大。
以IM中的实时音视频聊天为例,一个简化了的视频聊天技术,本质就是:音视频技术 网络技术的组合体,如下图所示:网络模块之上的部分,就是音视频技术所涉及的范畴。
▲ 图片引用自《微信小程序音视频技术背后的故事》
所以,想学习实时音视频开发,一般都是先学习音视频相关的技术知识,至于网络技术,完全可以分开学习。
不过,作为想从事这方面工作的小白面视者,是无法在短时间内全面掌握音视频技术,但可以通过快速了解相关的知识概念,在自已在脑中快速组织起相应的知识图谱,有助于日后针对相关知识点逐个深入学习和研究,也算是一种高效的技术学习方法。
本文将通过通俗的文字,言简意赅地为你讲解实时音视频技术中跟视频技术在关的11个非常重要的基础知识概念,希望能为你日后从事这方面的工作起到抛砖引玉的作用。
学习交流:
开源IM框架源码:https://github.com/JackJiang2011/MobileIMSDK
(本文同步发布于:http://www.52im.net/thread-3194-1-1.html)
2、关于作者3、参考资料王英豪:现居广州。
Github : https://github.com/yhaolpz
CSDN: http://blog.csdn.net/yhaolpz
个人博客 : http://yhaowa.gitee.io
4、什么是视频?[1] 零基础,史上最通俗视频编码技术入门
[2] 零基础入门:实时音视频技术基础知识全面盘点
[3] 理解实时音视频聊天中的延时问题一篇就够
根据人眼视觉暂留原理,每秒超过 24 帧的图像变化看上去是平滑连续的,这样的连续画面的播放叫视频。
通俗来说说,视频相当于连续展示多张图片,原理就像下面这样:
▲ 图片引用自《零基础,史上最通俗视频编码技术入门》
5、什么是分辨率?5.1 基础分辨率是以横向和纵向的像素数量来衡量的,表示平面图像的精细程度。视频精细程度并不只取决于视频分辨率,还取决于屏幕分辨率。
1080P 的 P 指 Progressive scan(逐行扫描),即垂直方向像素点,也就是 "高",所以 1920 * 1080 叫 1080P, 不叫 1920P。
5.2 上采样当 720P 的视频在 1080P 屏幕上播放时,需要将图像放大,放大操作也叫上采样。
“上采样”几乎都是采用内插值方法,即在原有图像的像素点之间采用合适的插值算法插入新的元素,所以图像放大也称为图像插值。
简单的记录一下插值算法:
常见插值算法技术原理:
1)邻插值算法:将四个像素(放大一倍)用原图一个像素的颜色填充,较简单易实现,早期的时候应用比较普遍,但会产生明显的锯齿边缘和马赛克现象;
2)双线性插值法:是对邻插值法的一种改进,先对两水平方向进行一阶线性插值,再在垂直方向上进行一阶线性插值。能有效地弥补邻插值算法的不足,但还存在锯齿现象并会导致一些不期望的细节柔化;
3)双三次插值法:是对双线性插值法的改进,它不仅考虑到周围四个直接相邻像素点灰度值的影响,还考虑到它们灰度值变化率的影响,使插值生成的像素灰度值延续原图像灰度变化的连续性,从而使放大图像浓淡变化自然平滑。
除此之外还有很多更复杂效果更优的算法,比如小波插值、分形等等。
5.3 下采样当 1080P 的视频在 720P 屏幕上播放时,需要将图像缩小,缩小操作也叫下采样。
“下采样”的定义为:对于一个样值序列,间隔几个样值取样一次,得到新序列。
对于一幅分辨率为 MxN 的图像,对其进行 s 倍下采样,即得到 (M/s)x(N/s) 分辨率的图像(s 应为 M、N 的公约数),就是把原始图像 sxs 窗口内的图像变成一个像素,这个像素点的值就是窗口内所有像素的均值。
最佳体验为屏幕与视频分辨率相同且全屏播放,视频分辨率过高的话屏幕没有能力去呈现,视频分辨率过低的话无法发挥屏幕的能力。
6、什么是比特率?6.1 基础比特率即码率,在不同领域有不同的含义,在多媒体领域,指单位时间播放音频或视频的比特数,可以理解成吞吐量或带宽。
单位为 bps , 即 bits per second,每秒传输的数据量,常用单位有:kbps、mbps 等。
计算公式:码率(kbps)= 文件大小(kb)/ 时长(s)
通俗一点理解就是取样率,取样率越大,精度就越高,图像质量越好,但数据量也越大,所以要找到一个平衡点:用最低的比特率达到最少的失真。
在一个视频中,不同时段画面的复杂程度是不同的,比如高速变化的场景和几乎静止的场景,所需的数据量也是不同的,若都使用同一种比特率是不太合理的,所以引入了动态比特率。
6.2 动态比特率简称为 VBR,即 Variable Bit Rate,比特率可以随着图像复杂程度的不同而随之变化。
图像内容简单的片段采用较小的码率,图像内容复杂的片段采用较大的码率,这样既保证了播放质量,又兼顾了数据量的限制。
比如 RMVB 视频文件,其中的 VB 就是指 VBR,表示采用动态比特率编码方式,达到播放质量与体积兼得的效果。
6.3 静态比特率简称为 CBR,即 Constant Bit Rate,比特率恒定。
图像内容复杂的片段质量不稳定,图像内容简单的片段质量较好。上面列出的计算公式显然是针对 CBR ,除 VBR 和 CBR 外,还有 CVBR(Constrained VariableBit Rate) 、ABR (Average Bit Rate) 等等。
7、什么是采样率?定义:每秒从连续信号中提取并组成离散信号的采样个数,单位为赫兹(Hz)。对于取样率、采样率和抽样率,没必要纠结它们的区别,都是同义词。
视频一般不标识采样率属性,比如: