안드로이드에서는 음악이나 동영상 같은 미디어 파일을 재생할 수 있도록 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
'Android > Concepts' 카테고리의 다른 글
RecyclerView 사용법 (0) | 2020.05.04 |
---|---|
MediaRecorder로 Audio 녹음하기 (2) | 2020.05.04 |
Camera를 이용하여 사진 촬영 및 저장하기 (1) | 2020.05.02 |
Device의 Network 상태 가져오기 (0) | 2020.05.01 |
SQLiteOpenHelper 사용하여 DB 수정하기 (0) | 2020.05.01 |