2009-02-10

YouTube動画をSLで - まずは単体再生

なんかあっちでもこっちでも出てて旬な話題っぽいのでYahoo Pipesで作ってみることにします。

作ることに興味がなくて、SLで使うことにだけ興味のある人は
Jvnさんの「【中級】youtube url変換Webサービス公開」をどうぞ!
LSLにコピペするときにちょっと注意です。

一番最初のスクリプトのstate set、イベントhttp_responseの最後のところ、
integer idx = llSubStringIndex(strURL, "&");
while( idx > -1)
{
strURL = llDeleteSubString(strURL, idx+1, idx+4);
idx = llSubStringIndex(strURL, "&");
}
ここですが、このままコピペすると永久ループしてしまい、処理が終わりません。たぶんホームページ上での表示の問題でこんな表示になってしまっているのだと思います。
以下のように直さないといけません。
integer idx = llSubStringIndex(strURL, "&");
while( idx > -1)
{
strURL = llDeleteSubString(strURL, idx+1, idx+4);
idx = llSubStringIndex(strURL, "&");
}

あるいは while でまわすのではなく、Snumaさんの「[LSL] 複数の文字列を一気に置き換えたい」を参考に、
list listTemp = llParseStringKeepNulls(strURL, ["&"], []);
strURL = llDumpList2String(listTemp, "&");
に書き換えてもOKです。

- - - - - - - - - - - - - - - - - - - -
では、ここからは作りたい人のための情報です。

要するに、YouTube動画をSLで再生するには下記URL
http://www.youtube.com/get_video?video_id={動画ID}&t={動画識別コード}&fmt={出力形式}
を作成して、このリンクを土地のMedia URLにセットするだけです。

t={}は最近付け加わったので、今後も変わらないかどうかは保証の限りではありません。
YouTubeがこのやり方を公式発表しているわけでもないようですし。

●動画ID
これはYouTubeの各動画ページのURI
http://www.youtube.com/watch?v=71MM68d8Viw
のv=以降の部分です。

●出力形式
フラッシュ形式だとか、モバイル用品質だとか、高品質だとかHDだとかです。
これは「YoutubeのHD動画正式対応で、改めて動画形式をまとめてみる」で表形式にまとめられています。
Jvnさんのものでは、標準が17(モバイル)、高品質が18、もっと上(HD?)はhttpではなく、rtsp(リアルタイム・ストリーミング)です。
ですが17のモバイルだとかなり品質が落ちてしまうので、SL内では
  • 標準...18(MP4 H.264/AAC stereo)
  • 低画質...17(MP4 MPEG-4/AAC mono)
  • HD...22(MP4, H.264/AAC stereo)
というのがいいかと思います。

fmt=18とfmt=22は試した感じでは、確かにfmt=22の方がきれいです。
ただし! 「SL内で再生する」という目的からするとビットレート2Mbps超は非常に辛く、ほぼ趣味の世界といったところではないでしょうかw

動画によっては「HDないよ!」とか「(YouTube上では)高品質で見るがないよ!」と思われるかもしれませんが、どの動画でもfmt=18とfmt=17は有効です。fmt=22だけはHDでアップロードされていないと使うことができません。

参考までにSL内で各フォーマットを試してみた結果を。
動画はLINZOOさんの作成された「GION LIVE FINAL」です。
fmt=17


fmt=18


fmt=22


●動画識別コード
名称は勝手に付けましたw これも動画個別にあります。詳細は後ほど。

0 件のコメント: