如何将captureStillImage异步(sampleBuffer)转换为Swift 3

时间:2017-02-06 13:57:03

标签: ios swift swift3

如何在Swift 3中将captureStillImageAsynchronously(sampleBuffer)转换为base64编码

我正在尝试将图像数据连续提供给HTML网页视图,找到后,没有Cordova插件可以适应这个目标,因为我需要在画布上绘制图像/视频数据,以便我可以用js库处理它。

最初我想使用WEBRTC,但它只适用于Android。我正在开发IOS 9 +。

因此,我正在尝试创建一个非常简单的插件,用于显示实时预览并每隔0.3秒提供图像数据(使用javascript Cordova pluging命令调用),以便处理图像。

获取sampleBuffer的快速教程: http://drivecurrent.com/using-swift-and-avfoundation-to-create-a-custom-camera-view-for-an-ios-app/

我需要的是将captureStillImageAsynchronously sampleBuffer转换为base64编码,或者是否有其他方法可以通过javascript处理图像数据?

   if let videoConnection = stillImageOutput!.connection(withMediaType: AVMediaTypeVideo) {
        videoConnection.videoOrientation = AVCaptureVideoOrientation.portrait
        stillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: {(sampleBuffer, error) in
            if (sampleBuffer != nil) {
                let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
                let dataProvider = CGDataProvider(data: imageData as! CFData)
                let cgImageRef = CGImage(jpegDataProviderSource: dataProvider!, decode: nil, shouldInterpolate: true, intent: CGColorRenderingIntent.defaultIntent)

                let image = UIImage(cgImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.right)
                self.capturedImage.image = image
                print(sampleBuffer) // how to convert this to 64encode ? without saving to camera roll
            }
        })
    }

1 个答案:

答案 0 :(得分:3)

如我的评论所述,该功能已弃用。您应该更新代码以改为使用新的AVCapturePhotoOutput类。

作为一般答案,您可以使用base64EncodedData方法将NSData(Swift 3中的数据)转换为base64编码数据:

let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
let base64Data = imageData.base64EncodedData([])