Webカメラの接続エラー
2009.11.19 木曜日
Flashの起動時などに複数台のWebカメラに同時に接続させようとすると、プログラム上は接続できているけど、画面上の描画が更新されない状態に陥ることがあります。以前の記事でも書いたとおり、手動でWebカメラに再接続させれば問題ないですが、自動化させたい場合の解決策。
以下サンプルコード。
まず、Webカメラに接続する瞬間にタイマーを設定し、指定した時間が経った時にカメラのフレームレートを確認するイベントを発生。フレームレートが0の場合は、再接続の関数を呼び出し。フレームレートの確認は少し間(例えば2,000ms)をおいてをしないと、接続できているWebカメラまで再接続しようとするので注意が必要です。
package {
import flash.display.MovieClip;
import flash.events.TimerEvent;
import flash.media.Camera;
import flash.media.Video;
import flash.utils.Timer;
public class Main extends MovieClip {
private var Video_vid:Video;
private var camera:Camera;
private var timer:Timer;
public function Main():void {
//ビデオをステージに表示
Video_vid = new Video(320, 240);
this.addChild(Video_vid);
//カメラに接続
Connect(0);
}
//カメラに接続
private function Connect(_id:uint):void {
//カメラの取得
camera = new Camera();
camera = Camera.getCamera(String(_id));
//カメラがある場合
if (camera != null) {
//カメラの設定
camera.setMode(320, 240, 30);
Video_vid.attachCamera(camera);
//タイマー設定、開始、イベント登録
timer = new Timer(2000, 1);
timer.start();
timer.addEventListener(TimerEvent.TIMER, Check);
}
}
//カメラの確認
private function Check(e:TimerEvent):void {
//フレームレートが0の場合、再接続
if (camera.currentFPS == 0) Connect(0);
}
}
}
Posted by tmdf|ActionScript