ios - iOS:将 CMSampleBuffer 转换为 UIImage 以错误的方向和比例返回图像
问题描述
我正在尝试使用 AVCaptureVideoDataOutputSampleBufferDelegate 中的函数处理来自 iPhone 相机的实时视频。
视频被剪辑过,但视频的方向改变了,视频的比例很奇怪。
我使用以下代码来编辑视频。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
guard let captureDevice = AVCaptureDevice.default(for: .video) else { return }
guard let input = try? AVCaptureDeviceInput(device: captureDevice) else { return }
captureSession.addInput(input)
let dataOutput = AVCaptureVideoDataOutput()
dataOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
captureSession.addOutput(dataOutput)
let preview = AVCaptureVideoPreviewLayer(session: captureSession)
preview.frame = cview.frame
cview.layer.addSublayer(preview)
captureSession.startRunning()
}
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
let cameraImage = CIImage(cvPixelBuffer: imageBuffer!)
let comicEffect = CIFilter(name: "CIComicEffect")
comicEffect!.setValue(cameraImage, forKey: kCIInputImageKey)
let filteredImage = UIImage(ciImage: comicEffect!.value(forKey: kCIOutputImageKey) as! CIImage!)
DispatchQueue.main.async {
self.image.image = filteredImage
}
}
它返回以下输出:
正确的比例应该是这样的:
我可以知道我应该如何解决这个问题吗?
解决方案
推荐阅读
- python - s=10 for i in range(1,11): global ss = s+i print(s)
- ios - 添加为子视图时如何动画交叉溶解视图?
- c# - NetCore3 上的 WebApi 版本控制
- php - 使用 Pinterest api 时如何指定 pin 的标题
- c - 如何在不重复的情况下从卡组中抽牌?
- docker - Docker builder build vs docker build
- javascript - 有没有办法在strapi中创建一个带有媒体字段的条目?
- python - 导入的模块不导入
- angular - Angular2将平面json加载为嵌套反应形式(结构不一样)
- prometheus - Prometheus - 为平均订单大小、订单处理时间和订单之间的时间设计自定义指标