Webカメラの映像を表示する
サンプルをダウンロード
■Flash Player の設定について
■カメラへのアクセス許可
カメラを使用するには、ユーザーがカメラへのアクセスを許可する必要があります。
Flash Player の設定画面から、カメラへのアクセスを設定することができます。
■カメラの種類を選択
Flash Player の設定画面から、カメラの種類を選択することができます。
■Webカメラの映像を表示する
1.Video オブジェクトを作成する
ビデオオブジェクトを作成
import flash.media.Video;
// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
// ステージに配置
stage.addChild(video_obj);
// 出力テスト
trace(video_obj);
2.Camera オブジェクトを取得する
Camera オブジェクトを取得するには、Camera.getCamera() メソッドを使用します。
第01引数を省略した場合、Flash Player の設定画面で選択したカメラデバイスを取得できます。
カメラが利用できない場合、null が得られます。
Camera.getCamera ( "デバイス名" ) :Camera
第01引数(略可) | String | 取得したいカメラデバイスの名称を指定。または 0 からの番号を指定。(複数のカメラデバイスが存在する場合) |
戻り値 | Camera | Camera オブジェクトが得られる。カメラが利用できない場合 null |
デフォルトのカメラオブジェクトを取得
import flash.media.Camera;
// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
// 出力テスト
trace(camera_obj);
複数のカメラオブジェクトを取得
import flash.media.Camera;
// 0 番目のカメラオブジェクトを取得
var camera_obj0:Camera = Camera.getCamera("0");
// 1 番目のカメラオブジェクトを取得
var camera_obj1:Camera = Camera.getCamera("1");
// 出力テスト
trace(camera_obj0);
trace(camera_obj1);
3.ビデオとカメラを関連付ける
ビデオとカメラを関連付けるには、attachCamera() メソッドを使用します。
Video オブジェクトから呼び出し、引数に「Camera オブジェクト」を指定します。
ビデオとカメラを関連付ける
import flash.media.Camera;
import flash.media.Video;
// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
// ステージに配置
stage.addChild(video_obj);
// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
// カメラが利用可能
if(camera_obj){
// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);
}
■ユーザーがカメラへのアクセスを許可しているか調べる
■カメラへのアクセス許可設定について
プログラムからカメラへのアクセスを試みると、以下の様な確認ダイアログが表示されます。
ユーザーが、カメラへのアクセスを拒否した場合、カメラ機能を利用することはできません。
■カメラへのアクセス許可設定を調べる
ユーザーが、カメラへのアクセスを許可しているか調べるには、muted プロパティを使用します。
true であれば、利用できません。
カメラ機能のミュート設定を調べる
import flash.media.Camera;
// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
// カメラが利用可能
if(camera_obj){
trace("カメラ機能のミュート設定:" + camera_obj.muted);
}
■「カメラへのアクセス許可設定」の変更を監視する
「カメラへのアクセス許可設定」の変更を監視するには、StatusEvent.STATUS イベントを使用します。
このイベントは、Adobe AIR では動作しません。
引数から得られるオブジェクトの、code プロパティから結果を取得できます。
以下の種類があります。
文字列 | 名称 |
"Camera.Muted" | カメラへのアクセスが拒否に変化した |
"Camera.Unmuted" | カメラへのアクセスが許可に変化した |
カメラのアクセス許可設定の結果を取得する
import flash.media.Camera;
import flash.media.Video;
import flash.events.StatusEvent;
// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
// ステージに配置
stage.addChild(video_obj);
// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
// カメラが利用可能
if(camera_obj){
// ビデオとカメラを関連付け
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;
}
});
}
■カメラデバイスの総数を取得する
カメラデバイスの総数を調べるには、Camera.names.length プロパティを使用します。
カメラデバイスの総数を取得
import flash.media.Camera;
// カメラデバイスの総数を取得
var num:int = Camera.names.length;
// 出力テスト
trace(num);
■カメラデバイスの名称を取得する
■カメラデバイスの名称をまとめて取得する
カメラデバイスの名称を、配列としてまとめて取得するには、Camera.names プロパティを使用します。
カメラデバイスの名称を順番に列挙する
import flash.media.Camera;
// カメラデバイスの名称をまとめて取得する
var camera_names:Array = Camera.names;
var i:int;
var num:int = camera_names.length;
for(i=0;i < num;i++){
// デバイス名を出力
trace("id:" + i + " name:" + camera_names[i]);
}
■カメラオブジェクトからデバイスの名称を取得する
カメラオブジェクトから、デバイスの名称を取得するには、name プロパティを使用します。
カメラデバイスの名称を順番に列挙する
import flash.media.Camera;
var i:int;
var num:int = Camera.names.length;
for(i=0;i < num;i++){
// カメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera(String(i));
// デバイス名を出力
trace("id:" + i + " name:" + camera_obj.name);
}
■カメラ機能が利用可能か調べる
実行環境でカメラ機能をサポートしているかを調べるには、Camera.isSupported プロパティを使用します。
この確認用のプロパティは、Flash Player 10.1 以降、Adobe AIR 2.0 以降で利用可能です。
モバイルなどの環境で動作させる場合、カメラ機能をサポートしていない事があります。
実行環境ごとのサポート状況については、公式リファレンスが参考になります。
http://help.adobe.com/ja_JP/FlashPlatform/reference/actionscript/3/flash/media/Camera.html
カメラ機能が利用可能か調べる
import flash.media.Camera;
import flash.text.TextField;
// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);
text_field.text = "カメラ機能が利用可能:" + Camera.isSupported;
■「AIR for Android」でカメラ機能を使用する
「AIR for Android」でカメラ機能を使用するには、以下のパーミッション設定を追加します。
権限名 | 説明 |
CAMERA | カメラデバイスにアクセスする |
■Adobe Flash による設定方法
「AIR for Android 設定」の「権限」タブにある、「CAMERA」のチェックを有効にします。
■アプリケーション記述ファイルを直接編集する方法
アプリケーション記述ファイルに、以下のパーミッション設定を追加します。
アプリケーション記述ファイルに autoOrients タグを追加する
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<application xmlns="http://ns.adobe.com/air/application/2.0">
~略~
<android>
<manifestAdditions>
<![CDATA[<manifest>
<uses-permission android:name="android.permission.CAMERA"/>
</manifest>]]>
</manifestAdditions>
</android>
</application>
キャプチャモードを設定する
■キャプチャモードを設定する
カメラデバイスから入力される、映像ソースの解像度と、フレームレートを設定する事ができます。
解像度が大きいほど、負荷が高くなり、フレームレートが低下する可能性があります。
■解像度とフレームレートを設定する
映像ソースの解像度とフレームレートを設定するには、setMode() メソッドを使用します。
デバイスが、指定した値に対応していない場合、対応している最も近い値が採用されます。
見た目の幅と高さを変更したい場合は、Video オブジェクトを操作します。
Camera.setMode ( 幅 , 高さ , フレームレート , 解像度を優先するか ) :void
第01引数 | int | カメラの入力解像度の幅 |
第02引数 | int | カメラの入力解像度の高さ |
第03引数 | Number | カメラの入力フレームレート |
第04引数(略可) | Boolean | 解像度を優先して処理するなら true、フレームレートを優先して処理するなら false(デフォルトは true) |
戻り値 | void | なし |
解像度とフレームレートを設定する
import flash.media.Camera;
// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
// カメラが利用可能
if(camera_obj){
// キャプチャ用パラメータ
var camera_width:int = 400;
var camera_height:int = 300;
var camera_fps:Number = 30;
// 解像度とフレームレートを設定する
camera_obj.setMode(camera_width,camera_height,camera_fps);
}
■実際に設定された解像度とフレームレートを取得する
実際に設定された解像度を調べるには、width と height プロパティを使用します。
実際に設定されたフレームレートを調べるには、fps プロパティを使用します。
これらのプロパティは、読み取り専用です。
実際に設定されたキャプチャモードの設定を取得する
import flash.media.Camera;
// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
// カメラが利用可能
if(camera_obj){
// キャプチャ用パラメータ
var camera_width:int = 400;
var camera_height:int = 300;
var camera_fps:Number = 30;
// 解像度とフレームレートを設定する
camera_obj.setMode(camera_width,camera_height,camera_fps);
// 出力テスト
trace("幅:" + camera_obj.width);
trace("高さ:" + camera_obj.height);
trace("フレームレート:" + camera_obj.fps);
}
■実測のフレームレートを取得する
実測のフレームレートを調べるには、currentFPS プロパティを使用します。
このプロパティは、読み取り専用です。
実測のフレームレートを取得する
import flash.media.Camera;
import flash.media.Video;
import flash.events.Event;
// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
// ステージに配置
stage.addChild(video_obj);
// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
// カメラが利用可能
if(camera_obj){
// キャプチャ用パラメータ
var camera_width:int = 400;
var camera_height:int = 300;
var camera_fps:Number = 30;
// 解像度とフレームレートを設定する
camera_obj.setMode(camera_width,camera_height,camera_fps);
// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);
// 毎フレーム実行されるイベント
stage.addEventListener(Event.ENTER_FRAME,function (e:Event):void{
trace("実測フレームレート:" + camera_obj.currentFPS);
});
}
モーションを検出する
■アクティビティとは?
アクティビティとは、活動を意味します。
映像の変化の大きさから、動画状態、静止画状態であるかを検出します。
■モーションの有無の切り替わりを検出する
モーションの有無の切り替わりを検出するには、ActivityEvent.ACTIVITY イベントを使用します。
イベントに登録した関数の引数から得られる、ActivityEvent オブジェクトの activating プロパティから、Boolean 値が得られます。
true … 動画状態
false … 静止画状態
モーションの有無の切り替わりを検出する
import flash.media.Camera;
import flash.media.Video;
import flash.events.ActivityEvent;
// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
// ステージに配置
stage.addChild(video_obj);
// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
// カメラが利用可能
if(camera_obj){
// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);
// モーションの有無が切り替わると呼び出されるイベント
camera_obj.addEventListener(ActivityEvent.ACTIVITY,function (e:ActivityEvent):void{
if(e.activating){
trace("動画状態");
}else{
trace("静止画状態");
}
});
}
■モーション検出のしきい値を設定する
モーション検出のしきい値を設定するには、setMotionLevel() メソッドを使用します。
Camera.setMotionLevel ( しきい値 , タイムアウト ) :void
第01引数 | int | 0 ~ 100 までのしきい値を指定。0 に近いほど少しの変化でもモーションとして検出する。(デフォルトは 50) |
第02引数(略可) | int | 静止画状態と判定するまでのタイムアウト時間を指定(単位:ミリ秒)(デフォルトは 2000) |
戻り値 | void | なし |
モーション検出のしきい値を設定する
import flash.media.Camera;
import flash.media.Video;
import flash.events.ActivityEvent;
// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
// ステージに配置
stage.addChild(video_obj);
// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
// カメラが利用可能
if(camera_obj){
// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);
// モーション検出のしきい値を設定
camera_obj.setMotionLevel(10,0);
// モーションの有無が切り替わると呼び出されるイベント
camera_obj.addEventListener(ActivityEvent.ACTIVITY,function (e:ActivityEvent):void{
if(e.activating){
trace("動画状態");
}else{
trace("静止画状態");
}
});
}
■モーション検出のしきい値を取得する
モーション検出のしきい値を取得するには、motionLevel プロパティを使用します。
静止画状態と判定するまでの時間(単位:ミリ秒)を取得するには、motionTimeout プロパティを使用します。
これらのプロパティは、読み取り専用です。
モーション検出のしきい値を取得する
import flash.media.Camera;
import flash.media.Video;
import flash.events.ActivityEvent;
// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
// ステージに配置
stage.addChild(video_obj);
// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
// カメラが利用可能
if(camera_obj){
// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);
// モーション検出のしきい値を設定
camera_obj.setMotionLevel(10,0);
// モーション検出のしきい値を取得する
trace(camera_obj.motionLevel);
// 静止画状態と判定するまでの時間を取得
trace(camera_obj.motionTimeout);
}
■モーションの実測値を取得する
モーションの実測値を取得するには、activityLevel プロパティを使用します。
このプロパティを利用するには、ActivityEvent.ACTIVITY イベントに関数を登録しておく必要があります。
0 から 100 までの値が得られます。
100 に近いほど大きく変化している事がわかります。
-1 が得られる場合、カメラデバイスの準備ができていません。
アクティビティレベルを取得する
import flash.media.Camera;
import flash.media.Video;
import flash.events.Event;
import flash.events.ActivityEvent;
// ビデオオブジェクトを作成
var video_obj:Video = new Video(320,240);
// ステージに配置
stage.addChild(video_obj);
// デフォルトのカメラオブジェクトを取得
var camera_obj:Camera = Camera.getCamera();
// カメラが利用可能
if(camera_obj){
// ビデオとカメラを関連付け
video_obj.attachCamera(camera_obj);
// モーション検出のしきい値を設定
camera_obj.setMotionLevel(10,0);
// モーションの有無が切り替わると呼び出されるイベント
camera_obj.addEventListener(ActivityEvent.ACTIVITY,function (e:ActivityEvent):void{
trace("アクティビティ:" + e.activating);
});
// 毎フレーム実行されるイベント
stage.addEventListener(Event.ENTER_FRAME,function (e:Event):void{
trace("アクティビティレベル:" + camera_obj.activityLevel);
});
}