カメラの映像を表示する
サンプルをダウンロード
■カメラを使用するには?
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オブジェクトの方を操作します。
■実際に設定された解像度とフレームレートを取得する
実際に設定された解像度を調べるには width、height プロパティを使用します。フレームレートを調べるには、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() メソッドを使用します。
モーション検出の設定を行うには、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);
});

