簡體   English   中英

如何在Flex應用程序中檢測攝像頭是否已被其他應用程序使用?

[英]How to detect in a Flex app if a camera is already in use by another application?

我正在制作一個可播放用戶本地系統(Windows和Mac)上的視頻流的應用程序。 我使用Camera.getCamera()方法,然后使用Camera.names來獲取與系統連接的攝像機列表。

不幸的是,如果該相機已經被其他應用程序使用,例如用戶系統上的桌面應用程序,瀏覽器將崩潰。 有什么方法可以檢測可用相機列表中的特定相機是否已被其他任何應用程序使用?

確實,對於某些網絡攝像頭驅動程序,即使其他應用程序正在使用該網絡攝像頭,Camera對象也不會為null。 唯一的區別是,如果攝像機已經在使用Video對象,則在將其連接到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();
}

希望這對某人有幫助。

以我的經驗,camera.currentFps保持恆定值(非零)超過幾毫秒的唯一原因是剛拔下相機。

我要做的是以一定的時間間隔跟蹤攝像機,例如每5秒鍾一次,並快速連續地采集采樣數據,例如每50毫秒采集一次。

如果在所有樣本中currentFps都是恆定值,則說明相機剛剛拔下電源。

聽起來您的應用程序正在進行的工作不僅僅只是另一個應用程序正在使用的攝像頭-如果另一個應用程序正在使用攝像頭,則調用Camera.getCamera()應該只返回null。 在嘗試使用該值做任何事情之前,是否要檢查Camera.getCamera()返回的值?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM