テキストフィールドに入力したURLでFLVを再生
テキストフィールドに入力したURLのFLVを再生する。
http://modeverv.a.lisonal.com/nC/
驚くほど簡単ですね
1.テキストフィールドのurlをdebugprintするまで
asファイルに切り分けたいね。
package { import flash.display.SimpleButton; import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; import flash.text.TextFieldType import flash.events.MouseEvent; /** * ... * @author modeverv */ public class FileldAndButton extends Sprite { public var echo:String; private var tf:TextField; private var bt:SimpleButton; public function FileldAndButton() { tf = new TextField(); tf.border = true; tf.type = TextFieldType.INPUT tf.width = 390; tf.height = 20; tf.text = "http://video10.fc2.com/up/flv/201006/21/A/20100621A2MBt45b.flv"; tf.x = 0; tf.y = 0; addChild(tf); bt = new SimpleButton; bt.upState = makeRoundRect(Math.random() * 0xffffff); bt.overState = makeRoundRect(Math.random() * 0xffffff); bt.downState = makeRoundRect(Math.random() * 0xffffff); bt.hitTestState = bt.upState; bt.x = 400; bt.y = 0; addChild(bt); bt.addEventListener(MouseEvent.CLICK, shot); echo = new String(); } public static const START:String = "start"; private function shot(evt:MouseEvent):void{ var str:String = tf.text; echo = str; trace(str); dispatchEvent(new Event(FileldAndButton.START)); } private function makeRoundRect(c:uint):Sprite { var s:Sprite = new Sprite; s.graphics.beginFill(c); s.graphics.drawRoundRect(0,0,100,20,20,20); s.graphics.endFill(); return s; } } }
2.urlを元にflv再生
netstreamとかめんどくさいのでググってコピペ
http://www.publicroots.com/fmt/archives/000187.html
3.メインはシンプルに
mainからは
package { import flash.events.Event; /** * ... * @author modeverv */ public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private var tb:FileldAndButton; private var flv:VideoStageCls; private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point tb = new FileldAndButton; addChild(tb); tb.x = 10; tb.y = 10; tb.addEventListener(FileldAndButton.START, startplay); } private function startplay(e:Event):* { trace("from EV" + tb.echo ); flv = new VideoStageCls(tb.echo); addChild(flv); flv.x = 10; flv.y = 40; } } }
ここまで簡単だとニコニコ動画の仕組みは案外簡単に実装できそうな気がしてくる。
ちまたにクローンが出回っているのはこのへんが原因か。
だが、糞マッシブを要求されるからしんどいんでしょうね。何事も。
スレッドが扱える言語じゃないと全然間に合わなさそう。
あとはxmlベースのチャットとsprite上にoverlay表示があればニコニコ動画ですね。
1.入力=>自分のデータ構造にinsertして表示させつつ
2.サーバーに再生タイムスタンプをキーにサーバーに入力文字列を送信
3.サーバー側でDBに再生タイムスタンプを元にどんどんinsertしておく。
4.テキトウなタイミングでクライアント側からはどこまでfetchしているかを確認、
未取得のシリアルの文字レコードを取得して自分のデータ構造に再生タイムスタンプ位置に挿入
DBはflvserial,serial,timestamp,文字列情報+コマンドなテーブルで再現できそう。
文字情報あふれ防止時のためにorder by serial desc limit 500とかに制限したものを
クライアントに入れていけば良さそう。