【发布时间】:2018-11-09 10:04:24
【问题描述】:
为了测试,我们尝试使用具有以下功能的 Swift 4 将 CMSampleBuffer 从捕获输出转换为数据。
获得数据后,我们将此帧数据转换为 UIImage,它返回 nil。我们无法获取 UIImage。
我们进行此测试是因为我们最终会将数据发送到其他设备以获取图像。
但我们还无法从数据中获取同一设备上的图像。
我们是否遗漏了什么。
PS:我们将此测试的 FPS 降低到 1。
func captureOutput(_ output: AVCaptureOutput,
didOutput sampleBuffer: CMSampleBuffer,
from connection: AVCaptureConnection) {
func frameData() -> (Data) {
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
CVPixelBufferLockBaseAddress(imageBuffer!, CVPixelBufferLockFlags(rawValue: 0))
let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer!)
let height = CVPixelBufferGetHeight(imageBuffer!)
let src_buff = CVPixelBufferGetBaseAddress(imageBuffer!)
let data = Data(bytes: src_buff!, count: bytesPerRow * height)
CVPixelBufferUnlockBaseAddress(imageBuffer!, CVPixelBufferLockFlags(rawValue: 0))
return (data)
}
DispatchQueue.main.async {
let data = frameData()
guard let image = UIImage(data) else {return}
self.myImageView.image = image
}
}
【问题讨论】: