假设我有一个通过getUserMedia捕获的MediaStream。 如果这是智能手机上的后置摄像头,我可以像这样打开/关闭灯:
const videoTrack = mediaStream.getVideoTracks()[0];
videoTrack.applyConstraints({
advanced: [
{ torch: true }
]
});
我想切换这个状态,所以我需要想办法得到它。 它似乎可以通过getSettings()
获得:
videoTrack.getSettings().torch; // false
但是,无论我将当前约束设置为什么,它似乎总是返回false
。
获取torch
状态的正确方法是什么,理想情况下是视频流/摄像机的其他高级约束?
有趣的是,目前对Torch的支持似乎仅限于Google Pixel等设备上的Chrome for Android。
关于您的代码,applyConstraint 方法是异步的。应用设置需要时间,因此您必须等待它返回的承诺,然后才能读取修改结果。使用async
/await
尝试此操作:
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: []
没有什么高级的,一种更古老的更复杂的语法。今天的现代语法更简单。