문제

Android opensles에서 다음 문제를 해결하려고합니다.

opensles spec은 다음과 같습니다.

http://www.khronos.org/registry/sles/ 사양 / opensl_es_specification_1.0.1.pdf - 8.12

플레이어가 sl_playstate_playing 상태에있을 때 SLPlayITF 인터페이스로 제어 [8.32 절 참조], 추가 버퍼는 암시 적으로 재생을 시작합니다. 기아의 경우 대기열의 버퍼가 부족하기 위해 오디오 데이터의 재생이 중지됩니다. 플레이어는 SL_PLAYSTATE_PLAYING 상태에 남아 있습니다. 큐잉시 추가 버퍼, 오디오 데이터 재생이 재개됩니다. 그건 주목하라 대기중인 버퍼의 굶주림은 오디오 데이터의 가청 갭을 일으 킵니다. 흐름. 플레이어가 재생 상태가 아닌 경우, 버퍼 추가가 오디오 재생을 시작하지 않습니다.

ALAS가 Android에 도착하자 :

http://mobilepearls.com/labs/ Native-Android-API / NDK / Docs / opensles / index.html - PCM에 오디오 디코딩

플랫폼 구현에 따라 디코딩이 필요할 수 있습니다. 유휴 상태를 유지할 수없는 리소스. 따라서 그것은 권장되지 않습니다 충분한 수의 비어있는 수를 제공하지 않고 디코더를 굶어보십시오. PCM 버퍼, 예를 들어. Android 간단한 버퍼 대기열에서 반환하여 다른 빈 버퍼를 quequeing하지 않고 콜백. 그 결과 디코더 기아가 지정되지 않습니다. 구현은 선택할 수 있습니다 디코딩 된 PCM 데이터를 놓고 디코딩 프로세스를 일시 중지하거나 심각한 경우 디코더를 종료합니다.

이 아닌 비헤이비어는 프로젝트에서 완전히 멈췄으며 주위에 가장 잘 작동 하는지를 잃어 버렸습니다. 메모리 또는 디스크에서 PCM으로 전체 파일을 디코딩하는 것은 옵션이 아닙니다. 정말로 이것을 스트리밍 솔루션으로해야합니다. 이것에 대한 도움은 대규모로 감사 할 것입니다

도움이 되었습니까?

해결책

이 문제를 해결하는 방법이 아닙니다.다른 프로젝트는 디코딩을 수행하기 위해 더 낮은 수준의 API (예 : libstagefright)를 사용하는 것 같습니다.이 방법은 데이터를 데이터를 얻을 수 있습니다

[편집] 기아 문제에 대한 방법이 없습니다.안드로이드는 그냥 사양을 준수하지 않습니다.기본적으로 데이터의 흐름을 제어 해야하는 경우 메모리에 버퍼를 버퍼링하고 일시 중지 및 재개를 사용하여 디코딩에 사용할 수 있는지 확인해야합니다.

NDK Google 그룹의 주제에 대한 토론입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top