ios硬编解码

2019-05-22  本文已影响0人  一川烟草i蓑衣

VideoToolbox中的对象:

1)CVPixelBuffer

编码前和解码后的图像数据结构(未压缩光栅图像缓存区-Uncompressed Raster Image Buffer)

2)CVPixelBufferPool

存放CVPixelBuffer

3)pixelBufferAttributes

CFDictionary对象,可能包含了视频的宽高,像素格式类型(32RGBA, YCbCr420),是否可以用于OpenGL ES等相关信息

4)CMTime

时间戳相关。时间以 64-big/32-bit形式出现。 分子是64-bit的时间值,分母是32-bit的时标(time scale)

5)CMClock

时间戳相关。时间以 64-big/32-bit形式出现。 分子是64-bit的时间值,分母是32-bit的时标(time scale)。它封装了时间源,其中CMClockGetHostTimeClock()封装了mach_absolute_time()

6)CMTimebase

时间戳相关。时间以 64-big/32-bit形式出现。CMClock上的控制视图。提供了时间的映射:CMTimebaseSetTime(timebase, kCMTimeZero); 速率控制:

CMTimebaseSetRate(timebase, 1.0);

7)CMBlockBuffer

编码后,结果图像的数据结构

8)CMVideoFormatDescription

编解码前后的视频图像均封装在CMSampleBuffer中,如果是编码后的图像,以CMBlockBuffe方式存储;解码后的图像,以CVPixelBuffer存储。

9)CMSampleBuffer

存放编解码前后的视频图像的容器数据结构。如图所示,编解码前后的视频图像均封装在CMSampleBuffer中,如果是编码后的图像,以CMBlockBuffer方式存储;解码后的图像,以CVPixelBuffer存储。CMSampleBuffer里面还有另外的时间信息CMTime和视频描述信息CMVideoFormatDesc。

1

1.硬解码

1.1 将 H.264码流转换为 CMSampleBuffer

CMSampleBuffer = CMTime + FormatDesc + CMBlockBuffer

需要从H.264的码流里面提取出以上的三个信息。最后组合成CMSampleBuffer,提供给硬解码接口来进行解码工作。

经过处理之后,在Format Description中则是:

2

需要注意的是:

要从基础的流数据将SPS和PPS转化为Format Desc中的话,需要调用CMVideoFormatDescriptionCreateFromH264ParameterSets()方法。

最后用VTDecompression来解码

使用VTCompressionSession进行硬编码

上一篇下一篇

猜你喜欢

热点阅读