[Android] ExoPlayer 분석3. 가변 품질 스트리밍

Twaun·2022년 8월 2일
0

Android-Library

목록 보기
8/10

가변 품질 스트리밍?

가변 품질 스트리밍은 사용할 수 있는 네트워크 대역폭에 따라 스트림 품질이 변화시키는 미디어 스트리밍 기술이다. 이를 통해 사용자는 대역폭이 허용하는 최고 품질의 미디어를 경험할 수 있다.

일반적으로 동일한 미디어 콘텐츠가 다양한 품질(비트 전송률 및 해상도)의 여러 트랙으로 분할된다. 사용할 수 있는 네트워크 대역폭에 따라 플레이어가 트랙을 선택한다.

각 트랙은 지정된 시간 분량(일반적으로 2~10초)으로 분할된다. 따라서 사용할 수 있는 대역폭이 변경되면 플레이어가 신속하게 트랙 간에 전환할 수 있다.

1. 적응형 트랙 선택

가변 품질 스트리밍의 핵심은 현재 환경에 가장 적합한 트랙을 선택하는 것이다. 적응형 트랙 선택을 사용하여 가변 품질 스트리밍 미디어를 재생하도록 exoplayer-intro/exoplayer-codelab-02 에서 초기화 함수를 수정해보자!!

private fun initializePlayer() {
   // 미디어 항목에서 트랙을 선택하는 DefaultTrackSelector + 표준 화질 이하의 트랙만 선택하도록 설정
   val trackSelector = DefaultTrackSelector(this).apply {
        setParameters(buildUponParameters().setMaxVideoSizeSd())
    }
    
   player = ExoPlayer.Builder(this)
        .setTrackSelector(trackSelector) // 위 생성한 trackSelector
        .build()
  [...]
}

DefaultTrackSelector 로 트랙을 만들고 위와 같은 설정으로 품질을 제한하고 사용자의 데이터를 절약하는데 좋다. 그리고 player에 만든 트랙을 전달해준다.

2. 적응형 미디어 항목 빌드

흔히 사용되는 가변 품질 스트리밍 형식으로 DASH, HLS, SmoothStreaming 등이 있다. DASH를 이용해서 미디어 항목을 만들어 보자. 이전 방식과 같이 MediaItem을 만들어야 하는데

// 이전 방식
val mediaItem = MediaItem.fromUri(getString(R.string.media_url_mp4))

fromUri는 파일 확장자를 사용하여 기본 미디어 형식을 지원하지만 DASH uri 는 파일 확장자가 없어 Media Item을 생성할 때 MediaItem.Builder을 사용해 MIME유형의 APPLICATION_MPD을 제공해야한다.

// DASH 방식
val mediaItem = MediaItem.Builder()
	.setUri(getString(R.string.media_url_dash))
    .setMimeType(MimeTypes.APPLICATION_MPD)
    .build()

📝 MediaItem.Builder를 사용하면 다음을 비롯한 다수의 추가 속성을 포함하여 MediaItem을 만들 수 있습니다.

  • MIME 유형의 미디어 콘텐츠
  • DRM 유형, 라이선스 서버 URI, 라이선스 요청 헤더를 비롯한 보호되는 콘텐츠 속성
  • 재생 도중 사용할 사이드로드된 자막 파일
  • 잘림 시작 및 종료 위치
  • 광고 삽입용 광고 태그 URI

💡 다른 가변 품질 스트리밍 Mime Type
HLS : (MimeTypes.APPLICATION_M3U8)
SmoothStreaming : (MimeTypes.APPLICATION_SS)

[NEXT]

profile
Android Developer

0개의 댓글