最初は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」をクリック
③API一覧がでてくるので「YouTube Data API」をクリック
④「APIを有効にする」をクリック
⑤「認証情報」をクリックして「新しいキーを作成」をクリックしてAPI Keyを作成する
⑥種別でAndroidを選択してテキストボックスにAndroidに組み込むkeystoreのSHA1のフィンガープリント+パッケージ名をセットして「作成」をクリック。
ちなみにフィンガープリントはこんな感じ。
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
⑦APIキーが作成される。こちらをAndroidソースコード側に埋め込む
⑧プロジェクトを作成して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); } }