« Spry Review Part3(JP) | Main | NetStream.play() method »

youtubeAPI(JP)

youtubeは著作権絡みで日々削除と戦っている熱い映像データベースの一つで、最近ではgoogleなどの大手でも映像データベースを用意しているなどwebでの映像の扱いも変わってきている。将来的には世界中で公開されている映像を映像の中からキーワードから検索できるようになる日も来るのではないだろうか。ここでは後述のAPIの25個の人気映像を取得する機能を使ってサンプルを作ってみる。youtubeAPIはdeveloperIDさえ取得すれば検索、一覧表示などの機能がアクションスクリプトから利用できる。これは、youtubeが開発者向けに提供しているAPIセットでアドビからAS3向けのAPIへの紹介も貼られているほどで、この利用にAS3が必ずしも必要というわけではない。APIには残念ながら映像を直接取得する機能は提供されていない。youtubeAPIはxml形式でurlや映像の名前や作者などのデータを返すが、flvを直接指定できるリンクを返すことはないので他のswfでflvを読込むには別の方法が必要になる。
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);
test.flvの再生

Post a comment