CVPixelBuffer 保存后旋转视频

问题描述 投票:0回答:1

我正在使用 CVPixelBuffer 录制视频。录制效果很好,但保存视频时会旋转。

您可以在下面的视频中看到录制是垂直模式,但保存视频后会旋转!

https://drive.google.com/file/d/10hvDu_3LOIaiD-5G4xhG1tZj4jCOxL72/view?usp=sharing

我尝试了以下方法来纠正 CVPixelBuffer 的方向,但它存储黑色视频。

func rotatePixelBuffer(_ pixelBuffer: CVPixelBuffer, degrees: Int) -> CVPixelBuffer? {
        let image = CIImage(cvPixelBuffer: pixelBuffer)
        let rotationTransform = CGAffineTransform(rotationAngle: CGFloat(degrees) * CGFloat.pi / 180)
        let rotatedImage = image.transformed(by: rotationTransform)

        return createPixelBuffer(from: rotatedImage)
    }
    

    func createPixelBuffer(from ciImage: CIImage) -> CVPixelBuffer? {
        let attributes: [String: Any] = [
            kCVPixelBufferCGImageCompatibilityKey as String: true,
            kCVPixelBufferCGBitmapContextCompatibilityKey as String: true
        ]

        var pixelBuffer: CVPixelBuffer?
        let status = CVPixelBufferCreate(
            kCFAllocatorDefault,
            Int(ciImage.extent.size.height),
            Int(ciImage.extent.size.width),
            kCVPixelFormatType_32BGRA,
            attributes as CFDictionary,
            &pixelBuffer
        )

        guard status == kCVReturnSuccess, let unwrappedPixelBuffer = pixelBuffer else {
            return nil
        }

        CVPixelBufferLockBaseAddress(unwrappedPixelBuffer, CVPixelBufferLockFlags(rawValue: 0))
        let context = CIContext()
        context.render(ciImage, to: unwrappedPixelBuffer)

        CVPixelBufferUnlockBaseAddress(unwrappedPixelBuffer, CVPixelBufferLockFlags(rawValue: 0))

        return unwrappedPixelBuffer
    }
ios swift video-recording cvpixelbuffer
1个回答
0
投票

这个创建cvpixelbuffer api是

CVPixelBufferCreate( CFAllocatorRef CV_NULLABLE allocator, size_t width, size_t height,  
但你使用 Int(ciImage.extent.size.height) 和 Int(ciImage.extent.size.width)?

© www.soinside.com 2019 - 2024. All rights reserved.