본문 바로가기

안드로이드

[안드로이드] ExoPlayer (1) - 이게 뭐야 & 설정하기 & 시작하기

회사에 와서 미디어 관련 라이브러리를 처음 다뤄보게 되어서 한번 정리를 해보고자 합니다.

 


ExoPlayer 란?

ExoPlayerSM엔터ㅌ 구글에서 만든 미디어 재생 라이브러리입니다. 여러 종류의 미디어 파일을 쉽게 재생할 수 있도록 해줍니다. 네트워크에서 스트리밍 형태로 불러와 재생할 수 있고, 다양한 포맷을 지원하며 커스터마이징도 됩니다. 스트리밍 서비스를 지원하도록 추가된 라이브러리로, 기존에 있던 MediaPlayer의 기능에 새로운 기능이 추가된 것이라 보면 되겠습니다.

 

 

대표적으로 유튜브에서 사용되고 있습니다.

 


적응형 스트리밍(Adaptive Streaming)

사용자의 네트워크 상태에 따라 적응해서 스트리밍을 해주니다. 아마 지하철이나 버스 등 사람이 많이 몰려있을 때는 영상이 저화질이었다가 사람이 좀 빠지면 고화질로 바뀌는걸 경험해 보셨을 것입니다. 이처럼, 동영상을 다양한 해상도로 인코딩하고 잘게 쪼개서 저장해뒀다가, 사용자의 네트워크 상태에 따라 최적의 조각을 가져와 보여주는 방식입니다. 그러면 서버에서 트래픽 관리하기도 좋아지고, 사용자도 끊김없이 영상을 볼 수 있게 된 것입니다.

  • DASH  - 국제 표준화된 최초의 적응 비트레이트 HTTP 기반 스트리밍 솔루션
  • HLS - 애플에서 만든 스트리밍 솔루션
  • SmoothStreaming - MS에서 만든 스트리밍 솔루션
  •  

지원 포맷

원만한 포맷은 다 지원해주는데, 스트리밍 방식에 따라 조금씩의 변화가 있습니다. (아마도..?)

목록은 정식 문서에 가셔서 확인하면 됩니다.

토스~

https://exoplayer.dev/supported-formats.html

 

Supported formats - ExoPlayer

 

exoplayer.dev

 

(사실 미디어를 잘 몰라서 정리하기가 힘드러욬ㅋㅋㅋ. mp4가 일단 잘되어서 그냥 넘어갔습니다.)

 

확장 가능도 하다고 하니 링크에서 잘 보시기 바랍니다.

 


준비하기

ExoPlayer는 Android 4.1(API 레벨 16) 이상에서 사용가능합니다.(웬만한 기기에서는 다 돌아간다는 뜻이겠죠?)

 

  • Project build.gradle 설정하기

최신 버전의 안드로이드 스튜디오의 경우 자동으로 설정되어있습니다. 안되어있으면 추가해주세요.

 

buildscript {
    repositories {
        google()
        jcenter()
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

 

  • app build.gradle 설정하기

마찬가지로 추가해주세요.

 

android {
	.
	.
	.
    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

 

ExoPlayer 는 자바 8을 사용해서 이를 사용하도록 해줘야 합니다.

 

dependencies {
    implementation 'com.google.android.exoplayer:exoplayer:2.14.1'
}

최신 버전은 ReleaseNote 에서 확인하세요.

'com.google.android.exoplayer:exoplayer:2.14.1' 은 전체 라이브러리가 들어갑니다. 필요한 것만 뽑아서 추가하고 싶으면, 

dependencies {
	implementation 'com.google.android.exoplayer:exoplayer-core:2.14.1'
	implementation 'com.google.android.exoplayer:exoplayer-dash:2.14.1'
	implementation 'com.google.android.exoplayer:exoplayer-ui:2.14.1'
}

이런식으로 모듈로 쪼개서 넣으시면 됩니다.

대신 쪼개면 'exoplayer-core' 필수입니다.

필요한 모듈은 여기서 확인하면 됩니다.

 


시작하기

  • PlayerView 추가

비디오를 실제로 보여줄 UI 요소입니다.

 

<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/playerView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintWidth_percent="0.9"
        app:layout_constraintHeight_percent="0.5"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" 
        app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    PlayerView playerView = findViewById(R.id.playerView);
}

 

  • SimpleExoPlayer 생성

비디오 플레이어입니다. 플레이어를 통해 비디오를 보여주고 컨트롤 할 수 있습니다. 플레이어 생성 후 위에서 만든 PlayerView 와 연결해 줍니다.

 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    PlayerView playerView = findViewById(R.id.playerView);
    SimpleExoPlayer player = new SimpleExoPlayer.Builder(this).build();
    playerView.setPlayer(player);
}

 

  • 샘플 비디오 재생시키기

샘플 비디오를 재생시켜보겠습니다. 영상을 재생시키기 위해서는 MediaItem 을 만들어서 플레이어에 넣어줘야 합니다.

setMediaItem 은 영상을 하나씩 넣을때 사용하고, setMediaItems 는 영상들을 item으로 만들고 List 형태로 묶어서 넣을때 사용합니다.

 

String sample = "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4";
MediaItem mediaItem = MediaItem.fromUri(sample);
player.setMediaItem(mediaItem);
player.prepare();
player.play();

 

요런 식으로 잘 나올것입니다.

 


공식문서에 보면 PlayerView 말고 StyledPlayerView도 있다고 되어있습니다.

사용해보니

이렇게 플레이어 컨트롤러가 다르게 나오는 것을 알 수 있습니다.

 


참조 문서

 

Hello world! - ExoPlayer

 

exoplayer.dev

 

 

다음 글

 

[안드로이드] ExoPlayer(2) - 유튜브 영상 재생시키기

[안드로이드] - [안드로이드] ExoPlayer (1) - 이게 뭐야 & 설정하기 & 시작하기 [안드로이드] ExoPlayer (1) - 이게 뭐야 & 설정하기 & 시작하기 회사에 와서 미디어 관련 라이브러리를 처음 다뤄보게 되어

dev-genue.tistory.com