VideoToolBox H.264 流硬解码


注意 在测试硬解码和软解码的时候请使用真机调试,模拟器会内存泄露,而且会卡顿。

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 是以流的方式传递的,数据会一帧一帧的传输过来。

我们来梳理以下到显示到屏幕上所经历的过程。

猜你喜欢

转载自blog.csdn.net/github_35041937/article/details/78337543