2012.03.09 | 

こんばんはmuchoです。

USTREAMをFlash内に読み込もうとして、あれこれやってみたのでメモ。
下記のページを参考にしました。
Flash Client API Documentation (AsDoc)

USTREAM Flash Client APIの使い方
Flash : Ustream Flash Client APIを使ってみる - SWFなカスタムパネルで中継を再生



/*
ちょっと苦しんだのが、再生動画のオリジナルサイズを取得する方法
viewer.channel.streamRect
に格納されるみたいです。

再生開始時のイベントもうまく取れませんでした。
viewer.channel.addEventListener("found", onStart);
viewer.channel.addEventListener("createStream", onStart);
このどちらもviewer.channel.streamRect取得できず、
また表示のタイミングともちょっとズレがあるような?
そこはいい解決法が見つからず悲しい力技になってしまいました。
今後の課題です。
*/




		
		public function main():void 
		{
			getRsl();
			visible = false;
		}

		private function getRsl():void 
		{
			Security.allowDomain("*");
			Security.allowInsecureDomain("*");
			viewerLoader = new Loader();
			viewerLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onRslLoad);

			this.addChild(viewerLoader);

			var applicationDomain:ApplicationDomain = ApplicationDomain.currentDomain;
			var loaderContext:LoaderContext = new LoaderContext();
			var request:URLRequest = new URLRequest("http://www.ustream.tv/flash/viewer.rsl.swf");

			loaderContext.applicationDomain = applicationDomain;
			viewerLoader.load(request, loaderContext);
		}

		private function onRslLoad(e:Event):void
		{
			var logicClass:Class = viewerLoader.contentLoaderInfo.applicationDomain.getDefinition("tv.ustream.viewer.logic.Logic") as Class;
			viewer = new logicClass();
			viewer.volume = 0;
			this.addChild(viewer.display);
			playChannel(id);
		}

		private function playChannel(id:String = null):void 
		{
			var channelId:String = id;
			if(id == null) {
				id = default_channelID;
			}
			viewer.createChannel(id);
			addEventListener(Event.ENTER_FRAME, onStart);
			viewer.playing = true;
		}
		
		private function onStart(e:Event):void
		{
			if (!viewer.channel.streamRect) return;
			e.target.removeEventListener(e.type, arguments.callee);
			var vw:Number = viewer.channel.streamRect.width;
			var vh:Number = viewer.channel.streamRect.height;
			viewer.volume = vol;
			viewer.display.x = 0;
			viewer.display.y = 0;
			viewer.display.width = viewer_width;
			viewer.display.height = viewer_height = viewer_width * (vh / vw);
			visible = true;
		}