美文网首页
ios硬编解码

ios硬编解码

作者: 一川烟草i蓑衣 | 来源:发表于2019-05-22 18:36 被阅读0次

    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进行硬编码

    相关文章

      网友评论

          本文标题:ios硬编解码

          本文链接:https://www.haomeiwen.com/subject/mjfpzqtx.html