AS3でのWebカメラの使い方のメモです。
とりあえず、下のコードでカメラは使える(こんな感じ)。
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageQuality;
import flash.display.StageScaleMode;
import flash.media.Camera;
import flash.media.Video;
public class Main extends Sprite
{
private var video:Video;
public function Main()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.quality = StageQuality.BEST;
stage.frameRate = 40;
var camera:Camera = Camera.getCamera();
if(!camera)
{
// カメラがインストールされてない場合
trace("Camera is not installed.");
}
else
{
// カメラをビデオに接続
video = addChild(new Video(640, 480)) as Video;
camera.setMode(640, 480, 40);
video.attachCamera(camera);
}
}
}
}
ただ、これだとカメラが使えない場合があるみたい。
「Camera.getCamera()の引数」が原因。
Camera.getCamera()には、引数として使うカメラの番号を指定出来る。で、これを省略してCamera.getCamera() を使用すると、デフォルトのカメラが選択される(つまり上のコード)。
この、引数を省略したときに、カメラを検出できない場合があります。
例えば、Macに内蔵されているiSightを使う場合は「Camera.getCamera(”2”)」って2番を指定するなど、Camera.getCamera()でちゃんと動かない場合もあると。
ふむ。
対策として一番簡単なのは、ユーザーに使うカメラを選んでもらうこと。
上のコードの21行目、「var camera:Camera = Camera.getCamera();」の前に、下の一行を追加する。
Security.showSettings(SecurityPanel.CAMERA);
これで、最初にカメラを選ぶパネルが出る(こんな感じ)。
ただ、Webカメラを使ったサービスでカメラの選択パネルを表示させてるのをあんまり見ない。
他の人はどうやってるのかなーって思い調べてたら、以下の方法をしている人が。
Cameraは、Camera.namesという「使用できるすべてのカメラの名前を示すストリング配列」を持っている。
そこで、これを読み込んで使えるカメラの一覧を作って、ユーザーにそれを選んでもらうという形をとる。
var cameras:Array = [];
for each (var name:String in Camera.names)
{
cameras.push(name);
}
みたいにしてカメラの一覧を取得して、あとはComboBoxなどと連携させてカメラを選ばせるという方法。
なるほどー。こっちの方がユーザーは選びやすいのかな。
そんな訳でメモ書きでした。
そもそも、ここら辺の話ってあんまり気にしなくてもいいのかな。
「たいていの人はデフォルトのカメラが設定されてるから大丈夫っしょー!」みたいな。