iOS设备音视频编码(一)

一、为什么要进行视频编码

未经压缩的视频的数据量巨大,录制一分钟视频, 需要多大的空间来保存了?

1> 为了不让用户感受到卡顿效果, 1秒钟之内至少需要16帧画面(正常开发通常会采集30帧),也就是编码设置的fps参数

2> 假如该视频是一个1280*720分辨率的视频(正常情况下会比这个大很多)

结果:128072016*60≈843.75M

一分钟的视频843M,如果保证播放不卡顿,则需要15M/S 的下载速度,如果使用蜂窝网络...

结论:1.如此大的传输数据量,现行带宽压力巨大,流量资费大,且存储数据量也极大,所以导致编码技术的产生

           2.视频采集完成后,需要先编码,再传输,在解码,再播放(重现)


二、为什么视频可以压缩编码?

采集到的视频源存在冗余信息,冗余信息分为以下三类:

1.空间冗余:图像相邻像素之间有较强的相关性

2.时间冗余:视频序列的相邻图像之间内容相似

3.视觉冗余:人的视觉系统对某些细节不敏感

4.其他冗余

空间冗余

空间冗余是指在同一张图像中,有很多像素点表示的信息是完全一样的,如果对每一个像素进行单独的存储,必然会非常浪费空间,也完全没有必要,此处部分存储的颜色色值相同,仅仅对应空间位置不同。


时间冗余

时间冗余是指多张图像之间,有非常多的相关性,由于一些小运动造成了细小差别。

我们可以看到两张图片相隔很近,彼此之间很多元素相同,如果对相同部分多次存储,则形成了冗余

如图:


视觉冗余

1.人类视觉系统HVS

2.对高频信息不敏感

3.对高对比度更敏感

4.对亮度信息比色度信息更敏感

5.对运动的信息更敏感

数字视频系统的设计应该考虑HVS的特点:

1.丢弃高频信息,只编码低频信息

2.提高边缘信息的主观质量

3.降低色度的解析度

对感兴趣区域(Region of Interesting,ROI)进行特殊处理

如图:


经过一系列的去处冗余信息,可以大大的降低视频的数据量,更利于视频的保存、传输,去除冗余信息的过程,我们就称之为压缩编码

三、压缩编码的标准

1.  标准化组织:

ITU:International Telecommunications Union

VECG:Video Coding Experts Group(国际电传视讯联盟)

ISO:International Standards Organization

MPEG:Motion Picture Experts Group(国际标准组织机构)

2.   H.26X系列(由ITU[国际电传视讯联盟]主导)

H.261:主要在老的视频会议和视频电话产品中使用

H.263:主要用在视频会议、视频电话和网络视频上

H.264:H.264/MPEG-4第十部分,或称AVC(Advanced Video Coding,高级视频编码),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。

H.265:高效率视频编码(High Efficiency Video

Coding,简称HEVC)是一种视频压缩标准,H.264/MPEG-4

AVC的继任者。可支持4K分辨率甚至到超高画质电视,最高分辨率可达到8192×4320(8K分辨率),这是目前发展的趋势,尚未有大众化编码软件出现

3.MPEG系列(由ISO[国际标准组织机构]下属的MPEG[运动图象专家组]开发)

MPEG-1第二部分:MPEG-1第二部分主要使用在VCD上,有些在线视频也使用这种格式

MPEG-2第二部分(MPEG-2第二部分等同于H.262,使用在DVD、SVCD和大多数数字视频广播系统中

MPEG-4第二部分(MPEG-4第二部分标准可以使用在网络传输、广播和媒体存储上)。

其他系列:

AMV · AVS · Bink · RealVideo · Theora · VC-1 · VP3 · VP6 · VP7 · VP8 · VP9 · WMV


四、目前应用最广泛的H.264(AVC)

H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称

个人理解:

在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内,所以对于一段变化不大图像画面,我们可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别,这样B帧的大小就只有完整帧的1/10或更小!B帧之后的C帧如果变化不大,我们可以继续以参考B的方式编码C帧,这样循环下去。这段图像我们称为一个序列:序列就是有相同特点的一段数据,当某个图像与之前的图像变化很大,无法参考前面的帧来生成,那我们就结束上一个序列,开始下一段序列,也就是对这个图像生成一个完整帧A1,随后的图像就参考A1生成,只写入与A1的差别内容。

在H264协议里定义了三种帧

I帧:完整编码的帧叫I帧

P帧:参考之前的I帧生成的只包含差异部分编码的帧叫P帧

B帧:参考前后的帧编码的帧叫B帧

H264采用的核心算法是帧内压缩和帧间压缩

帧内压缩是生成I帧的算法

帧间压缩是生成B帧和P帧的算法

H264的压缩方法:

分组:把几帧图像分为一组(GOP,也就是一个序列),为防止运动变化,帧数不宜取多

定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;

预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;

数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

序列(GOP)

在H264中图像以序列为单位进行组织,一个序列是一段图像编码后的数据流。

一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。

H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。

这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。

IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码,这样可以避免前一个IDR图像错误而导致整个视频无法播放。

一个序列就是一段内容差异不太大的图像编码后生成的一串数据流

当运动变化比较少时,一个序列可以很长,因为运动变化少就代表图像画面的内容变动很小,所以就可以编一个I帧,然后一直P帧、B帧了。

当运动变化多时,可能一个序列就比较短了,比如就包含一个I帧和3、4个P帧。

在视频编码序列中,GOP即Group of picture(图像组),指两个I帧之间的距离

I帧、P帧、B帧的预测方向


ss

I帧、P帧、B帧实际顺序&编码后顺序


五、H264分层设计

分层设计

H264算法在概念上分为两层:

1.视频编码层(VCL:Video Coding Layer)负责高效的视频内容表示,

2.网络提取层(NAL:Network Abstraction Layer)负责以网络所要求的恰当的方式对数据进行打包和传送

这样,高效编码和网络友好性分别由VCL和NAL分别完成,而之前我们学习的编码方式,都是属于VCL层,VCL层可看做H264编码算法中去除冗余数据的过程,更详细的介绍请参考链接

NAL设计目的:

根据不同的网络把数据打包成相应的格式,将VCL产生的比特字符串适配到各种各样的网络和多元环境中。

NAL的封装方式:

NAL是将每一帧数据写入到一个NAL单元中,进行传输或存储的

NALU分为NAL头和NAL体

NALU头通常为00 00 00 01,作为一个新的NALU的起始标识

NALU体封装着VCL编码后的信息或者其他信息

封装过程:

I帧、P帧、B帧都是被封装成一个或者多个NALU进行传输或者存储的

I帧开始之前也有非VCL的NAL单元,用于保存其他信息,比如:PPS、SPS

PPS(Picture Parameter Sets):图像参数集

SPS(Sequence Parameter Set):序列参数集

在实际的H264数据帧中,往往帧前面带有00 00 00 01 或 00 00 01分隔符,一般来说编码器编出的首帧数据为PPS与SPS,接着为I帧,后续是B帧、P帧等数据



六、编码方式

编码的方式有两种:

硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等

软编码:使用CPU进行编码,软编码通常使用:ffmpeg+x264

ffmpeg:是一套开源的、用于对音视频进行编码&解码&转化计算机程序

x264:x264是一种免费的、开源的、具有更优秀算法的H.264/MPEG-4 AVC视频压缩编码方式

对比:

软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低

硬编码:性能高,对CPU没有压力,但是对其他硬件要求较高(如GPU等)

iOS中编码方式:

在iOS8之前,苹果并没有开放硬编码的接口,所以只能采用ffpeng+x624进行软编码

在iOS8之后,苹果开放了接口,并且封装了VideoToolBox&AudioToolbox两个框架,分别用于对视频&音频进行硬编码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 为什么进行压缩编码? 视频是由一帧帧的图像组成(见实例)比如一张Gif图片其实就可以被分解成若干张单独的图片1.g...
    Tate_code阅读 970评论 0 3
  • 视频编码介绍 为什么进行压缩编码? 视频是由一帧帧的图像组成(见实例)比如一张Gif图片其实就可以被分解成若干张单...
    coderwhy阅读 2,292评论 3 15
  • 在目前,无论在各个行只要和视频相关的,我们都可以看见H264相关的身影,H264作为目前使用最广泛的视频压缩标准,...
    DramaScript阅读 21,540评论 7 56
  • 视频压缩编码的目标1)保证压缩比例2)保证恢复的质量3)易实现,低成本,可靠性 压缩的出发点(可行性)1)时间相关...
    rogerwu1228阅读 4,123评论 0 11
  • 老实讲,这本小说并没有引起我很大的共鸣,即使有,也是断断续续的几个句子,剥离了小说的环境才让我有那么一点点的感触。...
    Anastasia_流云阅读 283评论 0 1