[Android] YouTube Android Player API で Youtube 動画を再生

2017.12.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、橋本です。 AndroidアプリでYoutube動画を再生するための検証を行ったので、備忘録としてまとめます。

ライブラリの導入

ライブラリのダウンロード

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

APIキーの取得

公式ガイドに従って、YouTube Data API v3を有効にしたAPIキーを取得します。

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

動画再生の実装

まず、再生したい動画のIDを取得します。動画IDは、YouTubeの動画再生ページのURLや共有URLから判別できます。

  • https://www.youtube.com/watch?v=<Youtube動画ID>
  • https://youtu.be/<Youtube動画ID>

動画再生の実装には、以下の方法があります。

  • YouTubeStandalonePlayer
  • YoutubePlayerFragment(YoutubePlayerSupportFragment)
  • YoutubePlayerView

YouTubeStandalonePlayer

一番簡単な再生方法として YouTubeStandalonePlayer を利用する方法があります。

YouTubeStandalonePlayer

Activityなどに、下記実装をするだけで動画を再生できます。

Intent intent = YouTubeStandalonePlayer.createVideoIntent(context, <取得したAPIキー>, <Youtubeの動画ID>);
startActivity(intent);

YoutubePlayerFragment(YoutubePlayerSupportFragment)

次に YoutubePlayerFragment を利用する方法があります。

Fragmentなので、Styleの継承やレイアウトのカスタマイズができます。 ただし、Playerの表示サイズは少なくとも 200x110 dp必要です。

YouTubePlayerFragment

下記は、xmlでFragmentを指定した場合の例です

xml

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    
    <fragment
        android:id="@+id/youtube_player"
        android:name="com.google.android.youtube.player.YouTubePlayerFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
    
</FrameLayout>

java

YouTubePlayerFragment youTubePlayerFragment = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_player);
youTubePlayerFragment.initialize(<取得したAPIキー>, new YouTubePlayer.OnInitializedListener() {
            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
                player.loadVideo(<Youtubeの動画ID>);
            }

            @Override
            public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {

            }
        });

YoutubePlayerView

最後に YoutubePlayerView を利用する方法があります。

この場合は、 実装するActivityにYouTubeBaseActivityをextendsする必要があります。 また、YouTubeBaseActivityの継承元はActivityなので注意が必要です。(FragmentActivityではない)

YouTubeBaseActivity 以外で使用した場合、下記のExceptionがスローされます。

IllegalStateException("A YouTubePlayerView can only be created with an Activity which extends YouTubeBaseActivity as its context.")

Fragmentの場合と同じく、Playerの表示サイズは少なくとも 200x110 dp必要です。

YouTubeBaseActivity

xml

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    
    <com.google.android.youtube.player.YouTubePlayerView
        android:id="@+id/youtube_player"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        />
        
</FrameLayout>

java

YouTubePlayerView youtubePlayerView = findViewById(R.id.youtube_fragment);
youtubePlayerView.initialize(<取得したAPIキー>, new YouTubePlayer.OnInitializedListener() {
            @Override
            public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) {
                player.loadVideo(<Youtubeの動画ID>);
            }

            @Override
            public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) {

            }
        });

以上です。