无法从Lumia 520上的应用程序访问相机(运行Windows Phone 8.1预览版)

时间:2014-08-11 17:46:35

标签: javascript html5 camera windows-store-apps windows-phone-8.1

我是WP开发者,学习如何编写一个简单的录像机应用程序。我在VS Pro 2013上使用javascript和HTML,并在我的实际设备Lumia 520(运行Windows Phone 8.1预览版)上进行调试。我阅读了一些文档,发现MediaCapture类是用于此目的的核心类。所以我开始学习一些教程并编写一些函数来访问相机并在HTML5视频标签中显示预览。但是,我没有成功地初始化MediaCapture对象,甚至没有显示预览。以下是第一个问题的主要功能:

function initCapture() {
    findRearFacingCamera().then(function (cameraId) {
        try {
            if (cameraId != null && cameraId != "") {

                // Initialize the settings
                captureInitSettings = null;
                captureInitSettings = new Windows.Media.Capture.MediaCaptureInitializationSettings();
                captureInitSettings.videoDeviceId = cameraId;
                captureInitSettings.streamingCaptureMode = Windows.Media.Capture.StreamingCaptureMode.video;
                captureInitSettings.photoCaptureSource = Windows.Media.Capture.PhotoCaptureSource.videoPreview;
                captureInitSettings.realTimeModeEnabled = true;

                // Initialize the capture
                oMediaCapture = null;
                oMediaCapture = new Windows.Media.Capture.MediaCapture();
                oMediaCapture.initializeAsync(captureInitSettings).then(preview, errorHandler);
            }
        } catch (e) { }
    });
}

function preview() {
    var preview = document.getElementById("PreviewScreen");
    preview.msZoom = true;
    if (preview != null) {
        preview.src = URL.createObjectURL(oMediaCapture);
        preview.play();
    }
}

function errorHandler(e) {
    var information = document.getElementById("message");
    information.innerHTML = e.message;
}

在调试期间,我暂停了oMediaCapture = new Windows.Media.Capture.MediaCapture();函数中的initCapture()语句。此时,captureInitSettings.videoDeviceId的值为:“\\?\ DISPLAY#QCOM_AVStream#3& 25691128& 0& UID32768#{e5323777-f976-4f5b-9b55-b94699c46e44} \ Back Sensor”,我认为是正确识别我打算使用的后置摄像头。然后,当我继续在函数var preview = document.getElementById("PreviewScreen");中设置为preview()的断点时,该断点应该在成功初始化MediaCapture对象时调用,该程序被捕获到errorHandler()函数中相反,错误消息为“访问被拒绝”,错误号为“-2147024891”。所以我猜这个问题来自.initializeAsync()函数,但是没有成功。更深层次的原因也可能与访问摄像机的权限有关。顺便说一句,我为这个应用程序启用了网络摄像头和麦克风功能,这不是问题。

我相信我在代码或开发设置的大图中都遗漏了一些东西。请帮我确定问题,如果需要任何其他信息,请告诉我。非常感谢!

2 个答案:

答案 0 :(得分:0)

您确定在套餐清单中添加了后置摄像头要求吗?

答案 1 :(得分:0)

原来问题出在我的设备上。回想一下,我正在使用Windows Phone 8.1预览版测试Lumia 520,固件保留在Lumia Black。使用Nokia Recovery Software Tool将固件升级到Lumia Cyan(与Windows Phone 8.1并行)后,问题就消失了。