我正在使用 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
}
这个创建cvpixelbuffer api是
CVPixelBufferCreate( CFAllocatorRef CV_NULLABLE allocator, size_t width, size_t height,
但你使用 Int(ciImage.extent.size.height) 和 Int(ciImage.extent.size.width)?