response-native-sound не работает в производственной сборке для iOS, но работает в эмуляторе и для производственного Android
Я работаю над приложением React Native, которое воспроизводит голосовую почту. У меня проблема с нашим производственным приложением. Он не воспроизводит голосовую почту на рабочих сборках iOS или testflight, однако он будет воспроизводиться на производственной сборке Android, а также на эмуляторе для iOS и Android. Я относительно новый, чтобы реагировать на нативные приложения, поэтому я пытаюсь выяснить, почему это происходит.
Приложение не аварийно завершает работу, оно отображает воспроизведение в пользовательском интерфейсе, но звук не воспроизводится.
Какие конкретные вещи следует проверить в отношении производственной сборки, не способной воспроизводить звук?
Я нахожусь на текущей версии реагировать родной звук, который в настоящее время 0.10.9.
Вот моя функция togglePlay, которая использует звук из реагировать-родной звук. Я импортировал это.
togglePlay () {
if (this.state.vmLoaded == false) {
if (this.state.vmLoading == true) {
return;
}
if (this.state.vmLoading == false) {
this.setState({ vmLoading: true });
Requester.getVoicemail(this.props.vmData, this.props.token, 'stream')
.then((res) => {
this.setState({
vmPath: res,
vmLoaded: true,
});
const vm = new Sound(res, '', (error) => {
if (error) {
// Show toast if voicemail did not load
Toast({ message: 'Failed to load voicemail' });
} else {
if (!this.state.vmStarted) {
this.setState({ vmStarted: true });
}
vm.play((success) => {
if (success) {
this.setState({
vmPlaying: false,
currentTime: this.state.vmLength / 1000,
});
// Clears the interval timer to keep thread
// from keeping track of timing
timer.clearInterval(this, 'playingInt');
} else {
// if call recording fails to play, show toast to user
Toast({ message: 'Failed to play recording' });
}
});
this.setState({ vmPlaying: true });
// if loaded successfully, set the instance of Sound as STATE vm
// allowing calls to the instance via this.state.vm
// ie: this.state.vm.play() will initiate playing the sound
this.setState({
// set instance of Sound to state
vm,
// set full length of recording to state
vmLength: vm.getDuration(),
// set current playing time of recording to state (new, so zero)
currentTime: 0,
// interval is still null until sound is played
interval: null,
// sound starts off paused (no audio)
vmPlaying: true,
// Finally, the recording has been loaded, setting
// this so another instance is not created on
// rerender (see above IF statements)
vmLoaded: true,
vmLoading: false,
});
}
});
}).then(() => {
timer.clearInterval(this, 'playingInt');
interval: timer.setInterval(this, 'playingInt', () => {
this.state.vm.getCurrentTime((seconds) => {
this.setState({ currentTime: seconds });
});
}, 1000);
});
}
} else if (this.state.vmLoaded == true) {
if (this.state.vmPlaying == true) {
this.state.vm.pause();
this.setState({ vmPlaying: false });
timer.clearInterval(this, 'playingInt');
} else {
this.state.vm.play();
this.setState({ vmPlaying: true });
timer.clearInterval(this, 'playingInt');
interval: timer.setInterval(this, 'playingInt', () => {
this.state.vm.getCurrentTime((seconds) => {
this.setState({ currentTime: seconds });
});
}, 1000);
}
}
}
Пожалуйста, дайте мне знать, если другая информация будет полезна в отладке этого.
Спасибо
1 ответ
Проблема была связана с ручным переключателем, чтобы отключить звонок на iPhone. Звук воспроизводился через громкую связь. Я добавил Sound.setCategory("Воспроизведение") после инициализации звука, чтобы звук продолжал воспроизводиться даже при отключенном звонке.
Недавно я столкнулся с этой проблемой, и ни один из ответов, доступных в Интернете, не помог мне. В конце концов я понял, что.mp3
звуки, которые я использовал, не обнаруживались mac/Xcode. Итак, когда вы видите детали файла в Xcode или Finder, он не смог идентифицировать достаточно информации, такой как продолжительность. Проведя часы в поисках решения. Я нашел эту проблему.
Что я сделал не так - переименовано *.wav
или *.avi
файлы в .mp3
вручную
Решение - 1. Используйте iTunes для преобразования файлов в определенный формат. Преобразование форматов файлов вручную приводит к повреждению файла, и хотя они работают на Android, iOS не может их обнаружить после архивирования сборки. 2. Для iOS: добавьте свои звуки в ресурсы в проекте Xcode.