注意 在测试硬解码和软解码的时候请使用真机调试,模拟器会内存泄露,而且会卡顿。
VideoToolBox iOS 原生的硬解码的库
背景介绍:
主要应用了硬解码的过程
先说一下 硬解码和软解码
在iOS 8.0以前 苹果是不支持硬解码的
如果项目中包含直播的模块,就需要使用软解码
软解码会比较消耗CPU
一个直观的体现就是手机发烫。
好在现在苹果手机几乎没有8.0以下的设备了
硬解码是用硬件的GPU来解码的,拥有更好的体验。
为什么解码这么消耗内存呢
因为传输的数据是视频。
视频数据不同于文字和简单的网页,数据量巨大,
并且在直播环境下还要保证实时性,
一个很简答的例子,传送一个100M的文件给别人,
取决于双方的网速,传输时间很久。
但视频直播不一样,要保证传输的实时性,只能减少传输的
数据大小,但是视频的内容又要保证质量
唯一的办法就是压缩,将摄像头捕捉的视频,压缩成小的视频
传输给客户端,客户端接收到了视频,再解压缩为大的文件。
保证实时性的话 就传输压缩的图像,客户端不断接收到文件,不断转换为图像就可以了。
为此 有一个视频传输的编码标准,被称为H.264 在世界范围内通用,
他采用的压缩算法,能够很好的适应网络环境,并极大的压缩图像的尺寸的同事,保证图像的质量,因此成为协议的标准,我们对视频的处理,很多都是针对H.264展开的。
我们把视频图像转换为H.264的过程 称为编码,把H.264 转换为真实图像的过程,称为解码。
这里我们只讲解码的过程。
iOS 的软解码 是用的 FFMpeg 来进行的
iOS 的硬解码 是用的 VideoToolbox 来进行的
一般在模拟的时候 都会找个h.264的文件来模拟硬解码的解析。
在真实环境中H.264 是以流的方式传递的,数据会一帧一帧的传输过来。
我们来梳理以下到显示到屏幕上所经历的过程。