一、采集 - 数据从哪里来?
1.1 采样原理
定义:对连续变化图像在空间坐标上做离散化处理,将模拟信号转变成数字信号的过程,即为图像进行采样。
通俗来说:采集就是将看到的东西转成二进制流的过程。
1.2 基础概念
1.2.1 图像
「图像」是个集合的概念,帧、顶场、底场都可以称为图像。
- 帧 一帧通常是一幅完整图像,当采用逐行扫描方式扫描,每次扫描得到的信号就是一帧。
- 顶场与底场 采集视频信号时,扫描方式分为逐行扫描与隔行扫描。如果采用逐行扫描,得到的则是一幅完整的图像;而采用隔行扫描(奇、偶数行),则扫描下来的一帧图像就被分为了两个部分,这每一部分就称为「场」,根据次序分为:「顶场」和「底场」。
- 隔行扫描 每一帧被分割为两场画面交替显示。每一帧被分割为顶场与底场,通常是先扫描奇数行得到第一场,然后扫描偶数行得到第二场。由于视觉暂留效应,人眼将会看到平滑的运动而不是闪动的半帧半帧的图像。但是这时会有闪烁出现,尽管不容易被察觉,但会使得人眼容易疲劳。当屏幕的内容是横条纹时,这种闪烁特别容易被注意到,并且会有锯齿瑕疵。
- 逐行扫描 则是将每帧的所有画面同时显示。每次都显示整个扫描帧,如果逐行扫描的帧率和隔行扫描的场率相同,人眼将看到比隔行扫描更平滑的图像,相对于隔行扫描来说闪烁较小。每一帧图像均是由电子束顺序地一行接着一行连续扫描而成,这种扫描方式称为逐行扫描。
- 两者区别 举个栗子,25fps 100行帧图像,那么隔行扫描需要一秒扫描50次,但每次只需要扫描50行。而逐行扫描则只需要扫描25次,但每次需要扫描100行。 结论:隔行扫描扫描频率为逐行扫描双倍,信道带宽为逐行扫描的一半。在图像体验降低不多的情况下,信道带宽减少了一半,使得设备成本减少,因此,早期大多数显示器都采用隔行扫描。
1.2.2 颜色模型
RGB 颜色模型
RGB分别代表红绿蓝,每种颜色需要用3个数字表示,一个数字占用1字节,一种颜色则需要3字节,24位。
YCbCr 颜色模型
YCbCr颜色模型是YUV家族的一员,关键特点在于它亮度信号Y与色度信号U、V相互分离。当缺失U、V,仅有Y信号时,也能够表示出黑白图像。
代码语言:javascript复制Y = kr*R kg*G kb*BCr = R – Y; Cg = G – Y; Cb = B – Y;
Y 即「亮度」,kr、kg、kb 即 R、G、B 的权重值。
疑问:对比RGB模型,YCbCr模型每个像素也需要3个信号表示,为什么说该模型更高效?
优化思路:人眼对亮度分辨率敏感度高于色彩敏感度
基于人眼视觉特性,很明显,我们需要从颜色方面入手,于是提出“色度取样”,使颜色存储减半或者更多。容易实现,编码压力较小,收益较高。
具体实现方式不再展开讨论,有兴趣的小伙伴可以上网了解下啦。
1.3 图像感知与获取
- 通过电功率和对特殊类型检测能源敏感的传感器材料组合。
- 将输入的光照能量变为特殊的电压波形。
- 波形的幅度和空间特性都与感知的物理现象有关。为了产生数字图像,接下来需要进行取样与量化处理。
1.4 取样与量化
继续举个栗子?,对于黑白图像图(a)为连续图像,如果需要转换成数字形式,需要几步主要操作:
1. 取样:(a)图上沿AB线段等间隔对该图像取样,得到灰度级曲线(b); 2. 量化:(c)图右侧将灰度分为8个灰度级,再横向每一取样的连续灰度值,量化为8个灰度之一,最终得到(d)图,感知器输出的量化完成流产生数字图像的过程。
a. 图像投影至传感器阵列 b. 图像取样与量化结果
二、渲染 - 数据如何展现
2.1 播放器原理
播放器播放从互联网上播放视频,需要经过:解协议、解封装、解码、音视频同步这几个核心步骤:
- 解协议: 将流媒体协议数据,解析为标准封装格式数据。流媒体协议传输音视频数据同时,也会传输一些信令数据,其中包括:播放控制、网络状态描述等。常见流媒体协议如HTTP、RTMP或MMS等。
- 解封装: 将解协议得到的标准封装格式数据,分离为音频流压缩编码数据与视频流压缩编码数据。封装格式也称为容器,即是将已经编码压缩好的视频轨与音频轨按照一定格式放到一个文件中。 需要注意的是:就算是同一个封装格式,其编码方式并不一定一样,我们可以从后缀名中直观的看到视频文件到封装格式。常见封装格式:avi,rmvb,mp4,flv,mkv等。
- 解码: 就是将音视频压缩编码数据,解码成为非压缩的音视频原始数据。音频编码标准有AAC,MP3,AC-3等;视频编码标准包含H.264,MPEG2,VC-1等。编解码是整个流程最核心与最复杂的环节。
- 音视频同步: 根据解封装过程获取的参数信息,将解码出来的音视频数据进行同步对其,最终将数据传送到系统,由系统调用硬件进行播放。
2.2 视频编码方式
视频编解码过程是数字视频压缩与解压缩的过程。 选取音视频编码方案时,需要考虑:视频的质量、码率、编码算法和解码算法的复杂度、针对数据丢失和错误的鲁棒性(Robustness)、编辑的方便性、随机访问、编码算法设计的完美性、端到端的延时以及其它一些因素。
常见的音视频编码:H26X系列、MPEG系列、AAC、MP3、WMA等。
三、处理 - 数据怎么加工?
音视频加工处理,是业务的核心需求,对开发者自由度最大的一个环节,通过音视频处理,可以实现各种各样炫酷的特效。
图像、视频常见处理方式:美化、裁剪、缩放、旋转、叠加、编解码等。
音频常见处理方式:重采样、去噪,回声消除,混音、编解码等。
常见处理框架:
- 图像处理:OpenGL,OpenCV,libyuv,ffmpeg 等
- 视频编解码:x264,OpenH264,ffmpeg 等
- 音频处理:speexdsp,ffmpeg 等
- 音频编解码:libfaac,opus,speex,ffmpeg 等
四、传输 - 数据如何传输?
流媒体,指通过互联网以流式传输方式的媒体。流媒体协议,则是服务器与客户端之间通信遵循但规定。说到音视频传输,我们不得不提流媒体协议,常见流媒体协议有:RTMP、RTCP、RTSP、RTMP、RTMFP、HTTP、HLS等。
网络视频点播业务,主流使用HTTP协议,其优势:
- HTTP 是基于 TCP 协议的应用层协议,媒体传输过程中不会出现丢包等现象,从而保证了视频的质量。
- HTTP 是绝大部分的 Web 服务器支持的协议,因而流媒体服务机构不必投资购买额外的流媒体服务器,从而节约了开支。
网络直播业务,主流使用RTMP为直播协议,其优势:
可以直接被 Flash 播放器支持,而 Flash 播放器在 PC 时代有着极高的普及率,并且与浏览器结合的很好。因此这种流媒体直播平台基本上可以实现了「无插件直播」,极大降低了用户使用成本。
结语
音视频技术道路很长,本文旨在搭建音视频知识知识网,许多知识未能深入,后续仍需要我们不断学习与实践,抱着追求极致的精神去探索发现!
后期我们会根据每个维度陆续写相关的测试文章,如果你有兴趣,请关注我们哦。