Expo camera recordAsync works on iOS but not Android

0

I have function called record and stopRecording in my React Native / Expo app. These help me record videos in my app.

async function record(){
        if(camera){
            setRecording(true); 
            let recording = await camera.current.recordAsync();
            console.log(recording); 
            setVideoUri(recording.uri); 
            const { uri, width, height } = await VideoThumbnails.getThumbnailAsync(recording.uri, { time: 0 }); 
            setThumbnailUri(uri);           
        }
}

async function stopRecording(){
        if(camera){
            setRecording(false); 
            camera.current.stopRecording(); 
        }
}

On iOS, this works perfectly. And the console.log(recording) line produces the following AFTER I stop recording:

Object {
  "uri": "file:///var/mobile/Containers/Data/Application/AD28FEB3-916D-4804-B609-42336E916F75/Library/Caches/ExponentExperienceData/%2540vaibhavverma9%252Freeltalk/Camera/69064C71-02D0-472C-B3A0-CFF2F87D0B9E.mov",
}

On Android, on the other hand, I get a stop failed error immediately after starting to record. Note, I don't even call the stopRecording button. It produces this:

Object {
  "uri": "file:///data/user/0/host.exp.exponent/cache/ExperienceData/%2540vaibhavverma9%252Freeltalk/Camera/f1ac8f11-7eb9-4960-ba90-d63e14c434a1.mp4",
}

But I get the following error, because since there's no video recorded, the thumbnail is not set.

0, [Error: Could not generate thumbnail. setDataSource failed: status = 0x80000000]
- node_modules/expo/build/environment/muteWarnings.fx.js:18:23 in warn
- node_modules/@sentry/utils/dist/instrument.js:111:42 in <anonymous>
- node_modules/@sentry/react-native/dist/js/integrations/reactnativeerrorhandlers.js:36:33 in tracking.enable$argument_0.onUnhandled
- node_modules/promise/setimmediate/rejection-tracking.js:72:10 in onUnhandled
* [native code]:null in onUnhandled
- node_modules/react-native/Libraries/Core/Timers/JSTimers.js:146:14 in _callTimer
- node_modules/react-native/Libraries/Core/Timers/JSTimers.js:399:17 in callTimers
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:436:47 in __callFunction
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:111:26 in __guard$argument_0
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:384:10 in __guard
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:110:17 in __guard$argument_0
* [native code]:null in callFunctionReturnFlushedQueue

Does anyone know why this recordAsync() function works in iOS but not in Android? Is there something I must do in order to get the function working on Android as well?

android
react-native
camera
android-camera
expo
asked on Stack Overflow Jun 3, 2020 by Vaibhav Verma

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0