[AS]FMSからストリーミングした動画の表示拡大するときはVideoオブジェクトを直接拡大しないとだめっぽい。
ストリーミングした動画を拡大するときはVideoオブジェクトを直接操作したほうがいいっぽい。
たとえば、MovieClipクラスを拡張して、Videoを再生するクラスがあったとする。
package { import flash.display.MovieClip; import flash.media.Video; import flash.net.NetConnection; import flash.events.NetStatusEvent; import flash.net.NetStream; public class LoadMovie extends MovieClip { private var ncUrl:String private var nsUrl:String private var nc:NetConnection; private var video:Video; public function LoadMovie(ncUrl:String, nsUrl:String, w:uint = 320, h:uint = 320 ) { trace("FmsMain"); this.ncUrl = ncUrl; this.nsUrl = nsUrl; video = new Video(); video.width = w; video.height = h; initConnect(); } function initConnect():void { //ネットコネクションを作る nc = new NetConnection(); nc.client = new Object(); //ネットコネクションの接続状態を調べるリスナー nc.addEventListener(NetStatusEvent.NET_STATUS , onNcStatus); //ネットコネクションを接続する。 nc.connect(ncUrl); } //ネットコネクションの状態でいろいろ出力される private function onNcStatus(e:NetStatusEvent):void { trace("onNcStatus : "+e.info.code); switch (e.info.code) { //もし無事に接続されたら、 case "NetConnection.Connect.Success": initStream(); break; case "NetConnection.Connect.Failed": trace("onNcStatus : "+e.info.code); break; case "NetStream.Play.StreamNotFound": trace("not Found"); break; default : break; } } //ネットストリームの初期化処理 private function initStream():void { //ネットコネクションを作る var ns:NetStream = new NetStream(nc); //ネットコネクションの接続状態を調べるリスナー ns.addEventListener(NetStatusEvent.NET_STATUS, onNsStatus); //読み込みの時間を設定 ns.bufferTime = 2; //メタデータ取得用のオブジェクトを設定 ns.client = new Object(); //videoインスタンスを作成 video.attachNetStream(ns); addChild(video); ns.play(nsUrl); } private function onNsStatus(e:NetStatusEvent):void { switch (e.info.code) { //もし失敗したら case "NetStream.Play.StreamNotFound": trace("NetStream Not Found"); break; default : trace("onNsStatus : "+e.info.code); } } } }
このクラスを利用するときはフレームアクションで、
(ローカルにelevator.flvがあるのが前提)
var ncUrl:String = null var nsUrl:String = "elevator.flv" var fms2:LoadMovie = new LoadMovie(ncUrl,nsUrl); addChild(fms2);
この動画のサイズを変えたいときに
var ncUrl:String = null var nsUrl:String = "elevator.flv" var fms2:LoadMovie = new LoadMovie(ncUrl,nsUrl); addChild(fms2); fms2.width = 500; fms2.height = 500;
まあlこれでも拡大されるのは予想通り。
ただしFMSのflvを読んでる場合は拡大されるずに動画が非表示になる。
(音はなってるから再生はされてるようす)
//これだと動画がなぜか表示されない var ncUrl:String = "rtmp://hoge.moge" var nsUrl:String = "doke" var fms2:LoadMovie = new LoadMovie(ncUrl,nsUrl); addChild(fms2); fms2.width = 500; fms2.height = 500;
LoadMovieクラスには、引数w,hでvideoオブジェクトのwidth、heightを操作できるようにしてあるので、
//これなら動画の大きさを操作できる。 var ncUrl:String = "rtmp://hoge.moge" var nsUrl:String = "doke" w = 500; h = 500; var fms2:LoadMovie = new LoadMovie(ncUrl,nsUrl,w,h); addChild(fms2);
もちろんローカルのflvを再生するときもこのVideoオブジェクトを操作する方法でOK。
なので、つねにこっちの方法を使った方が安全っぽい。
※
上記の例でFMSから読み込んだ場合のLoadMovieオブジェクトのwidthとheightは、w,hをどんな値を設定しても0になるようだ。
(ローカルflvを読み込んだ場合は指定した数値となる)
//FMSの場合 var ncUrl:String = "rtmp://hoge.moge" var nsUrl:String = "doke" w = 500; h = 500; var fms2:LoadMovie = new LoadMovie(ncUrl,nsUrl,w,h); addChild(fms2); trace(fms2.width) //出力:0 trace(fms2.height) //出力:0
ローカルflvを読み込んだ場合
//ローカルFLVの場合 var ncUrl:String = null var nsUrl:String = "elevator.flv" w = 500; h = 500; var fms2:LoadMovie = new LoadMovie(ncUrl,nsUrl,w,h); addChild(fms2); trace(fms2.width) //出力:500 trace(fms2.height) //出力:500
FMSから読み込んだものは実体がないということなのかな?
Tweet