1.硬解码和软解码
视频解码分为两部分:硬解码和软解码
使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解。该方法比较通用,但是占用CPU资源,编解码效率不高。一般系统都会提供GPU或者专用处理器来对视频流进行编解码,也就是硬件编码和解码,简称为硬编解码。苹果在iOS 8.0系统之前,没有开放系统的硬件编码解码功能,不过Mac OS系统一直有,被称为Video ToolBox的框架来处理硬件的编码和解码,终于在iOS 8.0后,苹果将该框架引入iOS系统。
2.VideoToolbox基本数据结构。
Video Toolbox视频编解码前后需要应用的数据结构进行说明。
(1)CVPixelBuffer:编码前和解码后的图像数据结构。
(2)CMTime、CMClock和CMTimebase:时间戳相关。时间以64-bit/32-bit的形式出现。
(3)CMBlockBuffer:编码后,结果图像的数据结构。
(4)CMVideoFormatDescription:图像存储方式,编解码qi等格式描述。
(5)CMSampleBuffer:存放编解码前后的视频图像的容器数据结构。
图1.1视频H264编解码前后数据结构示意图
如图1.1所示,编解码前后的视频图像均封装在CMSampleBuffer中,如果是编码后的图像,以CMBlockBuffe方式存储;解码后的图像,以CVPixelBuffer存储。CMSampleBuffer里面还有另外的时间信息CMTime和视频描述信息CMVideoFormatDesc。