ios - react native : Real time camera data without image save and preview

标签 ios swift camera react-native

我开始开发我的第一个非演示 react-native 应用程序。我希望它是一个 iOS/Android 应用程序,但实际上我只专注于 iOS。

实际上我有一个问题。如何在不保存到相机胶卷的情况下从相机实时获取数据(base64、像素数组...)。

有这个模块:https://github.com/lwansbrough/react-native-camera但是 base64 已被弃用并且对我来说没用,因为我想要向用户渲染处理过的图像(例如更改图片颜色),而不是像 react-native-camera 模块那样来自相机的真实图片。

(我知道如何与SWIFT代码通信,但我不知道 native 代码中的选项是什么,我来自WebDev)

非常感谢。

最佳答案

这可能不是最佳的,但这是我一直在使用的。如果有人能提供更好的解决方案,我也将感谢您的帮助!

我的基本想法是简单地循环(但不是简单的 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 图像太慢了。

关于ios - react native : Real time camera data without image save and preview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40468716/

相关文章:

objective-c - 如何在标签栏应用程序的 iOS 6 GM 中使旋转正常工作?

iphone - 如何通过坐标/位置 (x,y) 查找 UIView

swift - 变量值为空。为什么?

java - 如何从 Java 控制相机?

Android 相机在 startPreview() 时卡住,没有任何错误信息

ios - 为什么Today Widget在iOS 14上显示 'Unable to load'并且无法调试?

ios - 如何处理来自 Quickblox iOS SDK 的错误?

xcode - Swift uipickerview 字体

objective-c - 如何获取 OSX 上当前工作区/屏幕壁纸的路径?

java - 在不阻塞预览camera2 api的情况下从后台相机预览中捕获图片的可能方法?