2013-11-20 3 views
1

안드로이드에서 AAC (MP4 컨테이너에서)를 포함하는 메모리 버퍼를 재생할 합리적인 방법이 있습니까? 이 버퍼를 디스크에 쓸 수 없습니다 ... 메모리에서 재생해야합니다.안드로이드에서 AAC 버퍼 재생

안드로이드가 PCM이 아닌 메모리 버퍼를 재생하는 API를 노출하지 않기 때문에 필자의 유일한 선택은 PCM을 수동으로 디코딩하고 AudioTrack을 사용하는 것입니다. OpenSL ES는 메모리 소스를 지원하지만 Android는이를 구현하지 않습니다.

+0

Android Java에서 제공하는 메모리 매핑 된 파일 기능이 있습니까? 플랫폼에 너무 익숙하지 않아서 그런 식으로 주위를 검색하고 있습니다. 그러한 클래스가 있고 FileDescriptor 객체를 반환하면 MediaPlayer.setDataSource()에 전달할 수 있어야합니다. –

+0

내가 아는 것은 아닙니다. 파이프를 사용하여 파일 설명자를 얻을 수 있지만 (아마도 네이티브 코드로 수행해야 할 필요가있을 수 있습니다) 파일 설명자는 검색 할 수 없으므로 플레이어에서 제대로 작동하지 않습니다. – Fixee

답변

0

내가 찾을 수있는 유일한 방법은 (내 질문에 표시된대로) 수동으로 AAC를 디코딩하는 것입니다. 이 작업을 수행하는 Android 용 패키지가 몇 가지 있습니다. 아마도 가장 잘 테스트되고 잘 알려진 ffmpeg 일 것입니다. ffmpeg은 AAC 디코더로만 추출 될 수 있으므로 메모리 요구량은 매우 적습니다. (이미 하나의 장치가 이미있는 장치에 디코더를 도입하는 것은 불편합니다.)

AAC가 PCM으로 디코딩되면 Java (AudioTrack) 또는 기본 (OpenSL ES)으로 재생할 수 있습니다. 네이티브 옵션의 경우 재생 대기 시간이 현저히 낮습니다 (문제가있는 경우).

관련 문제