javascript - 在媒体设备中应用 colorTemperature 设置后更改 whiteBalanceMode 约束
问题描述
大家好!
目前,我正在实施colorTemperature
一个项目,实施后我想撤销colorTemperature
我申请的项目。
我能够改变colorTemperature
, 最初colorTemperature
是0
和whiteBalanceMode
' continuous
'。但是,在我将 更改colorTemperature
为任何允许的值后,它whiteBalanceMode
会自动更改为 ' manual
'。我无法再次将其重置为colorTemperature
,0
因为该值是不允许的,我也无法使用我更改的类似代码再次将其重置whiteBalanceMode
为' ' 。continuous
colorTemperature
整个代码如下。
'use strict';
const video = document.querySelector('video');
const canvas = window.canvas = document.querySelector('canvas');
canvas.width = 480;
canvas.height = 360;
const constraints = {
audio: false,
video: true,
};
var currTracks = null;
function handleSuccess(stream) {
const videoTracks = stream.getVideoTracks();
currTracks = videoTracks;
window.stream = stream; // make stream available to browser console
video.srcObject = stream;
}
function handleError(error) {
console.log('navigator.MediaDevices.getUserMedia error: ', error.message, error.name);
}
async function init(){
await navigator.mediaDevices.getUserMedia(constraints).then(handleSuccess).catch(handleError);
await changeEnv(currTracks,3600);
setTimeout(function(){changeEnv(currTracks,5500)},1000);
}
async function changeEnv(tracks,compen) {
console.log(tracks,performance.now());
for (const track of tracks) {
console.log('curr',track.getSettings());
console.log('capab',track.getCapabilities());
if (compen === 3600) {
await track.applyConstraints({advanced:[{colorTemperature: compen}]});
} else {
await track.applyConstraints({advanced:[{whiteBalanceMode: 'continuous'}]});
}
console.log('curr',track.getSettings());
}
}
init();
我可以调用track.getCapabilities()
它来获得这些功能。
{
aspectRatio: {max: 4000, min: 0.0003333333333333333},
colorTemperature: {max: 7000, min: 2850, step: 50},
deviceId: "332d34c91861f97ba8f0e11f446da4566a1803539764dd67c1dfe036ef32fd97",
exposureCompensation: {max: 2, min: -2, step: 0.10000000149011612},
exposureMode: (2) ["continuous", "manual"],
exposureTime: {max: 1250, min: 0, step: 0},
facingMode: ["environment"],
focusMode: (3) ["manual", "single-shot", "continuous"],
frameRate: {max: 30, min: 0},
groupId: "40f2953f5fae495c7471348c844e919762a3213019b271664d220d0aa617313c",
height: {max: 3000, min: 1},
iso: {max: 4000, min: 20, step: 1},
resizeMode: (2) ["none", "crop-and-scale"],
torch: true,
whiteBalanceMode: (2) ["continuous", "manual"],
width: {max: 4000, min: 1}
}
从 Chromium 控制台日志中复制。
有人知道如何更改whiteBalanceMode
约束以将设备改回连续模式吗?
解决方案
colorTemperature min 列为 2850。它不能设置为 0。
我还提到了以下链接:
https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/applyConstraints
从阅读 MDN 看来,如果您不提供任何值,您可以将约束重置为默认值。提供约束是可选的。如果约束被重置,那么白平衡也应该被重置。
我在勇敢的浏览器上尝试了你的脚本,但它只显示 4500 色温并且没有将其值更改为 3600。
推荐阅读
- ios - 在 Objective-C 中将 JSON 数据转换为 NSString JSON 序列化?
- css - 为什么动画缩放和使用 css 变量进行翻译的处理方式不同?
- ios - iphone x UITable 视图顶部空间
- c# - 使用 STDOUT 打印语句将控制台附加到 C# Windows 应用程序
- python - 同时从数据库中提取和更新数据库
- sass - “gulp sass”命令运行但没有任何反应
- java - Spring Data JPA检查对象是否在elementcollecion等于list的地方退出
- c# - 使用 async/await 时如何避免 UI 线程上的竞争条件
- python - 应用引擎:无法导入名称存储 python 2.7
- google-tag-manager - 如何让 Google 跟踪代码管理器数据层值显示在测试 Google Ads 帐户中?