[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
気が付けばもう11月。何気に早い卒業制作〆切なのにいまさらビデオ再生関係。
まずは、AS3でFLV形式のビデオを再生するまでの道のり。
// それぞれ必要なクラスをインポート
import flash.media.Video
import flash.net.NetStream;
import flash.net.NetConnection;
// それぞれを定義。
var nc:NetConnection = new NetConnection();
var ns:NetStream;
var video:Video = new Video(320,240);
// メタデータ用に適当なオブジェクトを用意しておく。
var client:Object = new Object();
var totalTime:String;
function Main():void
{
// ローカルぼ場合は null を指定。
nc.connect(null);
// NetStream に NetConnection を渡す。
ns = new NetStream(nc);
// Video に attachNetStream で NetConnection を渡す。
video.attachNetStream(ns);
// Video を addChild で表示。
stage.addChild(video)
// NetStream の play() で再生開始。
ns.play("maji.flv")
// メタデータの処理
client.onMetaData = function(meta:Object):void
{
// 取得されるデータは String型
totalTime = meta.duration;
}
ns.client = client;
}
最小限だとこんな感じになるかな?
Video オブジェクトは単に表示するためのオブジェクトってのが自分的に意外。
ストリーミングを考慮しての設計らしいのでこのような手順を踏むのだとか。
play() や pause() の再生関係のメソッドは NetStream にある。
実はメタデータの処理の仕方がイマイチ理解できてない…。拾ったサンプルまるパクリ。
メタデータに総再生時間とかコーデックの種類とかが入ってるらしいけど、
参照名が決められてないからコーデック次第で参照名が変わるとの記述も…。
コールバック関数とか、functionの代入がいまだに分かってない。
早急に勉強・理解せねばねば。
Flex なら VideoDisplay のコンポーネントを設置するだけでいけるって便利だなぁ。
NetStream 関係で揉め事があるようだけど簡単なのには変わりない。
んで、フレーム単位でビデオを行ったりきたり、映像をスクラッチっぽく操作したいんだけど
調べて見ると、どうやらそれに関しては一筋縄ではいかないようだ…。
でも避けては通れないから何とか解決しなくては、てわ。
いままであまり使っていなかったけどサンプルのプログラムなんかで見かけるようになったから、ここいらで勉強しておこう。
主に配列から中身やインデックスなんかを取り出すときに使うらしい。
for ...in ...
var List:Array = [a, b, c, d, e, f, g];
// No に List のインデックス番号が入る。String型であることに注意する。
var No:String;
var Index:uint;
// 今回は List の長さが 7 なので 0-6 までが No に入るのを繰り返す。
for (No in List)
{
// No に入った番号は String型 なので int型 に変換して Index に入れる。
Index = int(No);
// Index に代入された番号を使って抽出。
trace(No, List[index])
}
0 a 1 b ... 5 f 6 g // No に代入されるのは String型 のインデックス番号
for ...each ...in ...
var List:Array = [a, b, c, d, e, f, g];
for each ( var v:String in List)
{
trace(v)
}
a b ... f g // v に代入されるのは String型 の配列オブジェクト
インデックス番号か配列オブジェクトを取り出すかの違いで使い分けるって感じ?
// 埋め込み開始 [Embed(source = 'hoge.jpg')] var myImg:Class; // bitmapに入れて使う var bmp:Bitmap = new myImg();:Class ってのが良く分からんが、コレで myImg というクラスを作っていると考えればよいそうだ。
var dist:bitmapData = new bitmmapData(100, 100);
var rect:Rectangle = new Rectangle(0, 0, dist.width, dist.height);
var pt:Point = new Point(0, 0);
dist.threshold(dist, rect, pt, "<=",0xAARRGGBB ,0xAARRGGBB , 0xAARRGGBB , false);
| 定数 | 文字 | 効果 |
|---|---|---|
| StageQuality.LOW | "low" | 画質低 |
| StageQuality.MEDIUM | "medium" | 画質中 |
| StageQuality.HIGH | "high" | 画質高 |
| StageQuality.BEST | "best" | 画質最高 |
| なし | "autolow" | 画質低→高 |
| なし | "autohigh" | 画質高→低 |
stage.quality = StageQuality.BEST; stage.quality = "best";
| 定数 | 文字 | 効果 |
|---|---|---|
| StageScaleMode.EXACT_FIT | "exactFit" | 縦横比を変えてフィット |
| StageScaleMode.NO_BORDER | "noBorder" | 縦横比を変えずにフィット |
| StageScaleMode.NO_SCALE | "noScale" | 100% 表示 |
| StageScaleMode.SHOW_ALL | "showAll" | すべて表示 |
stage.scaleMode = StageScaleMode.NO_SCALE;
| プロパティ | 効果 |
|---|---|
| StageDisplayState.FULL_SCREEN | フルスクリーンモード |
| StageDisplayState.NORMAL | 通常(ウィンドウ)モード |
stage.displayState = StageDisplayState.FULL_SCREEN stage.displayState = StageDisplayState.NORMAL[AS3 Ref] Stage
// 埋込み記述 [Embed(source = "/assets/Arial.ttf", fontName = "Arial", mimeType = 'application/x-font', flashType = 'true' )] var Font_Arial:Class; var myText:TextField = new TextField(); // 埋め込みフォントを有効にする。 myText.text = "test" myText.embedFonts = true; addChild(myText); // 書式のインスタンスを作って、myTextにセットする。 var format:TextFormat = new TextFormat; format.font = "Arial"; myText.setTextFormat(format);