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
相关产品推荐
相关产品推荐

