每个采样使用多少bit存放,一般采用16bit
常见的有8k、16k、32k、44.1k、48k
人耳能听到的声音频率范围是20HZ~20000HZ;根据奈奎斯特采样定理,采样率需要高于被采样信号频率的2倍时才能将被采样信号重建;
因此对信号采样时的频率至少为40KHZ,常见的AAC音频采用的是44.1khz的频率;
单声道、双声道、多声道
模拟信号 => 采样 => 量化 => 编码 => 数字信号
PCM音频流的码率 = 采样率 * 采样大小 * 声道数
消除冗余数据
有损压缩技术;这里的冗余数据主要包括人类听觉范围之外的音频信号以及时域、频域掩蔽掉的音频信号;
哈夫曼无损编码
无损编码技术,是一种变长字节编码(频率高的字符使用较短的编码,频率低的字符使用较长的编码)
视频可以看做是满足一定条件的一系列连续图像的合集;
视频技术泛指将一系列静态影像以电信号的方式加以捕捉、纪录、处理、储存、传送与重现的各种技术。
上面提到了一系列图像想要成为视频需要满足一定条件,这个条件就是结合人眼的视觉暂留特性使得观看者感受不到不连贯性;
人眼可见光范围
400nm(紫)~700nm(红),敏感度曲线类似于正态分布,对555nm左右的光线最为敏感
视细胞
主要有视锥细胞和视杆细胞
视锥细胞:主要感受强光和颜色的细胞;在视网膜的黄斑中央凹处,只有视锥细胞,光线可直接到达视锥细胞,故此处感光和辨色最敏锐
视杆细胞:以视杆细胞为主的视网膜周缘部,则光的分辨率低,色觉不完善,但对暗光敏感
韦伯定律
韦伯定律是描述物理量与心理量之间关系的定律,其表明心理量与物理量的对数呈线性关系;也就是心理量的增加落后于物理量,呈对数关系;也就是说人眼对暗光的变化感知能力高于强光;
通俗理解:屋子里没有蜡烛到点燃一支蜡烛时感知的亮度增加 >> 已有99支点燃的蜡烛时增加一支感知的亮度增加;
在光学系统感知中也同样实验;如下图,我们将这类曲线称为gamma曲线(幂函数);γ<1时曲线对亮度的变化为下凸;γ>1时曲线对亮度的变化为上凸,同等亮度增量带来的心理感知量增量逐渐变大;
马赫效应
当亮度发生跃变时,会有一种边缘增强的感觉,视觉上会感到亮侧更亮,暗侧更暗。马赫效应会导致局部阈值效应,即在边缘的亮侧,靠近边缘像素的误差感知阈值比远离边缘阈值高3~4倍,可以认为边缘掩盖了其邻近像素,因此对靠近边缘的像素编码误差可以大一些。
视觉暂留特性
指的是光线停止进入人眼后,人眼对物体的视觉感知仍然能够持续一定的时间不消失,直到过了某个时间点或者有新的图像替代它;
有研究表明这个时长大约为1/15秒,因此早期的无声电影为16fps即可感受不到停顿,至于电影24fps的来源可以参考文献4、5;
如下图的流程图所示:
将自然界中的真实场景记录下来并最终展示到显示器上,通常需要通过采集、编码、传输、解码、显示等步骤;这其中需要经过两个重要的非线性变换OETF和EOTF;
光电转换函数,将光信号转为对应的电信号;
电光转换函数,将电信号转为对应的光信号;
encoding gamma曲线幂指数小于1,display gamma曲线幂指数大于1;
两者的乘积大于1时心理感知量略迟滞于自然场景亮度变化;
但是由于人眼的感知其实与周围环境亮度也相关,在较暗的地方感知度相对更强,所以一般电影院采用的gamma值(乘积)为1.5,而明亮的室内采用1.125;
常见的gamma应用:sRGB:编码gamma - γ=0.45(1/2.2), CRT:显示gamma - γ=2.2;
先上答案:gamma 校正实际上是用来解决显示设备亮度灰阶不足的问题的。如果设备存储和显示位宽支持扩展到32位甚至更高,那么的确可以不需要gamma校正;
两段 gamma 校正实际上是一对逆过程,一个将光信息转化为数字
信息,一个将数字信息转化为光信息。因此,按照常理来说,并不需要进行这样复杂的
非线性映射,只需要将归一化之后的光信息记录下来,然后再让显示设备进行输出即可。
从这种角度来说,gamma 校正是一个不必要的操作。然而我们目前常用像素位宽为8位,也就是说我们图像灰阶需要用256级模拟真实场景亮度;
根据韦伯定律,人眼对亮度的感知呈现γ<1的gamma曲线;参考下图可以看到,我们需要用256*20%的灰阶取表示人眼可感知的纯黑到中灰的一半亮度范围,而用剩余80%灰阶表示人眼感知的另一半亮度范围;这样显然不合理;
因此,更加合理的显然是在记录时结合人眼的亮度非线性特性,采用γ<1的gamma函数,使得量化亮度128的自然界亮度正好映射为心理感知量的0.5;
理论上,encoding gamma和display gamma的乘积为1时,显示图像与真实场景是一种线性映射关系;
然而大多数情况下,两个gamma值的乘积并非1,通常稍大于1;光线明亮的室内约为1.125,电影院为1.5
即frame per second,每秒钟视频的帧数,表征视频的流畅性,更高的帧率可以更清晰地记录高速运动物体的细节等;
通常的电影帧率24fps,电视帧率25fps;目前很多视频已经出现了29.97fps、30fps、50fps、60fps、120ps等;下面的视频是有png序列通过ffmpeg编码的fps=16的视频,并未感受到不连贯;
单位内传输的数据量,单位kb/s、Mb/s;相同条件下码率越大,画质越高,视频体积越大;
一些码率控制相关的需要区分的概念:
CBR:Constant Bitrate——固定码率;所有视频内容从头至尾采用一致的码率进行编码;容易预估出文件体积;
VBR:Variable Bitrate——动态码率;根据视频内容的复杂程度采用不同的码率;高复杂度采用更高的码率,简单画面使用较低的码率;
ABR:Average Bitrate——平均码率;可以看做是CBR和VBR的一种折中,它将视频分为很短小段(比如50帧),每段视频采用固定的码率,而在内部又分别对高复杂度视频和低复杂度视频采用不同的码率;可以在提供较好质量的同时能够使文件体积可预测;
指的是人眼能够感知的所有颜色范围;而通常由于显示器的硬件能力限制,通常只能将一部分的颜色范围展示出来,因此出现了不同的色域标准;
常见的普通显示器采用的是sRGB,打印机采用的是Adobe RGB;NTSC色域是美国的标准电视广播传输的一套标准,在美国、墨西哥、加拿大、中国台湾等国家和地区使用;
sRGB ≈ 72% NTSC,Adobe RGB≈95% NTSC;
更宽的色域及更深的位深可以带来更好的色彩还原;
位深 (bitdepth)
目前主流的仍为8bits,部分尝试10bits、12bits;
位深不仅可以描述灰阶数,也可以描述视频中可以使用的颜色数;也就是说,更高的位深一定程度上可以带来更高的亮度和更丰富的色彩体验,从而获得还原度更加真实的观看体验;
常见的颜色模型有RGB、CIE XYZ、HSL、YUV等
基本分为美国标准的NTSC和欧洲标准的PAL制式,具体可以参考文献——What’s the Difference Between NTSC and PAL?
美国等小部分国家和地区的交流电频率为60HZ,对应的电视频率为29.97fps(Drop-frame Timecode, 保障彩色电视机在黑白信号接收器中正常播放;主要是彩色电视机引入了彩色副载波频率信号,这些信号在黑白电视上无法被解析,因此画面是静止的,所以降低频率以保证在黑白和彩色电视机上都能正常播放)、30fps(黑白电视);其他多数国家都为50HZ,采用的是PAL制式,对应的电视频率为25;
关于为什么是29.97fps可以参考文献——Drop Frame vs. Non-Drop Frame and How It Affects Captions & Subtitles
我们经常看到一些视频是720p、1080p,这里的P到底指的是什么呢?
电视信号的传输方式分为逐行扫描(progressive)和隔行扫描(interlaced)
逐行扫描:从左到右、从上到下扫描和图像 —— 早期带宽成本很高;
隔行扫描:每帧图像分为奇数场和偶数场,两个场的扫描时间存在一定的时间差,利用人眼视觉暂留特性相互补足形成完整的画面
编码格式决定了视频数据具体如何进行编码处理
编码格式 | 类型 | 描述 | 优缺点 |
---|---|---|---|
HEVC/H.265 | Lossy/Lossless | 提供更高的压缩率,压缩时间相对H.264更长;提供更加丰富的编码方式、分辨率、直播流支持等; | 提供更高的压缩率,压缩时间相对H.264更长 |
MPEG-4 AVC | Lossy/Lossless | 也称为H.264、MPEG-4 Part10,是由ITU-T及MPEG共同推进的标准,是目前使用最广泛的一种编码格式;提供较好的压缩率和画质,主要应用于蓝光光盘以及Netflix、Hulu、Youtube等网络流; | 相对于MPEG-4 Visual有较高的压缩率和较高的视频质量(针对Intra Prediction进行了改造); |
MPEG-4 Visual | Lossy | 即MPEG-4 Part 2,由MPEG(运动图像专家组)提出,向下兼容H.263;是另一种较为通用的编码方式 | 也是一种较为通用的编码方式,但是压缩率不及AVC |
VP8/VP9 | Lossy/Lossless | 由Google提出的两种编码方式;相对于HEVC(更好的图像质量),提供更加一致可靠的流 | 支持webm视频 |
AV1 | Lossy/Lossless | 开源、免费的一种编码格式,主要用于视频网络传输等,如HTML5 Video;可以看做是VP9的继承者,支持更高的压缩率; | the AV1 reference encoder achieved 34%, 46.2% and 50.3% higher data compression than libvpx-vp9, x264 high profile, and x264 main profile respectively. |
编码器是编码方式的具体实现
x264、x265
openH264:与x264类似,但是支持Scalable Video Coding技术,SVC的码流除了正常的高质量视频流,还包含一些子视频流的集合——这些子集在时域、空域或者质量上提供了伸缩性,如更低的帧率、更低的分辨率、更低的质量(码流等),但是硬件支持程度不完善;纯软解码会造成较高的CPU占用;
vp8/vp9
容器格式,又称封装格式;可以理解为是将多个多媒体数据流合成在一个文件中的一类计算机文档,一般包括视频流、音频流、metadata;
由于容器并不提供数据和元数据如何进行编码的,因此有时候会遇到解封装成功但是无法解码的情况;
不同的容器格式提供了不同的视频质量、文件大小、视频回放支持等;
元数据可以理解为“the data of data”,即音视频的一些描述信息,包括编码格式、码率、分辨率等信息;
容器格式 | 文件后缀 | Owner | 优缺点 |
---|---|---|---|
MP4(MPEG-4 part14) | .mp4 | MPEG | 广泛支持的一种容器格式,支持h.264/h.265及所有版本的MPEG-4标准;能够保持视频质量的同时提供相对较小的文件体积;许多大型的流媒体服务都使用mp4,如YouTube/Vimeo等; |
AVI | .avi | Microsoft Windows | 支持很多编解码器,需要进行很多的不同文件的设置;文件体积较大,导致其不太适用于流媒体传输和下载;更适用于本地视频的存储;不支持B帧、不支持VFR(可变帧率) |
FLV(Flash) | .flv | Adobe Inc. | 以前使用较多的一种视频格式,由于较小的文件体积、广泛的浏览器插件支持及第三方flash播放器的支持存在了很多年;目前使用逐渐减少 |
MPEG transport stream(TS) | .ts | MPEG | 主要用于广播系统如DVB、ATSC、IPTV等; |
QuickTime File Format | .mov, .qt | Apple Inc. | 提供非常高的视频质量,但文件体积也很大;通用性较差,某些播放器并不支持; |
WebM | .webm | 由Google提出,支持透明视频; |
不同场景下视频容器格式的选择:
一般应用场景可以分为
以H.264为例:
都是使用帧内预测的关键帧;IDR帧即 Instantaneous Decode Refresh frame,即解码到该帧视频时会立即刷新和重置缓存;两个IDR之间的视频可以单独寻址和解码出来,可以看做是一个独立的视频段;所有IDR后的视频不可以参考该IDR帧前的所有帧;
前向参考帧,压缩时参考前一帧的信息;
双向参考帧,编码时参考前后两帧的信息;
两个I帧之间的多帧图像,通常将一个场景中将场景变化较小的一组图像划分为一组,称为一个GOP
由于采用的压缩方式不同,它们占用的比特数也不同,一般I帧 > P帧 > B帧;当然压缩率的代价是压缩速率和性能,由于B帧需要双向数据作为参考,因此缓存的数据也更多,对硬件的要求等也越高;因此,部分视频只有I帧和P帧;
每个GOP中仅有一个I帧,GOP size为两个I帧之间的帧数;GOP一般使用2个数字描述——分别表示I/P之间的间隔及GOP size;如M=3,N=12,则对应的GOP为:
IBBPBBPBBPBB(I)
码率一定时,一定条件下提高GOP size,可以提升P、B帧的占比,因此可以获得较好的图像质量(P、B具有更好的压缩率);
当然,P、B帧也具有更高的复杂度,过大的GOP size也会影响编码效率,同时影响seek定位操作的响应速度;
Picture Parameter Set,图像参数集,nal_unit_type等于8;多个NALU组成一个视频帧,该视频帧相关的元数据(metadata)保存在PPS中;
PPS通常独立保存在一个NAL unit中;
包含熵编码模式标识、切片数目(默认slice group=0标识该帧为一个slice group)等信息;
Sequence Parameter Set,序列参数集,nal_unit_type等于7;
多个PPS组成一个视频序列,该序列相关的原始数据保存在SPS中;
包含序列帧数、参考帧数目、码流的profile/level等信息
Supplymental Enhancement Information,辅助增强信息,包含了增强视频的 一些辅助信息;比如直播答题中增加一些与视频信息同步的文本信息,或者字幕信息控制等用户自定义信息均可以放在SEI中;生成SEI中的方式包括编码时生成SEI及容器封装时写入SEI信息等;
根据I、B、P的关系,如果按照顺序进行传输时,序列为I->B->P;这时在解码端收到序列时由于B帧需要依赖于P帧的信息,这时候传输顺序和解码顺序不一致,B帧和P帧的解码和显示时间就变得不确定了,因此引入了PTS和DTS;如果没有B帧,那么传输顺序与解码顺序是一致的;
PTS即Presentation Time Stamp,显示时间戳,用于表示什么时候去显示该帧;
DTS即Decode Time Stamp,解码时间戳,用于表示什么时候去解码该帧;
帧分组:将场景变化较小的一组图像划分为一组,称为一个GOP
组内宏块查找:将一组图中的相邻两个图进行逐行扫描比较;
编码器从缓存区取出前两帧视频进行宏块扫描,如果发现前一帧中有物体,则会在第二帧的对应搜索窗口内进行搜索。如果找到该物体,那么通过比较这两帧图像可以得到运动物体相关的矢量(大小和方向),将两者相减得到的差值就是补偿数据,第二帧图像的完整数据可以根据前一帧图像的数据及补偿数据进行完全恢复;
是运动预测的基本单位,通常一张完整的帧可以分为多个宏块,宏块是选择特定预测类型的基准,整个图像可以使用不同的预测类型;H.264中宏块可以进一步划分为子块,能够提供更高的压缩率;
编码的过程基本分为预测(时/空域:帧内、帧间)、变换(频域:DCT)、量化(模拟到离散,降采样)和熵编码(CABAC等);
根据官方文档,h.264主要有两部分构成——VCL & NAL;如下,是h.264的层级结构示意图;
定义:主要处理空域的数据冗余,为一帧中的每个宏块找出最相近的预测模式,然后将预测模式与对应的残差信号保存用于解码(H.264提供9中帧内预测模式);
理论基础:人眼对图象都有一个识别度,对低频的亮度很敏感,对高频的亮度不太敏感。所以基于一些研究,可以将一幅图像中人眼不敏感的数据去除掉。
主要处理时域上的数据冗余,主要是运动估计与运动补偿方式;
主要处理频域的数据冗余,一般对帧内预测和帧间预测后的残差信号进行DCT处理;DCT具有能量聚集的特性,声音、视频等信号的能量大都集中在DCT变换后的低频信号;将视频信号进行DCT变换,然后降低高频分量占比(音视频细节,人眼对高频分量不敏感)然后采用熵编码,可以有效提高压缩率;
DCT变换可以看做是DFT的一种特殊形式,首先看DFT变换公式:
当x[n]为偶函数时,实部为偶函数,虚部为奇函数,所以Im[k]为0;此时DFT表示为:
所以DCT就是将输入信号x[n]限制为偶函数的DFT;
context-adaptive binary arithmetic coding,内容自适应二元算数编码,是H.264/AVC熵编码的一种;H.264/AVC标准定义了两种熵编码类型:CABAC和VLC(Variable-length Coding);残差信号做完DCT后需要进一步使用CABAC进行无损压缩;
直播产品的种类:
RTP(Real-Time Transport Protocol)是一种基于UDP协议的主要用于流媒体数据传输的协议,RTP建立在UDP之上,应用层之下
RTCP(Real-Time Transport Control Protocol)主要用于质量控制,它为RTP提供的服务质量提供反馈,包括传输字节数、已接收/丢失分组数、网络时延等统计信息;这些信息可以供使用应用的服务进行策略调整以提高服务质量;
实时消息传输协议是由Adobe推动的一种基于TCP协议的、在服务端和观看端传输实时音视频流数据的应用层协议。它具有多个变种:
实时流传输协议,是一种应用层协议;该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输
是苹果公司2009年提出的一种基于HTTP的流媒体网络传输协议,支持点播和直播;它适用范围较广,包括Android和ios移动设备、桌面浏览器、智能电视、HTML5视频播放器等;支持动态码率自适应技术;
HLS主要包括.m3u(8)索引文件和.ts媒体分片文件
m3u8文件记录了每个切片文件的地址及播放顺序,这样可以通过它解析获得视频播放的地址和顺序,每次根据网络状况选择下载对应的切片;
#EXTM3U // m3u8文件第一行必须的标签
#EXT-X-VERSION:3 // 版本
#EXT-X-MEDIA-SEQUENCE:35232 // 播放列表第一个切片文件的序列号
#EXT-X-TARGETDURATION:10 // 每个切片允许的最大时长
#EXTINF:10.000, // 当前切片时长
cctv6hd-1549272376000.ts
#EXTINF:10.000,
cctv6hd-1549272386000.ts
#EXTINF:10.000,
cctv6hd-1549272396000.ts
#EXTINF:10.000,
cctv6hd-1549272406000.ts
#EXTINF:10.000,
cctv6hd-1549272416000.ts
#EXTINF:10.000,
cctv6hd-1549272426000.ts
内容分发网络;
应用: 解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。
CDN是只对网站的某一个具体的域名加速。如果同一个网站有多个域名,则访客访问加入CDN的域名获得加速效果,访问未加入CDN的域名,或者直接访问IP地址,则无法获得CDN效果。
用户从边缘节点获取数据
主干网节点——主要用于缓存,减轻源站压力
内容供应商将内容放到源站
传统CDN网络 —— 过期拉取
音视频直播流CDN网络 —— 推拉结合;源节点直接push到主干接点,访问时从边缘节点或主干接点pull;
CDN网络结构如下所示,基于此简述用户访问CDN网络的过程;
多个CDN网络通过光纤等将不同网络的主干接点连接起来;
如果有个服务在联通,当一个电信用户用户访问该服务时,首先会通过DNS访问离其最近的边缘节点;
如果访问的服务不在该边缘节点,向上到该网络的主干接点进行查询;
主干接点首先会在缓存中查找,如果没有找到会判断服务是在电信还是联通;
判断该服务是联通的服务后,首先访问联通的主干接点,没有则继续向上查找到其源节点;
什么是QUIC协议
参考文献