안드로이드

Android Exoplayer 플레이리스트

2020. 3. 17. 09:08

 

이번엔 Exoplayer에서 플레이리스트를 설정하는 법에 대해 알아보자

 

플레이리스트 설정 전에 일단 영상 하나를 재생하는 프로세스부터 알고 해야 될 것 같다.

영상 재생은 아래와 같은 단계를 거친다.

 

// playerView View 맵핑
playerView = findViewById(R.id.playerView);

// 영상 Uri
Uri uri = Uri.parse("/storage/emulated/0/test.mp4");

DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, Util.getUserAgent(context, "PlayerSample"));
MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(uri);

// 플레이어 생성
player = new SimpleExoPlayer.Builder(context).build();

// 재생 준비되면 바로 재생 시작
player.setPlayWhenReady(true);
// 플레이어 뷰에 플레이어 맵핑
playerView.setPlayer(player);
// 타임바 사용
timeBar.setEnabled(true);

// 플레이어에 영상재생 준비
player.prepare(mediaSource);

 

기본적으로 Exoplayer에선 DataSource를 이용해 영상 스트림을 읽을 수 있는 형태로 표현하고 그 형태를 MediaSource라 한다. 따라서 위 코드를 보면 DataSource에서 영상 uri를 이용해 MediaSource를 생성하는 것을 볼 수 있다.

 

이 로직을 그대로 이용해 플레이 리스트를 만들 수 있다.

 

DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, Util.getUserAgent(context, "PlayerSample"));

MediaSource videoSource[] = new MediaSource[listCount];
for (int i = 0; i<listCount; i++) {
    videoSource[i] = new ProgressiveMediaSource.Factory(dataSourceFactory).setTag(i).createMediaSource(mList[i]);
}

final MediaSource mediaSource = new ConcatenatingMediaSource(videoSource);

영상 하나를 재생하는 코드와 플레이어 관련 부분은 똑같기 때문에 MediaSource를 구성하는 코드만 보면 된다.

 

똑같이 DataSource를 생성하고 MediaSource를 배열 형태로 선언한다.

그리고 조금 다른 점은 DataSource를 이용해 MediaSource를 생성할 때 setTag()라는 메소드가 사용된다.

플레이리스트에선 영상마다 자신의 고유 태그 값이 있어야 영상을 구분할 수 있기 때문에 이와 같은 메소드가 사용되는 것이다.

 

MediaSource는 ConcatenatingMediaSource를 이용해 플레이리스트를 만들 수 있다.