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|

trackback

http://www.tmdf.net/blog/20091003_flash_lcs.html/trackback

comments(0)

POST NEW COMMENT

  • name:*
  • e-mail:*

    The content of this field is kept private and will not be shown publicly.
  • website:
  • comment:*

    Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code>
    Lines and paragraphs break automatically.
Photo

PROFILE

森田 考陽 [モリタ タカアキ]
1981.9.10 徳島市出身
Twitter: @tmdf
Other: mtdf.net

プロトタイプのインタラクション / インターフェイスデザイン・プログラミングの仕事をしています。

RECENT POSTS

MONTHLY ARCHIVES