iOS之VideoToolbox分析

本文介绍了使用VideoToolbox进行视频解码的具体步骤,包括从H.264流中生成单独的NALU,创建CMVideoFormatDescriptionRef,以及如何通过VTDecompressionSessionRef解码并显示视频帧。
摘要由CSDN通过智能技术生成

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 来显示视频帧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值