我正在尝试构建一个简单的音频播放器,从我们的服务器加载一个文件并播放它。目前此代码在Android上工作,但iOS不工作,抛出错误
AVPlayerItem实例失败,错误代码为-11850,域";AVFoundationErrorDomain";
据我所知,这是iOS在尝试加载音频文件时需要文件扩展名的问题。我们在React web应用程序上使用完全相同的服务器路由,没有任何问题,它能够在一个简单的音频html元素中加载文件。Android也使用以下React Native代码运行:
const loadNewPlaybackInstance = async playing => {
const source = { uri: url } // defined as `${api}/api/v1/voicemail?s3_email_id=${s3_email_id}`
// This returns a voicemail.wav file
const initialStatus = {
shouldPlay: playing,
rate: 1.0,
volume: volume,
isMuted: false,
}
try {
const { sound } = await Audio.Sound.createAsync(
source,
initialStatus,
onPlaybackStatusUpdate,
)
setPlaybackInstance(sound)
updateScreenForLoading(false)
} catch (error) {
console.error(error.message)
}
}
我发现了另一个SO问题,但没有真正的答案。
Github上还有一个悬而未决的问题,似乎被遗忘了,我也试图恢复这个问题。
有人知道如何解决这个问题吗?如果需要更多的细节/背景来帮助我,请告诉我。
我在更改setAudioModeAsync后遇到了同样的问题扬声器开始播放音频。
配置是这样的:
await Audio.requestPermissionsAsync();
await Audio.setAudioModeAsync({
staysActiveInBackground: true,
interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DO_NOT_MIX,
shouldDuckAndroid: false,
playThroughEarpieceAndroid: false,
allowsRecordingIOS: false,
interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DO_NOT_MIX,
playsInSilentModeIOS: true,
});
请在播放声音视图之前添加此方法"expo av";并检查平台。OS==";ios";在调用方法之前
const enableAudio = async () => {
await Audio.setAudioModeAsync({
playsInSilentModeIOS: true,
staysActiveInBackground: false,
interruptionModeAndroid: INTERRUPTION_MODE_ANDROID_DO_NOT_MIX,
shouldDuckAndroid: false,
})