获取摄像头设备列表
const getVideoList = () => {
return new Promise((resolve, reject) => {
navigator.mediaDevices.enumerateDevices().then((devices) => {
/**
* device数据类型
* deviceId: 设备ID
* kind: 设备类型 videoinput 摄像头, audioinput 扬声器
* label: 设备名
*/
const videoList = devices.filter(device => device.kind === "videoinput");
resolve(videoList);
}).catch((err) => {
reject(err);
});
});
};
使用切换摄像头设备
<video id="video"></video>
const video = document.getElementById("video");
let currentStream = "";
// 这里注意,deviceId传入时与video audio参数平级的话,也可以启动成功,但是这样,切换设备时就会失败,没有效果,所以deviceId要传在video下面
navigator.mediaDevices
.getUserMedia({
audio: false,
video: {
width: { min: 1280, ideal: 1920, max: 2560 },
// min 最低分辨率 ideal 理想分辨率 max 最高分辨率
height: { min: 720, ideal: 1080, max: 1440 },
deviceId: "" // 多个摄像头切换,传入摄像头的deviceId
}
})
.then((stream) => {
if (currentStream) {
// 先关闭之前已经打开的设备
currentStream.getTracks().forEach((track) => {
track.stop();
});
}
try {
currentStream = stream;
video.srcObject = stream;
} catch (error) {
video.src = window.URL.createObjectURL(stream); // 老的播放方式
}
})
.catch((err) => {
console.error("开启摄像头失败,请尝试重新检测");
});
切换摄像头只要重新调用方法,传入切换的摄像头设备ID就可以了,这里切换前,先关闭原先的摄像头。