Getting Started
Getting Started with VisionCamera
Introduction
VisionCamera is the fastest and most powerful Camera for react-native. It's built with Nitro Modules and uses AVFoundation on iOS, and CameraX on Android. VisionCamera features an extensible API, allowing you to plug in native code at any point.
Installation
1. Install library
Install react-native-vision-camera from npm:
npm install react-native-vision-camerapnpm add react-native-vision-camerayarn add react-native-vision-camerabun add react-native-vision-cameraVisionCamera is built on-top of react-native-nitro-modules and uses react-native-nitro-image's Image type for photos - install those dependencies:
npm install react-native-nitro-modules react-native-nitro-imagepnpm add react-native-nitro-modules react-native-nitro-imageyarn add react-native-nitro-modules react-native-nitro-imagebun add react-native-nitro-modules react-native-nitro-image2. Add permissions
After installing the library from npm, you must add Camera (and optionally Microphone) usage permissions to your app's manifest:
Add Camera (and optionally Microphone) permissions to your Expo config (app.json, app.config.json or app.config.js):
{
"ios": {
"infoPlist": {
"NSCameraUsageDescription": "$(PRODUCT_NAME) needs access to your Camera to capture photos and videos.",
"NSMicrophoneUsageDescription": "$(PRODUCT_NAME) needs access to your Microphone to record audio for video recordings.",
}
},
"android": {
"permissions": ["android.permission.CAMERA", "android.permission.RECORD_AUDIO"]
}
}iOS
Add NSCameraUsageDescription (and optionally NSMicrophoneUsageDescription) permissions to your app's Info.plist:
<dict>
<!-- ... -->
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) needs access to your Camera to capture photos and videos.</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) needs access to your Microphone to record audio for video recordings.</string>
</dict>Android
Add CAMERA (and optionally RECORD_AUDIO) permissions to your app's main AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- ... -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
</manifest>3. Rebuild native
Then, compile the mods:
npx expo prebuildAnd lastly, to apply the native changes build a new binary:
npx expo run:iosThen, rebuild Pods:
npx pod-installAnd lastly, to apply the native changes build a new binary:
npm run ios4. Render the <Camera />
In your app's code, you can now request permissions and render the <Camera /> view:
import React, { useEffect } from 'react'
import { Camera, useCameraPermission } from 'react-native-vision-camera'
function App() {
const { hasPermission, requestPermission } = useCameraPermission()
useEffect(() => {
if (!hasPermission) requestPermission()
}, [hasPermission, requestPermission])
return (
<Camera
style={{ flex: 1 }}
device="back"
/>
)
}5. Add outputs
The Camera can output to a variety of Camera Outputs - for example, to capture Photos, use the CameraPhotoOutput:
import React, { useEffect } from 'react'
import { Camera, useCameraPermission, usePhotoOutput } from 'react-native-vision-camera'
function App() {
const { hasPermission, requestPermission } = useCameraPermission()
const photoOutput = usePhotoOutput()
useEffect(() => {
if (!hasPermission) requestPermission()
}, [hasPermission, requestPermission])
return (
<Camera
style={{ flex: 1 }}
device="back"
outputs={[photoOutput]}
/>
)
}See "Camera Outputs" to learn more about outputs.