WebViewでのYoutube再生

3,660 views
Skip to first unread message

Hama - san

unread,
Dec 26, 2010, 10:18:06 PM12/26/10
to 日本Androidの会
初めまして、Hama - san と申します。件名についてご教授をお願いします。

【内 容】
WebViewを利用し、自アプリのassetフォルダ内のhtmlファイルを読み込ませ、
あたかも自アプリ内でYoutubeを再生しているように見せかけたいのですが、
うまく行きません。

【症 状】
最初のリスト表示まで出来るのですが、見たいビデオをクリックしても再生されず無反応です。
何度か画面を遷移させるとWebブラウザ内にエラーが表示されます。
ログを見ても、リンクに対して反応していないようです。

以下にコードをさらします。ぶしつけなお願いですいませんが、何かご存知の方はご教授宜しくお願いいたします。

【コード】
YouTubeActivity.java
https://docs.google.com/document/d/13B3iBBYCVvPRUrkUbqpSdZCSCFiAiV54NdeZqzSCybc/edit?hl=en

youtube.html // assetフォルダへ置いてください。
https://docs.google.com/document/d/1DULbchBTIytFRY7GmXSZOhZrQ9P8Y4PiCIWLi-7xKh4/edit?hl=en
AndroidManifest.xml
https://docs.google.com/document/d/1Tx_NgcbshAogZRTO5EgUHTsxrs0AQlpXhc8QghedtmM/edit?hl=en


koya

unread,
Dec 28, 2010, 1:49:48 AM12/28/10
to android-g...@googlegroups.com
初めまして、koya と申します。

どういった端末を使用しておられ、どういったエラーが表示されるのか分からないのですが
端末にインストールされている YouTube アプリを呼び出すのであれば setWebViewClient の部分を
次のようにするのが手っ取り早いのではと思います。

webview.setWebViewClient(new WebViewClient(){
@Override
public void onLoadResource(WebView wv, String url){
if(url.indexOf("vnd") == 0) {
Uri uri = Uri.parse(url);
Intent i = new Intent(Intent.ACTION_VIEW,uri);
startActivity(i);
wv.goBack();
}
}
});


2010年12月27日12:18 Hama - san <zyohnsm...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

W少年

unread,
Dec 28, 2010, 8:49:07 AM12/28/10
to 日本Androidの会
ユーチューブを表示するだけならサイトの部品をHTMLでコーディングしてWebViewでロードするだけの方が楽です。
その際、WebChromeClientもセットしないとJSがうまく動きません。
その上で、どうしてもAndroidじゃないとできないことをAndroidのプログラムで書いてJSInterfaceの独自のライブラリとして呼び
出した方がやりやすいです。

ohisamallc

unread,
Dec 28, 2010, 5:17:15 PM12/28/10
to android-g...@googlegroups.com
山形のohisamaです。
山形は、3日間、吹雪きました。

android1.6しか、知りませんが、webkitは
mimeタイプに合わせて、プレーヤーを起動してやる
必要があります。

マーケットに、プレーヤー出してます。
こんな感じでは、いかがでしょうか
Another 3gp player
Another flv player
Another mp4 player
Another youtube player
Another obj player
Another mqo player
Another amr player
Another mp3 player
Another ogg player
Another midi player
残念ですが、単体でしか動きません。

Hama - san

unread,
Dec 28, 2010, 9:47:38 PM12/28/10
to 日本Androidの会
ohisama さん
ご協力ありがとうございます。 Hama - san です。

>> 山形は、3日間、吹雪きました。
ちなみに私は沖縄なのですが、3日間もですか!
こちらはほぼ晴天続きです。寒さも低くて10℃までです…
こちらでは、雪は知識として知っている程度ですね~(^^;)

さて、指摘されたのですが、こちらの情報が少なかったのでお知らせします。
【端 末】
Sony Xperia (Android 1.6)
au IS03 (Android 2.1)
Samsung Galaxy S (Android 2.2)

Android は1.6以上で モバイル版のm.youtube.com をWebView内で再生できるかと
期待したのですが・・・
エミュレータでは、「Web page not available」 とか 「ページが見つかりませんでした」 と表示され、
実機では、ビデオをクリックしても無反応です。

おっしゃるとおり、別途再生アプリを用意し、そちらで再生する方法が
一般的(?)かもしれませんね。

ともあれ、ご協力ありがとうございます。
何か分かりましたら、お知らせしますがよろしいでしょうか?

以上、ありがとうございました。

Hama - san

unread,
Dec 28, 2010, 10:04:48 PM12/28/10
to 日本Androidの会
W少年さん

情報提供ありがとうございます。 Hama - san です。
仰るとおりで、表示までなら楽に出来ているのですが・・・

さて、指摘されたのですが、こちらの情報が少なかったのでお知らせします
【端 末】
Sony Xperia (Android 1.6)
au IS03 (Android 2.1)
Samsung Galaxy S (Android 2.2)

Android は1.6以上で モバイル版のm.youtube.com をWebView内で再生できるかと
期待したのですが・・・
エミュレータでは、「Web page not available」 とか 「ページが見つかりませんでした」 と表示され、実機では、ビデオをク
リックしても無反応です。

> その際、WebChromeClientもセットしないとJSがうまく動きません。

情報ありがとうございます。JSがうまく機能してないように思えてきました。
調べてみたいと思います。

うまくいけば、Androidアプリの開発をWeb系(Javascript)の方と分担できる
と目論んでいたのですが・・・ 取らぬ狸の皮算用ですね(^^;)

ともあれ、ご協力ありがとうございます。
何か分かりましたら、お知らせしますがよろしいでしょうか?

以上、ありがとうございました。


W少年

unread,
Dec 29, 2010, 12:14:55 AM12/29/10
to 日本Androidの会
> うまくいけば、Androidアプリの開発をWeb系(Javascript)の方と分担できる
> と目論んでいたのですが・・・ 取らぬ狸の皮算用ですね(^^;)
そうでもないですよ。
全てをAndroid的に実装するのは大変ですが、私もJSInterfaceでセンサーのリアクションをJavaScriptで受けとるような方向に
向かっているので不可能なことではないです。
アプリとして全て端末に保持するとバージョンアップが大変なのであなたがつくったオリジナルブラウザでアクセスしたときだけ特有の機能が実現するサイト
という方向で開発をするとその機能を呼び出すAPIはあなたのブラウザにしかないのでサイトを見た客がオリジナルブラウザを欲しくなり商品としての宣伝
効果にもなります。

ohisamallc

unread,
Dec 30, 2010, 6:57:03 PM12/30/10
to android-g...@googlegroups.com
山形のohisamaです。
沖縄は、花粉症が無いって本当ですか。

野良アプリ作って見ました。
良かったら、動作確認して見てくだされ。
http://yumeblog.dip.jp/test/1012310850.htm

Hama - san

unread,
Dec 31, 2010, 7:59:38 AM12/31/10
to 日本Androidの会
koyaさん
W少年さん
ohisamallcさん

皆様、こんばんは Hama - san です。
暮れのお忙しい中、情報提供ありがとうございました。
当トピックにおいて、私はまだ具体的な解決をできておりませんが、皆様のお陰で少しずつ、
糸口が見えつつあります。
ひとえに皆様のご協力のおかげです。重ねてお礼申し上げます。

ohisamaさん
> 沖縄は、花粉症が無いって本当ですか。
↑たしかに無いかもしれません。不思議な話ですが(^^;) そもそもスギが少ないからかもしれません。

> 野良アプリ作って見ました。
ありがとうございます!早速試させていただきます!

それでは、皆様よいお年をお迎えくださいませ orz...

yoshio sanoki

unread,
Jan 3, 2011, 8:42:36 PM1/3/11
to android-g...@googlegroups.com

Hama - san <zyohnsm...@gmail.com>:

W少年

unread,
Jan 4, 2011, 8:07:27 AM1/4/11
to 日本Androidの会
ユーチューブではないので参考にはならないかもしれませんが私はこういうふうにやっています。
http://wshounen.la.coocan.jp/starryskyworld1.php
このサイトで紹介されているブラウザアプリをインストールしてこのサイトを開くとプラネタリウムを投影します。
インストール時にサードパーティーアプリの警告が出ますが証明書付きの真面目なアプリです。
まだ試作段階なので一般向けのスクリプトは未完成で専用ブラウザで開いたときのみプラネタリウムを投影します。

koya

unread,
Jan 5, 2011, 1:10:02 AM1/5/11
to android-g...@googlegroups.com
Hama - san さん

koya です。
あけましておめでとうございます。
山形出身です。

一応 Android での YouTube の再生について知っていることを書いておきます。
好ましい方法なのか自信はありません。

方法1
http://www.youtube.com/watch?v=[動画ID]
のページを HTTP GET で文字列として取得し、その中から "18|" に続く URL を探します。
その URL を VideoView.setVideoURI に、次のようにセットします。
videoView.setVideoURI(Uri.parse([取得したURL文字列]));
その後、VideoView の onPrepared で start メソッドを実行すると再生できると思います。

方法2
http://m.youtube.com/watch?v=[動画ID]
のページを、クッキーに "PREF=f1=50000000&f2=4000000" をセットして HTTP GET します。
取得した文字列の中から "rtsp:" という文字列を抜き出して、同じように VideoView で再生します。

上記2つの方法で再生できなかった場合は YouTube Data API で取得します。
YouTube は頻繁に仕様が変わるので、YouTube Data API を使うのが安全かと思いますが
VideoView で再生できるフォーマットに限ると QCIF サイズの動画になってしまうため
あまり使う気になれません。


2010年12月31日21:59 Hama - san <zyohnsm...@gmail.com>:

Hama - san

unread,
Jan 10, 2011, 8:01:03 AM1/10/11
to 日本Androidの会
koyaさん W少年さん ohisamallcさん

もう10日ですが、皆様、明けましておめでとうございます。
トピック主がなかなか顔を出さずすいませんorz

W少年さん
サイトを拝見させていただきました。Androidではまだ試せていないのですが、
iPhoneでも表示できるのでしょうか?
だとすれば、HTML、Javascriptの表現力は侮れないですねぇ~w|;゜ロ゜|w

ohisamaさん
アプリをやっと試せました。これはVideoViewを使っているのでしょうか?
現在このアプリの動作は、私にとって理想的ですw( ̄o ̄)w
とても参考になっております。ありがとうございました <(_ _*)>

koyaさん
とても有効な情報ありがとうございます (人-)謝謝
WebView内での再生ですが、Intent起動がやはり主流(?)なので
別アプリでの再生を検討しています。

ただ、トピックまで立てているので、本件に関しては、
ご迷惑でない限りは継続させていただきたいと思います。

さて、12月28日に教えていただいたコードですが、
webview.setWebViewClient(new WebViewClient(){
@Override
public void onLoadResource(WebView wv, String url){
if(url.indexOf("vnd") == 0) {
Uri uri = Uri.parse(url);
Intent i = new
Intent(Intent.ACTION_VIEW,uri);
startActivity(i);
wv.goBack();
}
}
});

このコードに変更したところ、検証に使っている実機で動作に違いがありました。
【メーカー】【端 末】 【インテント起動】
Sony Xperia (Android 1.6) X
au IS03 (Android 2.1) O
Samsung Galaxy S (Android 2.2) X

ほとんどのAndroid端末はYoutube.apkが標準装備されていると聞いていたので、
上記のコードで問題ないと思っていましたが...
3機中、このYoutube.apkが起動したのは、IS03だけでした。
内部的に、youtubeだったらこのアプリで起動しなさいという情報を
持っているのは、IS03だけということでしょうか?
不思議な結果です。

以上、今のところの結果をご報告させていただきます。

ながながと申し訳ありませんが、本年もよろしくお願いいたします。

On 1月5日, 午後3:10, koya <thrill.shock.suspe...@gmail.com> wrote:
> Hama - san さん
>
> koya です。
> あけましておめでとうございます。
> 山形出身です。
>
> 一応 Android での YouTube の再生について知っていることを書いておきます。
> 好ましい方法なのか自信はありません。
>
> 方法1http://www.youtube.com/watch?v=[動画ID]
> のページを HTTP GET で文字列として取得し、その中から "18|" に続く URL を探します。
> その URL を VideoView.setVideoURI に、次のようにセットします。
> videoView.setVideoURI(Uri.parse([取得したURL文字列]));
> その後、VideoView の onPrepared で start メソッドを実行すると再生できると思います。
>
> 方法2http://m.youtube.com/watch?v=[動画ID]
> のページを、クッキーに "PREF=f1=50000000&f2=4000000" をセットして HTTP GET します。
> 取得した文字列の中から "rtsp:" という文字列を抜き出して、同じように VideoView で再生します。
>
> 上記2つの方法で再生できなかった場合は YouTube Data API で取得します。
> YouTube は頻繁に仕様が変わるので、YouTube Data API を使うのが安全かと思いますが
> VideoView で再生できるフォーマットに限ると QCIF サイズの動画になってしまうため
> あまり使う気になれません。
>
> 2010年12月31日21:59 Hama - san <zyohnsmith3...@gmail.com>:

W少年

unread,
Jan 10, 2011, 8:21:57 AM1/10/11
to 日本Androidの会
> サイトを拝見させていただきました。Androidではまだ試せていないのですが、
> iPhoneでも表示できるのでしょうか?
> だとすれば、HTML、Javascriptの表現力は侮れないですねぇ~w|;゜ロ゜|w
これは私のつくったAndroid向けブラウザを使わないと閲覧できません。
それは、端末からセンサーのリアクションをサイトに通知する手段がないからです。
これに関してはW3CのGeolocationといったもののようなセンサーAPIの標準仕様があればそれに従いたいのですがそういう仕様があるのかど
うか分からないのでセンサーAPIのリアクションの部分は独自の関数名で実装されています。
iPhoneの場合はiPhoneの規約に沿ってiPhoneのオブジェクトでJSのプラグインをつくるのですがそのライブラリが既にあるのか、やり方
がどうなのかは分からないのと資金的に開発環境を調達できないためどうなるのか分かりません。
Reply all
Reply to author
Forward
0 new messages