serratus/quaggaJS

How to choose devices camera (from multiple back cameras, i want the main) for barcodescanning with QuaggaJS?

vinitdev1995 opened this issue · 1 comments

How to choose devices camera (from multiple back cameras, i want the main) for barcode scanning with QuaggaJS in react js?

This is what I use for detecting multiple back cameras. And choosing the last back camera gives you the correct camera for iPhones with multiple cameras.

navigator.mediaDevices.enumerateDevices()
.then(function(devices) {
devices.forEach(function(device) {
// alert('device - ' + JSON.stringify(device));
if ( device.kind === 'videoinput' && device.label.match(/back/) != null ) {
// alert('Back found! - ' + device.label);
backCameraList.push({'deviceLabel': device.label, 'deviceId': device.deviceId});
}
});

    // alert('backCameraList: ' + JSON.stringify(backCameraList));
    // alert('arrayLength: ' + backCameraList.length);
    // alert('finalBackCamera: ' + JSON.stringify(backCameraList[backCameraList.length - 1], null, 2));
    // alert('finalBackCameraId' + backCameraList[backCameraList.length - 1]['deviceId']);

    if (backCameraList.length > 0 && backCameraList[backCameraList.length - 1]['deviceId'] !== undefined) {
      Quagga.init({
        locator: {
          patchSize: 'medium',
          halfSample: false,
        },
        numOfWorkers: 1,
        decoder: {
          // readers: ['ean_reader', 'code_128_reader', 'ean_8_reader', 'code_39_reader', 'code_39_vin_reader',
          //   'codabar_reader', 'upc_reader', 'upc_e_reader', 'i2of5_reader'],
          readers: oneDReaders,
        },
        locate: true,
        inputStream: {
          type: 'LiveStream',
          constraints: {
            width: 640,
            height:  480,
            deviceId: backCameraList[backCameraList.length - 1]['deviceId']
          },
          frequency: 10,
          singleChannel: true
        }
      }, (err: any) => {
        if (err) {
          return console.error(err);
        }
        Quagga.start();
      });
    } else {
      Quagga.init({
        locator: {
          patchSize: 'medium',
          halfSample: false,
        },
        numOfWorkers: 1,
        decoder: {
          // readers: ['ean_reader', 'code_128_reader', 'ean_8_reader', 'code_39_reader', 'code_39_vin_reader',
          //   'codabar_reader', 'upc_reader', 'upc_e_reader', 'i2of5_reader'],
          readers: oneDReaders,
        },
        locate: true,
        inputStream: {
          type: 'LiveStream',
          constraints: {
            width: 640,
            height:  480,
            facingMode: 'environment'
          },
          frequency: 10,
          singleChannel: true
        }
      }, (err: any) => {
        // if (err) {
        //   return console.error(err);
        // }
        Quagga.start();
      });
    }

  })
  .catch(function(err) {
    console.log(err.name + ': ' + err.message);
  });

}