【问题标题】:Change the whiteBalanceMode constraint after applying colorTemperature setting in media device在媒体设备中应用 colorTemperature 设置后更改 whiteBalanceMode 约束
【发布时间】:2021-11-05 18:32:38
【问题描述】:

大家好!

目前我正在做一个项目的colorTemperature的实现,实现后我想撤销我申请的colorTemperature

我可以更改colorTemperature,最初colorTemperature0whiteBalanceMode 是'continuous'。但是,在我将colorTemperature 更改为任何允许的值后,whiteBalanceMode 会自动更改为“manual”。我不能再次将colorTemperature 重置为0,因为该值是不允许的,我也不能使用我更改colorTemperature 的类似代码再次将whiteBalanceMode 重置为'continuous'。

整个代码如下。

'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 约束以将设备改回连续模式吗?

【问题讨论】:

    标签: javascript android google-chrome camera webrtc


    【解决方案1】:

    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。

    【讨论】:

    • 是的,我在电脑上也试过了,数值无法更改,在手机浏览器上色温值可以更改
    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    相关资源
    最近更新 更多