I am developing an application compatible with both iOS and Android.
It is a chat application that can be recorded and played back.
Recorded audio data is stored on Firebase Storage.
The problem that occurred is,
- Audio recorded on iOS can not be played on Android
I expect this to be a file format issue.
Is there an appropriate setting for both iOS and Android?
Some of the settings are described below.
Recorder
import { Audio } from 'expo-av';
import * as Permissions from 'expo-permissions';
const recording = new Audio.Recording();
const recordOptions = Audio.RECORDING_OPTIONS_PRESET_HIGH_QUALITY;
recordOptions.ios.outputFormat = Audio.RECORDING_OPTION_IOS_OUTPUT_FORMAT_MPEG4AAC;
Audio.setAudioModeAsync({
allowsRecordingIOS: true,
staysActiveInBackground: false,
interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DO_NOT_MIX,
playsInSilentModeIOS: true,
shouldDuckAndroid: true,
interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DO_NOT_MIX,
playThroughEarpieceAndroid: true,
})
const startRecord = async () => {
recording.prepareToRecordAsync(recordOptions)
await recording.startAsync();
}
const stopRecord = async () => {
await recording.stopAndUnloadAsync();
// Upload Firebase Storage, contentType: 'audio/aac',
}
Player
import { Audio } from 'expo-av';
const soundObject = new Audio.Sound();
const play = async () => {
await soundObject.loadAsync({ uri: src }, { androidImplementation: 'MediaPlayer' });
await soundObject.playAsync();
}
Error
Error: Load encountered an error: the OnErrorListener was called with 'what' code 1 and 'extra' code -2147483648.
at createErrorFromErrorData (NativeModules.js:155)
at NativeModules.js:104
at MessageQueue.__invokeCallback (MessageQueue.js:414)
at MessageQueue.js:127
at MessageQueue.__guard (MessageQueue.js:314)
at MessageQueue.invokeCallbackAndReturnFlushedQueue (MessageQueue.js:126)
at debuggerWorker.js:80