Android Audio (5) : 재생(Playback) 데이터 흐름
2. 재생(Playback) 데이터 흐름
재생은 파일, 스트림, 또는 PCM 데이터를 디코딩하여 출력 장치(스피커, 헤드셋 등)로 보내는 과정입니다.
단계별 흐름
- 소스 (파일, 스트림, PCM 데이터):
- 데이터: 로컬 파일(MP3, WAV), 원격 스트림(HLS, DASH), 또는 앱 내 PCM 데이터.
- 예: /sdcard/music.mp3 또는 https://stream.example.com.
- 앱: MediaPlayer / ExoPlayer / AudioTrack:
- MediaPlayer: 고수준 API로 파일/스트림 재생.
- 동작: setDataSource() → prepare() → start().
- 데이터: 압축 오디오 → 내부 디코딩 → PCM.
- ExoPlayer: 적응형 스트리밍 및 커스텀 재생.
- 동작: MediaSource 설정 → prepare() → play().
- 데이터: 스트리밍 데이터 → 디코딩 → PCM.
- AudioTrack: 저수준 PCM 데이터 재생.
- 동작: write()로 PCM 버퍼 전달 → play().
- 데이터: PCM 데이터 직접 처리.
- 추가: AudioAttributes로 스트림 용도 지정(예: USAGE_MEDIA).
- MediaPlayer: 고수준 API로 파일/스트림 재생.
- AudioFlinger:
- 역할: 다중 오디오 스트림을 믹싱하고 출력 장치로 라우팅.
- 데이터: PCM 데이터를 받아 믹싱(예: 음악 + 알림음).
- 추가: 이퀄라이저, 리버브 등 AudioEffect 적용 가능.
- Audio HAL:
- 역할: 믹싱된 PCM 데이터를 하드웨어(스피커, 블루투스)로 전달.
- 데이터: PCM → DAC(디지털-아날로그 변환) → 아날로그 신호.
- 출력 장치 (AudioSink):
- 장치: 스피커, 헤드셋, 블루투스(A2DP), HDMI 등.
- 데이터: 아날로그 신호 → 오디오 출력.
- 제어: AudioManager.setSpeakerphoneOn() 또는 AudioDeviceInfo로 출력 경로 지정.
고려사항
- 오디오 포커스: AudioManager.requestAudioFocus로 재생 우선권 확보.
- 지연 시간: AAudio/Oboe로 저지연 재생(예: 게임).
- 코덱: 기기별 지원 코덱 확인(예: AAC, MP3).
Comments
Post a Comment