[Android Kotlin] MediaPlayer 정리

DoooongDong·2022년 4월 27일
0

Android Kotlin

목록 보기
11/11
post-thumbnail
post-custom-banner

애플리케이션 리소스에 저장된 미디어 파일, 파일 시스템의 독립형 파일 또는 네트워크 연결을 통해 들어오는 데이터 스트림에서 모두 MediaPlayer API를 사용해서 오디오 또는 동영상재생할 수 있습니다.

기본사항

MediaPlayer : 이 클래스는 사운드 및 동영상을 재생하는 기본 API 입니다.
AudioManager : 이 클래스는 기기의 오디오 소스 및 오디오 출력을 관리합니다.

Manifest 선언

  • 인터넷 권한
    MediaPlayer를 사용하여 네트워크 기반 콘텐츠를 스트리밍하는 경우 애플리케이션에서 네트워크 액세스를 요청해야 합니다.
    <uses-permission android:name="android.permission.INTERNET" />
    
  • Wake Lock 권한
    플레이어 애플리케이션에서 화면이 어두워지는 것이나 프로세스의 절전 모드를 방지해야 하거나 MediaPlayer.setScreenOnWhilePlaying()이나MediaPlayer.setWakeMode() 메서드를 사용한다면 이 권한을 요청해야 합니다.
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    
    

MediaPlayer 사용법

MediaPlayer에서는 여러 미디어 소스를 지원합니다.

  • 로컬 리소스
  • (*)ContentResolver에서 가져올 수 있는 것과 같은 내부 URI
  • 외부 URL (스트리밍)

(*)ContentProvider : 다른 앱에서 자신의 앱의 데이터베이스를 접근할 수 있도록 도와주는 역할

(*)ContentResolver : ContentProvider를 접근할 때에는 ContentResolver를 통해서 접근하게 됩니다. ContentResolver는 기본적으로 CRUD(Create Retreive Update Delete) 함수들을 제공하여서 이를 통해 다른 어플리케이션에 있는 데이터베이스를 조작할 수 있습니다.


  1. 애플리케이션의 res/raw 디렉터리에 저장된 로컬 원시 리소스로 오디오를 재생하는 예시입니다.
    var mediaPlayer: MediaPlayer? = MediaPlayer.create(context, R.raw.sound_file_1)
    mediaPlayer?.start() // no need to call prepare(); create() does that for you
    
  1. 시스템에서 로컬로 사용 가능한 URI에서 재생할 수 있는 방법(ex. ContentResolver를 통해 흭득)입니다.
    val myUri: Uri = .... // initialize Uri here
    val mediaPlayer: MediaPlayer? = MediaPlayer().apply {
        setAudioStreamType(AudioManager.STREAM_MUSIC)
        setDataSource(applicationContext, myUri)
        prepare()
        start()
    }
    
  1. HTTP 스트리밍을 통해 원격 URL에서 재생하는 방법입니다.
    val url = "http://........" // your URL here
    val mediaPlayer: MediaPlayer? = MediaPlayer().apply {
        setAudioStreamType(AudioManager.STREAM_MUSIC)
        setDataSource(url)
        prepare() // might take long! (for buffering, etc)
        start()
    }
    

MediaPlayer 해제

MediaPlayer는 시스템 리소스를 낭비할 수 있어서 작업이 끝나면 항상 release()를 호출하여 할당된 시스템 리소스가 올바르게 해제되었는지 확인해야 합니다.

    mediaPlayer?.release()
    mediaPlayer = null
    

https://developer.android.com/guide/topics/media/mediaplayer?hl=ko#kotlin

profile
꺾이지 말자 :)
post-custom-banner

0개의 댓글