React Native:无需图像保存和预览的实时相机数据
Posted
技术标签:
【中文标题】React Native:无需图像保存和预览的实时相机数据【英文标题】:React native: Real time camera data without image save and preview 【发布时间】:2016-11-07 15:24:22 【问题描述】:我开始开发我的第一个非演示型 react-native 应用程序。我希望它是一个 ios/android 应用,但实际上我只专注于 iOS。
其实我有一个问题。如何在不保存到相机胶卷的情况下从相机实时获取数据(base64、像素数组……)。
有这个模块:https://github.com/lwansbrough/react-native-camera 但 base64 已被弃用,对我来说没用,因为我想要一个渲染处理的图像给用户(例如更改图片颜色),而不是来自相机的真实图片,因为它确实反应 -原生相机模块。
(我知道如何与 SWIFT 代码通信,但我不知道原生代码中有哪些选项,我是从 WebDev 来的)
非常感谢。
【问题讨论】:
你确定base64已经贬值了吗?它仍然是文档中的一个选项... 您好,您找到解决实时图像数据而不保存的方法了吗? 【参考方案1】:这可能不是最佳的,但这是我一直在使用的。如果有人可以提供更好的解决方案,我也将感谢您的帮助!
我的基本想法是简单地循环(但不是简单的 for 循环,见下文)以 yuv/rgb 格式以最大分辨率拍摄静态图片,这相当快(在正常曝光持续时间下约为 x0ms)并处理它们。基本上,您将设置链接到您的相机的 AVCaptureStillImageOutput(遵循随处可见的教程),然后将格式设置为 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange(如果您想要 YUV)或 kCVPixelFormatType_32BGRA(如果您更喜欢 rgba),如
bool usingYUVFormat = true;
NSDictionary *outputFormat = [NSDictionary dictionaryWithObject:
[NSNumber numberWithInt:usingYUVFormat?kCVPixelFormatType_420YpCbCr8BiPlanarFullRange:kCVPixelFormatType_32BGRA]
forKey:(id)kCVPixelBufferPixelFormatTypeKey];
[yourAVCaptureStillImageOutput setOutputSettings:outputFormat];
准备好后,就可以开始调用了
AVCaptureConnection *captureConnection=[yourAVCaptureStillImageOutput connectionWithMediaType:AVMediaTypeVideo];
[yourAVCaptureStillImageOutput captureStillImageAsynchronouslyFromConnection:captureConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error)
if(imageDataSampleBuffer)
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(imageDataSampleBuffer);
CVPixelBufferLockBaseAddress(imageBuffer, 0);
// do your magic with the data buffer imageBuffer
// use CVPixelBufferGetBaseAddressOfPlane(imageBuffer,0/1/2); to get each plane
// use CVPixelBufferGetWidth/CVPixelBufferGetHeight to get dimensions
// if you want more, please google
];
此外,使用 NSNotificationCenter 注册您的拍照动作并在处理完每一帧后发布通知(可能会有一些延迟,以限制您的吞吐量并降低功耗),以便循环继续进行。
快速预防措施:Android 对手更令人头疼。正如我在my question 中提出的那样,很少有硬件制造商为最大分辨率的未压缩照片实现 api,但只有 1080p 用于预览/视频。我仍在寻找解决方案,但放弃了大部分希望。 JPEG 图像太慢了。
【讨论】:
您能找到更好的解决方案吗?以上是关于React Native:无需图像保存和预览的实时相机数据的主要内容,如果未能解决你的问题,请参考以下文章