ストリーミングした動画を拡大するときは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から読み込んだものは実体がないということなのかな?