ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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를 이용해 플레이리스트를 만들 수 있다.

    댓글

Designed by Tistory.