本文首要内容

一.视频相关根底内容
二.视频相关概念
三.H.264根本概念
四.H.264编码原理

一.视频相关根底内容

1、像素 Pixel

简略地说,像素、分辨率等都是用来描绘显现画面的精细程度或许清晰程度。咱们知道点构成线、线构成面,图画(图片和视频)也是这样。图画由许多许多个小点构成,这些小点咱们称之为像素,也叫像素点。相同物理面积下,像素点越多,显现的图画就越清晰,像素点越少,显现的图画越含糊。在许多情况下,它们选用点或许方块显现。举个比方,一张人像照片,假如有2000万个像素点,或许连毛孔都看得很清晰,假如只要100万个像素点或许鼻子眼睛都会含糊,这便是用像素的多少来描绘图片的清晰程度。咱们一般说的1000万像素、2000万像素、1亿像素指的便是图画的像素点总数。 如下图1和图2,图2是将图1扩大11倍的作用,或许看到许多小方块,这些小方块便是像素点。正常状况下由于它们太小看不到。
图1

iOS音视频底层(三)之音视频编码原理-H.264编码原理
图2
iOS音视频底层(三)之音视频编码原理-H.264编码原理

2、分辨率 Resolution

视频分辨率是指视频成像产品锁成图画的巨细或尺度,表达式为:水平像素数✖️垂直像素数。常见的图画分辨率有QCIF(176144) 、CIF(352288)、D1(704576)、720P(1280720)、1080P(1920*1080)。摄像机成像的最大分辨率是由CCD或CMOS感光器件决议的。现在摄像机根本支撑修正分辨率,是经过摄像机自带软件裁剪原始图画生成的。

3、帧率 Frame Rate

一帧便是一副停止的画面,接连的帧就形成动画,如电影等。咱们一般所说的帧数便是在1秒钟时刻里传输的图片的帧数,一般用fps(Frames Per Second)表明。每一帧都是停止的图画,快速接连地显现帧便形成了运动的假象,复原了物体其时的状况。高帧率能够得到更流通、更传神的动画。每秒钟帧数(fps)越多所显现的动作就会越流通。一般来说,图画帧率设置为25fps或30fps已经满足。

4、码流 Data Rate

码流是指视频图画经过编码紧缩后在单位时刻内的数据流量,也叫码率,是视频编码中画面质量操控中最重要的部分。相同分辨率下,紧缩比越小,视频图画的码率越大,画面质量越高。“。

分辨率、帧率、码流之间的关系:

  • 帧率与流通度成正比;
  • 分辨率与图画巨细成正比;
  • 分辨率一守时,码率和清晰度成正比;
  • 码率一守时,分辨率与清晰度成反比。

二.视频相关概念

1、视频文件格局

文件格局这个概念咱们比较了解,比方常见的word文档的文件格局是.doc,图片的文件格局是.jpg或png等。关于视频来说,常见的文件格局有.mov、.avi、.mpg、vob、 .mkv、.rm、.rmvb等。文件格局一般体现为文件在操作体系上存储时的后缀名,它一般会被操作体系用来与相应的翻开程序关联,比方.doc文件体系会默许调用word翻开,.avi或许.mkv文件体系会调用视频播映器翻开等。 相同是视频,为什么会有.mov、.avi、.mpg等多种文件格局呢?那是由于它们是经过不同的办法实现了“视频”。

2、视频封装格局

视频封装格局,简称视频格局,适当于一种储存视频信息的容器,里面包含了封装视频文件所需求的视频信息、音频信息和相关的装备信息(视频和音频的关联信息,怎么解码等装备)。一种视频封装格局的直接反映便是对应着相应的视频文件格局。如下为首要的视频文件封装格局:

iOS音视频底层(三)之音视频编码原理-H.264编码原理

  • AVI格局:对应的文件格局为.avi,英文全称Audio Video Interleave,即音频视频交织格局,是微软公司于1992年11月推出、作为其Windows视频软件一部分的一种多媒体容器格局。这种视频格局的长处是图画质量好,无损AVI能够保存alpha通道。缺陷是体积过于庞大,并且紧缩规范不一致,存在较多的凹凸版本兼容问题。

  • DV-AVI格局:对应文件格局为.avi,英文全称Digital Video Format,是由索尼、松下、JVC等多家厂商联合提出的一种家用数字视频格局。十分盛行的数码摄像机便是运用这种格局记载视频数据的。它能够经过电脑的IEEE 1394端口传输视频数据道电脑,也能够将电脑中修改好的视频数据回录到数据摄像机中。

  • WMV格局:对应的文件格局是.wmv、.asf,英文全称Window Media Video,是微软推出的一种选用独立编码办法并且能够直接在网上实时观看视频节目的文件紧缩格局。在同等视频质量下,WMV格局的文件能够边下载边播映,因而很合适在网上播映和传输。

  • MPEG格局:对应的文件格局有.mpg、.mpeg、.mpe、.dat、.vob、.asf、.3gp、.mp4等,英文全称Moving Picture Experts Group,是由运动图画专家组指定的视频格局,该专家组于1988年组建,专门负责视频和音频规范拟定,其成员都是视频、音频以及体系范畴的技能专家。MPEG格局现在有三个紧缩规范,别离是MPEG-1、MPEG-2和MPEG-4。MPEG-4是现在用的比较多的视频封装格局,它为了播映流式媒体的高质量视频而专门规划的,以求运用最少的数据取得最佳的图画质量。

  • Matroska格局:对应的文件格局是.mkv,Matroska是一种新的视频封装格局,它可将多种不同编码的视频及16条以上不同格局的音频和不同言语的字幕流封装到一个Matroska Media文件中。

  • Real Video格局:对应的文件格局是.rm、.rmvb,是Real Networks公司所拟定的音视频紧缩规范称为Real Media。用户能够运用RealPlayer依据不同的网络传输速率拟定出不同的紧缩比率,从而实现在低速率的网络上进行影像数据实时传送和播映。

  • QuickTime File Format格局:对应的文件格局是.mov,是Apple公司开发的一种视频格局,默许的播映器是苹果QuickTime。这种封装格局具有较高的紧缩比率和较完美的视频清晰度等特色,并能够保存alpha通道。

  • Flash Video格局:对应的文件格局是.flv,是由Adobe Flash延伸出来的一种网络视频封装格局,被许多视频网站所选用。

3、容器(视频封装格局文件)

封装格局:便是将已经编码紧缩好的视频数据和音频数据按照必定的格局放到一个文件中,这个文件被称为容器。能够理解为是一个“外壳”。 一般在容器中不只仅只寄存音视频数据,还会寄存一些视频同步的元数据,如字幕。一般情况下,多种数据需求用到不同的程序进行处理,可是文件在传输和存储时,这些数据都是被绑定在一同的。

常见的视频容器格局:

  • AVI:是其时为对抗Quicktime格局(mov)而推出的,只能支撑固定CBR恒定比特率编码的声响文件;
  • MOV:是Quicktime封装;
  • VMV:微软推出的,作为市场竞争;
  • mkv:全能封装器,有良好的兼容和跨渠道性、纠错性,可带外挂字幕;
  • flv:这种封装办法能够很好的维护原始地址,不容易被下载到,现在一些视频分享网站都选用这种封装办法;
  • MP4:首要应用于mpeg4的封装,首要在手机上运用。

4、音视频编解码办法

视频编解码的进程是指对数字视频进行紧缩或解紧缩的进程。

在做视频编解码时,需求考虑以下因素的平衡:视频的质量、用来表明视频所需求的数据量(即码率)、编解码算法的复杂度、针对数据丢掉和过错的鲁棒性(Robustness)、修改的方便性、随机拜访、编码算法规划的完美性、端到端的延时以及其他因素。

4.1 常见视频编码办法

  • H.26X系列:由国际电传视讯联盟远程通讯规范化安排(ITU-T)主导,包含H.261、H.262、H.263、H.264、H.265。

    • H.261:首要用于老的视频会议和视频电话体系。是榜首个运用的数字视频紧缩规范。本质上说,之后的一切的规范视频编解码器都是依据它规划的;
    • H.262:等同于MPEG-2第二部分,运用在DVD、SVCD和大多数数字视频播送体系和有线分布体系中。
    • H.263:首要用于视频会议、视频电话和网络视频相关产品。在对逐行扫描(一种对位图图画进行编码的办法,经过扫描或显现每行或每行像素,在电子显现屏上“制作”视频图画的两种常用办法之一,另一种是隔行扫描)的视频进行紧缩的方面,H263比它之前的视频编码规范在性能上有了较大的提高。尤其是在低码率端,它能够在确保必定质量的前提下大大的节省码率。
    • H.264:等同于MPEG-4第十部分,也被称为高档视频编码(Advanced Video Coding简称AVC),是一种视频紧缩规范,一种被广泛运用的高精度视频的录制、紧缩和发布格局。该规范引入了一系列新的能够大大提高紧缩性能的技能,并能够同时在高码率端和低码率端大大超越曾经的诸规范。
    • H.265:被称为高效率视频编码(High Efficiency Video Coding简称HEVC),是一种视频紧缩规范,是H.264的继任者。HEVC被以为不只提高图画质量,同时也能到达H.264两倍的紧缩率(等同于相同画面质量下比特率削减了50%),可支撑4K分辨率甚至到超高画质电视,最好分辨率可到达8192×4320(8K分辨率),这是现在发展的趋势。
  • MPEG系列:由国际规范安排机构(ISO)下属的运动图画专家组(MPEG)开发。

    • MPEG-1第二部分:首要运用在VCD上,有些在线视频也运用这种格局。该编解码器的质量大致上和原有的VHS录像带适当;
    • MPEG-2第二部分:等同于H.262,运用在DVD、SVCD和大多数数字视频播送体系和有线分布体系中;
    • MPEG-4第二部分:能够运用在网络传输、播送和媒体存储上。比起MPEG-2第二部分和榜首版的H.263,它的紧缩性能有所提高;
    • MPEG-4第十部分:等同于H.264,是这两个编码安排协作诞生的规范。
  • AMV、AVS、Bink、CineForm等。

4.2 常见音频编码办法

视频中除了画面一般还有声响,所以就涉及到音频编解码。视频中常用的音频编码办法如下:

  • AAC:英文全称Advanced Audio Coding,是Fraunhofer llS、杜比实验室、AT&T、Sony等公司共同开发,在1997年推出的依据MPEG-2的音频编码技能。2000年,MPEG-4规范呈现后,AAC从头集成了其特性,加入了SBR技能和PS技能,为了差异于传统的MPEG-2 AAC又称为MPEG-4 AAC。
  • MP3:英文全称MPEG-1 or MPEG-2 Audio Layer III,是曾经十分盛行的一种数字音频编码和有损紧缩格局,它被规划用来大幅下降音频数据量。在1991年,由德国埃尔朗根的研究安排Fraunhofer-Gesellschaft的一组工程师创造和规范化的。MP3的遍及,曾对音乐工业造成极大的冲击与影响。
  • WMA:英文全称Windows Media Audio,由微软公司开发的一种数字音频紧缩格局,本身包含有损和无损紧缩格局。

5、视频编解码办法和视频封装格局关系

能够把视频封装格局看作是一个装着视频、音频、视频编解码办法等信息的容器。一种视频封装格局能够支撑多种视频编解码办法。比方QuickTime File Format(.mov)支撑几乎一切的视频编解码办法,MPEG(.mp4)也支撑适当广的视频编解码办法。当咱们看到一个视频文件名为test.mov时,能够知道它的视频文件格局和视频封装格局别离是.movQuickTime File Format,可是无法知道他的视频编解码办法。专业的说法能够是以A/B的办法,A是视频编解码办法,B是视频封装格局。比方,一个H.264/MOV的视频文件,它的封装办法是QuickTime File Format,编码办法是H.264。

6、直播/小视频中的编码格局

  • 视频编码格局:

    • H.264编码的优势:低码率、高质量的图画、容错能力强、网络适应性强,具有很高的数据紧缩比率,在同等图画质量下,H.264的紧缩比是MPEG-2的2倍以上,MPEG-4的1.5-2倍;
    • 举例:原始文件的巨细假如为88GB,选用MPEG-2紧缩规范紧缩后变成3.5GB,紧缩比为25:1,而选用H.264紧缩规范紧缩后变成879MB,紧缩比为102:1。
  • 音频编码格局

    • AAC是现在比较抢手的有损紧缩编码技能,并且衍生了LC- AAC、HE-AAC、HE-AAC v2三.种首要编码格局;
    • LC-AAC是比较传统的AAC,首要应用于中高码率(>=80kbit/s)的场景编码;
    • HE- AAC首要应用于低码率(<=48kbit/s)场景的编码;
    • 在小于128kbit/s的码率下体现优异,并且多用于视频中的音频编码;

三.H.264根本概念

H.264是现在广泛选用的一种编码办法。关于H.264相关的概念,从大到小排序依次是:序列、图画、片组、片、NALU、宏块、亚宏块、块、像素。

1、图画

H.264中,图画是调集的概念,顶场底场都能够称为图画。一帧一般便是一幅完好的图画。 当收集视频信号时,假如选用逐行扫描,则每次扫描得到的信号便是一幅图画,也便是一帧。 假如选用隔行扫描(奇数、偶数行),则扫描下来的一帧图画就被分为两部分,每一部分都称为场,依据次第分为顶场底场。 帧和场的概念又带来了不同的编码办法:帧编码、场编码。逐行扫描合适于运动图画,关于运动图画选用帧编码更好;隔行扫描适用于非运动图画,关于非运动图画选用场编码更好。

iOS音视频底层(三)之音视频编码原理-H.264编码原理

iOS音视频底层(三)之音视频编码原理-H.264编码原理

2、片Slice、NALU、宏块

  • 每一帧图画能够分为多个片

  • NALU:全称Network Abstraction Layer Unit,网络提取层单元。是用来将编码的数据进行打包的,一个分片(Slice)能够编码到一个NALU单元,不过一个NALU单元中除了包容分片编码的码流外,还能够包容其它数据,比方序列参数集SPS。关于客户端其首要使命则是接纳数据包,从数据包中解分出NALU单元,然后进行解码播映。

  • 宏块Macroblock,分片是由宏块组成。

3、色彩模型

3.1 RGB色彩模型

开发场景中运用最多的应该是RGB模型。

iOS音视频底层(三)之音视频编码原理-H.264编码原理

在RGB模型中每种色彩需求3个数字,别离表明赤色R、绿色G、蓝色B,一般一个数字占用1字节,所以一种色彩需求24bits

3.2 YCbCr色彩模型(YUV一种)

假定界说一个亮度Luminance的概念来表明色彩的亮度,那它就能够用含R、G、B的表达式表明为:

Y = kr*R + kg*G + kb*B
* Y即亮度,kr、kg、kb为R、G、B的权重值。

这时界说一个色度Chrominance的概念来表明色彩的差异。

Cr = R - Y
Cg = G - Y
Cb = B - Y
* Cr、Cg、Cb别离表明在R、G、B上的色度重量。

上述模型便是YCbCr色彩模型根本原理。 YCbCr是归于YUV家族的一员,是在核算机体系中应用最为广泛的色彩模型。在YCbCr中Y是指亮度重量,Cb是蓝色色度重量,Cr指赤色色度重量。

在YUV中Y表明亮度,即灰阶值,U和V则是表明色度。
YUV的要害是在于它的亮度信号Y和色度信号U、V是别离的。那便是说即使只要Y信号重量而没有U、V重量,仍然能够表明出图画,只不过图画是是非灰度图画。

从ITU-R BT.601-7规范中拿到引荐的相关系数,能够得到 YCbCr 与 RGB 彼此转换的公式:

Y = 0.299R + 0.587G + 0.114B
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)
R = Y + 1.402Cr
G = Y - 0.344Cb - 0.714Cr
B = Y + 1.772Cb

此刻YCbCr仍然用了3个数字来表明色彩,会节省bit吗?结合视频中的图画和图画中的像素表明来阐明

  • 假定图片由如下像素组成:

iOS音视频底层(三)之音视频编码原理-H.264编码原理

  • 一幅图片便是一个像素阵列。每个像素的3个重量的信息是完好的,YCbCr 4:4:4。

iOS音视频底层(三)之音视频编码原理-H.264编码原理

  • 关于每个像素点都保留亮度值,可是省掉每行中偶素位像素点的色度值,从而节省了bit。YCbCr 4:2:2

iOS音视频底层(三)之音视频编码原理-H.264编码原理

  • 以下做了更多的省掉,可是对图片质量的影响却不会太大。

iOS音视频底层(三)之音视频编码原理-H.264编码原理

4、H.264根本概念

4.1 I帧、P帧、B帧

I帧: 要害帧,选用帧内紧缩技能

  • 例如,假如摄像头对着你拍摄,1秒之内实际发生的改变十分少。摄像机一般一秒钟会抓取几十帧的数据,比方动画便是25帧/s,一般视频文件便是30帧/s左右。关于一些要求比较高的,对动作精细度有要求,想要抓捕到完好的动作,高档的摄像机一般是60帧/s。为了便于紧缩数据,将榜首帧完好的保存下来。假如没有这个要害帧,后边解码数据是完成不了的,所以I帧特别要害。

P帧: 向前参阅帧,紧缩时只参阅前一帧,归于帧间紧缩技能。

  • 视频的榜首帧会被作为要害帧完好保存下来,而后边的帧会向前依靠,也便是第二帧依靠于榜首帧。后边一切的帧只存储与前一帧的差异,这样就能将数据大大的削减,从而到达一个高紧缩率的作用。

B帧: 双向参阅帧,紧缩时既参阅前一帧也参阅后一帧,归于帧间紧缩技能。

  • B帧,既参阅前一帧又参阅后一帧,这样就使得它的紧缩率更高,存储的数据量更小。假如B帧的数量越多,紧缩率就越高,是B帧的长处。B帧最大的缺陷是,假如是实时互动的直播,B帧就要参阅后边的帧才干解码,在网络中就要等候后边的帧传输过来。假如网络状况良好,解码会比较快,假如网络不好,解码会变慢。丢包时还需求重传,因而关于实时互动的直播,一般不会运用B帧;
  • 假如在泛文娱的直播中,能够承受必定程度的延时,需求比较高的紧缩比就能够运用B帧;
  • 假如在实时互动的直播中,需求提高实效性,就不能运用B帧了。

4.2 GOF(Group of Frame)一组帧、GOP(Group of Pictures)画面组

假如在一秒钟内有30帧,假如摄像机或许镜头一分钟内没有发生大的改变,能够把这一分钟内一切的帧画做一组。

  • 什么叫一组帧?便是一个I帧到下一个I帧,这一组的数据,包含B帧/P帧,称为GOF

  • GOP画面组:一组接连的画面。是序列中的一个图片集,用来辅助随机存取。GOP的榜首个图画有必要为I帧,这样就能确保GOP不需求参阅其他图画,能够独立解码。

4.3 SPS/PPS

SPS/PPS实际上便是存储GOP的参数。

  • SPS:Sequence Parameter Set,序列参数集。寄存帧数、参阅帧数目、解码图画尺度、帧场编码形式挑选标识等,是一组帧的参数集。

  • PPS:Picture Parameter Set,图画参数集。寄存熵编码形式挑选标识、片组数目、初始量化参数、去方块滤波系数调整标识等,与图画相关的信息。

在一组帧之前首要收到的是SPS/PPS数据,假如没有这组参数的话,无法解码! 假如在解码时发生过错,首要要检查是否有SPS/PPS,假如没有,是应为对端没有发送过来还是由于对端在发送进程中丢掉了。 SPS/PPS数据归类到I帧,这2组数据是绝对不能丢的。

5、视频花屏、卡顿原因

在观看视频时,会遇到花屏或许卡顿现象,这个与GOP有关。

  • 假如GOP分组中的P帧丢掉就会造成解码端的图画发生过错;
  • 为了防止花屏问题,一般假如发现P帧或许I帧丢掉,就不显现本GPP内的一切帧,只到下一个I帧来后从头刷新图画;
  • 由于丢包的这一组帧悉数扔掉了,无法刷新屏幕,图画就会卡着不动,即卡顿。
  • 总结来说,花屏是由于丢了P帧或许I帧,导致解码过错。卡顿是由于怕花屏将整组过错的GOP数据扔掉了,直达下一组正确的GOP

四.H.264编码原理

1、H.264紧缩技能

  • 帧内猜测紧缩。处理的是空域数据冗余问题。
    什么是空域数据?便是这幅图里数据在宽高空间内包含了许多色彩、亮光,人的肉眼很难发觉的数据咱们能够认作冗余,直接紧缩掉。

  • 帧间猜测紧缩。处理的是时域数据冗余问题。 摄像头在一段时刻内所捕捉的数据没有较大的改变,针对这一时刻内的相同的数据进行紧缩,叫作时域数据紧缩。

  • 整数离散余弦改换(DCT),将空间上的相关性变为频域上无关的数据,然后进行量化。 傅立叶改换能够把一个复杂波形图改换成许多正弦波,只是它们之间的频率和振幅不相同,假如它们在频率上没有一致性,就能够对其进行紧缩处理。

  • CABAC紧缩:无损紧缩。

2、宏块区分与分组

H.264宏块区分,能够参阅下图。

iOS音视频底层(三)之音视频编码原理-H.264编码原理

将一个图片左上角用宏块描绘,便是宏块为88的元素。取出的色彩,像右边的去描绘。 根本图片的宏块区分完成了,是否每个宏块都是88的?当然不是,还有子块区分。
子块区分:

iOS音视频底层(三)之音视频编码原理-H.264编码原理

在这个大的宏块里,能够再细化。假如中间这个悉数都是蓝色的宏块,就能够用一个色块,愈加简略的描绘。

  • 比照MPEG2和H.264,发现MPEG2存储时还算比较完好,占用的空间相对较多;而H.264削减了许多空间,重复的色彩就会用简略的色块描绘。

帧分组 例如,一个台球从一个方位移动到另一个方位,其桌面背景是相同的,只是球体方位发生了改变,就能够把这一组帧区分为一组。

3、组内宏块查找

实际上如图,将台球从一角滚动到别的一角,相邻的2幅图做组内的宏块查找。将图逐行扫描,扫描到第三行,发现了台球,然后围绕它的周围查找,发现了有类似的图块。

iOS音视频底层(三)之音视频编码原理-H.264编码原理

运动预算
把它们放在同一张图中,即台球刚开始的方位1和移动到的方位2,之间有一个运动矢量,包含运动的方向和间隔。将一切的图比较,最终形成右图,右图中每一个赤色的箭头标注的都是一个运动矢量,许多帧就会形成一个接连的运动预算。

运动矢量与补偿紧缩
将接连的运送预算换算成如图。对其进行紧缩,一切帧的背景都相同,改换的便是它的运动矢量和台球的数据。实际经过运算后,留下来的就只要运动矢量数据和残差值的数据,经过这样的运算,只需求要存储这些数据,到达紧缩的作用,这个进程便是帧间紧缩技能的原理。

iOS音视频底层(三)之音视频编码原理-H.264编码原理

4、帧内猜测

帧内紧缩是针关于I帧的,处理的是空间的数据冗余。而帧间紧缩处理的是时刻数据冗余。帧间紧缩技能是将很多在时刻轨迹上相同的数据紧缩掉,只留下运算估量和残差值。

帧内紧缩原理 首要要经过核算,挑选用哪种形式,对每一个宏块选用不同的形式运算。当每个宏块都选定了形式之后,就形成了下图作用,每个宏块都挑选一个帧内猜测的形式,帧内猜测一共有9种形式,具体参阅H.264系列文章(三)——帧内猜测。让每个宏块挑选好形式之后,就能够运用块猜测形式,猜测完后将得到一张猜测图。左边是猜测图,右边是原图。

iOS音视频底层(三)之音视频编码原理-H.264编码原理

核算的猜测图和原图是有不同的,原图比较圆润,猜测图相比照较粗糙。依据2张图能够进行差核算。

核算帧内猜测残差值 如下图为原图,经过猜测与原图的差得出一个结果:灰色图便是残差值。

iOS音视频底层(三)之音视频编码原理-H.264编码原理

猜测形式与残差值紧缩 拿到残差值后,进行紧缩。紧缩时保存残差数据和每个宏块挑选的形式信息数据。解码时,首要经过宏块的形式信息核算出猜测图,然后将猜测图与残差值进行累积,就能复原原图画,这个进程便是”帧内紧缩技能”的原理。