Flashゲーム講座 & アクションスクリプトサンプル集

 

Webカメラの映像を表示する

 

サンプルをダウンロード
 


■Flash Player の設定について

 
■カメラへのアクセス許可
 
カメラを使用するには、ユーザーがカメラへのアクセスを許可する必要があります
 
Flash Player の設定画面から、カメラへのアクセスを設定することができます。
 
 
■カメラの種類を選択
 
Flash Player の設定画面から、カメラの種類を選択することができます。
 
 

■Webカメラの映像を表示する

 
1.Video オブジェクトを作成する

ライブラリパネルの、右上のボタンをクリックします。
 
 
メニューから『 新規ビデオ 』を選択します。
 
 
ライブラリに追加された埋め込みビデオを、Flash 上に配置します。
 
プロパティパネルから、インスタンス名をつけます。
 
ここでは my_video と名前を付けます。
 
 
Video クラスについては、こちらで解説しています。
 
2.Camera オブジェクトを取得する

Camera オブジェクトを取得するには、Camera.get() メソッドを使用します。
 
第01引数を省略した場合、Flash Player の設定画面で選択したカメラデバイスを取得できます。
 
カメラが利用できない場合、null が得られます。
 
Camera.get ( 番号 ) :Camera
第01引数(略可)Number取得したいカメラデバイスを 0 からの番号で指定。(複数のカメラデバイスが存在する場合)
戻り値 CameraCamera オブジェクトが得られる。カメラが利用できない場合 null
 
デフォルトのカメラオブジェクトを取得

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

// 出力テスト
trace(camera_obj);
 
複数のカメラオブジェクトを取得

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

// 1 番目のカメラオブジェクトを取得
var camera_obj1 = Camera.get(1);

// 出力テスト
trace(camera_obj0);
trace(camera_obj1);
 
3.ビデオとカメラを関連付ける
 
ビデオとカメラを関連付けるには、attachVideo() メソッドを使用します。
 
Video オブジェクトから呼び出し、引数に「Camera オブジェクト」を指定します。
 
ビデオとカメラを関連付ける

// 静的に配置したビデオの参照を取得
var video_obj = _root.my_video;

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

// カメラが利用可能
if(camera_obj){

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

}
 

■ユーザーがカメラへのアクセスを許可しているか調べる


■カメラへのアクセス許可設定について
 
プログラムからカメラへのアクセスを試みると、以下の様な確認ダイアログが表示されます。
 
ユーザーが、カメラへのアクセスを拒否した場合、カメラ機能を利用することはできません。
 
 
■カメラへのアクセス許可設定を調べる
 
ユーザーが、カメラへのアクセスを許可しているか調べるには、muted プロパティを使用します。
 
true であれば、利用できません。
 
カメラ機能のミュート設定を調べる

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

// カメラが利用可能
if(camera_obj){
	trace("カメラ機能のミュート設定:" + camera_obj.muted);
}
 
■「カメラへのアクセス許可設定」の変更を監視する
 
「カメラへのアクセス許可設定」の変更を監視するには、onStatus イベントを使用します。
 
引数から得られるオブジェクトの、code プロパティから結果を取得できます。
 
以下の種類があります。
 
文字列 名称
"Camera.Muted" カメラへのアクセスが拒否に変化した
"Camera.Unmuted" カメラへのアクセスが許可に変化した
 
カメラのアクセス許可設定の結果を取得する

// 静的に配置したビデオの参照を取得
var video_obj = _root.my_video;

// カメラオブジェクトを取得
var camera_obj = Camera.get();

// カメラが利用可能
if(camera_obj){

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

	// カメラへのアクセス許可が変化した時に実行されるイベント
	camera_obj.onStatus = function (info) {

		switch(info.code){
		case "Camera.Unmuted":
			trace("カメラ利用可能");
			break;

		case "Camera.Muted":
			trace("カメラ利用不可能");
			break;

		}
	};
}
 

■カメラデバイスの総数を取得する

 
カメラデバイスの総数を調べるには、Camera.names.length プロパティを使用します。
 
カメラデバイスの総数を取得

// カメラデバイスの総数を取得
var num = Camera.names.length;

// 出力テスト
trace(num);
 

■カメラデバイスの名称を取得する

 
■カメラデバイスの名称をまとめて取得する
 
カメラデバイスの名称を、配列としてまとめて取得するには、Camera.names プロパティを使用します。
 
カメラデバイスの名称を順番に列挙する

// カメラデバイスの名称をまとめて取得する
var camera_names = Camera.names;

var i;
var num = camera_names.length;
for(i=0;i < num;i++){
	// デバイス名を出力
	trace("id:" + i + " name:" + camera_names[i]);
}
 
■カメラオブジェクトからデバイスの名称を取得する
 
カメラオブジェクトから、デバイスの名称を取得するには、name プロパティを使用します。
 
カメラデバイスの名称を順番に列挙する

var i;
var num = Camera.names.length;
for(i=0;i < num;i++){

	// カメラオブジェクトを取得
	var camera_obj = Camera.get(i);

	// デバイス名を出力
	trace("id:" + i + " name:" + camera_obj.name);
}
 


 

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

 


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


カメラデバイスから入力される、映像ソースの解像度と、フレームレートを設定する事ができます。
 
解像度が大きいほど、負荷が高くなり、フレームレートが低下する可能性があります。
 

■解像度とフレームレートを設定する

 
映像ソースの解像度とフレームレートを設定するには、setMode() メソッドを使用します。
 
デバイスが、指定した値に対応していない場合、対応している最も近い値が採用されます。
 
見た目の幅と高さを変更したい場合は、Video オブジェクトを操作します。
 
Camera.setMode ( 幅 , 高さ , フレームレート , 解像度を優先するか ) :Void
第01引数(略可)Numberカメラの入力解像度の幅(デフォルトは 160)
第02引数(略可)Numberカメラの入力解像度の高さ(デフォルトは 120)
第03引数(略可)Numberカメラの入力フレームレート(デフォルトは 15)
第04引数(略可)Boolean解像度を優先して処理するなら true、フレームレートを優先して処理するなら false。(デフォルトは true)
戻り値 Voidなし
 
解像度とフレームレートを設定する

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

// カメラが利用可能
if(camera_obj){
	// キャプチャ用パラメータ
	var camera_width = 400;
	var camera_height = 300;
	var camera_fps = 30;

	// 解像度とフレームレートを設定する
	camera_obj.setMode(camera_width,camera_height,camera_fps);
}
 

■実際に設定された解像度とフレームレートを取得する

 
実際に設定された解像度を調べるには、widthheight プロパティを使用します。
 
実際に設定されたフレームレートを調べるには、fps プロパティを使用します。
 
これらのプロパティは、読み取り専用です。
 
実際に設定されたキャプチャモードの設定を取得する

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

// カメラが利用可能
if(camera_obj){
	// キャプチャ用パラメータ
	var camera_width = 400;
	var camera_height = 300;
	var camera_fps = 30;

	// 解像度とフレームレートを設定する
	camera_obj.setMode(camera_width,camera_height,camera_fps);

	// 出力テスト
	trace("幅:" + camera_obj.width);
	trace("高さ:" + camera_obj.height);
	trace("フレームレート:" + camera_obj.fps);
}
 

■実測のフレームレートを取得する

 
実測のフレームレートを調べるには、currentFps プロパティを使用します。
 
このプロパティは、読み取り専用です。
 
実測のフレームレートを取得する

// 静的に配置したビデオの参照を取得
var video_obj = _root.my_video;

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

// カメラが利用可能
if(camera_obj){
	// キャプチャ用パラメータ
	var camera_width = 400;
	var camera_height = 300;
	var camera_fps = 30;

	// 解像度とフレームレートを設定する
	camera_obj.setMode(camera_width,camera_height,camera_fps);

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

	// 毎フレーム実行されるイベント
	onEnterFrame = function (){
		trace("実測フレームレート:" + camera_obj.currentFps);
	};
}
 


 

モーションを検出する

 
 


■アクティビティとは?

 
アクティビティとは、活動を意味します。
 
映像の変化の大きさから、動画状態、静止画状態であるかを検出します。
 

■モーションの有無の切り替わりを検出する

 
モーションの有無の切り替わりを検出するには、onActivity イベントを使用します。
 
登録した関数の引数から、Boolean 値が得られます。
 
true … 動画状態
 
false … 静止画状態
 
モーションの有無の切り替わりを検出する

// 静的に配置したビデオの参照を取得
var video_obj = _root.my_video;

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

// カメラが利用可能
if(camera_obj){
	// ビデオとカメラを関連付け
	video_obj.attachVideo(camera_obj);

	// モーションの有無が切り替わると呼び出されるイベント
	camera_obj.onActivity = function (activity) {
		if(activity){
			trace("動画状態");
		}else{
			trace("静止画状態");
		}
	};
}
 

■モーション検出のしきい値を設定する

 
モーション検出のしきい値を設定するには、setMotionLevel() メソッドを使用します。
 
Camera.setMotionLevel ( しきい値 , タイムアウト ) :Void
第01引数 Number0 ~ 100 までのしきい値を指定。0 に近いほど少しの変化でもモーションとして検出する。(デフォルトは 50)
第02引数(略可)Number静止画状態と判定するまでのタイムアウト時間を指定(単位:ミリ秒)(デフォルトは 2000)
戻り値 Voidなし
 
モーション検出のしきい値を設定する

// 静的に配置したビデオの参照を取得
var video_obj = _root.my_video;

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

// カメラが利用可能
if(camera_obj){
	// ビデオとカメラを関連付け
	video_obj.attachVideo(camera_obj);

	// モーション検出のしきい値を設定
	camera_obj.setMotionLevel(10,0);

	// モーションの有無が切り替わると呼び出されるイベント
	camera_obj.onActivity = function (activity) {
		if(activity){
			trace("動画状態");
		}else{
			trace("静止画状態");
		}
	};
}
 

■モーション検出のしきい値を取得する

 
モーション検出のしきい値を取得するには、motionLevel プロパティを使用します。
 
静止画状態と判定するまでの時間(単位:ミリ秒)を取得するには、motionTimeOut プロパティを使用します。
 
これらのプロパティは、読み取り専用です。
 
モーション検出のしきい値を取得する

// 静的に配置したビデオの参照を取得
var video_obj = _root.my_video;

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

// カメラが利用可能
if(camera_obj){
	// ビデオとカメラを関連付け
	video_obj.attachVideo(camera_obj);

	// モーション検出のしきい値を設定
	camera_obj.setMotionLevel(10,0);

	// モーション検出のしきい値を取得する
	trace(camera_obj.motionLevel);

	// 静止画状態と判定するまでの時間を取得
	trace(camera_obj.motionTimeOut);
}
 

■モーションの実測値を取得する

 
モーションの実測値を取得するには、activityLevel プロパティを使用します。
 
このプロパティを利用するには、onActivity イベントに関数を登録しておく必要があります。
 
0 から 100 までの値が得られます。
 
100 に近いほど大きく変化している事がわかります。
 
-1 が得られる場合、カメラデバイスの準備ができていません。
 
アクティビティレベルを取得する

// 静的に配置したビデオの参照を取得
var video_obj = _root.my_video;

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

// カメラが利用可能
if(camera_obj){
	// ビデオとカメラを関連付け
	video_obj.attachVideo(camera_obj);

	// モーションの有無が切り替わると呼び出されるイベント
	camera_obj.onActivity = function (activity) {
		trace("アクティビティ:" + activity);
	};

	// 毎フレーム実行されるイベント
	onEnterFrame = function (){
		trace("アクティビティレベル:" + camera_obj.activityLevel);
	};
}