javascript - 在 Google Chrome 中使用 MediaStream API 更改 FocusMode 不起作用
问题描述
在 Google Chrome 浏览器中,我能够使用getUserMedia() API 获取连接的 USB 摄像头的实时信息。我有一个滑块来更改亮度值,这工作正常。我还希望focusMode从连续切换到手动(相机始终以连续focusMode开始)。
我有以下 Javascript 代码来更改 FocusMode。
const video_constraints ={};
//Create the following keys for Constraint
video_constraints.video = {};
video_constraints.video.width = {};
video_constraints.video.width.exact = 1920; //set video width
video_constraints.video.height = {};
video_constraints.video.height.exact = 1080; //set video height
video_constraints.video.frameRate = {};
video_constraints.video.frameRate.exact = 60; //set video frame rate
//Start stream
navigator.mediaDevices.getUserMedia(video_constraints).then(handleStreamSuccessCb).catch(handleStreamErrorCb);
function handleStreamSuccessCb()
{
console.log("Got Stream");
window.stream = stream;
videoElement.srcObject = stream;
getVideoCaps(stream);
}
function getVideoCaps(stream)
{
var videoTrackArray = stream.getVideoTracks();
var videoTrack = null;
for (i=0; i<videoTrackArray.length; i++)
{
if (videoTrackArray[i].kind == "video")
{
console.log("Video track found");
videoTrack = videoTrackArray[i];
break;
}
}
if (videoTrack != null)
{
setTimeout(() => {
const capabilities = videoTrack.getCapabilities()
console.log("Caps:");
console.log(capabilities);
//Brightness:
if (capabilities.brightness)
{
//configure slider settings
brightnessSliderUI.min = capabilities.brightness.min;
brightnessSliderUI.max = capabilities.brightness.max;
brightnessSliderUI.step = capabilities.brightness.step;
brightnessSliderUI.value = videoTrack.getSettings().brightness;
//set inital value
brightnessSliderValueUI.value = brightnessSliderUI.value;
//slider change listener
brightnessSliderUI.oninput = function() {
brightnessSliderValueUI.value = brightnessSliderUI.value;
videoTrack.applyConstraints({advanced : [{brightness: brightnessSliderUI.value}] });
}
}
else
{
console.log("brightnessNot supported");
}
//Focus Mode
if (capabilities.focusMode)
{
console.log(videoTrack.getSettings());// By default continuous value is set for focusMode
focusButtonUI.onclick = function(){
console.log("focusButton Clicked");
videoTrack.applyConstraints({advanced : [{focusMode: "manual"}]});
// I am not able to set focusMode to manual with the above statement
console.log(videoTrack.getSettings());
}
}
}, 500);
}
else
{
showErrorDialog("No Video track found in the stream");
}
}
通过下面的行,我试图切换focusMode:
videoTrack.applyConstraints({advanced : [{focusMode: "manual"}]});
但这个焦点仍然处于连续模式。
有人可以告诉上面的代码有什么问题吗?预览时是否可以切换焦点模式?
解决方案
推荐阅读
- javascript - 在 javascript 中使用二维数组并尝试从中读取值会给出“未捕获的类型错误:无法读取未定义的属性 '0'”
- ms-access - 我正在尝试在访问中运行查询。当我使用 IIF 函数设置参数时,它无法正常工作。它没有读取字符串
- loops - 如何循环通过 Makefile (GNU) 中的文本文件?
- python - 动态python函数和exec混淆
- carrot2 - carott2 是否有用于 JIRA 集成的适配器,用于可视化 JIRA 票据收集
- jquery - 在第一个 div 中的 2 个 div 之间包装内容,删除第二个
- javascript - 如何在 React 中删除列表项 - 控制台中不显示错误
- scala - Akka Streams - 流大表
- backend - 清晰设计编程
- c++ - 在c ++中找到从1到50的随机数的平均值