如何创建CMVideoFormatDescription对象

时间:2018-10-19 23:56:22

标签: swift avfoundation core-video

我从ARSessionDelegate获得了CVPixelBuffer。

我的应用程序还有另一个不可更改的部分,我需要CMSampleBuffer对象。所以我试图从CVPixelBuffer创建一个CMSampleBuffer。

我正在使用此方法创建CMSampleBuffer:

func CMSampleBufferCreateReadyWithImageBuffer(_ allocator: CFAllocator?, 
                                        _ imageBuffer: CVImageBuffer, 
                                        _ formatDescription: CMVideoFormatDescription, 
                                        _ sampleTiming: UnsafePointer<CMSampleTimingInfo>, 
                                        _ sBufOut: UnsafeMutablePointer<CMSampleBuffer?>) -> OSStatus

此函数有5个参数:

  1. CFAllocator-我相信这不是必需的。
  2. imageBuffer-这是CVPixelBuffer。
  3. CMVideoFormatDescription-如何正确创建它?
  4. sampleTiming:我可以弄清楚如何使用this answer创建它。
  5. sBufOut-只是指向我要创建的CMSampleBuffer对象的指针。

这是我尝试创建CMVideoFormatDescription的尝试:

    let w = CVPixelBufferGetWidth(pixelBuffer)
    let h = CVPixelBufferGetHeight(pixelBuffer)
    var format: CMVideoFormatDescription?
    CMVideoFormatDescriptionCreate(nil, kCMVideoCodecType_HEVC, Int32(w), Int32(h), nil, &format)

我很确定我不应该对kCMVideoCodecType_HEVC进行硬编码,但是我不确定如何确定编解码器类型。

2 个答案:

答案 0 :(得分:1)

使用CMVideoFormatDescriptionCreateForImageBuffer直接从CVPixelBuffer(它是CVImageBuffer)创建格式说明。

答案 1 :(得分:0)

var formatDescription: CMVideoFormatDescription?
CMVideoFormatDescriptionCreateForImageBuffer(allocator: nil,
                                             imageBuffer: yourCVPixelBuffer,
                                             formatDescriptionOut: &formatDescription)