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の動画も画面が出なかったので、バグが多いバージョンなんでしょうかね?^^;

2010年2月27日土曜日

グループギフトギバー

全然売れないんじゃないかなって思ってたグループ加入装置が結構売れてるので、今回はグループギフト配布装置を発売してみました。まあこの製品も売れ行きはあまり期待してなくて、取扱い商品を充実させるために製作したんですが、案外そういう普通のアイテムのほうが売れるかもって気がしてきたので、ちょっとだけ期待してるんですよw

基本的な部分はこのスクリプトで、ログ50件表示(200件まで設定変更可)、グループ加入リンク表示、渡すときのメッセージ編集などができるようにしています。

パーミッションは編集可、コピー可、譲渡不可でお値段はL$50です。Mansion Mall店SL-Shopping.net-Mall店SUNSET SHOPPING MALL店Market Beach Mall East店FS Shopping Mall店(本日はレースで21~24時まで閉鎖中)に置いてきました。宜しくお願いします^^

2010年2月26日金曜日

YouTubeのMP4アドレスを取得するPHP

ビューワー2の正式版がリリースされたらユーチューブ対応テレビは不要になるかもですけど、YouTubeMP4みたいにYouTubeのアドレスをMP4ファイルのダウンロード用アドレスに変換してリダイレクトするPHPスクリプトを公開します。YouTubeMP4が重くて利用できない(負荷が高い時間帯に使えない)ことがよくあるので、この前販売中止したYouTube TV screenのサポート用として書いたものの公開なんですが、他の用途で使って頂いてもオッケーです^^

PHP対応してるHTTPサーバーをお持ちの方に限られますが、このスクリプトを自分のサーバーに設置してyoutubemp4.comの代わりにTVの変換サーバーに設定してください。そうすればYouTube自体が重いとき以外はいつも視聴可能になると思います^^

<?php
// YouTube MP4 address converter

$v=$_GET['v'];
if (!$v) {  // ビデオIDチェック
  echo "Video id not found.\n\n";
  echo "Usage, \n";
  echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?v=VideoID\n";
  exit;
}

function get_location($url)
{  // MP4アドレスを取得
  $addr=parse_url($url);
  $port=isset($addr['port'])? $addr['port']:80;
  $fp=fsockopen($addr['host'],$port,$errno,$errstr,30);
  if (!$fp) echo "$errstr ($errno)\n";
  else {
    $data="HEAD ".@$addr['path']."?".@$addr['query']." HTTP/1.1\r\n";
    $data.="Host: ".$addr['host']."\r\n";
    $data.="Connection: Close\r\n\r\n";
    fwrite($fp,$data);
    while (!feof($fp)) $header.=fgets($fp,128);
    fclose($fp);
    preg_match("/\s+Location: +(.*)\s/",$header,$m);
    return $m[1];
  }
}

// YouTube動画ページ取得
$youtube="http://www.youtube.com/watch?v=".$v;
$str=implode("",file($youtube));
if (!$str) {
  echo "Can't open ".$youtube.".\n";
  exit;
}

// tの値取得
if (preg_match("/['\"]SWF_ARGS['\"]\s*:\s*\{(([^\}]|\s)*)\}/",$str,$m)) {
  $str=$m[1];
  if (preg_match("/\"t\"\s*\:\s*\"([^\"]*)\"/",$str,$m)) $t=$m[1];
}

// リダイレクト先取得用アドレス
if (isset($t)) $str="http://www.youtube.com/get_video?fmt=18&video_id=".$v."&t=".$t;
else $str="";

if ($str) {
  $str=get_location($str);  // リダイレクト先チェック
  if ($str) {
    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
    header("Location:".$str,true,302);  // MP4アドレスにリダイレクト
  }
  else echo "Can't get moved location.\n";
}
else echo "Can't get data from ".$youtube.".\n";
?>

スクリプト名をwatch.phpにしたら http://○○○.××/△△△/watch.php?v=Wv20U7rJuwU って感じで呼び出すようにしてくださいね。(Wv20U7rJuwUの部分がビデオIDになります)

2月28日追記: このPHPを呼び出すテレビやプレーヤーなどを自作される場合、LSLはYouTube-mp4アドレス変換スクリプトとかが参考になると思います。

3月22日追記: コメントにありますように、YouTubeの仕様が変わったようなので現在このスクリプトは使えません;;

2010年2月25日木曜日

新しいビューワーはユーチューブもOK

先日出たSecond Life Viewer 2 betaなんですが、まだベータ版なのにフランス語、ドイツ語、日本語のアップグレードガイドが用意されてたのでびっくりしましたw
http://wiki.secondlife.com/wiki/Viewer_2_Quick_Start_Guide

動画も結構アップロードされてますね。
http://www.youtube.com/Secondlife


メディアテクスチャに関係なくプリムの面にウェブページを設定できるようになって、表示させたページは普通にクリックも可能でフラッシュとかも動くようになったってことなんですかね。。。んー何かすごそうです。

内蔵ブラウザはGeckoだったのがWebkitに変わったらしいですね。早速インストールしてちょっとだけ試してみました。

おおぉ、表示したページのスクロールバーも動きます。それにここは自分の土地じゃなくて一般に開放されてるサンドボックスです。。。ってことは携帯テレビみたいなのとか簡単に作れそうですね。すごいっ@@

でも操作も全然変わってしまっててさっぱりわからなかったので、このまま続けて使ってみようって気にはなりませんでした。早めに慣れといたほうがいいんでしょうけどね^^;

2010年2月23日火曜日

眼鏡の耳に引っ掛ける部分

眼鏡のつるの先(?)っていうか耳に引っ掛ける部分なんですが、シリンダーで雑に作ってあったのをスカルプに変更しました。

普通に装着してたらほとんど見えない部分だと思うので気にならないかもですけど、スカルプが作れるようになってから、ずっと直したいなって思ってたんですよ。あと、バージョンアップのついでにメニューから簡単に頭に移動できるようにしました^^

2種類ともバージョンは1.1.0になります。

ちなみに修正前はこんな感じでした^^;
http://shop-chihiro.blogspot.com/2009/11/blog-post.html

2010年2月21日日曜日

サーバー消されたのでYouTube TV screen販売中止;;

MP4アドレス変換に使わせてもらってるyoutubemp4.comが時間帯によって重くて使えないことがよくあるので、前回販売中止したとき、うちでレンタルした無料サーバーにもスクリプトを置いて代用できるようにしてたんですが、アカウント消されちゃってその代替サーバーが使えなくなりました^^;

なのでユーチューブTVスクリーンは販売を中止することにします。今のところ販売再開の予定はありませんが、一応もう1ヶ所レンタルしてるサーバーがあるので、購入者様はお問い合わせくだされば、そちらのアドレス設定をお伝えできますので宜しくお願いします。

YouTube TV screen customer,
Sometimes YouTube to MP4 address convert server is busy and can't watch the TV. Therefore, I had an alternative convert server, but that server has been deleted... sorry.
I have stopped YouTube TV screen for sale now. But if you are a customer, you can get a setting of an another server for the TV. Please ask me.

2月26日追記: PHPの動作するサーバーをお持ちのお客様は、本日公開したPHPスクリプトをサーバーに設置して代用して頂くこともできますので宜しくお願いします。
If you have a PHP supported HTTP server, you may upload this PHP script and use your server for the TV.

2010年2月20日土曜日

リナックスのセカンドライフは重いかも

この前YouTubeの再生を試してみたくてインストールしたLinux版Second Lifeなんですが、暫くしたら身動きもまともにできないくらい重くなっちゃうことがよくあるんですね。PCが古いってのも大きな要因だと思うんですが、システムモニタをチェックしてみたらPulseAudioっていうサウンドサーバーがCPU負荷すごい高めになってるのに気がついたんですよ。それで思い切ってPulseAudioをアンインストールしたらまあまあ軽くなったみたいです。

写真はLinux版Second Lifeでインワールド内でYouTubeを見てるところです。うちのPCは古いのでLinuxでもWindowsでも結構コマ落ちあったりしますw
でもPulseAudioを消してもWindows版と比べたらまだ重いと思うんですよ。他にもシステムの不要なサービスとか停止させたりしたらもっと軽くなるかも知れないですけど、それは私には難しそうなのでやめときますね^^; まあFirefoxとか重いソフトと同時に使わないほうがいいってのはわかってるんですが。。。^^;

3月9日追記: 他のソフトでちょっと不具合があったのでPulseAudioを再インストールしました。それで、うちのPCはセカンドライフを起動するとPulseAudioのCPU負荷が20~30%以上になるんですが、secondlife起動スクリプトの export LL_BAD_OPENAL_DRIVER=x を有効にしたら負荷をかなり低く抑えられることがわかりました。

4月23日追記: うちの環境ではビューワー2はexport LL_BAD_OPENAL_DRIVER=xを有効にするとシェアードメディア(というより内蔵ブラウザ?)が動かなくなってました;;

2010年2月18日木曜日

定期購読申し込んでませんよ?

前、買い物してたら英語の情報誌みたいな本のベンダーが置いてあったので、何となく見てみたいと思って、その雑誌をもらったんですね。そしたら毎週配送サーバーから自動的に新刊が送られてくるようになってしまいました。。。ええ、勝手にデータベースに登録されちゃったみたいで。。。orz

本の他にイベントの広告みたいなのも届くことがあって、いい加減うざくなってきたので、ミュートしようかなとも思ったんですが、発行者にIM送ってみたらデータベースから削除してくれました。

その本はタッチでメニューが出るようになってたんですが、購読を中止したりする設定は無かったんですよ。メニューで設定できたらホント便利だと思ったんですけどね。

2010年2月13日土曜日

Profile picks gift giver V1.1.0

プロフィールピックギフトギバーなんですが、支払い情報を登録してるアバターのほうがサーチランクへの影響が大きいらしいという情報をもらったので、アカウントの支払い情報での制限を付けてみましたw

支払い情報の英語表示の表記は以下です。支払い情報(クレジットカード登録)の有無、実際にリンデンと取引(プレミアムアカウント、リンデンドル購入などの支払い)したことがあるかで3種類に区別されますね。なので「制限無し」、「Payment Info On File以上」、「Payment Info Used」としてメニューで切り替え可能にしてます。
No Payment Info On File - 支払い情報を登録していない
Payment Info On File - 支払い情報を登録してるけど支払ったことがない
Payment Info Used - 支払ったことがある

ビューワーを日本語表示にしてる場合は下記のような表示になると思います。(1.23.5で確認) Payment Info On FileとPayment Info Usedに対応する日本語表記が微妙に違うっていうか、何コレって感じですよね?www
支払い情報未登録 (No Payment Info On File)
支払い情報登録済み (Payment Info On File)
支払い情報登録済 (Payment Info Used)

ちなみにLindeXで交換したUSドルをペイパル口座などに送金するには、Payment Info Usedでないといけないらしいです。


あと、ピックギフトのログ記憶件数が少ないっていうご意見があったので、今まで30件だったのを一応50件に増やしました。(設定変更で200件まで表示可能)
ついでにオートアップデートも付けといたので、旧バージョン購入者様にはたぶん今夜ぐらいに本バージョンをお送りしたいと思います。

それから、この機会にL$120に値上げしました。宜しくお願いします^^

2月14日0時30分頃追記: 発送作業終了しました。万が一届いてないお客様おられましたらご連絡くださいね。

2010年2月12日金曜日

1プリムの階段 V1.0.5

階段を修正したので入れ替えに回ってたら、お客様が来られて、翻訳機で「Good evening」「こんばんわ」って感じ(2ヶ国語)で声かけてくれたんですね。それで外人に違いないって思ってWelcomeってご挨拶したんですが、その後自宅に戻ってチャット履歴をよく見たら、そのお客様は日本人っぽい名前だったんですよ。それで、その人のプロフ見てみたら日本人でした。。。ううぅ、きっと変に思われちゃったと思います^^;;


この1プリムの階段はブレンダーでスカルプを始めて結構早い時期に作ったものなんですね。それで今までに2回も作り直ししたんですが、今回はデータを少し修正しました。離れて見たときに上下の端が少し崩れにくくなったのと、段のタイルの横方向の間隔が均一になるように直してます。前は中央のタイルが広めで左右の端のほうに行くほど間隔が狭くなってたんですよ。言わなかったから気がつかないような気もするんですけどねw

バージョンは1.0.5になりました。他は特に変わったところないですが簡単に紹介しときますね。。。タッチ長押しまたはダブルクリックでテクスチャ変更メニュー(15種類)が出ます。パーミッションは修正可、コピー可、譲渡不可で、お値段はL$20です。まあ今時1プリムの階段なんか珍しくないと思うんですが宜しくお願いします^^;

2010年2月11日木曜日

Primstarの1.0.0が出てたけど。。。

Blender+Primstarなんですが、Primstarの安定版が1.0.0になってたのでLinuxにインストールしてみたんですね。(情報めっちゃ遅いですが^^;)

でも、0.9.x-gitと同じく、過去にBlender Sculptie Import & Export Scriptsで作ったデータは互換性無いのかUVマップ出せないみたいでした;;
debug gui 000 - bake failed after 0.1387 sec.

んー、やっぱり古いデータも扱えるようにしておくには、0.5.0で我慢するしかないんでしょうか。。。困りましたね;;

2010年2月10日水曜日

チャットのとき出てくるノートPCとかのスクリプト

セカンドライフを始めて間もない頃、フリービーが沢山置いてあるところでノートPCを貰ったんですが、それが装着しておくとチャットのときだけ表示されるようになってるってのを知らなかったんですね。それでサンドボックスの地面に出してみたら本体が透明だったので、どこに置いたのかわからなくなって焦って探し回ったことのある千尋ですwww

ってことで、今回はチャットでタイピングアニメーションしてるときにオブジェクトが表示されるスクリプトです。このスクリプトは装着してないときは表示されるようにしたので、地面に出してしまってもどこに置いたかわからなくなる心配もありません^^

仕組みはタイマーで一定時間毎にllGetAgentInfoを使ってアバターの状態を調べて、タイピングしてたらllSetLinkAlphaでオブジェクトを不透明にして表示って感じです。。。まあ簡単ですよね。

// タイピングで表示

alpha(float f)
{ // 透明・不透明の切り替え
    llSetLinkAlpha(LINK_SET,f,ALL_SIDES);
}

default
{
    on_rez(integer start_param)
    {  // 持ち物から出したとき
        if (llGetAttached()) {  // 装着されてたら
            llSetTimerEvent(0.5);  // タイマー0.5秒
        }
        else {  // 装着してなかったら
            llSetTimerEvent(0);  // タイマー停止
            alpha(1);  // 不透明にする
        }
    }

    timer()
    {
        integer i=llGetAgentInfo(llGetOwner());  // オーナーの状態
        if (i & AGENT_TYPING) alpha(1);  // タイピングしてたら不透明に
        else alpha(0);  // そうでないときは透明にする
    }
}

2010年2月5日金曜日

Linux版Second LifeでYouTubeを視聴

Linuxは昔、緊急用みたいな感じでPCにインストールしてて、Windowsが壊れて立ち上がらなくなったときにずっと使ってたんですが、Windowsを修復インストールするとき消してしまったんですね。その古いLinux使ってたときはセカンドライフで動画再生ができなかったので、今回は新しいのをインストールして、LinuxでもホントにインワールドでYouTubeが見れるようになるか試してみました。

今回インストールしたのはFedora 12です。前使ってたのはたぶんFedora 7ぐらいだったと思うので、それと比べたらもう色々な部分が変わってしまってますね。特にグラフィックカードのメーカー純正ドライバをインストールするところで思いっきり躓いて悩んでしまいました。。。起動画面でXOrgのnouveauが既にロードされてるらしくて、Nvidiaのドライバに入れ替えられなかったんですよ。grub.confのkernelの行に vga=773 とか画面サイズを指定して起動する事で何とか解決したんですけどね^^;

それで本題ですが、結果はLinux版Second LifeでもYouTubeのMPEG4が見れました。ただFedoraは普通にFedora公式からインストールしただけの状態だと再生できないんですよ。

WindowsやMacのSecond Lifeは動画再生にQuickTimeが使用されますが、LinuxにはQuickTimeがないのでGStreamerを使うようになってるんですね。なのでTotemとかのプレーヤーでmp4ファイルが再生可能だったらOKだと思いますが、Fedora projectにはmp4対応してるGStreamer用プラグイン(H.264やAACに対応したコーデック)のパッケージが無かったんですよ。でも検索したらRPM FusionっていうところにFedora用のパッケージがあることがわかりました。
rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
rpm -Uvh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

ってやって、このへんのパッケージをインストールしたら見れるようになります^^
yum install gstreamer-ffmpeg gstreamer-plugins-bad gstreamer-plugins-ugly

18時10分頃追記: ドライバを入れ替えるとき vga=318 にしてたんですけど焦ってたのか間違い(正しくはvga=0x318)です。。。よく見たらコンソールが死んでましたw たぶん vga=773 にしたほうがいいと思うので直しました^^;;

2月11日追記: 土地のメディアにYouTubeを見られるようにしておくには、MP4アドレスにリダイレクト可能な外部サーバーを利用したアドレスを土地に設定するか、YouTube TV screenなどのユーチューブ対応機器が必要です。