我是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()
函数,但是没有成功。更深层次的原因也可能与访问摄像机的权限有关。顺便说一句,我为这个应用程序启用了网络摄像头和麦克风功能,这不是问题。
我相信我在代码或开发设置的大图中都遗漏了一些东西。请帮我确定问题,如果需要任何其他信息,请告诉我。非常感谢!
答案 0 :(得分:0)
您确定在套餐清单中添加了后置摄像头要求吗?
答案 1 :(得分:0)
原来问题出在我的设备上。回想一下,我正在使用Windows Phone 8.1预览版测试Lumia 520,固件保留在Lumia Black。使用Nokia Recovery Software Tool将固件升级到Lumia Cyan(与Windows Phone 8.1并行)后,问题就消失了。