1

ユーザーのローカル システム (Windows と Mac の両方) からビデオ ストリームを再生するアプリケーションを作成しています。Camera.getCamera() メソッドを使用し、次に Camera.names を使用して、システムに接続されているカメラのリストを取得します。

残念ながら、カメラが別のアプリケーション (ユーザーのシステム上のデスクトップ アプリケーションなど) によって既に使用されている場合、ブラウザーはクラッシュします。使用可能なカメラのリストから特定のカメラが他のアプリケーションで既に使用されているかどうかを検出する方法はありますか?

4

3 に答える 3

3

一部の 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();
}

これが誰かに役立つことを願っています。

于 2010-06-16T00:31:36.377 に答える
2

私の経験では、camera.currentFps が数ミリ秒以上一定数 (0 以外) になる唯一の理由は、カメラのプラグが抜かれた場合だけです。

私がしていることは、5 秒ごとなどの一定の間隔でカメラを追跡し、50 ミリ秒ごとに 0.5 秒間サンプリング データをすばやく連続して収集することです。

currentFps がすべてのサンプルで一定である場合、カメラのプラグが抜かれています。

于 2011-06-14T18:43:59.223 に答える
0

別のアプリケーションがカメラを使用しているだけでなく、別のアプリケーションがカメラを使用している場合、Camera.getCamera() を呼び出すと null が返されるはずです。その値で何かをしようとする前に、Camera.getCamera() が返すものを確認していますか?

于 2010-03-30T17:39:30.587 に答える