MediaPlayer

홍승범·2023년 1월 19일
0

Android

목록 보기
3/9

MediaPlayer 클래스는 최소한의 설정으로 동영상과 오디오를 디코딩하여 재생할 수 있게 해준다.

상태

MediaPlayer의 상태 다이어그램은 다음과 같다
state

  • MediaPlayer가 내부적으로 가지고 있는 상태이며 각 상태에 따라 가능한 동작이 다르다.
  • 기본적으로는 아래 시퀀스대로 동작한다
    1. 생성시 IDLE 상태
    2. setDataSource로 Initialized상태로 변경
    3. 플레이어 준비를 위한 prepare/prepareAsync 동작이 끝나면 Prepared 상태
      • 이상태부터 seekTo, start등의 제어동작을 할 수있다.
    4. start() 호출하여 Started상태가 되며, pause/seekTo/stop/start등이 가능
    5. pause() 호출해 Paused상태.
    6. stop()을 호출하거나 재생이 끝나서 PlaybackCompleted상태에서 looping이 false일경우 Stopped상태로 전이.
      • 이상태에서는 start할 수 없고, prepare/prepareAsync를 통해 Prepared 상태로 돌아가거나 release()호출로 자원을 반납하고 end 상태로 전환할 수 있음

특징

  1. prepareAsync
    • prepare 과정은 오래걸리는 과정이다. 컨텐츠을 디코딩할 수 있는 코덱을 찾는등의 동작이 필요하기 때문에 메인스레드에서 호출하면 ANR이 발생할 가능성이 있다
    • prepareAsync 와 OnPreparedListener를 통해 비동기적으로 prepare과정을 동작하고 결과를 수신 받을 수 있다.
  2. 음악을 재생하는 경우에 대해 MediaPlayer를 백그라운드(서비스)에서 실행시켜야 할 수도 있다.
    • MediaBrowserServiceCompat객체를 이용해 서비스에서 미디어플레이어를 동작하고 사용자는 재생과는 별도로 포그라운드에서 상호작용 할 수 있다.
    • 서비스 또한 기본 동작은 메인스레드임을 명심하자. prepareAsync가 권장된다.
    • 서비스에서 컨텐츠를 재생하는 경우에 기기 상태에 따라 절전모드에 진입할 수 있으므로, MediaPlayer의 setWakeLock을 통해 절전모드에 대비해야 한다.
    • notification을 등록해 서비스를 setForeground로 지정해 주어야 한다.
profile
그냥 사람

0개의 댓글