在Windows 8 Javascript中closures相机的正确方法是什么?

我在JavaScript中使用MediaCapture捕捉我的相机。
我有一个带有initCamera函数的Camera类。 问题是,如果我尝试在短时间内重新启动相机,我会得到这个错误: Hardware MFT failed to start streaming due to lack of hardware resources.

现在我知道这意味着我的相机仍在使用中。 我想知道的是:

  • 如何正确closures相机
  • 如何检查我的相机是否正在使用或无法使用

这是一段代码:

 function Camera() { var that = this; this.mediaCaptureElement = null; this.initCamera = function() { if (!that.mediaCaptureElement) { that.mediaCaptureElement = new Windows.Media.Capture.MediaCapture(); that.mediaCaptureElement.addEventListener("failed", function (e) { console.warn("The camera has stopped working"); } that.mediaCaptureElement.initializeAsync().then(function() { that.mediaCaptureElement.videoDeviceController.primaryUse = Windows.Media.Devices.CaptureUse.photo; that.getCameraResolution(); that.orientationChanged(); that.startCamera(); }); } }; 

我现在重新打开相机的方式是用一个新的Camera类实例覆盖相机实例。

提前致谢。

我在C#使用MediaCapture有同样的问题。

我必须在StopPreviewAsync之后调用Dispose()才能纠正它:

await cameraControler.MediaCaptureInstance.StopPreviewAsync(); cameraControler.MediaCaptureInstance.Dispose();

你有没有看过相机入门套件UWP示例 ? 它也有一个JS的味道!

如果您希望在使用完相机之后能够可靠地使用相机,则需要确保正确清理所有资源。 从你共享的代码看来,你似乎让系统处理这个问题,这意味着你的应用程序可能会在系统关闭所有资源之前回来。

你应该照顾:

  • 停止可能正在进行的任何录音
  • 停止预览
  • 关闭MediaCapture

看一下上面链接的示例中的cleanupCameraAsync()方法 ,了解如何实现这个示例。