一部の Web カメラ ドライバーでは、Web カメラが別のアプリケーションで使用されている場合でも Camera オブジェクトが null にならないことは事実です。唯一の違いは、カメラが既に使用されている場合、カメラが Video オブジェクトにアタッチされた後に ActivityEvent が発生しないことです。
タイムアウトを 5 秒に設定し、アクティビティ イベントがまだ発生していない場合はイベントを発生させることで問題を解決しました。
public function WebCam(w:Number, h:Number, eventClient:Object) {
_camera = Camera.getCamera();
_micLive = Microphone.getMicrophone();
_cameraWidth = w; // DEFAULT_CAMERA_WIDTH;
_cameraHeight = h; // DEFAULT_CAMERA_HEIGHT;
if (_camera != null) {
video = new Video(_camera.width, _camera.height); //displays video feed
video.attachCamera(_camera);
addChild(video);
_camera.addEventListener(StatusEvent.STATUS, cameraStatus);
_camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
_camera.setMode(_cameraWidth, _cameraHeight, DEFAULT_CAMERA_FPS)
//set timer to ensure that the camera activates. If not, it might be in use by another application
_waitingActivation = true;
_timer = new Timer(TIMER_INTERVAL);
_timer.addEventListener(TimerEvent.TIMER, activationTimeout);
_timer.start();
}
else {
//Security.showSettings(SecurityPanel.CAMERA)
}
}
private function cameraStatus(event:StatusEvent):void{
trace(_camera.muted);
}
private function activityHandler(e:ActivityEvent):void {
trace('camera Activity');
trace(_camera.activityLevel);
if (e.activating){
this._waitingActivation = false;
}
}
protected function activationTimeout(e:TimerEvent):void{
if (this._waitingActivation)
this.dispatchEvent(new Event(WebCam.ACTIVATION_TIMEOUT, true));
_timer.stop();
}
これが誰かに役立つことを願っています。