Instascan: IOS рд╕рдлрд╛рд░реА 11.4- рдмреИрдХ рдХреИрдорд░рд╛ рдУрдкрдирд┐рдВрдЧ рдЗрд╢реНрдпреВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рд╕рд┐рддре░ 2018  ┬╖  44рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: schmich/instascan

рдирдорд╕реНрддреЗ,
рдореИрдВ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛
рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджреА рдЧрдИ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдмреИрдХ рдХреИрдорд░рд╛ рдирд╣реАрдВ рдЦреЛрд▓ рд░рд╣рд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рдпрд╣ рдлреНрд░рдВрдЯ рдХреИрдорд░рд╛ рдЦреЛрд▓ рд░рд╣рд╛ рд╣реИред
рдПрдВрдбреНрд░реЙрдЗрдб (рдХреНрд░реЛрдо, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕) рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдХреЛрдб рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

 рд╡рд░ рд╕реНрд╡рдпрдВ;
 isQRScannerInitialized = false;
 рдлрд╝рдВрдХреНрд╢рди testQrCode (textBoxId, DivWidth) {
 рд╕реНрд╡рдпрдВ = рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреНрдпреВрдЖрд░рдПрд╕рдХреЗрдирд░ (рдбрд┐рд╡рд╡рд┐рдбреНрде);

 self.scanner.addListener ('рд╕реНрдХреИрди', рдлрд╝рдВрдХреНрд╢рди (рд╕рд╛рдордЧреНрд░реА, рдЫрд╡рд┐) {
 рдЕрдЧрд░ (textBoxId == $("#hiddenTextBox").val()){
 рдСрдбрд┐рдпреЛ.рдкреНрд▓реЗ ();
 рд╡рд░ рдХреЛрдб = рд╕рд╛рдордЧреНрд░реА;
 $ ("#" + рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рдЖрдИрдбреА)ред рд╡реИрд▓ (рдХреЛрдб);
 isQRScannerInitialized = false;

 }

 }, рдЭреВрдард╛);

 }

 рдлрд╝рдВрдХреНрд╢рди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝QRScanner(DivWidth){

 рд╕реНрд╡рдпрдВ = рдпрд╣;

 рдЕрдЧрд░(isQRScannerInitialized == false){

 var tempVideo = document.getElementsByTagName ("рд╡реАрдбрд┐рдпреЛ") [0];
 tempVideo.width=DivWidth;
 рдЕрд╕реНрдерд╛рдпреА рд╡реАрдбрд┐рдпреЛ.рдКрдВрдЪрд╛рдИ = 480;

 self.scanner = рдирдпрд╛ Instascan.Scanner({ video: document.getElementsByTagName("video")[0],mirror:false, scanPeriod: 1});

 Instascan.Camera.getCameras ()ред рддрдм (рдлрд╝рдВрдХреНрд╢рди (рдХреИрдорд░рд╛) {
 рд╕реНрд╡рдпрдВ рдХреИрдорд░рд╛ = рдХреИрдорд░реЗ;
 рдЕрдЧрд░ (рд╕реНрд╡рдпрдВ рдХреИрдорд░реЗ рдХреА рд▓рдВрдмрд╛рдИ> 0) {
 рдЕрдЧрд░(рдХреИрдорд░рд╛[0].рдирд╛рдо.рдореИрдЪ(/рдмреИрдХ/) ||рдХреИрдорд░реЗ[0].рдирд╛рдо.рдореИрдЪ(/рдмреИрдХ/)){
 self.activeCameraId = рдХреИрдорд░рд╛[0].id;
 self.scanner.start (рдХреИрдорд░рд╛ [0]);
 } рдФрд░ рдЕрдЧрд░ (рдХреИрдорд░рд╛[1].рдирд╛рдо.рдореИрдЪ(/рдмреИрдХ/) || рдХреИрдорд░рд╛[1].рдирд╛рдо.рдореИрдЪ(/рдмреИрдХ/)){
 self.activeCameraId = рдХреИрдорд░рд╛ [1].id;
 self.scanner.start (рдХреИрдорд░рд╛ [1]);
 }
 isQRScannerInitialized = true;

 } рдЕрдиреНрдпрдерд╛ {

 рдЪреЗрддрд╛рд╡рдиреА ('рдХреЛрдИ рдХреИрдорд░рд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред');
 isQRScannerInitialized = false;
 рд╡рд╛рдкрд╕реА;
 }
 }).рдХреИрдЪ (рдлрд╝рдВрдХреНрд╢рди (рдИ) { 
 isQRScannerInitialized = false;
 рдЪреЗрддрд╛рд╡рдиреА ("рдХреНрдпреВрдЖрд░ рддреНрд░реБрдЯрд┐ рдирд╛рдо:-"+рдИ.рдирд╛рдо +" рдФрд░ рдХреНрдпреВрдЖрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢:-"+рдИ.рд╕рдВрджреЗрд╢); рдХрдВрд╕реЛрд▓.рддреНрд░реБрдЯрд┐ (рдИ); 
 });

 }
 рд╕реНрд╡рдпрдВ рд╡рд╛рдкрд╕ рдЖрдирд╛;
 }

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди рдЙрддреНрдкрд╛рдж рд╣реИ рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрджреНрднреБрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░реЗ рд╢реЛрдз рд╕реЗ рдЗрд╕ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ:

  • рдХреНрд▓рд╛рд╕ рдХреИрдорд░рд╛ рдЬрдм getCameras рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП MediaDeviceInfo рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ mediaDevices.enumerateDevices () рдкрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпреЗ рдореАрдбрд┐рдпрд╛рд╕реНрдЯреНрд░реАрдо рдСрдмреНрдЬреЗрдХреНрдЯ id _ рдФрд░ _ рдирд╛рдо _ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрдм рдЖрдк _scanner.start(camera)_ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЧреБрдЬрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХреИрдорд░реЗ рдкрд░ _camera.start()_ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред

  • _camera.start()_ рд╡рд┐рдзрд┐ рддрдм _navigator.mediaDevices.getUserMedia(contraints)_ рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ, рдЬреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ MediaStream рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
  • _scanner.start()_ рдХреЙрд▓ _scanner._enableScan(camera)_ рдЗрд╕реЗ рдХреИрдорд░реЗ рдореЗрдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЙрд▓ рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ MediaStream рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
                  **This Part Is the Disconnect and what is messing it all up!**

рдмрд╛рдзрд╛ рдореБрджреНрджрд╛:

рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛рдУрдВ рдореЗрдВ рдЕрдкрдиреА рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ _"рдЕрдирд┐рд╡рд╛рд░реНрдп"_ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рдХреЛрдИ рд╡реАрдбрд┐рдпреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп "рдЕрдирд┐рд╡рд╛рд░реНрдп" рдмрд╛рдзрд╛рдПрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред

рд╡рд┐рднрд┐рдиреНрди рдбрд┐рд╡рд╛рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ!
рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд┐рди рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
https://developer.mozilla.org/en-US/docs/Web/API/Media_Streams_API/Constraints

рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдмрд╛рдзрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдорд░реНрдерд┐рдд рд╣реИ:
https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSupportedConstraints/deviceId

рдЖрдИрдкреИрдб/рдЖрдИрдлреЛрди/рдЖрдИрдУрдПрд╕ рд╕рдорд░реНрдерд┐рдд рдмрд╛рдзрд╛рдПрдВ:

рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд, рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб, _deviceId * _ , рдКрдВрдЪрд╛рдИ, рдЪреМрдбрд╝рд╛рдИ, рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рдФрд░ рдЕрдиреНрдпред

_рдЬрдм рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рддреЛ _deviceId рдХреЛ рдПрдХ рдмрд╛рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рдореЗрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА = "" рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛, рддреЛ рдЖрдИрдлреЛрди рд╣рдореЗрд╢рд╛ рдПрдХ рдЦрд╛рд▓реА рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рддреЛ, рдЖрдИрдлреЛрди рдкрд░ рдмреИрдХ рдХреИрдорд░рд╛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдорд░реНрдерд┐рдд рдмрд╛рдзрд╛рдПрдВ:

рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА, _рдлреЗрд╕рд┐рдВрдЧрдореЛрдб * _, рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд, рдКрдВрдЪрд╛рдИ, рдЪреМрдбрд╝рд╛рдИ, рдФрд░ рдХрдИ рдЕрдиреНрдпред

рдореИрдВрдиреЗ рд╕реИрдорд╕рдВрдЧ рдЯреИрдмрд▓реЗрдЯ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдкрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдлреЗрд╕рд┐рдВрдЧрдореЛрдб "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдлреНрд░рдВрдЯ рдХреИрдорд░рд╛ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрднреА рддрдХ рдЦреЛрдЬрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдлрд┐рд░ рднреА рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ рдФрд░ рд╕рдВрднрд╡рдд: рдЗрд╕ рдХреЛрдб рдХреЛ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛ред

* * рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЬрд╡рд╛рдм * * *
рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЧрд▓реНрдк рдмрд┐рд▓реНрдб рдореЗрдВ рд╡реЗрдмрдЖрд░рдЯреАрд╕реА-рдПрдбреЗрдкреНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг ^1.4.0 рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдХреНрд░реЛрдо рдкрд░ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреЗрддрд╛ рд╣реИред рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдиреЗ рдкрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

  • рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - _index.js_ рдореЗрдВ, рд▓рд╛рдЗрди 2 require('webrtc-adapter'); рд╣рдЯрд╛ рджреЗрдВ, рдлрд┐рд░ рдиреАрдЪреЗ рджреА рдЧрдИ рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред рдЬрдм рдореИрдВрдиреЗ рдХреНрд░реЛрдо рдкрд░ рдЯреИрдмрд▓реЗрдЯ рдФрд░ 4 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рддреЛ рдпрд╣ рд╕рдм рдмреИрдХ рдХреИрдорд░рд╛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред

рдЗрд╕ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдмреИрдХ рдХреИрдорд░рд╛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ deviceId рдПрдХ _video_ рдмрд╛рдзрд╛ рд╣реИ рдЬреИрд╕реЗ

video: {
  devideId: this.id
}

рдХреИрдорд░рд╛ рдмрд╛рдзрд╛ рдХреЛрдб:

рдпрд╣рд╛рдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХреЛрдб рд╣реИ рдЬреЛ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ MediaStream рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
рдпрд╣ рдХреЛрдб рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ _video рдмрд╛рдзрд╛_ рдХрд╛ рд╕реНрд░реЛрдд рдЖрдИрдбреА _Android_ рдпрд╛ _Iphone_ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рднреА рдЕрдирд┐рд╡рд╛рд░реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрджрд┐ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

async start() {
    let constraints;
    var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;

    if (iOS) {
      constraints = {
        audio: false,
        video: {
          facingMode: 'environment',
          mandatory: {
            sourceId: this.id,
            minWidth: 600,
            maxWidth: 800,
            minAspectRatio: 1.6
          },
          optional: []
        }
      };
    } else {
      constraints = {
        audio: false,
        video: {
          mandatory: {
            sourceId: this.id,
            minWidth: 600,
            maxWidth: 800,
            minAspectRatio: 1.6
          },
          optional: []
        }
      };
    }

    this._stream = await Camera._wrapErrors(async () => {
      return await navigator.mediaDevices.getUserMedia(constraints);
});

рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЫреЛрдЯрд╛ рдХрд░реЗрдВ:

рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ VSCode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
1) Node.js рдФрд░ vsCode рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
2) рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЖрдк рдЗрд╕реЗ рд░рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
git clone https://github.com/JoseCDB/instascan.git

3) рдЯрд░реНрдорд┐рдирд▓ рд╕реАрдбреА рдкрд░ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ:
cd instascan

4) рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрджрд▓реЗрдВ рдФрд░ рдХреЛрдб рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓реНрдк рдЪрд▓рд╛рдПрдВ:
gulp release

5) рдпрд╣ рдЖрдкрдХреЛ _dist_ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЫреЛрдЯрд╛ instascan.min.js рдЖрдЗрдЯрдо рджреЗрдЧрд╛ред

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдЗрд╕ Android рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕ рднрдпрд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдп рдХреА рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рд╕рднреА 44 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрдкреНрдкрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдореЛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдИрдУрдПрд╕ рд╕рдлрд╛рд░реА рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрдврд╝рд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдореЗрдЯрд╛ рдЯреИрдЧ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдмрд╕ рдЗрд╕ рдордВрдЪ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреБрджрд╛рдИ рдХрд░реЗрдВ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗред рдореИрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред рдЬреЛ рдЪреАрдЬ рдореБрдЭреЗ рдкреАрдЫреЗ рдЦреАрдВрдЪ рд░рд╣реА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХреЛрдИ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдПрдХ iPhone рдкрд░ рдбреЗрдореЛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рд╣рд╛рдБ, рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдФрд░ рдзрд╛рдЧреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдирд╡реАрдирддрдо рд╡реЗрдм рдЖрд░рдЯреАрд╕реА рдПрдбреЗрдкреНрдЯрд░ рдЬреЛрдбрд╝рдХрд░ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдЯреИрдЧ рдореЗрдВ _playsinline_ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдХрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордиреЗ рд╡рд╛рд▓рд╛ рдХреИрдорд░рд╛ рдорд┐рд▓рд╛ред рдпрд╣ рдХреИрдорд░реЛрдВ рдХреЛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдмреИрдХ рдХреИрдорд░рд╛ рдкрд░ рд╕реНрд╡реИрдк рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╡реАрдбрд┐рдпреЛ рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реА рдереА рдФрд░ рдореЗрдЯрд╛ рдЯреИрдЧ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред

рдореИрдВрдиреЗ рд╡реАрдбрд┐рдпреЛ рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ playinline рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реА рдереА рдФрд░ рдореЗрдЯрд╛ рдЯреИрдЧ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред

рдХрд┐рд╕реА рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдерд╛ред рдореИрдВ рдЕрднреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдХрд╛рдо рдкрд░ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдлреЛрди рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрд░реЗ, рдореБрдЭреЗ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреИрдорд░реЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣рдореЗрд╢рд╛ рдмреИрдХ рд░рд┐рдпрд░ рдХреИрдорд░рд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдлреНрд░рдВрдЯ рдХреИрдорд░рд╛ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЦрд░рд╛рдм рд╣реИрдВ (рд▓реЗрдХрд┐рди рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдХреМрди рд╕рд╛рдордиреЗ рд╡рд╛рд▓реЗ рдХреИрдорд░реЗ рд╕реЗ рд╕реНрдХреИрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ)ред

рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛!

рдореИрдВрдиреЗ рдореЗрдЯрд╛ рдЯреИрдЧ рдЬреЛрдбрд╝рд╛ред
<meta name="apple-mobile-web-app-capable" content="yes">

рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛:
<video id="scanner" class="video-back" playsinline></video>

рдЗрд╕ рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬреЛрдбрд╝рд╛:
<script type="text/javascript" src="https://webrtc.github.io/adapter/adapter-latest.js"></script>

рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд░рд┐рд▓реАрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХ рдХрд┐рдпрд╛: https://github.com/JoseCDB/instascan/tree/ios-rear-cameraред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдиреЛрдб.рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдЧрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╕рд╛рди рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ 15 рдорд┐рдирдЯ рдореЗрдВ рдХрдорд╛рдпрд╛! рдореИрдВ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХреЗ рдЗрд╕ рд╡реНрдпрдХреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╡рд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЙрдореНрдореАрдж рд╣реИ рдпреЗ рдорджрдж рдХрд░реЗрдЧрд╛ред рдЖрдкрдХреЛ рдХрд╛рдордпрд╛рдмреА рдорд┐рд▓реЗред

рдореИрдВрдиреЗ рдореЗрдЯрд╛ рдЯреИрдЧ, рд╡реАрдбрд┐рдпреЛ рдЯреИрдЧ рдФрд░ рдПрдбреЗрдкреНрдЯрд░-latest.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред
рдФрд░ рдореИрдВ instscan.min.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ ".js - scan.js - camara.js" рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдореЗрдЯрд╛ рдЯреИрдЧ, рд╡реАрдбрд┐рдпреЛ рдЯреИрдЧ рдФрд░ рдПрдбреЗрдкреНрдЯрд░-latest.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред
рдФрд░ рдореИрдВ instscan.min.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ ".js - scan.js - camara.js" рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдкрдХреЛ node.js рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдПрдХ рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рд╣реИ рдЬреЛ рдЙрди рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдкреИрдХреЗрдЬ рдХрд░рддрд╛ рд╣реИ, рдЕрдВрддрд┐рдо рдЖрдЙрдЯрдкреБрдЯ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрдирд░ рдХреА рдорд┐рдирд┐рдлрд╛рдЗрдб рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓ рд╣реЛрдЧреАред

рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди рдЙрддреНрдкрд╛рдж рд╣реИ рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрджреНрднреБрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░реЗ рд╢реЛрдз рд╕реЗ рдЗрд╕ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ:

  • рдХреНрд▓рд╛рд╕ рдХреИрдорд░рд╛ рдЬрдм getCameras рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП MediaDeviceInfo рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ mediaDevices.enumerateDevices () рдкрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпреЗ рдореАрдбрд┐рдпрд╛рд╕реНрдЯреНрд░реАрдо рдСрдмреНрдЬреЗрдХреНрдЯ id _ рдФрд░ _ рдирд╛рдо _ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрдм рдЖрдк _scanner.start(camera)_ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЧреБрдЬрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХреИрдорд░реЗ рдкрд░ _camera.start()_ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред

  • _camera.start()_ рд╡рд┐рдзрд┐ рддрдм _navigator.mediaDevices.getUserMedia(contraints)_ рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ, рдЬреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ MediaStream рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
  • _scanner.start()_ рдХреЙрд▓ _scanner._enableScan(camera)_ рдЗрд╕реЗ рдХреИрдорд░реЗ рдореЗрдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЙрд▓ рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ MediaStream рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
                  **This Part Is the Disconnect and what is messing it all up!**

рдмрд╛рдзрд╛ рдореБрджреНрджрд╛:

рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛рдУрдВ рдореЗрдВ рдЕрдкрдиреА рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ _"рдЕрдирд┐рд╡рд╛рд░реНрдп"_ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рдХреЛрдИ рд╡реАрдбрд┐рдпреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп "рдЕрдирд┐рд╡рд╛рд░реНрдп" рдмрд╛рдзрд╛рдПрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред

рд╡рд┐рднрд┐рдиреНрди рдбрд┐рд╡рд╛рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ!
рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд┐рди рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
https://developer.mozilla.org/en-US/docs/Web/API/Media_Streams_API/Constraints

рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдмрд╛рдзрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдорд░реНрдерд┐рдд рд╣реИ:
https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSupportedConstraints/deviceId

рдЖрдИрдкреИрдб/рдЖрдИрдлреЛрди/рдЖрдИрдУрдПрд╕ рд╕рдорд░реНрдерд┐рдд рдмрд╛рдзрд╛рдПрдВ:

рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд, рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб, _deviceId * _ , рдКрдВрдЪрд╛рдИ, рдЪреМрдбрд╝рд╛рдИ, рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рдФрд░ рдЕрдиреНрдпред

_рдЬрдм рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рддреЛ _deviceId рдХреЛ рдПрдХ рдмрд╛рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рдореЗрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА = "" рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛, рддреЛ рдЖрдИрдлреЛрди рд╣рдореЗрд╢рд╛ рдПрдХ рдЦрд╛рд▓реА рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рддреЛ, рдЖрдИрдлреЛрди рдкрд░ рдмреИрдХ рдХреИрдорд░рд╛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдорд░реНрдерд┐рдд рдмрд╛рдзрд╛рдПрдВ:

рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА, _рдлреЗрд╕рд┐рдВрдЧрдореЛрдб * _, рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд, рдКрдВрдЪрд╛рдИ, рдЪреМрдбрд╝рд╛рдИ, рдФрд░ рдХрдИ рдЕрдиреНрдпред

рдореИрдВрдиреЗ рд╕реИрдорд╕рдВрдЧ рдЯреИрдмрд▓реЗрдЯ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдкрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдлреЗрд╕рд┐рдВрдЧрдореЛрдб "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдлреНрд░рдВрдЯ рдХреИрдорд░рд╛ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрднреА рддрдХ рдЦреЛрдЬрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдлрд┐рд░ рднреА рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ рдФрд░ рд╕рдВрднрд╡рдд: рдЗрд╕ рдХреЛрдб рдХреЛ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛ред

* * рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЬрд╡рд╛рдм * * *
рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЧрд▓реНрдк рдмрд┐рд▓реНрдб рдореЗрдВ рд╡реЗрдмрдЖрд░рдЯреАрд╕реА-рдПрдбреЗрдкреНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг ^1.4.0 рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдХреНрд░реЛрдо рдкрд░ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреЗрддрд╛ рд╣реИред рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдиреЗ рдкрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

  • рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - _index.js_ рдореЗрдВ, рд▓рд╛рдЗрди 2 require('webrtc-adapter'); рд╣рдЯрд╛ рджреЗрдВ, рдлрд┐рд░ рдиреАрдЪреЗ рджреА рдЧрдИ рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред рдЬрдм рдореИрдВрдиреЗ рдХреНрд░реЛрдо рдкрд░ рдЯреИрдмрд▓реЗрдЯ рдФрд░ 4 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рддреЛ рдпрд╣ рд╕рдм рдмреИрдХ рдХреИрдорд░рд╛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред

рдЗрд╕ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдмреИрдХ рдХреИрдорд░рд╛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ deviceId рдПрдХ _video_ рдмрд╛рдзрд╛ рд╣реИ рдЬреИрд╕реЗ

video: {
  devideId: this.id
}

рдХреИрдорд░рд╛ рдмрд╛рдзрд╛ рдХреЛрдб:

рдпрд╣рд╛рдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХреЛрдб рд╣реИ рдЬреЛ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ MediaStream рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
рдпрд╣ рдХреЛрдб рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ _video рдмрд╛рдзрд╛_ рдХрд╛ рд╕реНрд░реЛрдд рдЖрдИрдбреА _Android_ рдпрд╛ _Iphone_ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рднреА рдЕрдирд┐рд╡рд╛рд░реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрджрд┐ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

async start() {
    let constraints;
    var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;

    if (iOS) {
      constraints = {
        audio: false,
        video: {
          facingMode: 'environment',
          mandatory: {
            sourceId: this.id,
            minWidth: 600,
            maxWidth: 800,
            minAspectRatio: 1.6
          },
          optional: []
        }
      };
    } else {
      constraints = {
        audio: false,
        video: {
          mandatory: {
            sourceId: this.id,
            minWidth: 600,
            maxWidth: 800,
            minAspectRatio: 1.6
          },
          optional: []
        }
      };
    }

    this._stream = await Camera._wrapErrors(async () => {
      return await navigator.mediaDevices.getUserMedia(constraints);
});

рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЫреЛрдЯрд╛ рдХрд░реЗрдВ:

рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ VSCode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
1) Node.js рдФрд░ vsCode рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
2) рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЖрдк рдЗрд╕реЗ рд░рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
git clone https://github.com/JoseCDB/instascan.git

3) рдЯрд░реНрдорд┐рдирд▓ рд╕реАрдбреА рдкрд░ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ:
cd instascan

4) рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрджрд▓реЗрдВ рдФрд░ рдХреЛрдб рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓реНрдк рдЪрд▓рд╛рдПрдВ:
gulp release

5) рдпрд╣ рдЖрдкрдХреЛ _dist_ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЫреЛрдЯрд╛ instascan.min.js рдЖрдЗрдЯрдо рджреЗрдЧрд╛ред

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдЗрд╕ Android рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕ рднрдпрд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдп рдХреА рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рд╣рд╛рдп, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, https://github.com/webrtc/adapter рд╕реЗ рдПрдбреЗрдкреНрдЯрд░.рдЬреЗрдПрд╕ рдЬреЛрдбрд╝реЗрдВ ред

рдЙрд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдХреНрд▓реЛрди рдХрд░реЗрдВ:
git clone https://github.com/quocthai95/instascan.git
Daud:
npm i
рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рдЕрдВрддрд┐рдо рдХреЛрдб рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓реНрдк рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ:
gulp release

рдореИрдВрдиреЗ рдЖрдИрдлреЛрди 6 рдкреНрд▓рд╕ (рдЖрдИрдУрдПрд╕ 11.4) рдФрд░ рдЖрдИрдлреЛрди 8 рдкреНрд▓рд╕ (рдЖрдИрдУрдПрд╕ 11.3) рдкрд░ рдЬрд╛рдВрдЪ рдХреА рд╣реИ рдФрд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреИрдорд░реЗ рд╕реНрд╡реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рдп, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, https://github.com/webrtc/adapter рд╕реЗ рдПрдбреЗрдкреНрдЯрд░.рдЬреЗрдПрд╕ рдЬреЛрдбрд╝реЗрдВ ред

рдЙрд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдХреНрд▓реЛрди рдХрд░реЗрдВ:
git clone https://github.com/quocthai95/instascan.git
Daud:
npm i
рдЖрд╡рд╢реНрдпрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рдЕрдВрддрд┐рдо рдХреЛрдб рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓реНрдк рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ:
gulp release

рдореИрдВрдиреЗ рдЖрдИрдлреЛрди 6 рдкреНрд▓рд╕ (рдЖрдИрдУрдПрд╕ 11.4) рдФрд░ рдЖрдИрдлреЛрди 8 рдкреНрд▓рд╕ (рдЖрдИрдУрдПрд╕ 11.3) рдкрд░ рдЬрд╛рдВрдЪ рдХреА рд╣реИ рдФрд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреИрдорд░реЗ рд╕реНрд╡реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ "12 рдХрдордЬреЛрд░рд┐рдпрд╛рдВ (1 рдХрдо, 5 рдордзреНрдпрдо, 6 рдЙрдЪреНрдЪ)" рдорд┐рд▓рддреА рд╣реИрдВред
рдХреБрдЫ "$ npm install --save-dev [package-name]" рдХрдорд╛рдВрдб рдЗрди рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдкрд╡рд╛рдж рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛:

$ рдШреВрдВрдЯ рд░рд┐рд▓реАрдЬ assert.js:351 рдереНрд░реЛ рдПрд░рд░; ^ рдЕрднрд┐рдХрдерди рддреНрд░реБрдЯрд┐ [ERR_ASSERTION]: рдЯрд╛рд╕реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ Gulp.set [as _setTask] рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (C:\Users\John\Downloads\instascan-ios-rear-camera\instascan-ios-rear-camera\node_modules\undertaker\lib \set-task.js:10:3)

рдореИрдВ рдпрд╣рд╛рдБ рд╕реЗ рдХреИрд╕реЗ рдЖрдЧреЗ рдмрдврд╝реВрдБ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд┐рд▓реНрдб рдХреЛ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣реВрдБрдЧрд╛ред рдпрд╣ рдореЗрд░реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдХреЗ рд╕рд╛рде рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

/рдЬреЙрди

рд╣рд╛рдп @johnatitide ,
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЧрд▓реНрдк рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг (4.0.0) рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕реЗ 3.9.1 рддрдХ рд╕реАрдорд┐рдд рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдПрдлрд╡рд╛рдИрдЖрдИ:
https://github.com/ampproject/docs/issues/793#issuecomment -354836162
рдпрд╛ рдЖрдк рдпрд╣ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдЖрджреЗрд╢ рджрд┐рдП рд╣реИрдВред

рдирдорд╕реНрддреЗ @ quocthai95

рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ:
рдЧрд┐рдЯ рдХреНрд▓реЛрди https://github.com/quocthai95/instascan.git
npm [email protected] . рд╕реНрдерд╛рдкрд┐рдд
рдПрдирдкреАрдПрдо рдореИрдВ
рдШреВрдВрдЯ рд░рд┐рд▓реАрдЬ

рдореИрдВ рдЕрдм iPad рдФрд░ iPhone рдкрд░ Safari рдореЗрдВ рдХреИрдорд░рд╛ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБред рдЕрдЪреНрдЫрд╛ред

рдХрд┐рд╕реА рднреА рдореМрдХреЗ рдкрд░ рдмрд╛рдзрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ schmich рдХреЗ рд░реЗрдкреЛ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдХрд┐рд╕реА рднреА рдореМрдХреЗ рдкрд░ рдмрд╛рдзрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ schmich рдХреЗ рд░реЗрдкреЛ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдореИрдВрдиреЗ рдирдпрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдпрд╛ рд╣реИред ^^ . рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ

@ quocthai95 рд╣рд╛рдп, ive рдиреЗ https://github.com/schmich/instascan/issues/182#issuecomment -447198290 рд╕реЗ рдЖрдкрдХреЗ рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ред

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдореБрдЭреЗ рдЕрдкрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреНрд░реЛрдо рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдлреНрд░рдВрдЯ рдХреИрдорд░рд╛ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореИрдВ рдХреИрдорд░реЗ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ? рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рд╣реИ?

@fariskas ,
рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП regexp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ/рдмреИрдХ/рдлрд┐рд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмреИрдХ рдХреИрдорд░рд╛ рд╣реЛред

`Instascan.Camera.getCameras ()ред рддрдм (рдлрд╝рдВрдХреНрд╢рди (рдХреИрдорд░рд╛) {
рдЕрдЧрд░ (рдХреИрдорд░рд╛ [0]ред рдирд╛рдоред рдореИрдЪ (/ рдкреАрдЫреЗ / i)) {
рд╕реНрдХреИрдирд░.рд╕реНрдЯрд╛рд░реНрдЯ (рдХреИрдорд░рд╛ [0]);
} рдФрд░ рдЕрдЧрд░ (рдХреИрдорд░рд╛ [1]ред рдирд╛рдоред рдореИрдЪ (/ рдкреАрдЫреЗ / i)) {
рд╕реНрдХреИрдирд░.рд╕реНрдЯрд╛рд░реНрдЯ (рдХреИрдорд░рд╛ [1]);
}
}

рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдореИрдВ cameras[i].name рдореЗрдВ "рдмреИрдХ" рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░-рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрд╕рдлрд▓ рд░рд╣рд╛ рдФрд░ iPad рдкрд░ рдмреИрдХ рдХреИрдорд░рд╛ рдЪреБрдирдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд░рд╣рд╛ рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ cameras[i].name рд╕реЗ console.log рддрдХ рдирд╣реАрдВ рд▓рд┐рдЦрд╛
рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк iOS рдореЗрдВ рдмреИрдХ рдХреИрдорд░рд╛ рдЪреБрдирдиреЗ рдореЗрдВ рдЕрд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ "рдмреИрдХ" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдпрд╛ рдмреИрдХ рдХреИрдорд░рд╛ рдХрд╛ рдирд╛рдо рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП cameras[i].name рд╕реЗ console.log рд▓рд┐рдЦреЗрдВред

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрдореЛ рдХреЗрд╡рд▓ рд╕рд╛рдордиреЗ рд╡рд╛рд▓реЗ рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ iOS 12.2 . рдкрд░ Safari рдХреЗ рд╕рд╛рде рд╣реИ

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЖрдИрдУрдПрд╕ 12+ рдкрд░ рд╕рдлрд╛рд░реА рдХреЗ рд╕рд╛рде рдмреИрдХ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ?

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЖрдИрдУрдПрд╕ 12+ рдкрд░ рд╕рдлрд╛рд░реА рдХреЗ рд╕рд╛рде рдмреИрдХ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ?

рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ 7 рдорд╣реАрдиреЛрдВ рд╕реЗ 30+ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдкрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдк рдЬрд┐рд╕ рдУрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рд╕реЗ рдХреЛрдИ рднреА рдХреИрдорд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдКрдкрд░ рдЫреЛрдбрд╝реА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ webrtc рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреА рд░рд╣рддреА рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкреВрд░рд╛ рдореБрджреНрджрд╛ рдкрд╛рдпрд╛ред

рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ webrtc рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓ рдХрд┐рдпрд╛ред es5 рдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде webrtc рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ webrtc рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЛрдбрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдиреЗ рд╕рд╣реА рдХреИрдорд░рд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреАред

рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд╢реНрдЪрд┐рдд рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдирд┐рдпрдорд┐рдд рдФрд░ рдЫреЛрдЯреА рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╛рддреНрд░реЛрдВ рдФрд░ рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдлреЛрди рдкрд░ QrCodes рдХреЗ рд╕рд╛рде рд╕реНрдХреВрд▓ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдЗрд╕ рд╕рдордп рд▓рдЧрднрдЧ 30+ рдореЙрдбрд▓ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдХреИрдорд░реЗ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпреЗ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред

рдмреИрдХ рдХреИрдорд░рд╛ рдХреЛрдб
```
рд╕реНрдХреИрдирд░ = рдирдпрд╛ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрдиред рд╕реНрдХреИрдирд░ ({рд╡реАрдбрд┐рдпреЛ: рд╡реАрдбрд┐рдпреЛ, рд╕реНрдХреИрди рдЕрд╡рдзрд┐: 4, рджрд░реНрдкрдг: рдЭреВрдард╛})
рддрдм (рд╣реИрдВрдбрд▓ рд╕рдХреНрд╕реЗрд╕)
рдХреИрдЪ (рд╣реИрдВрдбрд▓ рдПрд░рд░);
// рд╕реНрдХреИрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ
рд╕реНрдХреИрдирд░ред рдПрдб рд▓рд┐рд╕реНрдЯрдирд░ ('рд╕реНрдХреИрди', рдлрд╛рдЙрдВрдбрдХреЛрдб);

            Instascan.Camera.getCameras().then(function (cameras) {
                if (cameras.length > 0) {
                    scanner.start(cameras[0]);
                }
                else {
           ...        
                }
            }).catch (function (e) {
             ...  
            });

```
instascan.min.zip

https://github.com/schmich/instascan/issues/182#issuecomment -443388022

рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░реАрди рдЙрддреНрдкрд╛рдж рд╣реИ рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрджреНрднреБрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░реЗ рд╢реЛрдз рд╕реЗ рдЗрд╕ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ:

  • рдХреНрд▓рд╛рд╕ рдХреИрдорд░рд╛ рдЬрдм getCameras рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП MediaDeviceInfo рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ mediaDevices.enumerateDevices () рдкрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпреЗ рдореАрдбрд┐рдпрд╛рд╕реНрдЯреНрд░реАрдо рдСрдмреНрдЬреЗрдХреНрдЯ id _ рдФрд░ _ рдирд╛рдо _ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрдм рдЖрдк _scanner.start(camera)_ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЧреБрдЬрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдХреИрдорд░реЗ рдкрд░ _camera.start()_ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред

  • _camera.start()_ рд╡рд┐рдзрд┐ рддрдм _navigator.mediaDevices.getUserMedia(contraints)_ рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ, рдЬреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ MediaStream рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
  • _scanner.start()_ рдХреЙрд▓ _scanner._enableScan(camera)_ рдЗрд╕реЗ рдХреИрдорд░реЗ рдореЗрдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЙрд▓ рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ MediaStream рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдореАрдбрд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ src рдПрд▓рд┐рдореЗрдВрдЯ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
    **This Part Is the Disconnect and what is messing it all up!**

рдмрд╛рдзрд╛ рдореБрджреНрджрд╛:

рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреИрдорд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛рдУрдВ рдореЗрдВ рдЕрдкрдиреА рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ _"рдЕрдирд┐рд╡рд╛рд░реНрдп"_ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рдХреЛрдИ рд╡реАрдбрд┐рдпреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп "рдЕрдирд┐рд╡рд╛рд░реНрдп" рдмрд╛рдзрд╛рдПрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред

рд╡рд┐рднрд┐рдиреНрди рдбрд┐рд╡рд╛рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ!
рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд┐рди рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
https://developer.mozilla.org/en-US/docs/Web/API/Media_Streams_API/Constraints

рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рдПрдВ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдмрд╛рдзрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдорд░реНрдерд┐рдд рд╣реИ:
https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSupportedConstraints/deviceId

рдЖрдИрдкреИрдб/рдЖрдИрдлреЛрди/рдЖрдИрдУрдПрд╕ рд╕рдорд░реНрдерд┐рдд рдмрд╛рдзрд╛рдПрдВ:

рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд, рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб, _deviceId * _ , рдКрдВрдЪрд╛рдИ, рдЪреМрдбрд╝рд╛рдИ, рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рдФрд░ рдЕрдиреНрдпред

_рдЬрдм рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рддреЛ _deviceId рдХреЛ рдПрдХ рдмрд╛рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рдореЗрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА = "" рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛, рддреЛ рдЖрдИрдлреЛрди рд╣рдореЗрд╢рд╛ рдПрдХ рдЦрд╛рд▓реА рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рддреЛ, рдЖрдИрдлреЛрди рдкрд░ рдмреИрдХ рдХреИрдорд░рд╛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдорд░реНрдерд┐рдд рдмрд╛рдзрд╛рдПрдВ:

рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА, _рдлреЗрд╕рд┐рдВрдЧрдореЛрдб * _, рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд, рдКрдВрдЪрд╛рдИ, рдЪреМрдбрд╝рд╛рдИ, рдФрд░ рдХрдИ рдЕрдиреНрдпред

рдореИрдВрдиреЗ рд╕реИрдорд╕рдВрдЧ рдЯреИрдмрд▓реЗрдЯ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдкрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдлреЗрд╕рд┐рдВрдЧрдореЛрдб "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдлреНрд░рдВрдЯ рдХреИрдорд░рд╛ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрднреА рддрдХ рдЦреЛрдЬрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдлрд┐рд░ рднреА рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ рдФрд░ рд╕рдВрднрд╡рдд: рдЗрд╕ рдХреЛрдб рдХреЛ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛ред

*_ * рдПрдВрдбреНрд░реЙрдЗрдб рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЙрддреНрддрд░ * _**
рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЧрд▓реНрдк рдмрд┐рд▓реНрдб рдореЗрдВ рд╡реЗрдмрдЖрд░рдЯреАрд╕реА-рдПрдбреЗрдкреНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг ^1.4.0 рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдХреНрд░реЛрдо рдкрд░ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреЗрддрд╛ рд╣реИред рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдиреЗ рдкрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлреЗрд╕рд┐рдВрдЧ рдореЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

  • рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - _index.js_ рдореЗрдВ, рд▓рд╛рдЗрди 2 require('webrtc-adapter'); рд╣рдЯрд╛ рджреЗрдВ, рдлрд┐рд░ рдиреАрдЪреЗ рджреА рдЧрдИ рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред рдЬрдм рдореИрдВрдиреЗ рдХреНрд░реЛрдо рдкрд░ рдЯреИрдмрд▓реЗрдЯ рдФрд░ 4 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рддреЛ рдпрд╣ рд╕рдм рдмреИрдХ рдХреИрдорд░рд╛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред

рдЗрд╕ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдмреИрдХ рдХреИрдорд░рд╛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ deviceId рдПрдХ _video_ рдмрд╛рдзрд╛ рд╣реИ рдЬреИрд╕реЗ

video: {
  devideId: this.id
}

рдХреИрдорд░рд╛ рдмрд╛рдзрд╛ рдХреЛрдб:

рдпрд╣рд╛рдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХреЛрдб рд╣реИ рдЬреЛ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ MediaStream рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
рдпрд╣ рдХреЛрдб рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ _video рдмрд╛рдзрд╛_ рдХрд╛ рд╕реНрд░реЛрдд рдЖрдИрдбреА _Android_ рдпрд╛ _Iphone_ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдИрдбреА рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рднреА рдЕрдирд┐рд╡рд╛рд░реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрджрд┐ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

async start() {
    let constraints;
    var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;

    if (iOS) {
      constraints = {
        audio: false,
        video: {
          facingMode: 'environment',
          mandatory: {
            sourceId: this.id,
            minWidth: 600,
            maxWidth: 800,
            minAspectRatio: 1.6
          },
          optional: []
        }
      };
    } else {
      constraints = {
        audio: false,
        video: {
          mandatory: {
            sourceId: this.id,
            minWidth: 600,
            maxWidth: 800,
            minAspectRatio: 1.6
          },
          optional: []
        }
      };
    }

    this._stream = await Camera._wrapErrors(async () => {
      return await navigator.mediaDevices.getUserMedia(constraints);
});

рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЫреЛрдЯрд╛ рдХрд░реЗрдВ:

рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ VSCode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

  1. Node.js рдФрд░ vsCode рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
  2. рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЖрдк рдЗрд╕реЗ рд░рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
    git clone https://github.com/JoseCDB/instascan.git
  3. рдЯрд░реНрдорд┐рдирд▓ рд╕реАрдбреА рдкрд░ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ:
    cd instascan
  4. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрджрд▓реЗрдВ рдФрд░ рдХреЛрдб рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓реНрдк рдЪрд▓рд╛рдПрдВ:
    gulp release
  5. рдпрд╣ рдЖрдкрдХреЛ _dist_ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЫреЛрдЯрд╛ instascan.min.js рдЖрдЗрдЯрдо рджреЗрдЧрд╛ред

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдЗрд╕ Android рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕ рднрдпрд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдп рдХреА рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдлрд╝рд╛рдЗрд▓ рдХреИрдорд░рд╛.рдЬреЗрдПрд╕ (рдкрдВрдХреНрддрд┐ 29 рдкрд░) рдХреЛ рдиреАрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛
facingMode: { exact: "environment" },
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж @apchandler

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ! рдзрдиреНрдпрд╡рд╛рдж @glorynguyen рдЗрд╕ рдлрд┐рдХреНрд╕ рдХреЛ рднреА рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП!

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпреЗ рд╕рдорд╛рдзрд╛рди iOS 13 рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдмрд╕ рдЦрд╛рд▓реА рд╣реИ (рдХрд╛рд▓рд╛ рднреА рдирд╣реАрдВ)ред
рдЬрдм рд░рд┐рдореЛрдЯ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдлрд╛рд░реА, рдХрдВрд╕реЛрд▓ рдореЗрдВ рднреА рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рдЬрд╛рддреА рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЖрдИрдУрдПрд╕ 12+ рдкрд░ рд╕рдлрд╛рд░реА рдХреЗ рд╕рд╛рде рдмреИрдХ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ?

рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ 7 рдорд╣реАрдиреЛрдВ рд╕реЗ 30+ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдкрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдк рдЬрд┐рд╕ рдУрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рд╕реЗ рдХреЛрдИ рднреА рдХреИрдорд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдКрдкрд░ рдЫреЛрдбрд╝реА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ webrtc рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреА рд░рд╣рддреА рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкреВрд░рд╛ рдореБрджреНрджрд╛ рдкрд╛рдпрд╛ред

рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ webrtc рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓ рдХрд┐рдпрд╛ред es5 рдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде webrtc рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ webrtc рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЛрдбрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдиреЗ рд╕рд╣реА рдХреИрдорд░рд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреАред

рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд╢реНрдЪрд┐рдд рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдирд┐рдпрдорд┐рдд рдФрд░ рдЫреЛрдЯреА рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╛рддреНрд░реЛрдВ рдФрд░ рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдлреЛрди рдкрд░ QrCodes рдХреЗ рд╕рд╛рде рд╕реНрдХреВрд▓ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдЗрд╕ рд╕рдордп рд▓рдЧрднрдЧ 30+ рдореЙрдбрд▓ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдХреИрдорд░реЗ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпреЗ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред

рдмреИрдХ рдХреИрдорд░рд╛ рдХреЛрдб

scanner = new Instascan.Scanner({ video: video, scanPeriod: 4, mirror:false })
                .then(handleSuccess)
                .catch(handleError);
             //Start scanning
             scanner.addListener('scan', foundCode);

             Instascan.Camera.getCameras().then(function (cameras) {
                 if (cameras.length > 0) {
                     scanner.start(cameras[0]);
                 }
                 else {
            ...        
                 }
             }).catch (function (e) {
              ...  
             });

instascan.min.zip

#182 (рдЯрд┐рдкреНрдкрдгреА)

рдпрд╣ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ, рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо рдлрд┐рдХреНрд╕ рдХреНрдпрд╛ рд╣реИ? рдореИрдВрдиреЗ рдзрд╛рдЧреЗ рд╕реЗ рдХреБрдЫ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЗрд╡рд▓ рдлреНрд░рдВрдЯ рдХреИрдорд░рд╛ рд╣реА рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЧреБрд▓рдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ .js .git рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ, рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕реА #/рдПрдПрд╕рдкреАрдиреЗрдЯ рдПрдорд╡реАрд╕реА рдореЗрдВ рдХреЛрдб рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдирдпрд╛ рд╣реИред
рдПрдкрдЪреИрдВрдбрд▓рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдореБрдЭреЗ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджреЗрддрд╛ рд╣реИред (рд╡реАрдбрд┐рдпреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ)
рд╡рд░реНрддрдорд╛рди рдореЗрдВ Android рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ IOS рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ "рдирд┐рд╢реНрдЪрд┐рдд" instascan.min.js рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдкрд░ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддрд╛ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо рдлрд┐рдХреНрд╕ рдХреНрдпрд╛ рд╣реИ? рдореИрдВрдиреЗ рдзрд╛рдЧреЗ рд╕реЗ рдХреБрдЫ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЗрд╡рд▓ рдлреНрд░рдВрдЯ рдХреИрдорд░рд╛ рд╣реА рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЧреБрд▓рдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ .js .git рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ, рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕реА #/рдПрдПрд╕рдкреАрдиреЗрдЯ рдПрдорд╡реАрд╕реА рдореЗрдВ рдХреЛрдб рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдирдпрд╛ рд╣реИред
рдПрдкрдЪреИрдВрдбрд▓рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдореБрдЭреЗ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджреЗрддрд╛ рд╣реИред (рд╡реАрдбрд┐рдпреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ)
рд╡рд░реНрддрдорд╛рди рдореЗрдВ Android рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ IOS рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ "рдирд┐рд╢реНрдЪрд┐рдд" instascan.min.js рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдкрд░ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддрд╛ред

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ html рд╡реАрдбрд┐рдпреЛ рддрддреНрд╡ рдореМрдЬреВрдж рд╣реИ?
```

When you run instascan you need to speficy a video element like:

рд╡рд░ рд╕реНрд╡рдпрдВ = рдпрд╣;
self.scanner = рдирдпрд╛ Instascan.Scanner ({рд╡реАрдбрд┐рдпреЛ: document.getElementById ('рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди'), рд╕реНрдХреИрдирдкреАрд░рд┐рдпрдб: 5});
self.scanner.addListener ('рд╕реНрдХреИрди', рдлрд╝рдВрдХреНрд╢рди (рд╕рд╛рдордЧреНрд░реА, рдЫрд╡рд┐) {
self.scans.unshift ({рддрд┐рдерд┐: +(Date.now ()), рд╕рд╛рдордЧреНрд░реА: рд╕рд╛рдордЧреНрд░реА});
});
Instascan.Camera.getCameras ()ред рддрдм (рдлрд╝рдВрдХреНрд╢рди (рдХреИрдорд░рд╛) {
рд╕реНрд╡рдпрдВ рдХреИрдорд░рд╛ = рдХреИрдорд░реЗ;
рдЕрдЧрд░ (рдХреИрдорд░рд╛ред рд▓рдВрдмрд╛рдИ> 0) {
self.activeCameraId = рдХреИрдорд░рд╛[0].id;
self.scanner.start (рдХреИрдорд░рд╛ [0]);
} рдЕрдиреНрдпрдерд╛ {
рдХрдВрд╕реЛрд▓.рдПрд░рд░ ('рдХреЛрдИ рдХреИрдорд░рд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред');
}
}).рдХреИрдЪ (рдлрд╝рдВрдХреНрд╢рди (рдИ) {
рдХрдВрд╕реЛрд▓.рддреНрд░реБрдЯрд┐ (рдИ);
});
```

рд╣рд╛рдБ, рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ:

<video class="player" style="max-width:100%" id="preview" playsinline></video>

<script>
.....
  Instascan.Camera.getCameras().then(function (cameras) {
        if (cameras.length > 0) {
          scanner.start(cameras[0]);
        } else {
          console.error('No cameras found.');
        }
      }).catch(function (e) {
        console.error(e);
      });
</script>

Iphone/Ios рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрдорд░реЗ рд╢реБрд░реВ рдХрд░рдирд╛ [0]ред рдФрд░ рдпрд╣ Android рдХреЗ рд▓рд┐рдП:

<script>
.....
  Instascan.Camera.getCameras().then(function (cameras) {
                if (cameras.length > 0) {
                    var selectedCam = cameras[0];
                    $.each(cameras, (i, c) => {
                        if (c.name.indexOf('back') != -1) {
                            selectedCam = c;
                            return false;
                        }
                    });
                    scanner.start(selectedCam);
                }
                else {
                    console.error('No cameras found.');
                }
              });
</script>

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ Request.UserAgent.Contains("ios") рдФрд░ "iphone" рдХреА рдЬрд╛рдБрдЪ рдХреА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ Iphone рдХреЗ рд▓рд┐рдП Android рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреА рдЪрд▓рд╛рдИред

рдпрд╣ рдЬрд╛рдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@apchandler рд╣рд╛рдп, рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ 'рдореБрдЦреНрдп' рдмреИрдХ рдХреИрдорд░рд╛ рдЪреБрдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реИ рдЬрд╣рд╛рдВ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрдпреВрдЖрд░ рдХреЛрдб рд╕реНрдХреИрди рдХрд░реЗрдВрдЧреЗред рдореИрдВ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЕрдкрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ 4 рдмреИрдХ рдХреИрдорд░реЗ рд╣реИрдВ (рд╣реБрд╡рд╛рд╡реЗрдИ рдкреА 30 рдкреНрд░реЛ)ред

рдореИрдВрдиреЗ $.рдкреНрд░рддреНрдпреЗрдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдмреИрдХ рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдореИрдВ рдХреБрдЫ рднреА рд╕реНрдХреИрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рджреГрд╖реНрдЯрд┐ рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЬрд╝реВрдо рдХреЗ рд╕рд╛рде рд╣реИред

рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдореИрдВ рдХреИрдорд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ [2] рдореИрдВ рд╕рдм рдХреБрдЫ рд╕реНрдХреИрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред

'рдореБрдЦреНрдп' рдмреИрдХ рдХреИрдорд░рд╛ рдЪреБрдирдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рдореМрдЬреВрдж рд╣реИ?

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореЗрд░реЗ рд╡реЗрдмрдПрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреИрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреИрдорд░реЛрдВ рдХрд╛ рдХреНрд░рдо рднреА рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред

рдпрд╛ рдХреНрдпрд╛ рдЖрдк рд╕рднреА рдХреИрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд▓реЗрдиреЗ рджреЗрддреЗ рд╣реИрдВ?

рдзрдиреНрдпрд╡рд╛рдж

@apchandler рд╣рд╛рдп, рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ 'рдореБрдЦреНрдп' рдмреИрдХ рдХреИрдорд░рд╛ рдЪреБрдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реИ рдЬрд╣рд╛рдВ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрдпреВрдЖрд░ рдХреЛрдб рд╕реНрдХреИрди рдХрд░реЗрдВрдЧреЗред рдореИрдВ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЕрдкрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ 4 рдмреИрдХ рдХреИрдорд░реЗ рд╣реИрдВ (рд╣реБрд╡рд╛рд╡реЗрдИ рдкреА 30 рдкреНрд░реЛ)ред

рдореИрдВрдиреЗ $.рдкреНрд░рддреНрдпреЗрдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдмреИрдХ рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдореИрдВ рдХреБрдЫ рднреА рд╕реНрдХреИрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рджреГрд╖реНрдЯрд┐ рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЬрд╝реВрдо рдХреЗ рд╕рд╛рде рд╣реИред

рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдореИрдВ рдХреИрдорд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ [2] рдореИрдВ рд╕рдм рдХреБрдЫ рд╕реНрдХреИрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред

'рдореБрдЦреНрдп' рдмреИрдХ рдХреИрдорд░рд╛ рдЪреБрдирдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рдореМрдЬреВрдж рд╣реИ?

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореЗрд░реЗ рд╡реЗрдмрдПрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреИрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреИрдорд░реЛрдВ рдХрд╛ рдХреНрд░рдо рднреА рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред

рдпрд╛ рдХреНрдпрд╛ рдЖрдк рд╕рднреА рдХреИрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд▓реЗрдиреЗ рджреЗрддреЗ рд╣реИрдВ?

рдзрдиреНрдпрд╡рд╛рдж

рдореИрдВ рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдЬреЛ рдПрдХ 'рдореБрдЦреНрдп' рдХреИрдорд░рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХрдИ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВред рдЖрдк рдЪреБрдирд┐рдВрджрд╛ рдХреИрдорд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП рдорд╛рдирджрдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдФрд░ рдЕрдиреНрдп рд╕реНрдкреЗрдХреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдиреНрдпреВрдирддрдо рдХреНрд╖рдорддрд╛ рд╡рд╛рд▓рд╛ рдХреИрдорд░рд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@apchandler рд╣рд╛рдп, рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ 'рдореБрдЦреНрдп' рдмреИрдХ рдХреИрдорд░рд╛ рдЪреБрдирдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ?
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реИ рдЬрд╣рд╛рдВ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрдпреВрдЖрд░ рдХреЛрдб рд╕реНрдХреИрди рдХрд░реЗрдВрдЧреЗред рдореИрдВ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЕрдкрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ 4 рдмреИрдХ рдХреИрдорд░реЗ рд╣реИрдВ (рд╣реБрд╡рд╛рд╡реЗрдИ рдкреА 30 рдкреНрд░реЛ)ред
рдореИрдВрдиреЗ $.рдкреНрд░рддреНрдпреЗрдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдмреИрдХ рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдореИрдВ рдХреБрдЫ рднреА рд╕реНрдХреИрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рджреГрд╖реНрдЯрд┐ рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЬрд╝реВрдо рдХреЗ рд╕рд╛рде рд╣реИред
рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдореИрдВ рдХреИрдорд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ [2] рдореИрдВ рд╕рдм рдХреБрдЫ рд╕реНрдХреИрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред
'рдореБрдЦреНрдп' рдмреИрдХ рдХреИрдорд░рд╛ рдЪреБрдирдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рдореМрдЬреВрдж рд╣реИ?
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореЗрд░реЗ рд╡реЗрдмрдПрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреИрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреИрдорд░реЛрдВ рдХрд╛ рдХреНрд░рдо рднреА рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред
рдпрд╛ рдХреНрдпрд╛ рдЖрдк рд╕рднреА рдХреИрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд▓реЗрдиреЗ рджреЗрддреЗ рд╣реИрдВ?
рдзрдиреНрдпрд╡рд╛рдж

рдореИрдВ рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдЬреЛ рдПрдХ 'рдореБрдЦреНрдп' рдХреИрдорд░рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХрдИ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВред рдЖрдк рдЪреБрдирд┐рдВрджрд╛ рдХреИрдорд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП рдорд╛рдирджрдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдФрд░ рдЕрдиреНрдп рд╕реНрдкреЗрдХреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдиреНрдпреВрдирддрдо рдХреНрд╖рдорддрд╛ рд╡рд╛рд▓рд╛ рдХреИрдорд░рд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рд╕рдВрдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдПрдХ рдХреИрдорд░реЗ рдХреЗ рд╕рдВрдХрд▓реНрдк рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@glorynguyen рдФрд░ @apchandler рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред
рдЕрдм рд░рд┐рдпрд░ рдХреИрдорд░рд╛ рдЪрд╛рд▓реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
instascan.min . рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ
рдкрд╣рд▓реЗ
case 0:return i={audio:!1,video:{mandatory:{sourceId:this.id,minWidth:600,maxWidth:800,minAspectRatio:1.6},optional:[]}}
рдмрд╛рдж рдореЗрдВ
case 0:return i=(/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream)?{audio:!1,video:{facingMode:{exact:"environment"},mandatory:{sourceId:this.id,minWidth:600,maxWidth:800,minAspectRatio:1.6},optional:[]}}:{audio:!1,video:{mandatory:{sourceId:this.id,minWidth:600,maxWidth:800,minAspectRatio:1.6},optional:[]}}

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЖрдИрдУрдПрд╕ 12+ рдкрд░ рд╕рдлрд╛рд░реА рдХреЗ рд╕рд╛рде рдмреИрдХ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ?

рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ 7 рдорд╣реАрдиреЛрдВ рд╕реЗ 30+ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдкрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдк рдЬрд┐рд╕ рдУрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рд╕реЗ рдХреЛрдИ рднреА рдХреИрдорд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдКрдкрд░ рдЫреЛрдбрд╝реА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ webrtc рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреА рд░рд╣рддреА рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкреВрд░рд╛ рдореБрджреНрджрд╛ рдкрд╛рдпрд╛ред

рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ webrtc рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓ рдХрд┐рдпрд╛ред es5 рдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде webrtc рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ webrtc рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЛрдбрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдиреЗ рд╕рд╣реА рдХреИрдорд░рд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреАред

рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд╢реНрдЪрд┐рдд рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдирд┐рдпрдорд┐рдд рдФрд░ рдЫреЛрдЯреА рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╛рддреНрд░реЛрдВ рдФрд░ рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдлреЛрди рдкрд░ QrCodes рдХреЗ рд╕рд╛рде рд╕реНрдХреВрд▓ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдЗрд╕ рд╕рдордп рд▓рдЧрднрдЧ 30+ рдореЙрдбрд▓ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдХреИрдорд░реЗ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпреЗ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред

рдмреИрдХ рдХреИрдорд░рд╛ рдХреЛрдб

scanner = new Instascan.Scanner({ video: video, scanPeriod: 4, mirror:false })
                .then(handleSuccess)
                .catch(handleError);
             //Start scanning
             scanner.addListener('scan', foundCode);

             Instascan.Camera.getCameras().then(function (cameras) {
                 if (cameras.length > 0) {
                     scanner.start(cameras[0]);
                 }
                 else {
            ...        
                 }
             }).catch (function (e) {
              ...  
             });

instascan.min.zip

#182 (рдЯрд┐рдкреНрдкрдгреА)

рдЖрдкрдиреЗ рд╕рд░ рдиреЗ рдЕрднреА-рдЕрднреА рдПрдХ рдЬреВрдирд┐рдпрд░ рджреЗрд╡ рдХреА рдиреМрдХрд░реА рдмрдЪрд╛рдИ рд╣реИ, рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рдЖрдЬреАрд╡рди рдкреНрд░рд╢рдВрд╕рдХ рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рджред рдЬрдм рдореИрдВрдиреЗ рдпрд╣ рдХреЛрдб рджреЗрдЦрд╛ рддреЛ рдореИрдВ рд╡рд╣реАрдВ рдерд╛ рдЬрд╣рд╛рдВ рдЖрдк рдереЗред рдПрдХ рд╕рдордп рд╕реАрдорд╛ рдереА рдФрд░ 30 рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреИрдорд░реЛрдВ рдХреА рдЬрд░реВрд░рдд рдереАред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рд▓рд┐рдЦрд╛ред

рдлреЛрди рдХреЗ 45 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдм 15 рдорд╣реАрдиреЗ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕реИрдорд╕рдВрдЧ рдлреЛрди рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рдЪрдХреА рд╣реИ рдЬрд┐рд╕реЗ рд╕реИрдорд╕рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдкреИрдЪ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддреЛ рдпрд╣ рдПрдХ рд╕реИрдорд╕рдВрдЧ рд╡реЗрдмрдХрд┐рдЯ рддреНрд░реБрдЯрд┐ рдереАред

рдирдорд╕реНрддреЗ,
рдореИрдВ рднреА рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐ рдХреА рддрд░рд╣ IOS рдХреЗ рд╕рд╛рде рдмреИрдХ рдХреИрдорд░рд╛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░рд╛ рдкрд┐рдЫрд▓рд╛ рдХреИрдорд░рд╛ iPhone рдкрд░ рдирд╣реАрдВ рдЦреБрд▓ рд░рд╣рд╛ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлреНрд░рдВрдЯ рдХреИрдорд░рд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рд╕рдлрд╛рд░реА рдХреЗ рдЕрджреНрдпрддрди рд╕рдВрд╕реНрдХрд░рдг (13.xx. xx) рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдореЗрд░реА рдорджрдж рдХрд░реЗрдВред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЖрдИрдУрдПрд╕ 12+ рдкрд░ рд╕рдлрд╛рд░реА рдХреЗ рд╕рд╛рде рдмреИрдХ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ?

рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ 7 рдорд╣реАрдиреЛрдВ рд╕реЗ 30+ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдкрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдк рдЬрд┐рд╕ рдУрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рд╕реЗ рдХреЛрдИ рднреА рдХреИрдорд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдКрдкрд░ рдЫреЛрдбрд╝реА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ webrtc рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреА рд░рд╣рддреА рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкреВрд░рд╛ рдореБрджреНрджрд╛ рдкрд╛рдпрд╛ред

рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ webrtc рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓ рдХрд┐рдпрд╛ред es5 рдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде webrtc рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ webrtc рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЛрдбрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдиреЗ рд╕рд╣реА рдХреИрдорд░рд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреАред

рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд╢реНрдЪрд┐рдд рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдирд┐рдпрдорд┐рдд рдФрд░ рдЫреЛрдЯреА рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╛рддреНрд░реЛрдВ рдФрд░ рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдлреЛрди рдкрд░ QrCodes рдХреЗ рд╕рд╛рде рд╕реНрдХреВрд▓ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдЗрд╕ рд╕рдордп рд▓рдЧрднрдЧ 30+ рдореЙрдбрд▓ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдХреИрдорд░реЗ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпреЗ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред

рдмреИрдХ рдХреИрдорд░рд╛ рдХреЛрдб

scanner = new Instascan.Scanner({ video: video, scanPeriod: 4, mirror:false })
                .then(handleSuccess)
                .catch(handleError);
             //Start scanning
             scanner.addListener('scan', foundCode);

             Instascan.Camera.getCameras().then(function (cameras) {
                 if (cameras.length > 0) {
                     scanner.start(cameras[0]);
                 }
                 else {
            ...        
                 }
             }).catch (function (e) {
              ...  
             });

instascan.min.zip

#182 (рдЯрд┐рдкреНрдкрдгреА)

Android рдФрд░ iOS рджреЛрдиреЛрдВ рдкрд░ рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛! рдореИрдВрдиреЗ рдЕрднреА рдореВрд▓ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╣реИ, рдЕрдкрдиреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ "рдбрд┐рд╕реНрдЯ" рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдмрд╕! рдЖрдкрдХреЛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдорд╣реЛрджрдп !

Android рдФрд░ iOS рджреЛрдиреЛрдВ рдкрд░ рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛! рдореИрдВрдиреЗ рдЕрднреА рдореВрд▓ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╣реИ, рдЕрдкрдиреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ "рдбрд┐рд╕реНрдЯ" рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдмрд╕! рдЖрдкрдХреЛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдорд╣реЛрджрдп !

@ рдПрдВрдЯрд╡рд░реНрдХреНрд╕-рд╣рдм рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╢рд╛рдЦрд╛ рдпрд╛ рдорд┐рдиреАрдлрд╛рдЗрдб рдЬреЗрдПрд╕ рд╕реЗ рдкреВрд░реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛?
рдЖрдкрдХреЛ "dist" рдлрд╝реЛрд▓реНрдбрд░ рдХрд╣рд╛рдБ рд╕реЗ рдорд┐рд▓рд╛?

Android рдФрд░ iOS рджреЛрдиреЛрдВ рдкрд░ рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛! рдореИрдВрдиреЗ рдЕрднреА рдореВрд▓ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╣реИ, рдЕрдкрдиреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ "рдбрд┐рд╕реНрдЯ" рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдмрд╕! рдЖрдкрдХреЛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдорд╣реЛрджрдп !

@ рдПрдВрдЯрд╡рд░реНрдХреНрд╕-рд╣рдм рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╢рд╛рдЦрд╛ рдпрд╛ рдорд┐рдиреАрдлрд╛рдЗрдб рдЬреЗрдПрд╕ рд╕реЗ рдкреВрд░реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛?
рдЖрдкрдХреЛ "dist" рдлрд╝реЛрд▓реНрдбрд░ рдХрд╣рд╛рдБ рд╕реЗ рдорд┐рд▓рд╛?

@ Sandi2211 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдореВрд▓ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХреИрди рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рдПрдХ "рдбрд┐рд╕реНрдЯ" рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдпрд╛ рдФрд░ рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЗрдВрд╕реНрдЯрд╛рд╕реНрдХрд╛, min.zip рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдбрд╛рд▓ рджреАред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЖрдИрдУрдПрд╕ 12+ рдкрд░ рд╕рдлрд╛рд░реА рдХреЗ рд╕рд╛рде рдмреИрдХ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ?

рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ 7 рдорд╣реАрдиреЛрдВ рд╕реЗ 30+ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдкрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдк рдЬрд┐рд╕ рдУрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рд╕реЗ рдХреЛрдИ рднреА рдХреИрдорд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдКрдкрд░ рдЫреЛрдбрд╝реА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ webrtc рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреА рд░рд╣рддреА рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкреВрд░рд╛ рдореБрджреНрджрд╛ рдкрд╛рдпрд╛ред
рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ webrtc рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓ рдХрд┐рдпрд╛ред es5 рдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде webrtc рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ webrtc рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЛрдбрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдиреЗ рд╕рд╣реА рдХреИрдорд░рд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреАред
рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд╢реНрдЪрд┐рдд рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдирд┐рдпрдорд┐рдд рдФрд░ рдЫреЛрдЯреА рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╛рддреНрд░реЛрдВ рдФрд░ рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдлреЛрди рдкрд░ QrCodes рдХреЗ рд╕рд╛рде рд╕реНрдХреВрд▓ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдЗрд╕ рд╕рдордп рд▓рдЧрднрдЧ 30+ рдореЙрдбрд▓ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдХреИрдорд░реЗ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпреЗ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред
рдмреИрдХ рдХреИрдорд░рд╛ рдХреЛрдб

scanner = new Instascan.Scanner({ video: video, scanPeriod: 4, mirror:false })
                .then(handleSuccess)
                .catch(handleError);
             //Start scanning
             scanner.addListener('scan', foundCode);

             Instascan.Camera.getCameras().then(function (cameras) {
                 if (cameras.length > 0) {
                     scanner.start(cameras[0]);
                 }
                 else {
            ...        
                 }
             }).catch (function (e) {
              ...  
             });

instascan.min.zip
#182 (рдЯрд┐рдкреНрдкрдгреА)

рдпрд╣ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ, рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдзрдиреНрдпрд╡рд╛рдж рдпрд╛рд░, рдореЗрд░рд╛ рдХрд╛рдо рдЕрдЪреНрдЫрд╛ рд╣реИ, рдмрд╕ рдЕрдкрдирд╛ рдирдпрд╛ рдЬреЗрдПрд╕ рдЬреЛрдбрд╝реЗрдВред

рдХреЛрдИ рджрд┐рдХреНрдХрдд рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдЕрднреА рднреА рдпрд╣рд╛рдБ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЖрдИрдУрдПрд╕ 12+ рдкрд░ рд╕рдлрд╛рд░реА рдХреЗ рд╕рд╛рде рдмреИрдХ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рд╛ рд╣реИ?

рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдЧрднрдЧ 7 рдорд╣реАрдиреЛрдВ рд╕реЗ 30+ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдкрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЖрдк рдЬрд┐рд╕ рдУрдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рд╕реЗ рдХреЛрдИ рднреА рдХреИрдорд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдКрдкрд░ рдЫреЛрдбрд╝реА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ webrtc рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреА рд░рд╣рддреА рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдкреВрд░рд╛ рдореБрджреНрджрд╛ рдкрд╛рдпрд╛ред

рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ webrtc рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓ рдХрд┐рдпрд╛ред es5 рдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде webrtc рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ webrtc рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЛрдбрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдиреЗ рд╕рд╣реА рдХреИрдорд░рд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреАред

рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд╢реНрдЪрд┐рдд рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдирд┐рдпрдорд┐рдд рдФрд░ рдЫреЛрдЯреА рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╛рддреНрд░реЛрдВ рдФрд░ рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдлреЛрди рдкрд░ QrCodes рдХреЗ рд╕рд╛рде рд╕реНрдХреВрд▓ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдЗрд╕ рд╕рдордп рд▓рдЧрднрдЧ 30+ рдореЙрдбрд▓ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдХреИрдорд░реЗ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпреЗ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред

рдмреИрдХ рдХреИрдорд░рд╛ рдХреЛрдб

scanner = new Instascan.Scanner({ video: video, scanPeriod: 4, mirror:false })
                .then(handleSuccess)
                .catch(handleError);
             //Start scanning
             scanner.addListener('scan', foundCode);

             Instascan.Camera.getCameras().then(function (cameras) {
                 if (cameras.length > 0) {
                     scanner.start(cameras[0]);
                 }
                 else {
            ...        
                 }
             }).catch (function (e) {
              ...  
             });

instascan.min.zip

#182 (рдЯрд┐рдкреНрдкрдгреА)

рдЯрдХреНрд╕, @apchandler11! рдЖрдкрдиреЗ рдореЗрд░рд╛ рдХрд╛рдо рдмрдЪрд╛ рд▓рд┐рдпрд╛ред рднрдЧрд╡рд╛рди рдбреАрдПрдордПрд╕!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

schmich picture schmich  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mairh picture mairh  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bm2112 picture bm2112  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

CarlosSanMartin picture CarlosSanMartin  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lnhrdt picture lnhrdt  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ