iOS 녹음 중지 후 오디오 재생 중지
5487 단어 react-native-audio
묘사
iPad Air 장치에서 녹음을 중지했을 때 다음과 같은 오류가 발생했습니다.ERROR: [0x16e247000] AVAudioSession.mm:692: -[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.
그 후, 모든 재생된 오디오는 소리가 없었다.내가 iOS 시뮬레이터에 있을 때 나는 아무런 문제가 없었다. 녹음은 예상대로 멈추었고 모든 것이 완벽한 것 같았다.
나는 녹화 전후에 즉시 React 오리지널 iOS WebView(Howler.js v2.0.0 사용)에서 음향 효과를 재생하기 때문에 이것이 문제의 일부일 수 있습니까?
토론 #1
토론 #2
더 많은 테스트를 했습니다.다음은 내가 지금까지 발견한 것이다.이것은 매우 쓸모가 있다
-
[_recordSession setActive:NO error:nil];
의 AudioRecorderManager.m
에 주석을 달아도 이 오류를 해결할 수 있지만, 녹화를 중지한 후 _recordSession
AVAudioSession
의 정지를 건너뛰는 것이 아니라 더 좋은 방법이 있어야 한다.- 이 오류를 해결하기 위해
Howler.js
을 제거합니다.하지만 난 홀러가 필요해.js는 이 프로젝트에 남고 싶어서 다른 방법을 생각해 봐야 합니다.나는 왜
Howler.js
이 문제의 일부인지 모르겠다. 왜냐하면 그것은 UIWebView
에서 실행되는javascript 라이브러리이기 때문이다.울부짖는 자.js는 실행하는 브라우저/장치에 따라 HTML5 오디오나 오디오 웹 API를 이용해야 합니다.UIWebview는 표지 아래에 AVAudioSession
을 어떤 방식으로 사용합니까?울부짖거나.js는 경쟁 조건을 공개하기 위해 추가 자원을 사용합니다.이것은 도움이 되지 않는다
-
withOptions:AVAudioSessionCategoryOptionMixWithOthers
을 [_recordSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
에 추가하면 도움이 되지 않습니다.https://developer.apple.com/reference/avfoundation/avaudiosessioncategoryoptions/avaudiosessioncategoryoptionmixwithothers-
AudioRecorderManager.m
을 withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation
에 추가하면 도움이 되지 않습니다.https://developer.apple.com/reference/avfoundation/avaudiosessionsetactiveoptions/avaudiosessionsetactiveoptionnotifyothersondeactivation-
[_recordSession setActive:NO error:nil];
및 AudioRecorderManager.m
오디오가 동시에 재생되지 않도록 지연 시간을 늘렸습니다.이거 소용없어.-
Howler.js
에서 AudioRecorder
까지의 오디오를 허용하는 것은 도움이 되지 않습니다.https://github.com/goldfire/howler.js/#global- 옵션-
Howler.js
에 HTML5 플레이어를 사용하여 오디오 웹 API 대신 오디오를 재생하도록 강요하는 것은 도움이 되지 않습니다.autoSuspend
문제의 일부는 Howler.js
이 토론 #셋
을 만들 때 AudioRecorderManager.m
을 설정하지 않았기 때문에 세션의 기본값은 sessionCategory
이지 _audioPlayer
이나 AVAudioSessionCategorySoloAmbient
을 사용하는 것이 아니다.녹음 관리원.m
_audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:_audioRecorder.url
error:&error];
업데이트: 오디오 플레이어 세션을 AVAudioSessionCategoryPlayAndRecord
세션 범주로 설정합니다.옵션 AVAudioSessionCategoryPlayback
을 사용하여 두 개의 세션을 생성했습니다.이거 소용없어.AVAudioSessionCategoryPlayback
을 봤는데 무슨 원인인지 모르겠어요.나는 지금 이 플러그인을 사용하지 않고, 사용할 시간도 많지 않다.android 지원을 발표하는 데 중점을 두고 다시 이 문제로 돌아가고 싶습니다.만약 당신이 해결 방법을 찾을 수 있다면, 동시에 나에게 알려주세요!withOptions:AVAudioSessionCategoryOptionMixWithOthers
성공!이것은 매우 나쁘지만, 세션 정지와 정지 사이의 지연을 늘리면 문제를 해결할 수 있다.
원본 코드, 작동하지 않음
RCT_EXPORT_METHOD(stopRecording)
{
[_audioRecorder stop];
[_recordSession setActive:NO error:nil];
_prevProgressUpdateTime = nil;
}
새 지연 코드, 작동합니다!RCT_EXPORT_METHOD(stopRecording)
{
[_audioRecorder stop];
_prevProgressUpdateTime = nil;
[self performSelector:@selector(stopSession) withObject:nil afterDelay:1000];
}
-(void)stopSession
{
[_recordSession setActive:NO error:nil];
}
토론 #4
은 비동기적으로 발생한 것 같다.토론 #5
이 완료되기 전에 오디오 세션을 비활성화하면 속도가 느린 장치에서 경쟁 조건 문제가 발생할 수 있습니다.나는
stop
사건 후에 오디오 세션을 정지하려고 했는데, 이렇게 하면 우리가 심각한 지연을 사용할 필요가 없다.그러나 stop
사건이 터진 후에도 녹음기 audioRecorderDidFinishRecording
은 여전히 그 일을 하고 있는 것 같다.이 가능하다, ~할 수 있다,...불행히도 개발자 문서는 이 방면에 큰 도움이 되지 않았다.
우리는 최종적으로 지연을 없애기 위해 애플에 버그를 제출해야 할지도 모른다.
stop
이런 상황이 아직도 발생하고 있습니까?audioRecorderDidFinishRecording
저도 같은 질문이 있습니다.녹화를 멈춘 후, 나는 모든 미디어 파일 (동영상과 오디오) 을 재생할 수 없습니다. 토론 #6
@benlinton. 만약 당신이 이 점을 여전히 보고 있다면, 당신은 이 변경 사항으로 홍보를 제출할 수 있습니까?이상적인 상황에서 지연은 설정할 수 있다.토론 #7
내 생각에는 그렇지만, 나는 이미 몇 달 동안 이 도서관과 합작하지 않았기 때문에, 나는 확정할 수 없다.토론 #8
이 채팅 앱토론 #9
을 개발할 때 이 문제에 부딪혔습니다. 저도 같은 문제가 있습니다.나는 로컬 오디오와 react-native-sound 로컬 코드를 읽었다.검색:토론 #10
토론 #11
을 비활성으로 설정합니다.RCT_EXPORT_METHOD(stopRecording)
{
[_audioRecorder stop];
[_recordSession setActive:NO error:nil];
_prevProgressUpdateTime = nil;
}
AVAudioSession
이 활성화 상태로 설정되지 않은 것과 같다.if (Platform.OS == 'ios') {SoundPlayer.enable(true);} // <---- this line
this.soundPlayer = new Sound(filename, SoundPlayer.DOCUMENT, (error) => {
...
}
도움이 되었으면 좋겠습니다.AudioRecorderManager.m
@Hermit Carb 이것은 저에게 매우 효과적입니다. 감사합니다. AVAudioSession
은 이 문제가 이미 해결된 것 같아서 끝났습니다.
Reference
이 문제에 관하여(iOS 녹음 중지 후 오디오 재생 중지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/jsierles/react-native-audio/issues/85텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)