首页 > 解决方案 > 找出当前的手电筒状态

问题描述

假设我有一个通过 getUserMedia 捕获的 MediaStream。如果这是智能手机上的后置摄像头,我可以像这样打开/关闭灯:

const videoTrack = mediaStream.getVideoTracks()[0];
videoTrack.applyConstraints({
  advanced: [
    { torch: true }
  ]
});

我想切换这个状态,所以我需要想办法得到它。它似乎可以通过以下方式获得getSettings()

videoTrack.getSettings().torch; // false

false但是,无论我将当前约束设置为什么,它似乎总是会返回。

torch获取视频流/相机的状态以及理想情况下的其他高级约束的正确方法是什么?

标签: javascriptgetusermediamediastream

解决方案


有趣的是,目前对 Torch 的支持似乎仅限于在 Google Pixel 等设备上的 Android 版 Chrome。

关于您的代码,applyConstraints方法是异步的。应用设置需要时间,因此您必须等待它返回的承诺,然后才能读取修改结果。尝试使用/ :_asyncawait

async function (mediaStream) {
  const videoTrack = mediaStream.getVideoTracks()[0];

  await videoTrack.applyConstraints({torch: true});
  console.log(videoTrack.getSettings().torch); // true
};

...或then用于形成一个承诺链:

function (mediaStream) {
  const videoTrack = mediaStream.getVideoTracks()[0];

  return videoTrack.applyConstraints({torch: true})
    .then(() => console.log(videoTrack.getSettings().torch)); // true
};

第三,没有什么先进的advanced: [],一个更旧的更复杂的语法。今天的现代语法更简单。


推荐阅读