             detachVideo();
         }
 
+        if (_camera != null) {
+            _camera.removeEventListener(StatusEvent.STATUS, handleCameraStatus);
+        }
+
         _camera = camera;
         if (_camera == null) {
             return;
         }
+        _camera.addEventListener(StatusEvent.STATUS, handleCameraStatus);
+        if (_camera.muted) {
+            return;
+
+        } else if (_correctionWidth == 0) {
+            setCorrection();
+        }
 
         attachVideo();
+    }
+
+    protected function handleCameraStatus (event :StatusEvent) :void
+    {
+        if (event.code == "Camera.Unmuted") {
+            setCorrection();
+            attachVideo();
+
+        } else {
+            detachVideo();
+        }
     }
 
     public function getCameraName () :String

    protected var _video :Video;

    protected var _bitmap :Bitmap;
}
}

            return; // throw exception?
        }

        _bitmap.bitmapData.draw(_video,
            new Matrix(_camera.width / _correctionWidth, 0, 0, _camera.height / _correctionHeight));

        if (_video.parent != null) {
            removeChild(_video);
