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

Expo Camera在Android端无法录制视频问题求助

解决Expo Camera Android端recordAsync无返回值问题

针对你遇到的expo-camera 15.0.16在Android端调用recordAsync无返回值的问题,以下是几个针对性的解决方案:

1. 补充麦克风权限(即使mute=true)

Android系统中,即使设置了mute={true},视频录制的底层框架仍可能要求麦克风权限。在app.json的android.permissions中添加麦克风权限:

{
  "expo": {
    "android": {
      "permissions": [
        "CAMERA",
        "RECORD_AUDIO"
      ]
    }
  }
}

2. 明确禁用音频录制

在recordAsync的配置中显式设置audio: false,避免Android系统因音频相关逻辑阻塞返回:

const video = await cameraInstance.recordAsync({
  maxDuration: 5,
  audio: false // 明确禁用音频
});

3. 移除finally块中的stopRecording调用

recordAsync会在达到maxDuration后自动停止录制,手动调用stopRecording可能打断返回值的传递逻辑。修改takeVideo函数的finally块:

finally {
  // 移除 cameraInstance.stopRecording();
  setCameraVisible(false);
}

4. 确保相机就绪后再调用录制

添加onCameraReady事件监听,标记相机完全初始化后再允许点击录制按钮:

// 新增状态变量
const [isCameraReady, setIsCameraReady] = useState(false);

// 修改CameraView组件
<CameraView 
  ref={cameraRef} 
  style={styles.camera} 
  facing='front' 
  mode='video' 
  mute={true} 
  videoQuality='720p'
  onCameraReady={() => setIsCameraReady(true)} // 添加相机就绪监听
>
  <View style={styles.buttonContainer}>
    {buttonVisible && isCameraReady && ( // 仅相机就绪后显示按钮
      <TouchableOpacity style={styles.button} onPress={takeVideo}>
        <Text style={styles.text}>Iniciar</Text>
      </TouchableOpacity>
    )}
  </View>
</CameraView>

5. 修正成功提示文本(可选)

你的代码中成功提示写的是Image captured successfully!,建议改为视频相关的提示:

setMessage('Video captured successfully!');

按上述步骤调整后,重新运行Android端项目,应该能正常获取recordAsync的返回值并打印日志。

内容的提问来源于stack exchange,提问作者Otávio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:10:08