instascan
Version:
Webcam-driven QR code scanner.
53 lines (43 loc) • 1.06 kB
JavaScript
function cameraName(label) {
var clean = label.replace(/\s*\([0-9a-f]+(:[0-9a-f]+)?\)\s*$/, '');
return clean || label || null;
}
class Camera {
constructor(id, name) {
this.id = id;
this.name = name;
this._stream = null;
}
async start() {
var constraints = {
audio: false,
video: {
mandatory: {
sourceId: this.id,
minWidth: 600,
maxWidth: 800,
minAspectRatio: 1.6
},
optional: []
}
};
this._stream = await navigator.mediaDevices.getUserMedia(constraints);
return window.URL.createObjectURL(this._stream);
}
stop() {
if (!this._stream) {
return;
}
for (let stream of this._stream.getVideoTracks()) {
stream.stop();
}
this._stream = null;
}
static async getCameras() {
var devices = await navigator.mediaDevices.enumerateDevices();
return devices
.filter(d => d.kind === 'videoinput')
.map(d => new Camera(d.deviceId, cameraName(d.label)));
}
}
module.exports = Camera;