You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native能否同时启用前后置摄像头?react-native-camera使用问题

这个问题其实是iOS系统层面的限制导致的,我来给你拆解下原因和解决办法:

首先,你当前的代码里放了两个<RNCamera>组件,但在iOS上,系统的AVFoundation框架默认不允许同时运行多个独立的摄像头捕获会话(每个RNCamera都会创建自己的AVCaptureSession)。当第二个会话尝试启动时,第一个会话会抢占摄像头资源,所以只有第一个能正常工作。

接下来给你两个可行的解决方案:

方案1:切换到支持多摄像头的库(推荐)

react-native-camera现在已经进入维护状态,很多新特性都不再更新了。更推荐你改用react-native-vision-camera——这个库原生支持多摄像头同时捕获,能轻松实现你要的WhatsApp式画中画效果。

具体步骤如下:

  1. 先安装依赖:
npm install react-native-vision-camera
  1. 确保你的Info.plist里添加了摄像头权限(如果还没加的话):
<key>NSCameraUsageDescription</key>
<string>需要访问摄像头来显示视频预览</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要访问麦克风(如果需要音频的话)</string>
  1. 替换你的渲染代码:
import React from 'react';
import { View, StyleSheet } from 'react-native';
import { Camera, useCameraDevices } from 'react-native-vision-camera';

export default function CameraPreview() {
  // 获取前后置摄像头设备
  const devices = useCameraDevices();
  const backCamera = devices.back;
  const frontCamera = devices.front;

  // 等待设备加载完成
  if (!backCamera || !frontCamera) {
    return <View style={styles.container} />;
  }

  return (
    <View style={styles.container}>
      {/* 后置摄像头全屏显示 */}
      <Camera
        style={styles.backCamera}
        device={backCamera}
        isActive={true} // 启动摄像头
      />
      {/* 前置摄像头悬浮小窗口 */}
      <Camera
        style={styles.frontCamera}
        device={frontCamera}
        isActive={true} // 启动摄像头
      />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: 'black',
  },
  backCamera: {
    flex: 1,
  },
  frontCamera: {
    position: 'absolute',
    bottom: 24,
    right: 24,
    width: 120,
    height: 160,
    borderRadius: 12,
    overflow: 'hidden',
    borderWidth: 2,
    borderColor: 'white',
  },
});
方案2:基于react-native-camera的原生定制(不推荐)

如果你一定要坚持用react-native-camera,那你得自己写iOS原生代码来实现多摄像头捕获——因为官方库并没有暴露AVCaptureMultiCamSession的相关API。大致思路是:

  • 在iOS原生端创建一个多摄像头会话,同时添加前后置摄像头的输入源
  • 为每个摄像头创建独立的预览层,再把这些预览层传递给React Native端渲染
  • 这个方案需要你有iOS原生开发经验,成本比较高,所以更推荐方案1

最后提醒下:确保你是用真机测试的(你已经用了iPhone SE,没问题),iOS模拟器是不支持摄像头功能的。

内容的提问来源于stack exchange,提问作者Sergen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:49:53