Ios 调整缓冲区大小会导致丢弃帧
我从我的Ios 调整缓冲区大小会导致丢弃帧,ios,swift,Ios,Swift,我从我的AVCaptureSession接收到每一帧的像素缓冲区,分辨率为4k,我需要将其调整为720p。我现在是这样做的: private func consumeVideoForStreaming(from sampleBuffer: CMSampleBuffer) { guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { print("Error acquirin
AVCaptureSession
接收到每一帧的像素缓冲区,分辨率为4k,我需要将其调整为720p。我现在是这样做的:
private func consumeVideoForStreaming(from sampleBuffer: CMSampleBuffer) {
guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else {
print("Error acquiring sample buffer")
return
}
let context = CIContext()
let image = CIImage(cvPixelBuffer: imageBuffer)
let resizeFilter = CIFilter(name:"CILanczosScaleTransform")!
let targetSize = CGSize(
width: 1280,
height:720
)
let scale = targetSize.height / 2160
let aspectRatio = targetSize.width/(3840 * scale)
// Apply resizing
resizeFilter.setValue(image, forKey: kCIInputImageKey)
resizeFilter.setValue(scale, forKey: kCIInputScaleKey)
resizeFilter.setValue(aspectRatio, forKey: kCIInputAspectRatioKey)
guard let outputImage = resizeFilter.outputImage else {
return
}
var outputBuffer: CVPixelBuffer?
let attrs = [
kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue,
kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue
] as CFDictionary
let status = CVPixelBufferCreate(
kCFAllocatorDefault,
Int(targetSize.width),
Int(targetSize.height),
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
attrs,
&outputBuffer
)
guard status == kCVReturnSuccess,
let buffer = outputBuffer else {
return
}
context.render(outputImage, to: buffer)
// Do something with my resized buffer...
}
这是可行的,但是速度太慢,以至于帧最终被丢弃。如何加快调整大小的速度?我还需要使用像素缓冲池吗