HAKUHIN's home page
更新履歴
 
 



カメラの映像を表示する
 

サンプルをダウンロード
 


■カメラを使用するには?
 
Flash Player の設定画面からカメラの使用を許可します。
 
 
Flash Player の設定画面からカメラデバイスを選択することができます。
 
 
■カメラをサポートしているか調べる(Flash 10 以降)

Flash Player を実行している環境でカメラをサポートしているかを調べるには、Camera.isSupported プロパティを使用します。
 
モバイル用のデバイスではサポートしていないことがあります。
 
カメラを利用できるか調べる


var text_field = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = 500;
text_field.height = 20;
text_field .border = true;
stage.addChild(text_field);

text_field.text = "カメラのサポート:" + Camera.isSupported;
 
■カメラの映像を表示する

Flash 画面上にカメラの映像を表示します。
 
1.Video オブジェクトを作成する

Video クラスをインスタンス化して、ビデオオブジェクトを作成します。
 
ビデオオブジェクトを作成

// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
addChild(video_obj);
 
2.Camera オブジェクトを取得する

Camera.getCamera() メソッドを使用して Camera オブジェクトを取得します。
 
カメラデバイスが複数存在する場合、引数に番号を文字列で指定すると、その番号に割り振られているカメラデバイスを利用する事ができます。
 
引数を省略するとFlash Player の設定画面で設定したデバイスが利用できます。
 
利用可能なカメラデバイスが存在しない場合、null が得られます。
 
カメラオブジェクトを取得

// カメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
 
0 番目のカメラオブジェクトを取得

// カメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera("0");
 
現在使用しているカメラのデバイス名を取得するには、name プロパティを使用します。
 
現在使用しているカメラデバイス名を取得する

// カメラデバイス名を取得
var camera_obj:Camera = Camera.getCamera();
trace("NAME:" + camera_obj.name);
 
複数あるカメラのデバイス名をすべて取得するには、Camera.names プロパティを使用します。 配列に格納されたデバイス名称が得られます。
 
「配列の順番」と 「Camera.get() メソッドの引数に渡す番号」は同じです。
 
カメラデバイス名をすべて取得する

// カメラデバイス名を取得
var camera_name:Array = Camera.names;
var i:int;
for(i=0;i < camera_name.length;i++){
	trace("id:" + i + " NAME:" + camera_name[i]);
}
 
3.Video オブジェクトに関連付ける

はじめに配置したビデオオブジェクトから attachCamera() メソッドを呼び出して、ビデオオブジェクトとカメラオブジェクトを関連付けます。
 
引数に Camera オブジェクトを渡します。
 
Video オブジェクトに関連付ける

// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
addChild(video_obj);

// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();

// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);
 
■Flash Player のカメラの設定
 
ActionScript3.0 からカメラへのアクセスを試みると、以下の確認画面が表示されます。
 
ユーザーにより、拒否ボタンを押された場合カメラを利用することはできません。
 
 
ユーザーによるアクセス許可の結果を取得するには、StatusEvent.STATUS イベントを使用します。
 
引数から得られるオブジェクトの、code プロパティから結果を取得できます。
 
カメラのアクセス許可設定の結果を取得する

// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
addChild(video_obj);

// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();

// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);

// アクセス許可を調べる
camera_obj.addEventListener(StatusEvent.STATUS,function(e:StatusEvent):void{
	switch(e.code){
	case "Camera.Unmuted":
		trace("カメラ利用可能");
		break;
	case "Camera.Muted":
		trace("カメラ利用不可能");
		break;
	};
});
 


 

キャプチャモードを設定する
 


■キャプチャモードとは?

キャプチャモードの設定を行うと、カメラデバイスから入力される映像ソースの解像度フレームレートを変更する事ができます。
 
解像度が大きいほど負荷が高くなりフレームレートが落ちる可能性があります。
 
■解像度とフレームレートを設定する
 
映像ソースの解像度とフレームレートを設定するには、setMode() メソッドを使用します。
 
Cameraオブジェクト.setMode ( [幅] , [高さ] , [フレームレート] , [解像度を優先するか] );
第01引数(略可)カメラの入力解像度の幅
第02引数(略可)カメラの入力解像度の高さ
第03引数(略可)カメラの入力フレームレート
第04引数(略可)引数 1 から 3 までの設定にデバイスが対応していない場合、
解像度を優先して処理するなら true,フレームレートを優先して処理するなら false
戻り値 なし
 
実際に設定されたキャプチャ設定を取得する

// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();

var w:int = 400;
var h:int = 300;
var fps:Number = 30;

// キャプチャ設定する
camera_obj.setMode(w,h,fps);
 
設定したパラメータをサポートしていない場合、デバイスが対応しうる中で最も近い環境に設定されます。
 
実際の Flash に表示している映像の幅と高さを変更したい場合は、Videoオブジェクトの方を操作します。
 
■実際に設定された解像度とフレームレートを取得する
 
実際に設定された解像度を調べるには widthheight プロパティを使用します。フレームレートを調べるには、fps プロパティを使用します。
 
実際に設定されたキャプチャモードの設定を取得する

// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
var w:int = 400;
var h:int = 300;
var fps:Number = 30;

// キャプチャ設定する
camera_obj.setMode(w,h,fps);

trace("幅" + camera_obj.width);
trace("高さ" + camera_obj.height);
trace("フレームレート" + camera_obj.fps);
 
■実測のフレームレートを取得する
 
実測のフレームレートを調べるには、currentFPS プロパティを使用します。
 
実測のフレームレートを取得する

// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
addChild(video_obj);

// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();

// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);

var w:int = 400;
var h:int = 300;
var fps:Number = 30;

// キャプチャ設定する
camera_obj.setMode(w,h,fps);

addEventListener(Event.ENTER_FRAME,function(e:Event):void{
	trace("実際のフレームレート" + camera_obj.currentFPS);
});
 


 

モーションを検出する
 


■モーション検出とは?
 
カメラ映像の変化の度合いから判断して、カメラの映像が動画、静止画状態であるかを検出します。
 
カメラチャット利用時は、静止画状態であっても映像データは常に送信され続けるようです。
 
■モーションを検出する

カメラデバイスの映像に大きく変化があるか無いかを検出する事ができます。

モーション検出の設定を行うには、setMotionLevel() メソッドを使用します。
 
Cameraオブジェクト.setMotionLevel ( 検出精度 , [タイムアウト] );
第01引数 0 ~ 100 までの数値
(数値が小さいほど少しの変化でも検出、100 でまったく検出しない)
第02引数(略可)モーションの検出を終了してから、ActivityEvent.ACTIVITY イベントが呼び出されるまでの時間(単位:ミリ秒)デフォルトで 2000
戻り値 なし
 
モーション検出設定を取得する

// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
addChild(video_obj);

// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();

// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);

var w:int = 400;
var h:int = 300;
var fps:Number = 30;

// モーション検出の設定(検出精度、タイムアウト)
camera_obj.setMotionLevel(50,1000);
 
モーションの検出を取得するには、ActivityEvent.ACTIVITY イベントを使用します。
 
ActivityEvent クラスの activating プロパティから得られる値が、true であればモーション検出状態、false であればモーション無し状態である事がわかります。
 
モーション検出設定を取得する

// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
addChild(video_obj);

// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();

// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);

var w:int = 400;
var h:int = 300;
var fps:Number = 30;

// モーション検出の設定(検出精度、タイムアウト)
camera_obj.setMotionLevel(50,1000);

// モーション検出に関するイベント
camera_obj.addEventListener(ActivityEvent.ACTIVITY,function(e:ActivityEvent):void{
	if(e.activating){
		trace("検出");
	}else{
		trace("なし");
	}
});
 
■カメラが検出した映像の変化量を取得する
 
カメラが検出した映像の変化量(アクティビティレベル)を取得するには、activityLevel プロパティを使用します。
 
0 から 100 までの範囲となります。100 であるほど大きく変化したことがわかります。
 
カメラデバイスの準備ができていない場合、-1 が得られます。
 
なお、正常に値を取得する為には ActivityEvent.ACTIVITY イベントに一度アクセスしておく必要があります。
 
アクティビティレベルを取得する

// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
addChild(video_obj);

// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();

// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);

// モーション検出の設定(検出精度、タイムアウト)
camera_obj.setMotionLevel(50,1000);

// モーション検出に関するイベント(ダミー用)
camera_obj.addEventListener(ActivityEvent.ACTIVITY,function(e:ActivityEvent):void{});

// 毎フレーム実行されるイベント
addEventListener(Event.ENTER_FRAME,function(e:Event):void{

	trace("アクティビティレベル:" + camera_obj.activityLevel);

});
 




HAKUHIN's home page バナー http://hakuhin.jp/
(c) Hakuhin & 日新礼符 2002-2011 解像度1024×768以上 IE8.0以上推奨
/ 閲覧中: