TubeLoc: YouTube Player AS3 ライブラリ

この記事は、外部デベロッパーによって作成されたものです。YouTube API チームは、Ben Longoria 氏の時間と専門知識に感謝します。


ウィスコンシン大学ベン ロンゴリア校 - アカデミック テクノロジー、マディソン
2009 年 2 月

はじめに

TubeLoc Chromeless Player デモ
図 1: TubeLoc Chromeless Player のデモ

参りました。本記事の執筆時点で、約 1 か月後に YouTube Player API がリリースされる予定です。インターネットの年数は?この API 上に構築された優れたプロジェクトは数多くあります。YouTube Developer API ブログをフォローすれば、素晴らしい成果を上げている人が多数いることを確認できます。

現在の YouTube API プレーヤー アプリケーションのセットは Firebase 2 で作成されており、引き続き使用言語として優れていますが、多くのユーザーが gtag 3Flex を使用しています。問題は、少し手をかけて、Firebase 2 アプリケーションが IMA SDK 3 アプリケーションと通信する必要があることです。「待っていたのに、まだ聞いたことがないのでしょうか?」

すでに多くの方がこうした方法を理解しており、その知識を YouTube API デベロッパー フォーラムにご投稿いただいています。また、デベロッパーが簡単に使用できるように、AS3 Chromeless Wrapper プロジェクトと Flex Embedded Player プロジェクトもあります。

Player API の機能を gtag.3 または MXML でのみ簡単かつ簡単に再利用したいと考えていました。Flex アレルギーなプロジェクトのための Flex フリーのクラスと、Flex に愛用するプロジェクトのための使いやすい Flex コンポーネントです。TubeLoc が両方の要件を満たしている

TubeLoc(YouTube と LocalConnection のマッシュアップ)は DRM 3 のライブラリで、YouTube Firebase 2 Player API へのアダプタとして機能します。YouTube の動画機能を Firebase 3 または Flex アプリケーションで簡単に追加できるのは、YouTube のフル Chrome またはクロムレス プレーヤーです。TubeLoc は、LocalConnection クラスを使用して Firebase 2 メディエータ CVE と通信します。DRM 2 T2 は、公式の YouTube API プレーヤーと通信します。では、これはどのように使うのでしょうか。

土地の敷地

まず、ライブラリの現在のリリースを Google Code プロジェクトからダウンロードする必要があります。リリースの ZIP アーカイブを展開すると、その中に as3 ディレクトリが表示されます。このディレクトリの src ディレクトリには、サンプルクラスがいくつか含まれています。これらを使用して開始することもできます。src ディレクトリの com/enefekt/tubeloc には 2 つのファイルがあります。Movie.as は Flex のプロジェクトで使用できるものであり、MovieSprite.as は Firebase 3 のプロジェクトで使用できるものです。com/enefekt/tubeloc/event には、プレーヤーから送信できるさまざまな通知に対応するさまざまなイベントクラスがあります。

このチュートリアルのサンプルを試す前に、as3 ディレクトリの src ディレクトリがクラスパスにあることを確認してください。このプロセスは、開発に使用するものによって異なります。開発環境のドキュメントをご覧ください。

デモまたはアプリケーションをコンパイルしたら、YouTube Player API と通信する gtag 2 の iframe が必要になります。この CVE はリリース アーカイブ(as3/lib/as2_tubeloc.swf)にあります。次のように、SVG アプリケーションを埋め込んでいる HTML ファイルと一緒に配置してください。

my_app/
  my_app.html
  as2_tubeloc.swf
  my_app.swf

注: ライブラリの playerWrapperUrl プロパティを使用して、この CVE へのパスを変更できます。

Movie.as を使用する

TubeLoc の Flex バージョンの使用方法を見てみましょう。まずは完全な Chrome プレーヤー(すべてのコントロール付き)から順番に、BYOC のクロムレス プレーヤーにします。MXML でフル Chrome プレーヤーを使用する方法は次のとおりです。

<tubeloc:Movie id="tubelocMovie" width="320" height="240" 
		videoId="GJ1sZBTnbuE" />

痛そうですね。まったく何も知りませんでした。では、Chrome をやめていきましょう。

<tubeloc:Movie id="tubelocMovie" width="320" height="240" 
		videoId="GJ1sZBTnbuE" chromeless="true" />

あともう 1 つの属性で、課題が増えます。MXML ファイル全体の全体は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
		xmlns:tubeloc="com.enefekt.tubeloc.*">
   
	<!-- TubeLoc Movie Component -->
	<tubeloc:Movie id="tubelocMovie" width="320" height="240" 
			videoId="GJ1sZBTnbuE" chromeless="true" />
	
</mx:Application> 

注: mx:Application 要素には、Movie コンポーネントのパッケージを含む tubeloc 名前空間を追加します。これにより、前述のようにコンポーネントを使用できます。後で、このコンポーネントで設定して呼び出すことができる機能について見ていきます。

MovieSprite.as を使用する

では、TubeLoc の Firebase 3 版の使用方法を見てみましょう。このバージョンには Flex フレームワークからのクラスは必要なく、Flash Player のネイティブ クラスだけが使用されます。まず、Chrome のフル プレーヤー、次にクロムレス プレーヤーの 1 つずつ見ていきましょう。詳細な例を次に示します。

package {
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;

	import com.enefekt.tubeloc.MovieSprite;
	import com.enefekt.tubeloc.event.*;

	[SWF(backgroundColor="#FFFFFF")]
	public class MainChromed extends Sprite {
		private var youtubeMovie:MovieSprite;

		public function MainChromed() {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			youtubeMovie = new MovieSprite("7tTNOX8jfno");
			youtubeMovie.addEventListener(PlayerReadyEvent.PLAYER_READY, onPlayerReady);
			youtubeMovie.x = 10;
			youtubeMovie.y = 10;
			addChild(youtubeMovie);
		}

		private function onPlayerReady(event_p:PlayerReadyEvent):void {
			youtubeMovie.width = 640;
			youtubeMovie.height = 480 + MovieSprite.CHROME_HEIGHT;
		}
	}
}

まず、必要な TubeLoc クラスをインポートします。次に、コンストラクタで MovieSprite クラスのインスタンスを作成し、その動画 ID を MovieSprite のコンストラクタに渡します。次に、PlayerReadyEvent のイベント リスナーを追加します。ムービーのサイズを設定するには、onPlayerReady イベント ハンドラを使用します。注: フル Chrome プレーヤーを使用しているため、MovieSprite クラスの静的プロパティ CHROME_HEIGHT を使用しています。これにより、Chrome の高さを考慮に入れて、映画のサイズを調整できます。

では、クロムレス プレーヤーはどうでしょうか。

package {
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
		
	import com.enefekt.tubeloc.MovieSprite;
	import com.enefekt.tubeloc.event.*;
	
	[SWF(backgroundColor="#FFFFFF")]
	public class MainChromeless extends Sprite {
		private var youtubeMovie:MovieSprite;
		
		public function MainChromeless() {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			youtubeMovie = new MovieSprite(null, true);
			youtubeMovie.addEventListener(PlayerReadyEvent.PLAYER_READY, onPlayerReady);
			youtubeMovie.x = 10;
			youtubeMovie.y = 10;
			addChild(youtubeMovie);
		}
		
		private function onPlayerReady(event_p:PlayerReadyEvent):void {
			youtubeMovie.width = 640;
			youtubeMovie.height = 480;
			youtubeMovie.loadVideoById("7tTNOX8jfno");
		}
	}
}

何が違うのですか。コンストラクタ内で、動画 ID に null を渡し、2 番目の true パラメータは MovieSprite クラスに、クロムレスであることを通知します。また、onPlayerReady イベント ハンドラに違いがあることもわかります。ここでは、loadVideoById メソッドを使用して ID で動画を読み込みます。

電話をかける方法、利用できるサービス

何にアクセスできるか、どのイベントに対処する必要があるか?ダウンロードしたリリース アーカイブには、詳細が記載された完全なコード ドキュメントがあります。簡単に言うと、Movie.as と MovieSprite.as では次のようなメソッドを使用できます。

seekTo(seconds:Number, allowSeekAhead:Boolean=true):void

setVolume(volume:Number):void

getVolume():Number

unMute():void

mute():void

clearVideo():void

setSize(width:Number, height:Number):void

loadVideoById(videoId:String, startSeconds:Number = 0):void [Chromeless player only] 

cueVideoById(videoId:String, startSeconds:Number = 0):void [Chromeless player only] 

stopVideo():void

playVideo():void

pauseVideo():void

destroy():void

上記のメソッドに加えて、Movie.as コンポーネントでは以下のプロパティにアクセスできます。

playerReady:Boolean

chromeless:Boolean

videoId:String

stateDescription:String

currentTime:Number 

duration:Number 

videoUrl:String 

videoEmbedCode:String 

volume:Number

登録可能なイベントは次のとおりです。詳細については、ドキュメントをご確認ください。

onError

onStateChange

onMovieStateUpdate

onMovieProgress

onPlayerReady

onPlayerUnload

まとめ

この記事が、YouTube 機能とコンテンツを Flash アプリケーションに統合するうえで役立つことを願っています。TubeLoc で開発する場合、ステージとして 2 つの YouTube プレーヤーを同時に使用することはできません。

この問題が、時間の経過とともに修正されることを願っています。バグや機能が不足しているものが見つかった場合は、Google Code プロジェクトにアクセスして、Issue Tracker でご報告ください。最後までお読みいただきありがとうございました。

著者のプロフィール


Ben Longoria 氏

Ben Longoria はウィスコンシン大学マディソン校の学術アプリケーション デベロッパーです。彼は Flash 5 から Flash に、Flex 2 のリリース以来 Flex で開発を行っています。過去 2 年間は、Mozilla アプリケーションの開発にも取り組んできました。Ben は、ブラウザとデスクトップの両方をターゲットとするクロス プラットフォーム アプリケーションを含め、さまざまな教育プロジェクトや学術プロジェクトに携わってきました。インターフェースとインタラクションの設計において積極的に役割を果たし、使いやすいソフトウェアを作成するという課題に情熱を注いでいます。このブログは http://enefekt.com/sansbrowser/ でご覧いただけます。また、InsideRIA もご覧ください。



クリエイティブ・コモンズ ライセンス
この作品は、クリエイティブ・コモンズ表示 3.0 米国ライセンスの下で使用許諾されています。