2012.03.09 | 

こんばんはmuchoです。

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

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

01/*
02ちょっと苦しんだのが、再生動画のオリジナルサイズを取得する方法
03viewer.channel.streamRect
04に格納されるみたいです。
05 
06再生開始時のイベントもうまく取れませんでした。
07viewer.channel.addEventListener("found", onStart);
08viewer.channel.addEventListener("createStream", onStart);
09このどちらもviewer.channel.streamRect取得できず、
10また表示のタイミングともちょっとズレがあるような?
11そこはいい解決法が見つからず悲しい力技になってしまいました。
12今後の課題です。
13*/
01public function main():void
02{
03    getRsl();
04    visible = false;
05}
06 
07private function getRsl():void
08{
09    Security.allowDomain("*");
10    Security.allowInsecureDomain("*");
11    viewerLoader = new Loader();
12    viewerLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onRslLoad);
13 
14    this.addChild(viewerLoader);
15 
16    var applicationDomain:ApplicationDomain = ApplicationDomain.currentDomain;
17    var loaderContext:LoaderContext = new LoaderContext();
18    var request:URLRequest = new URLRequest("http://www.ustream.tv/flash/viewer.rsl.swf");
19 
20    loaderContext.applicationDomain = applicationDomain;
21    viewerLoader.load(request, loaderContext);
22}
23 
24private function onRslLoad(e:Event):void
25{
26    var logicClass:Class = viewerLoader.contentLoaderInfo.applicationDomain.getDefinition("tv.ustream.viewer.logic.Logic") as Class;
27    viewer = new logicClass();
28    viewer.volume = 0;
29    this.addChild(viewer.display);
30    playChannel(id);
31}
32 
33private function playChannel(id:String = null):void
34{
35    var channelId:String = id;
36    if(id == null) {
37        id = default_channelID;
38    }
39    viewer.createChannel(id);
40    addEventListener(Event.ENTER_FRAME, onStart);
41    viewer.playing = true;
42}
43 
44private function onStart(e:Event):void
45{
46    if (!viewer.channel.streamRect) return;
47    e.target.removeEventListener(e.type, arguments.callee);
48    var vw:Number = viewer.channel.streamRect.width;
49    var vh:Number = viewer.channel.streamRect.height;
50    viewer.volume = vol;
51    viewer.display.x = 0;
52    viewer.display.y = 0;
53    viewer.display.width = viewer_width;
54    viewer.display.height = viewer_height = viewer_width * (vh / vw);
55    visible = true;
56}