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。
11.硬解码
1.1 将 H.264码流转换为 CMSampleBuffer
CMSampleBuffer = CMTime + FormatDesc + CMBlockBuffer
需要从H.264的码流里面提取出以上的三个信息。最后组合成CMSampleBuffer,提供给硬解码接口来进行解码工作。
经过处理之后,在Format Description中则是:
2需要注意的是:
要从基础的流数据将SPS和PPS转化为Format Desc中的话,需要调用CMVideoFormatDescriptionCreateFromH264ParameterSets()方法。
最后用VTDecompression来解码
使用VTCompressionSession进行硬编码
网友评论