youtubeAPI(JP)
source
このxmlのurlは映像を再生するプレーヤーのついたyoutubeサイト内のhtmlページへのリンクを表している。そこで今回このサンプルではhtmlの中をsubstr()とindexOf()を使って検索してflvに再生に必要なファイル名と変数を取り出すことにした。
映像の読込を試す
まず、フラッシュでの映像の再生の基本を復習してみる。ここで注意するのはこの記述を関数の中でテンポラリに作成するのではなく、コンスタントに利用できるスコープに記述すること。この記述を間違うと制作環境では再生するのに、サーバ上にアップロードした後に再生しないといった不具合が発生するようだ。
var conn:NetConnection=new NetConnection(); conn.connect(null); var s:NetStream=new NetStream(conn); vid.attachVideo(s);//vidはVideoオブジェクト s.play("test.flv");
htmlを検索する
先ほどの理由でflvはxmlから取得できない。そこでflvを取得するget_video.phpを利用する。このPHPファイルはyoutube上に存在し、ある変数を与えるとflvを返す。この変数はyoutubeサイトで使われているプレーヤーのswfにも与えているはずなので、htmlを検索すれば分かりそうだ。そこでまずlvにhtmlを読込み、onDataを使ってデータからSWFObjectの位置を検索する。onLoadはプロパティ=値型にパースが行われた後のデータになるので正しいデータの検索ができないのでここでは使わない。SWFObjectの位置をまず検索するのは、その後に検索したい変数がhtml内の至る所で使われているためである。html内のflv再生プレーヤーのswfの位置が分かったところで次に変数tと変数ncを取得する。このhtmlでflvを再生するために必要な変数は色々試した結果この2つである。
var lv:LoadVars=new LoadVars(); lv.onData = function(raw){ var result:String = raw; var swfPos:Number = result.indexOf("SWFObject") + 9; var start:Number = result.indexOf("&t=", swfPos) + 3; var end:Number = result.indexOf("&nc=", start); var t:String = result.substr(start, end - start); URL = "http://www.youtube.com/get_video.php? video_id=" + v_id + "&t="+ t + "&.flv"; }; lv.load("http://www.youtube.com/watch?v=" + xmlから取得できる映像のID);
取得したflvを再生する
URLを指定すれば再生が開始する。サーバが国内にないので若干バッファが足りないと映像が再生中に途切れてしまうことが多い。ここのサンプルでは5秒のバッファを用意した。アクションスクリプトでの初期値では足りない。
stream.setBufferTime(5); stream.play(URL);