1

我正在开发一个Windows Store App并且我正在使用CameraMicrophone功能。我希望初始化后置摄像头,但我发现的示例总是初始化前置摄像头。这是我的代码:

Windows.Devices.Enumeration.DeviceInformation.findAllAsync(Windows.Devices.Enumeration.DeviceClass.videoCapture)
    .done(function (devices) {
        if (devices.length > 0) {
            // Using Windows.Media.Capture.MediaCapture APIs to stream from webcam 
            mediaCaptureMgr = new Windows.Media.Capture.MediaCapture();
            mediaCaptureMgr.initializeAsync().done(initializeComplete, initializeError);
        } else {
            var div = document.createElement('div');
            div.innerHTML = "No Camera found";
            document.body.appendChild(div);
        }
    });

在这种情况下mediaCaptureMgr是指前置摄像头。我浏览了文档,它说我已经为videoDeviceId这样的MediaCapture()函数提供了一个:

mediaCaptureMgr = new Windows.Media.Capture.MediaCapture({
    videoDeviceId: devices[1].id
});

然而,前置摄像头仍然被初始化。我正在 Surface 上编写和测试它。你能帮我解决这个问题吗?

4

2 回答 2

6

只是为了完成“ma_il”正确答案,设备[1] 是 Surface 以外的设备上的后置摄像头并不总是正确的。要测试相机和其他设备的放置位置,您必须检查设备信息是否包含本文报告的其他重要信息:http: //msdn.microsoft.com/en-us/library/windows/apps/hh464961.aspx

完整的代码应该是这样的

if (devices.length > 0) {
    devices.forEach(function (currDev) {
        if (currDev.enclosureLocation.panel && currDev.enclosureLocation.panel == Windows.Devices.Enumeration.Panel.back) {
             defaultDeviceId = currDev.id;
        }
    })
}
于 2014-02-11T14:52:51.120 回答
3

您必须创建一个MediaCaptureInitializationSettings对象:

var settings = new Windows.Media.Capture.MediaCaptureInitializationSettings();
settings.videoDeviceId = devices[1].id;
mediaCaptureMgr.initializeAsync(settings).done(initializeComplete, initializeError);
于 2013-05-10T16:33:04.547 回答