Android에서 Ogg Vorbis 오디오 스트림을 재생하는 데는 여러 가지 방법이 있지만 지금까지는 모든 기능에 다양한 문제가 있습니다. 이 작업을 수행하는 "올바른"방법에 대한 그물에 대한 많은 정보가있는 것 같지 않습니다.Android에서 Ogg Vorbis를 스트리밍하는 가장 좋은 방법은
첫 번째 요구 사항 : 내 res/raw 디렉토리에 저장된 Ogg 파일의 음악을 스트리밍합니다. intro.ogg와 loop.ogg라는 두 개의 파일이 있습니다. 인트로가 먼저 재생되고 루프가 이어지고 음악이 계속 재생되는 한 반복해야합니다. 스트림 간에는 절대 간격이 없어야하며, 적어도 오래된 4.0 버전 또는 가능한 경우 2.x 이전 버전의 Android를 지원하고 싶습니다.
이렇게하려면 세 가지 방법이 있습니다.
1) MediaPlayer. 가장 자주 추천되는 방법. 문제점 : 두 개의 스트림을 대기열에 넣으려면 API 레벨 16에서만 도입 된 setNextMediaPlayer()를 사용해야합니다. 스트림 간에는 작지만 눈에 띄지 않는 간격이 있습니다 (최소한 4.3을 실행하는 N4에서는). setNextMediaPlayer()를 사용자 지정 완료 리스너로 바꾸려고 할 때 gpless 재생을 얻을 수없는 것 같습니다.
2) AudioTrack, MediaExtractor 및 MediaCodec. MediaPlayer가 내부적으로하는 일을 꽤 많이합니다. Issues : API 레벨 16 부터만 사용할 수 있습니다. 또한 현재 스트림 사이에 작은 간격이 생깁니다. # 3 아래 gaplessly 작동하기 때문에, 나는 그것을 없앨 수 있어야한다고 생각합니다 (설명서가 여기에 매우 얇은 것).
3) AudioTrack 및 맞춤 Ogg 디코딩. jogg/jorbis JAR은 이러한 목적으로 잘 작동합니다. 재생 및 큐잉은 끊이지 않습니다. 문제 : 느립니다. 이전의 N1에서는 프레임 속도에 약간의 영향을 미치고 입력 응답 성이 강력하게 저하됩니다.
# 1과 # 2가 하드웨어 디코딩을 지원한다고 가정하지만 # 3은 분명히 소프트웨어에서만 실행됩니다. 내 N1에서 Ogg 스트림을 재생할 때 MediaPlayer가 성능 문제를 일으키지 않는 것 같지만 API 수준이 낮기 때문에 대기열을 확보 할 수 없습니다.
이 문제를 해결할 방법이 있습니까? 아니면 인트로 큐를 건너 뛰고 구형 장치의 루프 큐 (rue cue)에서 미숙 한 페이드 인 (fade in)을 시도하려합니까?
(사람이 내가 MediaExtractor & MediaCodec와 실제 끊김없는 재생을 달성, 또는 좋은 하우투 날 지점 수 있어야 확인 할 수 있습니다 경우에도, 그 도움이 될 것입니다)