곰돌푸우❤️

목차

     

    요즘에 유튜브 영상을 활용한 만화, 트로트, 가요 등 특정 카테고리의 앱들이 구글 플레이에 많이 출시되고 있습니다.

    이 앱들은 유튜브 영상을 모아 영상을 재생하는 기능을 제공하고 있습니다.

     

    일반적으로 안드로이드에서 영상 재생을 구현하기 위해서는 MediaPlayer, ExoPlayer 등을 사용해야하는데 유튜브 플레이어 수준으로 구현을 하기 위해서는 꽤 귀찮은 작업을 해야합니다. 그래서 유튜브에서 YouTube Android Player API 라는 이름으로 간편한 라이브러리를 제공하고 있습니다.

     

     

    YouTube Android Player API 를 적용하는 방법을 알아보겠습니다.

     

    1. Youtube Android Player API 다운로드

    Youtube Player 라이브러리는 아직 Gradle이 아닌 zip파일로 다운로드를 제공하고 있습니다. 

    제가 처음 이 라이브러리를 사용한 2년전쯤에도 이러한 방식이였는데 아직까지 gradle로의 변화가 없는점이 아쉽네요.

     

    https://developers.google.com/youtube/android/player/?hl=ko

     

    YouTube Android Player API  |  YouTube for Android  |  Google Developers

    YouTube Android Player API를 사용하면 Android 애플리케이션에 동영상 재생 기능을 통합할 수 있습니다. 이 API는 YouTube 동영상(및 재생목록)을 로드하고 재생하는 방식 및 동영상 재생 환경을 맞춤설정하고 제어하는 방식을 정의합니다. API를 사용하면 애플리케이션의 UI에 삽입된 플레이어 보기에 동영상을 로드하거나 실행할 수 있습니다. 그런 다음 재생을 프로그래밍 방식으로 제어할 수 있습니다. 예를 들어 현재 로드된 동영상

    developers.google.com

    위 링크로 접속합니다.

     

     

    다운로드를 클릭합니다.

     

     

    download를 클릭해서 zip파일을 다운로드를 받습니다.

    글을 쓴 현재 시점으로 1.2.2 버전이네요.

     

     

    zip파일 압축을 풀고 libs 폴더로 들어가면 YouTubeAndroidPlayerApi.jar파일이 있습니다.

    이 파일을 복사합니다.

     

     

    2. Youtube Android Player API 프로젝트에 적용

    Android Studio 프로젝트의 app/libs 하단에 붙여넣기 합니다.

     

     

    File - Project Structure 로 진입해서 위 순서대로 jar파일을 추가해줍니다.

     

     

    <manifest>
    
        <uses-permission android:name="android.permission.INTERNET" />
    	...
        
    </manifest>

    AndroidManifest.xml 에서 유튜브 영상 재생에 필요한 INTERNET 권한을 추가합니다.

     

     

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">
    
        <com.google.android.youtube.player.YouTubePlayerView
            android:id="@+id/youtubeView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </LinearLayout>

    유튜브 영상재생을 구현할 화면의 레이아웃파일에 YouTubePlayerView 를 추가합니다.

     

     

    class MainActivity : YouTubeBaseActivity() {
    
        val videoId = "F-KjYNmsi0U"
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            val youtubeView = findViewById<YouTubePlayerView>(R.id.youtubeView)
            youtubeView.initialize("develop", object : YouTubePlayer.OnInitializedListener {
                override fun onInitializationSuccess(
                    provider: YouTubePlayer.Provider,
                    player: YouTubePlayer,
                    wasRestored: Boolean
                ) {
                    if (!wasRestored) {
                        player.cueVideo(videoId)
                    }
                }
    
                override fun onInitializationFailure(
                    provider: YouTubePlayer.Provider?,
                    result: YouTubeInitializationResult?
                ) {
    
                }
            })
        }
    }

    YouTubePlayerView를 포함한 화면은 YouTubeBaseActivity를 상속 받습니다.

    그리고 initialize 메서드를 호출합니다. 첫번째 파라미터로는 아무 값이나 넣어줍니다. 비어있거나 null을 넘기면 IllegalArgumentException이 던져집니다. 두번째 파라미터로 넘긴 OnInitializedListeneronInitializationSuccess가 호출되면 cueVideo를 호출해서 재생할 비디오의 ID를 넘겨줍니다. 비디오의 ID는 유튜브 영상마다의 고유한 ID입니다. YouTube Data API를 통해서 구할수도 있고 YouTube URL (https://www.youtube.com/watch?v=F-KjYNmsi0U)에서 파라미터 v의 값(F-KjYNmsi0U)을 추출할 수도 있습니다. 여기까지 구현하시면 영상로딩이 완료되고 재생준비가 완료됩니다. 

     

     

    하지만 자동으로 영상이 재생되지는 않습니다. 자동재생이 필요하시면 추가 작업이 필요합니다.

    youtubeView.initialize("develop", object : YouTubePlayer.OnInitializedListener {
        override fun onInitializationSuccess(
            provider: YouTubePlayer.Provider,
            player: YouTubePlayer,
            wasRestored: Boolean
        ) {
            if (!wasRestored) {
                player.cueVideo(videoId)
            }
    
            player.setPlayerStateChangeListener(object :
                YouTubePlayer.PlayerStateChangeListener {
                override fun onAdStarted() {}
                override fun onLoading() {}
                override fun onVideoStarted() {}
                override fun onVideoEnded() {}
                override fun onError(p0: YouTubePlayer.ErrorReason) {}
                override fun onLoaded(videoId: String) {
                    player.play()
                }
            })
        }
    })

    먼저 구현했던 코드의 onInitializationSuccess 콜백함수에서 player.setPlayerStateChangeListener를 구현합니다. onLoaded가 호출되면 영상재생 준비가 완료되었으니 player.play()를 호출하여 재생을 하도록 합니다. 이렇게까지 구현하면 YouTubePlayerView를 구현했던 MainActivity가 뜨면 YouTubePlayerView가 자동으로 초기화 되고 영상이 준비되면 자동으로 재생시킵니다.

     

     

     

     

    각자의 앱에 맞추어 알맞게 사용하시길 바라겠습니다.

    개발자 여러분들 화이팅입니다!

     

     

    facebook twitter googleplus kakaostory naver