Flash間データ通信:FlashLCS
2009.10.3 土曜日
前々回に紹介したLocalConnectionを独自に拡張した「FlashLCS」なるものが、今年登場していたようです。公式ブログ?によると20Mbpsくらい速度が出るそうなので、このライブラリを使っても40KB制限を気にせずに済みそうです。
この記事を書いている現在、google codeで公開されているページにはサンプル、リファレンスがないのでよく分かりませんでしたが、FASH CS4にasタイプのライブラリを使ってコンパイルするとエラーが出ていました。swcのタイプは試していません。
日本語の情報もあまりありませんが、「alt 無制限に双方向通信が可能なLocalConnectionクラス「FlashLCS」」でテストされている方がいます。サンプルコードも配布されているようですが、このページで使われているライブラリは、現在配られているものより少し古いバージョンのようです。こちらのライブラリを流用するとうまくコンパイルして動作しました。
実験で書いた下記サンプルコードで、Webカメラの映像をリアルタイムに送信してみたところ、私の環境では少し(0.2秒くらい)遅れてました。LCS_B → LCS_A の順に起動してデータを送信します。
//LCS_A.as
package {
import com.blitzagency.rpc.LocalConnectionService;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.events.Event;
import flash.media.Camera;
import flash.media.Video;
import flash.utils.ByteArray;
public class LCS_A extends MovieClip {
//データ送受信用変数
private var lcs:LocalConnectionService;
//Webカメラ用変数
private var video:Video;
//初期設定
public function LCS_A():void {
//LCS設定
lcs = new LocalConnectionService();
lcs.client = this;
lcs.connect();
//Webカメラ設定
var camera:Camera = Camera.getCamera("2");
camera.setMode(320, 240, 30);
//ビデオ設定
video = new Video(camera.width, camera.height);
video.attachCamera(camera);
//リスナー登録
this.addEventListener(Event.ENTER_FRAME, Update);
}
//データ送信
private function Update(e:Event):void {
//Webカメラの映像をバイト配列に変換
var bmd:BitmapData = new BitmapData(320, 240, false);
bmd.draw(video);
var data:ByteArray = new ByteArray();
data = bmd.getPixels(bmd.rect);
data.position = 0;
//描画更新
lcs.Update(data);
}
}
}
//LCS_B.as
package {
import com.blitzagency.rpc.LocalConnectionService;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.utils.ByteArray;
public class LCS_B extends MovieClip {
//データ送受信用変数
private var lcs:LocalConnectionService;
//画面表示用変数
private var bmd:BitmapData;
private var bmp:Bitmap;
//初期設定
public function LCS_B():void {
//LCS設定
lcs = new LocalConnectionService();
lcs.client = this;
lcs.connect();
//ビットマップ設定
bmd = new BitmapData(320, 240, false);
bmp = new Bitmap(bmd);
this.addChild(bmp);
}
//描画更新
public function Update(_data:ByteArray):void {
//バイト配列を画像に変換
_data.position = 0;
bmd.setPixels(bmd.rect, _data);
}
}
}
Posted by Takaaki Morita|ActionScript Network