YouTubeの動画再生

最初はAndroidでYouTube再生するのにVideoViewを使ってみる。

VideoViewでYoutubeで動画を再生するのにはURLのhttp://….ではなくrtsp://…でないとダメらしい。

rtspはYouTube WEBAPIで以下のようにするといいらしい。
例えばURLがhttp://www.youtube.com/watch?v=hogeIdだとすると
http://gdata.youtube.com/feeds/api/videos?q=hogeId&format=1
パラメータのformat=1は動画フォーマット。
1はH.263、6はMPEG-4 SP。これでXMLが返ってくるのでrtspを取得。これでAndroidのVideoViewで再生できるが今ひとつ画質が悪い。

ということでYouTube Android Player APIを使う。こちらではrtspではなくYouTubeの動画IDだけで行けるらしい。ただしこちらはGoogle APIのAPI Keyを取得しないと行けない。ひさびさにGoogle Consoleを開くとまたインターフェイスが変わっているのでとりあえず画面キャプチャを添付しました。

Google Consoleにアクセスして新規プロジェクト作成
②「API」をクリック
console-api-form
③API一覧がでてくるので「YouTube Data API」をクリック
console-key-youtube
④「APIを有効にする」をクリック api_on
⑤「認証情報」をクリックして「新しいキーを作成」をクリックしてAPI Keyを作成する
console-key-createform
⑥種別でAndroidを選択してテキストボックスにAndroidに組み込むkeystoreのSHA1のフィンガープリント+パッケージ名をセットして「作成」をクリック。
console-key-input
ちなみにフィンガープリントはこんな感じ。

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v

 sha

⑦APIキーが作成される。こちらをAndroidソースコード側に埋め込む
console-key

⑧プロジェクトを作成してYouTube Android Player APIよりダウンロードして解答したファイルのlibsフォルダよりYouTubeAndroidPlayerApi.jarをインポート。YouTubePlayerFragmentを使う方法もあるようですがYouTubePlayerViewを使いたいたいのでYouTubeBaseActivityを使用。インターフェイスYouTubePlayer.OnInitializedListenerを実装してイニシャライズを行って動画IDを使って再生します。

AndroidManifest.xmlでパーミッションを設定

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

 レイアウトファイル

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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/video"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:layout_margin="12dip" />

</RelativeLayout>

 アクティビティ

public class YoutubePlayer extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener{
    
    static final String DEVELOPER_KEY ="取得したAPIキー";
    private YouTubePlayerView video;
    
    private String youtubeId;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videoplay);
        

        youtubeId = "hogeYoutubeId";
        
        findView();
    }
    /**
     * viewの生成
     */
    private void findView(){
        video = (YouTubePlayerView)findViewById(R.id.video);
        video.initialize(DEVELOPER_KEY, this);
        
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        video = null;    
    }
    
    /**
     * Yotube player初期化失敗
     */
    @Override
    public void onInitializationFailure(Provider arg0,YouTubeInitializationResult arg1) {
        // 初期化失敗時の処理
    }
    /**
     * Yotube player初期化成功
     */ 
    @Override
    public void onInitializationSuccess(Provider arg0, YouTubePlayer player,boolean arg2) {
        player.loadVideo(youtubeId);
        
    }   
}