Android OpenSLES에서 다음 문제를 해결하려고합니다. 8.12Android OpenSLES 버퍼 기아 문제
플레이어가 SLPlayItf 인터페이스 제어 인 SL_PLAYSTATE_PLAYING 상태이다 [참조 섹션 8.32, 추가 -
http://www.khronos.org/registry/sles/specs/OpenSL_ES_Specification_1.0.1.pdf 을 :
OpenSLES 사양은 다음 말한다 버퍼는 암시 적으로 재생을 시작합니다. 기아가 대기열의 버퍼 부족으로 인해 으로 인해 발생하는 경우 오디오 데이터 재생이 중지됩니다. 플레이어는 SL_PLAYSTATE_PLAYING 상태를 유지합니다. 버퍼를 대기열에 추가하면 오디오 데이터 재생이 다시 시작됩니다. 대기중인 버퍼가 으로 부족하면 오디오 데이터에 가청 거리가 생깁니다. 스트림. 플레이어가 재생 상태가 아닌 경우, 버퍼의 추가는 오디오 재생을 개시하지 않는다.
우리는 안드로이드에 도착 아아 번 :
http://mobilepearls.com/labs/native-android-api/ndk/docs/opensles/index.html - 디코딩이 유휴 상태 할 수없는 자원을 필요로 할 수있다 플랫폼 구현에 따라
PCM에 디코드 오디오. 그러므로 충분한 수의 빈 PCM 버퍼를 제공하지 못함으로써 디코더가 굶어 죽는 것이 바람직하지 않다. 안드로이드 간단한 버퍼 큐 다른 빈 버퍼를 대기열에 추가하지 않고 콜백에서 반환하여. 디코더 기아의 결과는 명시되지 않았다. 구현은 중 하나를 선택하여 디코딩 된 PCM 데이터를 드롭하거나 디코딩 프로세스를 일시 중지하거나 심한 경우 디코더를 종료 할 수 있습니다.
이 비 규격 동작으로 인해 프로젝트 진행이 완전히 중단되었으며이를 해결하는 가장 좋은 방법은 없습니다. 전체 파일을 메모리 나 디스크의 pcm으로 디코딩하는 것은 옵션이 아닙니다. 실제로 스트리밍 솔루션이 필요합니다. 이 문제에 대한 도움은 대단히 감사하겠습니다.