0
点赞
收藏
分享

微信扫一扫

iOS之VideoToolbox分析

SPEIKE 2022-03-30 阅读 95

VideoToolbox可以将视频解压到CVPixelBuffer,也可以压缩到CMSampleBuffer

相关对象:

CVPixelBuffer
CVPixelBufferPool - 存放CVPixelBuffer
pixelBufferAttributes - CFDictionary对象,可能会包含视频的宽高,像素格式类型(32RGBA, YCbCr420),是否可以用于OpenGL ES等相关信息
CMSampleBuffer - 对于压缩的视频帧来说,包含了CMTime,CMVideoFormatDesc和CMBlockBuffer;对于未压缩的光栅图像的话,则包含了CMTime,CMVideoFormatDesc和CMPixelBuffer
CMTime - 分子是64-bit的时间值,分母是32-bit的时标(time scale)
CMVideoFormatDescription - 视频宽高,格式(kCMPixelFormat_32RGBA, kCMVideoCodecType_H264), 其他诸如颜色空间等信息的扩展

一般的解码流程:

  1. 从H.264 流中生成单独的 NALU
  2. 使用 CMVideoFormatDescriptionCreateFromH264ParameterSets( ) 从 SPS 和 PPS NALU 创建一个 CMVideoFormatDescriptionRef。如果不先执行此操作,将无法显示任何帧。
  3. 根据“AVCC”格式重新打包 IDR 和非 IDR 帧 NALU。 这需要用一个4字节的说明NALU长度的标头去替换NALU的起始代码。不需要为 SPS 和 PPS NALU 执行此操作。
  4. CMBlockBuffer 打包到 CMSampleBuffer 中。
  5. 创建一个 VTDecompressionSessionRef 并将样本缓冲区输入 VTDecompressionSessionDecodeFrame( )
  6. VTDecompSession 回调中,使用生成的 CVImageBufferRef 来显示视频帧。
举报

相关推荐

0 条评论