본문 바로가기
Android/Concepts

MediaPlayer로 Audio와 Video 파일 재생하기

by JuHy_ 2020. 5. 3.

안드로이드에서는 음악이나 동영상 같은 미디어 파일을 재생할 수 있도록 MediaPlayer를 제공하고 있다.

MediaPlayer를 이용하여 Audio 파일과 Video 파일을 재생하는 법을 알아보자.

 

Audio 재생하기

MediaPlayer player;
int position = 0;

먼저 MediaPlayer 객체와 일시정지 시 위치를 기록할 position 변수를 전역 변수로 선언해주자.

 

<uses-permission android:name="android.permission.INTERNET" />

※ 인터넷으로부터 파일을 받아와 재생한다면 manifest에 INTERNET 권한도 추가해주자.

 

Play

public void playAudio(){
    try {
        closePlayer();

        player = MediaPlayer.create(this, R.raw.sample_audio);
        player.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

재생을 MediaPlayer.create()에 프로젝트에 포함된 파일의 주소를 넣어주고 start() 하거나

 

public void playAudio(){
    try {
        closePlayer();

        player = new MediaPlayer();
        player.setDataSource(url);
        player.prepare();
        player.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

setDataSource()를 통해 url을 지정하고 prepare()를 통해 파일을 읽어와 start()를 통해 실행하는 방법이 있다.

저장소에 있는 파일을 실행하고 싶다면 url 대신 파일의 경로를 넣어주면 된다.

 

public void closePlayer(){
    if(player != null){
        player.release();
        player = null;
    }
}

※ 재생을 두번 눌렀을 때를 대비해 재생 시 이전 player를 메모리에서 해제해주는 함수를 먼저 실행하였다.

 

Pause

public void pauseAudio(){
    if(player != null){
        position = player.getCurrentPosition();
        player.pause();
    }
}

player가 재생중인 시점을 position 변수에 기억하고, pause() 함수를 통해 멈춘다.

 

Resume

public void resumeAudio(){
    if(player != null && !player.isPlaying()){
        player.seekTo(position);
        player.start();
    }
}

seekTo() 함수를 통해 position 변수를 통해 기억한 위치로 이동하고 다시 player를 재생시켜준다.

 

Stop

public void stopAudio(){
    if(player != null && player.isPlaying()){
        player.stop();
    }
}

player가 재생중이라면 player를 멈춰준다.

 

Video 재생하기

비디오의 경우 음악과 달리 화면에 보여주기 위한 VideoView를 사용해야 한다.

 

<VideoView
    android:id="@+id/videoview"
    android:layout_width="300dp"
    android:layout_height="300dp" />

먼저 비디오를 실행할 위치에 VideoView를 추가해주자.

 

videoView = findViewById(R.id.videoview);

추가한 VideoView 객체를 찾아와준 뒤

 

MediaController controller = new MediaController(this);
videoView.setMediaController(controller);
videoView.setVideoURI(Uri.parse(url));
videoView.requestFocus();

MediaController 객체를 생성하여 VideoView 객체에 넣어준다.

MediaController는 비디오 재생, 일시정지, 되감기 등의 기능을 UI와 함께 제공해준다.

 

그리고 실행할 비디오의 주소를 넣어준 뒤 Focus를 얻어오면 비디오를 준비하게 된다.

 

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        Toast.makeText(getApplicationContext(), "Video Prepared", Toast.LENGTH_SHORT).show();
    }
});

이 때 OnPreparedListener를 통해 비디오가 준비되었는지 확인할 수 있다.

 

Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        videoView.seekTo(0);
        videoView.start();
    }
});

준비가 끝났다면 처음 위치로 이동한 뒤, start() 함수로 비디오를 실행해주자.

 

 

동영상이 정상적으로 재생되고 Controller UI도 나타나는 것을 볼 수 있다.

 

 

Reference

[부스트코스]안드로이드 프로그래밍

https://www.edwith.org/boostcourse-android