インワールドでYoutube見て遊んでました^^

jinko

2010年02月01日 18:48


本当にいつもそうなんですが、時代遅れというか・・・
できるってことは知ってたのですが、テレビを再生する土地をもってなくて
なんだか乗り遅れたままでした。


久々にINしたら突然Youtubeが見てみたくなって試してみました。
スクリプト作りこむんじゃなくて、ホント見るだけなんですけど
わりと苦労しましたので忘れないようにメモします。




誰でも見れるようにするのは、実はうまくいかなかったので、
自分だけでYoutube見て遊ぶ方法だけ書いておきますね。
自分だけで見れてなにがうれしいのかわかんないかもですが、
ワタシはBGM代わりにしたり、一人で踊ったり・・・で楽しく遊べました。
* * *
.red{color:#f00;font-weight:bold} .blue{color:#00f;font-weight:bold} .green{color:#080;font-weight:bold} code {display:block;width:480px;margin-top:1em;padding:10px;background-color:#EFEFEF;line-height: 150%;border:1px dashed gray;white-space:normal;}
■テレビを作ってみる

かなりいまさらっていう気もしますけど、簡単に書いておきますね。
もちろん、フリーのテレビ持ってる人は作らなくっていいけどね^^
さらにいうと、リンデン製のメディアプレイヤーは持ち物リストに最初から入ってるしね^^

ま・自分用のメモやし・・
テレビで遊ぶには、土地のメディアを設定できないとダメです。
とりあえず、画面の上にあるメニューから世界>土地情報で表示されるダイアログの中の「メディア」タブを表示させてみてください。
設定ボタンを押して、ここのURLが変更できそうなら、大丈夫です。

最初にテレビの形のオブジェクトを作ります。
適当でいいんですが、ワタシは横長の200インチの画面にしてみました。



画面になる部分にメディアテクスチャを設定します。
オリジナルで作ってもいいんですが、めんどくさいので今回は持ち物リストのライブラリに最初から入ってる(ハズの)デフォルトのテクスチャを使用しました。
"*Default Media Texture"という名前です。
これを画面に貼ったあと、メディアタブの中のテクスチャにも同じものを貼ります。




テスト用に公式のチュートリアルのビデオのURLを貼っておきますね。
http://vidtuts.s3.amazonaws.com/Parcel-Media-Make-your-own-media-screen.mp4
これを、メディアタブの中のURLに設定して、画面下の再生ボタン(映画のカメラのアイコンの横)を押したら作ったテレビにビデオが再生されるハズです。

TIPS
-テクスチャのサイズを変えると、それにあわせてムービーを拡大したり縮小したりできます。
-テクスチャを回転すると、ムービーも回転します。
-テクスチャなので普通にスクロールとかできますね(llSetTextureAnim)
-アルファーやグローとかも設定できてます。
-「明るさ全開」に設定しておくと、夜見たときキレイです。


これで、ムービのURLさえわかればテレビとして使えることができるようになりました。
実際の表示画面は小さいんですが、インワールドで見るとなんだか大きく見えてかなり嬉しいです♪



■Youtubeでムービー再生用のURLを調べる

ブラウザでYoutubeにアクセスして好きなクリップを探します。
アドレスバーの中に書いてあるURLは、例えばこんな感じです。
http://www.youtube.com/watch?v=bV7J-3soSY8

youtube.comの後ろに、watchって書いてあります。
さらにその後ろに、"v="ってあって、bV7J-3soSY8の部分がムービーのIDってことです。

このアドレスからムービのURLに変換できるのですが、最終こんな形のアドレスになります。
http://www.youtube.com/get_video?fmt=18&video_id=bV7J-3soSY8&t=XXXXX

watchの代わりに、get_videoというアドレスを使います。(YoutubeのAPI)
パラメータのfmt=18の部分は、
セカンドライフのビュアーで使っているQuicktimeで視聴可能なmp4でムービーを取り出すために指定します。

video_id=bV7J-3soSY8の部分は、ムービーのIDでwatchと同じなので問題ないですよね?
次のt=XXXXXは、トークンといわれるもので、IPアドレスによって変化するってことらしいです。
実験してないんですが、恐らく、このトークンを使って
別のIPからのアクセスで再生はできないようになってるのかなと思います。
(再生できてたらごめんね)

トークンを取り出すためには、get_video_infoという別のAPIを使ってYoutubeのサーバに問い合わせするのですが、
javascriptで書かれたブックマークレットでこの作業を代わりにやってもらいます。
(※ここのBBSの書き込みにあったのを改造しました)

javascript:var args=yt.getConfig('SWF_ARGS');if(document.location.href.match(/http:\/\/[a-zA-Z\.]*youtube\.com\/watch/)){alert('http://www.youtube.com/get_video?fmt=18'+'&video_id='+args['video_id']+'&t='+args['t'])}

Firefoxな人は、以下の手順で実行してください。
(ieでもできると思いますが、やったことないのでごめんなさい・・)



(1)Youtubeで再生したいクリップのページを開きます
(2)Firefoxのブックマークツールバーの上で右クリック。先ほどのブックレットを貼り付けます。
(ブックマークツールバーが表示されてない場合は、メニュー>表示>ツールバー>ブックマークツールバーにチェック)
(3)貼り付けたブックレットをクリックすると、URLを表示しますので、それを選択してコピーしてください。
(4)セカンドライフに戻って、メディアタブの中のURLに設定します。

この手順で、ムービー再生用のURLを取り出せたことになります。
でも、自分専用なのよね・・・

さっきのURLはセカンドライフのメディアURLとして使えますので、(ただし自分用)
設定して、ムービー再生ボタンをおすと再生開始されるはずです。

注:YoutubeのAPIは仕様が頻繁に変更されるようです。以下も同じですが、あくまでも現時点ではということですので、ご注意ください。




■プレイリストを作ってみる

プレイリストを作れば、いくつかのムービーをプレイリストにいれて連続再生できます。
エディターなんかで以下のファイルを作成します

<?xml version="1.0">
<?quicktime type="application/smil"?>
<smil
    xmlns:qt="http://www.apple.com/quicktime/resources/smilextensions"
    qt:time-slider="true">
<head>
</head>
<body>
    <video src="(先ほどのダウンロードURL)"/> ←
    <video src="(先ほどのダウンロードURL)"/> ←
</body>
</smil>


のところの行に再生したいムービーのURLを好きなだけ並べます。
拡張子はなんでもいいはずですが、とりあえず*.movで保存してください。
保存するディレクトリは、なんでもいいと思いますが、日本語が入らないパスでやってみました。
保存したプレイリストのファイルをドラッグ&ドロップでfirefoxに入れると再生が始まると思います。
このときアドレスバーには、"file://"で始まるアドレスが表示されていると思いますので、これをコピーしてください。

file:///C:/jinko/work/youtube/superfly_sm.mov ←これは例です


これをメディアURLに設定したあと、
タイプを一度なにか別のものに変えて再度「ムービー」を選択しなおします。
そうすると、メディアタイプが、"video/*" に設定されますので、再生できるようになります。


※PCにローカルサーバを設定している方は、"http://localhost"経由でもプレイリストにアクセスできます。http経由なので、拡張子でメディアタイプを判別してくれますのでちょっとだけ便利です。


これで好きなアーチストのクリップばかり集めて延々と再生することができるようになります。
残念なのは、次の曲まで早送りとかできないんですよね・・・
ま・そのあたりは今後の課題ということで^^;



■誰でも見れるようにならないのかな・・・

これまでに書いた手順を自動化すれば、自分だけじゃなくて他の人からも見れるテレビが作れるはずなんですが・・・

(1)LSLでやってみた結果
LSLでは、llHTTPRequest()を使って、
http://www.youtube.com/get_video_info?video_id=XXXXXX


をリクエストするまではできるんですよね。
ところが、このAPIの応答は、mime typeが「application/x-www-form-urlencoded」で返ってくるんです。
通常レスポンスは、http_responseイベントで受けるんですが、
wikiにも書いてあるように、
Status 415 "Unsupported or unknown Content-Type"

でエラーになります。

それにLSLからのllHTTPRequest()って、セカンドライフのサーバからリクエスト投げてるんじゃ?
だとすると、そもそも意味ないですよね・・・

(2)代理応答サーバ
perlとか使って代理応答させる手はあると思います。

ネットで探すとYoutubeのダウンロードサイトいくつか見つかりますが、
今のYoutubeのAPIではトークンがIPアドレスに固有になってるみたいなので、
サーバ側でmp4まで変換しないといけないってことですよね?

昔は、トークンなかったのでアドレス変換だけで、直接Youtubeのサーバからダウンロードできたみたいなのですが、
現在だと、代理サーバがMP4データを代わりに受信するとこまでやらないとダメってことのようです。

だとすると1回あたりムービーのファイル全部のデータを中継しないといけないのでサーバの負荷が気になります。
1つのダウンロードサイトをセカンドライフから多くの人がアクセスしたら・・・
ちょっと迷惑かもですよね?余計なお世話かしら?

ダウンロードサイトの中の有名なひとつYouTubeMP4の作者さんのブログにperlのコードが掲載されていました。(→こちら)
これを改造したらいいのかなと、試しにやってみたんですが・・・
理解不足だし、そもそもperlよくわかんないんですよね。いい方法あるのかもです。


(3)MP4のデータをローカルでダウンロードしてそれをサーバにアップ
簡単にできるんですけど、これやっちゃうと、かなりやばい世界に入っちゃいますよね?

著作権の話をこないだもある人としてみたのですが、結論は「気にしない人はまったく気にしないんやー」って感じました。
かみあわなさすぎて議論にもならない・・・
別に著作権に関して厳しいことを言いたくはないんですが、
せめて心のどこかに「罪悪感」だけは残しておいて欲しいです。

ま・でもワタシ自身Youtubeで楽しんでいるムービーは違法アップロードっぽいクリップばかりなので、人のことは言えないんですが・・・^^;
ダウンロードしてサーバアップしちゃうと、今度は自分が当事者になるのでやめといた方がいいかなと思います。


* * *

てことで、本当は、誰にでも見れるような設定がわかったらよかったんですが・・・
中途半端な記事でごめんなさい・・・
いい方法あったら教えて欲しいなー

でも、これだけでも結構楽しく遊べました♪
ワタシみたく一人遊びな方は是非お試しください^^


(追記:Feb 03, 2010)
Whitfield-In-World さんから、紹介していただいた記事でキャッシュサーバのURLを使って再生すればいいってことがわかって、
これを入れたプレイリストを自動生成することにやっと成功しました。
気になって他のことできなかったんですが、すっきりしました^^
ほんとありがとうございます。
また、続きは週末がんばりますねー





サブアカ集めて踊ってみた



PS.
サブアカたちだけでテストできなかったので、みんなにテスト付き合っていただきました。
ご協力ありがとうございました。>みなさま

くりちゃんにはフリーのテレビのことも教えてもらいました。
その名もずばり「Free Tube」
※いろいろ知ってるよねーさすがくりちゃんや^^

Youtube用じゃないと思いますが、これのすごいのは、キーワードで検索した結果を、
ダイアログに表示して、それを選ぶだけでテレビが見れるというすぐれものです。



配布場所は、こちらです。
http://slurl.com/secondlife/Nakamori%20Central/128/128/21

mod不可なんですが、お店にはいろんなサイズのんがフリーでおいてありました。
ここまで作り上げるのってきっと大変だったろうって思います。
ホント素晴らしいです。

Creation