做者:CC老师_HelloCoder 原文地址:www.jianshu.com/p/c70c061b8…算法
在iOS4.0,苹果就已经支持硬编码.可是硬编码在当时属于私有API. 不提供给开发者使用 在2014年的WWDC大会上,iOS 8.0 以后,苹果开放了硬解码和硬解码的API。就是VideoToolbox.framework
的API。VideoToolbox
是一套纯C语言API。其中包含了不少C语言函数网络
VideoToolBox
实际上属于低级框架,它是能够直接访问硬件编码器和解码器.它存在于视频压缩和解压缩以及存储在像素缓存区中的数据转换提供服务.app
硬编码的优势:提升性能、增长效率、延长电量的使用框架
这个框架在音视频项目开发中,也是会要频繁使用的.若是你们有想法去从事音视频的开发.那么这个框架将会是你学习的一个重点.ide
做为开发者和产品测试之间的斡旋.是不可避免的.这是我们在作开发过程当中,但仍是 要去思考.究竟是需求不合理仍是咱们对这个需求的没有把握.函数
在前面我说过,5G时代的到来,势必会对移动互联网的冲击将会是最刺激的.为什么?一旦网络速度+设备的运行速度不受限制时,设想移动设备的暂时不可替代性是否是又更加的明显了.至少在目前为止,没有一款硬件能够替代手机设备在用户的地位.性能
那咱们来了解一下视频的常规知识.只有在了解视频的本质,你才有可能面对需求应对自如.学习
图像: 视频内容自己就是一帧一帧的图片构成.人眼只要1秒钟连续播放16张以上的图片,就会认为这是一段连贯的视频.这种物理现象叫视觉暂留.测试
音频: 视频必定是由音频+图像内容构成的.因此音频在视频中是单独的一个部分.针对这一块咱们须要单独编码的.
**元信息:**元信息其实就是描述信息的信息.用于描述信息的结构\语义\用途\用法等.好比视频元信息就包含了视频的具体信息,好比编码格式,分辨率等等.
视频编码格式
音频编码格式:
AAC是目前比较热门的有损压缩编码技术,而且衍生了LC-AAC,HE-AAC,HE-AAC v2 三种主要编码格式.
优点:在小于128Kbit/s的码率下表现优异,而且多用于视频中的音频编码
适合场景:于128Kbit/s如下的音频编码,多用于视频中的音频轨的编码
**封装格式:**就是将已经编码压缩好的视频数据 和音频数据按照必定的格式放到一个文件中.这个文件能够称为容器. 固然能够理解为这只是一个外壳.
一般咱们不只仅只存放音频数据和视频数据,还会存放 一下视频同步的元数据.例如字幕.这多种数据会不一样的程序来处理,可是它们在传输和存储的时候,这多种数据都是被绑定在一块儿的.
AVI
: 是当时为对抗quicktime格式(mov)而推出的,只能支持固定CBR恒定定比特率编码的声音文件MOV
:是Quicktime封装WMV
:微软推出的,做为市场竞争mkv
:万能封装器,有良好的兼容和跨平台性、纠错性,可带外挂字幕flv
: 这种封装方式能够很好的保护原始地址,不容易被下载到,目前一些视频分享网站都采用这种封装方式MP4
:主要应用于mpeg4的封装,主要在手机上使用。视频压缩,该从那几个方向去进行数据的压缩了? 实际上压缩的本质都是从冗余信息开始出发压缩的. 而视频数据之间是有极强的相关性.也就是这样会产生大量的冗余信息.这样的冗余包括空间上的冗余信息和时间上的冗余信息.
IPB帧 视频压缩中,每帧表明着一副静止的图像.而进行实际压缩时,会采用各类算法以减小数据的容量.其实IPB帧是最经常使用的一种方式:
读者角度解读
若是从编码的角度,获取咱们顺序思考会存在难度.但若是咱们从解码的角度来思考就显得不是那么不可理解了.
DTS(Decoding Time Stamp)
,主要用于视频的解码; PTS(Presentation Time Stamp)
,主要用于解码节点进行视频的同步和输出.
在没有B帧的状况下,DTS和PST的输出顺序是同样的.由于B帧会打乱了解码和显示顺序.因此一旦存在B帧,PTS和DTS势必会不一样.实际上在大多数编解码标准中,编码顺序和输入顺序并不一致.因而须要PTS和DST这2种不一样的时间戳.
两个I帧之间造成的一组图片,就是GOP(Group of Picture). 一般在编码器设置参数时,必须会设置gop_size
的值.其实就是表明2个I帧之间的帧数目. 在一个GOP组中容量最大的就是I帧.因此相对而言,gop_size
设置的越大,整个视频画面质量就会越好.可是解码端必须从接收的第一个I帧开始才能够正确解码出原始图像.不然没法正确解码.