You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.5 KiB
72 lines
1.5 KiB
|
|
class ImCamera {
|
|
constructor() {
|
|
this.stream = null;
|
|
}
|
|
}
|
|
|
|
ImCamera.prototype.isEnable = function () {
|
|
return !!navigator && !!navigator.mediaDevices && !!navigator.mediaDevices.getUserMedia;
|
|
}
|
|
|
|
ImCamera.prototype.openVideo = function () {
|
|
return new Promise((resolve, reject) => {
|
|
if (this.stream) {
|
|
this.close()
|
|
}
|
|
let constraints = {
|
|
video: true,
|
|
audio: {
|
|
echoCancellation: true, //音频开启回音消除
|
|
noiseSuppression: true // 开启降噪
|
|
}
|
|
}
|
|
navigator.mediaDevices.getUserMedia(constraints).then((stream) => {
|
|
console.log("摄像头打开")
|
|
this.stream = stream;
|
|
resolve(stream);
|
|
}).catch((e) => {
|
|
console.log(e)
|
|
console.log("摄像头未能正常打开")
|
|
reject({
|
|
code: 0,
|
|
message: "摄像头未能正常打开"
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
|
|
ImCamera.prototype.openAudio = function () {
|
|
return new Promise((resolve, reject) => {
|
|
let constraints = {
|
|
video: false,
|
|
audio: {
|
|
echoCancellation: true, //音频开启回音消除
|
|
noiseSuppression: true // 开启降噪
|
|
}
|
|
}
|
|
navigator.mediaDevices.getUserMedia(constraints).then((stream) => {
|
|
this.stream = stream;
|
|
resolve(stream);
|
|
}).catch(() => {
|
|
console.log("麦克风未能正常打开")
|
|
reject({
|
|
code: 0,
|
|
message: "麦克风未能正常打开"
|
|
})
|
|
})
|
|
|
|
})
|
|
}
|
|
|
|
ImCamera.prototype.close = function () {
|
|
// 停止流
|
|
if (this.stream) {
|
|
this.stream.getTracks().forEach((track) => {
|
|
track.stop();
|
|
});
|
|
}
|
|
}
|
|
|
|
export default ImCamera;
|