Re: [android-group-japan: 20740] Webviewを用いてYoutubeの再生

1,920 views
Skip to first unread message

Makoto Yamazaki

unread,
Nov 11, 2012, 7:09:29 AM11/11/12
to android-g...@googlegroups.com
zaki です。

「WebView を用いた」という条件には当てはまらないですが、今年の Google I/O で
New YouTube Android Player Tools というセッションで、自分のアプリ内でyoutube の
動画を再生するための Activity や Fragment を提供するライブラリについてのセッションが
ありました。

セッション動画: https://developers.google.com/events/io/sessions/gooio2012/120/
セッションスライド: https://yt-android-api.appspot.com/

I/O の時点では開発中のライブラリでリリースはされてませんでした。その後リリースされた
という話も聞いてないのですが参考まで。

2012/11/10 初心者 <ykin...@gmail.com>:
> 過去似たような質問がありましたが解決していないような感じだったので質問させてください。
>
> Webviewを利用してBrowserのようなものを作っています。その中で、Youtubeの再生を行おうと思っているのですがうまくいきません。
> ご教授お願いできないでしょうか。以下、現在の状況です。
>
> [OSバージョン]
> Gingerbread
>
> [条件]
> ・Youtubeアプリなどを起動するのではなく、Webviewを用いた自分のアプリ内で完結したい
> ・フルスクリーンで再生したい
> ・(できれば)3gp/mp4のファイルタイプを選択したい
> ・(できれば)オリジナルのGUIで再生制御(play/pauseなど)をしたい
>
> [現在の状況]
> 実現できればどんなアプローチでもよいが現在は、youtubeのページを表示し、ビデオを選択されたときに
> 発生するonShowCustomView内でurlを取得し、youtubeのvideoidなどを利用してhttp getをして
> VideoViewのsetDatasource()の引数に適切なURLを設定しようとしているのですが、
> その適切なURLというのをどうやって取得すればいいかわからず悩んでいます。
> そもそもこんなやり方でいいのか自体にも悩んでします。
>
> 参考になるページの紹介とかでも構いません。
>
> よろしくお願いします。
>
>
>
>
>
>
>
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/YJXBFQUY7wQJ
> にアクセスしてください。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。



--
YAMAZAKI Makoto

XBG

unread,
Nov 12, 2012, 8:01:03 AM11/12/12
to android-g...@googlegroups.com
こんばんは。XBGです。
 
>発生するonShowCustomView内でurlを取得し、youtubeのvideoidなどを利用してhttp getをして
そのonShowCustomView内でビデオ表示を直接実装してしまえば手っ取り早いと思いますが。
 
まず、親Activityでこんな感じにメソッドを実装しておきます。
 
public void showVideo(View view) {
  /*
  あらかじめWebViewを配置するFrame(browserFrame)と
  ビデオ再生を行うvideoFrameをレイアウトに設置しておき
  これらの表示状態を切り替えることでビデオ再生に移行しています。
  あとはこれをWebChromeClient#onShowCustomView()から
  呼び出せば、ビデオ再生を実現できます。
  */
  ViewGroup mainFrame = (ViewGroup)findViewById(R.id.videoFrame);
  mainFrame.addView(view);
  mainFrame.setVisibility(View.VISIBLE);
  findViewById(R.id.browserFrame).setVisibility(View.GONE);
  getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
  getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
  
  fullFlag = true;//ビデオ再生中であることを記憶しておく
  videoView = view;//ビデオ再生のためのVideoViewをフィールドに代入しておく
 }
 
public void hideVideo() {
  /*
  こちらはshowVideo()と逆の処理
  つまりビデオを非表示にするときの処理です。
  */
  try{
   ViewGroup mainFrame = (ViewGroup)findViewById(R.id.videoFrame);
   mainFrame.removeView(videoView);
   mainFrame.setVisibility(View.GONE);
   findViewById(R.id.browserFrame).setVisibility(View.VISIBLE);
   getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
   getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
   /*
   次の1行を忘れると2回目以降onShowCustomViewが呼ばれなくなります。
   customViewCallbackにはWebChromeClient#onShowCustomViewで
   何らかのコールバックオブジェクトが代入されます
   必ずこのコールバックを破棄する処理を入れてください
   */
   customViewCallback.onCustomViewHidden();
  }catch(Exception e){
   e.printStackTrace();
  }
  fullFlag = false;//ビデオ再生終了
  customViewCallback = null;//本当はここは無くても良い?のですが念のためnullで初期化します
 }
 
同時にWebChromeClientにこんな感じに実装します
@Override
  public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
   /*
   簡潔にするため、イベントの呼び出し時に起こすのはViewおよびCallbackの保管だけにします。
   customViewとcustomViewCallbackは親Activityのフィールドとして定義しておいてください
   なお、Android3.x以降は全画面に移行するまでこのイベントは呼ばれなくなります
   */
   customView = view;
   customViewCallback = callback;
   
   showVideo(customView);
   super.onShowCustomView(view, callback);
  }  
  
  @Override
  public void onHideCustomView() {
   // TODO Auto-generated method stub
   super.onHideCustomView();
   hideVideo();
  }
 
これを適宜改造するだけです

2012年11月10日土曜日 17時49分22秒 UTC+9 初心者:

Makoto Yamazaki

unread,
Dec 21, 2012, 7:21:25 PM12/21/12
to android-g...@googlegroups.com
zakI です。

> 「WebView を用いた」という条件には当てはまらないですが、今年の Google I/O で
> New YouTube Android Player Tools というセッションで、自分のアプリ内でyoutube の
> 動画を再生するための Activity や Fragment を提供するライブラリについてのセッションが
> ありました。
>
> セッション動画: https://developers.google.com/events/io/sessions/gooio2012/120/
> セッションスライド: https://yt-android-api.appspot.com/

YouTube Android Player API としてリリースされたようです。
http://googledevelopers.blogspot.jp/2012/12/no-webview-required-with-native-youtube.html?spref=tw

さっそくサンプルプロジェクトを試してみたところ、ちゃんと Activity の中でyoutube の動画が
再生されてました。

http://twitpic.com/bo1lfv

これはかなり良さそうな感じです。
--
YAMAZAKI Makoto
Reply all
Reply to author
Forward
0 new messages