2010年2月28日日曜日

YouTubeモバイルプレーヤーのスクリプト

今回はYouTubeモバイルの動画を見るためのスクリプトです。ケータイ用なので音も画質も良くないですけど^^;

YouTubeモバイルから3GP形式のアドレスを取得するんですが、モバイル用のアドレスはMP4のアドレスみたいに長くないので、そのまま土地のメディアに設定できるんですよ。でもページの動画アドレスの載ってる部分がllHTTPRequestで取得できないのでPipesで作った簡単なパイプを使ってます。

土地のメディアテクスチャを貼ったスクリーンを用意してくださいね。チャットチャンネル1でユーチューブのアドレスを入力したら再生するようにしました。
/1 http://www.youtube.com/watch?v=z3gHCupXSMs

// YouTube mobile movie player
string pipes="http://pipes.yahoo.com/pipes/pipe.run?_id=e2dff4b90cc72c4be41b0bd89417d073&_render=csv&id=";  // モバイル用動画のアドレス取得用Pipes
string movie;  // アドレス記憶用
integer ch=1;  // チャットチャンネル
key req;

play()
{
    llParcelMediaCommandList([
        PARCEL_MEDIA_COMMAND_URL,movie,  // アドレスをセット
        PARCEL_MEDIA_COMMAND_DESC,"",
        PARCEL_MEDIA_COMMAND_TYPE,"video/*",
        PARCEL_MEDIA_COMMAND_AUTO_ALIGN,TRUE]);
    llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_PLAY]);  // 再生
}

chk_youtube(string url)
{
    integer i=llSubStringIndex(url,"youtube.com/watch?");
    if (i > 6) {  // YouTubeだったら
        i=llSubStringIndex(url,"v=");
        if (i > 24) {
            string videoid=llGetSubString(url,i+2,-1);
            i=llSubStringIndex(videoid,"&");
            if (~i) videoid=llGetSubString(videoid,0,i-1);
            req=llHTTPRequest(pipes+videoid,[],"");  // Pipesにデータ送信
        }
        else llWhisper(0,"Illegal URL");
    }
    else {  // YouTube以外はそのまま再生
        movie=url;
        play();
    }
}

default
{
    state_entry()
    {
        llListen(ch,"",NULL_KEY,"");  // リッスン開始
    }

    on_rez(integer start_param)
    {  // 持ち物から出したとき
        llResetScript();  // スクリプトリセット
    }

    touch_start(integer total_number)
    {  // タッチ
        if (movie) chk_youtube(movie);  // 動画がセットされてたら再生
    }

    listen(integer channel, string name, key id, string msg)
    {
        if (channel == ch) {  // チャンネル1でアドレスが入力されたらchk_youtubeへ
            string str=llGetSubString(msg,0,6);
            if (str == "http://") chk_youtube(msg);
        }
    }

    http_response(key request_id, integer status, list metadata, string body)
    {
        if (request_id == req) {  // Pipesからデータ受信
            list l=llParseString2List(body,["\n"],[]);
            string str=llList2String(l,1);  // モバイル動画のアドレス
            if (str) {
                movie=str;
                play();  // playへ
            }
            else llWhisper(0,"Error!");
        }
    }
}

セカンドライフで一般的なYouTubeプレーヤー(MP4アドレスを再生するプレーヤー)は、Pipesで作るのは無理(アドレスのリダイレクトができない)だと思うので、YouTubeのMP4アドレスを取得するPHPYouTube-mp4アドレス変換スクリプトなどを参考にしてくださいね。

4月19日追記: ユーチューブの今年3月~4月の仕様変更でこのスクリプトも使えなくなってるみたいです;;

4月23日追記: じゃなくて、うちのQuickTimeプレーヤーがモバイルユーチューブの動画を再生できなくなってるみたいでした。。。Linuxでは見れたのでモバイルのほうは今のところまだ大丈夫かなって思いますw
でもQuickTimeプレーヤーで見れなくなってるのでダメダメって感じですね。バージョンは7.6.6で最新版でした。

5月9日追記: ファイルを整理してたらQuickTime 7.6.2のインストーラーが出てきたんですね。それでモバイルユーチューブの動画はQuickTimeバージョンアップ後に見れなくなった気もしてたので、思い切って7.6.6をアンインストールして7.6.2を入れてみたんですよ。そしたらホントに見れるようになりました^^ 7.6.6って設定でDirect3Dビデオアクセラレーションにチェック入れたらMP4の動画も画面が出なかったので、バグが多いバージョンなんでしょうかね?^^;

0 件のコメント:

コメントを投稿