Instascan: IOS11 - μ›Ή RTC ν˜Έν™˜μ„±

에 λ§Œλ“  2017λ…„ 07μ›” 01일  Β·  18μ½”λ©˜νŠΈ  Β·  좜처: schmich/instascan

이 μœ„λŒ€ν•œ 일에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.
IOS λΈŒλΌμš°μ €μ—μ„œ QR μ½”λ“œλ₯Ό μŠ€μΊ”ν•˜κΈ° μœ„ν•΄ 이 μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜λ €κ³  ν•˜λ©° Web RTCλ₯Ό μ§€μ›ν•˜λŠ” μ΅œμ‹  IOS11 λ² νƒ€λ‘œ ν…ŒμŠ€νŠΈ μ€‘μž…λ‹ˆλ‹€.

eth 카메라 및 webRTC getUserMedia()에 λŒ€ν•œ μ•‘μ„ΈμŠ€ κΆŒν•œμ΄ μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 지속적인 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€ = Unhandled Promise Rejection: TypeError: Type error at line 13231
<br i="9"/> case 3:<br i="10"/> return this._stream = i.sent, i.abrupt("return", window.URL.createObjectURL(this._stream));<br i="11"/>

λ˜ν•œ RTC와 ν˜Έν™˜λ˜λŠ” IOS μ›Ήν‚· 버전 = 604
κ·Έλž˜μ„œ μ•„λ§ˆλ„ 라인 13168을 μ—…λ°μ΄νŠΈν•΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€

<br i="16"/> if (!navigator.userAgent.match(/Version\/(\d+).(\d+)/))<br i="17"/> return e.browser = "Unsupported webkit-based browser with GUM support but no WebRTC support.", e;<br i="18"/> e.browser = "safari", e.version = this.extractVersion(navigator.userAgent, /AppleWebKit\/([0-9]+)./, 1), e.minVersion = 602<br i="19"/> }<br i="20"/>

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‹€μŒμ€ https://github.com/centogram/instascan μ—μ„œ 컴파일된 λ²„μ „μž…λ‹ˆλ‹€.
μΈμŠ€νƒ€μŠ€μΊ”.zip

λͺ¨λ“  18 λŒ“κΈ€

ν˜„μƒκΈˆ 500λ‹¬λŸ¬ 이 문제λ₯Ό ν•΄κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€. ν˜„μƒκΈˆ 500λ‹¬λŸ¬λŠ” λ‚˜λ³΄λ‹€ 유λŠ₯ν•œ μ‚¬λžŒμ΄ 이 문제λ₯Ό ν•΄κ²°ν•˜λ„λ‘ ꢌμž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. IOS11 베타가 이제 webRTC getUserMedia() λ₯Ό μ§€μ›ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μž‘λ™ν•˜λŠ” 데λͺ¨λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€(iOS11 베타가 μ„€μΉ˜λœ κ²½μš°μ—λ§Œ :-) --> https://tokbox.com/developer/sdks/js/ --> https://tokbox.com/developer/beta/safari /

이 ν˜„μƒκΈˆμ€ μ—¬μ „νžˆ β€‹β€‹μœ νš¨ν•˜λ©° λ‚˜λŠ” 그것을 쑴쀑할 κ²ƒμž…λ‹ˆλ‹€.
μš°λ¦¬λŠ” ν”„λ‘œμ νŠΈμ—μ„œ instascan을 μ‚¬μš©ν•  κ³„νšμ΄μ§€λ§Œ μ•½κ°„μ˜ 지원이 ν•„μš”ν•©λ‹ˆλ‹€(λΉ„μš©μ„ μ§€λΆˆν•  μ€€λΉ„κ°€ λ˜μ–΄ 있음)
ν•  수 μžˆλŠ” μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ?
[1] 문제λ₯Ό ν•΄κ²°ν•˜λ‹€
[2] instascan ν”„λ‘œμ νŠΈμ— μ˜€ν”ˆ μ†ŒμŠ€ μ½”λ“œ κΈ°μ—¬
[3] λ…Έλ ₯ν•œ 만큼 λˆμ„ 쑰금 λ²Œλ‹€

+1

@ddwyer μš°λ¦¬λŠ” 졜근 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ

λ‹€μŒμ€ 앱을 μƒˆλ‘œ λΉŒλ“œν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰ν•œ μž‘μ—…μž…λ‹ˆλ‹€.

git clone [email protected]:schmich/instascan.git
cd instascan/
npm install gulp-cli -g
npm install
gulp release
cp dist/instascan.min.js /path/to/our/libraries/include/dir

IDλ₯Ό 기반으둜 카메라λ₯Ό μ„ νƒν•˜λ©΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 항상 μ „λ©΄ 카메라λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. Camera.js에 λͺ»μƒκΈ΄ 패치λ₯Ό μΆ”κ°€ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

diff --git a/src/camera.js b/src/camera.js
index 5403b3c..4a46e32 100644
--- a/src/camera.js
+++ b/src/camera.js
@@ -31,6 +31,11 @@ class Camera {
       }
     };

+    var userAgent = window.navigator.userAgent;
+    if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i)) {
+        constraints.video.facingMode = "environment";
+    }
+
     this._stream = await Camera._wrapErrors(async () => {
       return await navigator.mediaDevices.getUserMedia(constraints);
     });

쒋은 μ†”λ£¨μ…˜μ΄ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— 이 변경에 λŒ€ν•œ PR을 λ§Œλ“€μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μž‘λ™ν•˜λ―€λ‘œ ν”„λ‘œμ νŠΈμ—μ„œ 자유둭게 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.

참고둜 iOS11 λ² νƒ€μ—μ„œ <video /> μš”μ†Œμ—λŠ” playsinline 속성이 ν•„μš”ν•©λ‹ˆλ‹€. μž μ‹œ 버그인 것 κ°™μ•˜λŠ”λ° 이제 곧 베타가 μ’…λ£Œλ©λ‹ˆλ‹€.

https://github.com/serratus/quaggaJS/commit/e8352c7017a2f7a7500fa054f342b9689ff5d8b7#diff -afd7828cb7f3e7a1f8fe7305f50b5021

https://github.com/PaulKinlan/qrcode/commit/b79718b2391969b2291db93ba388b4c2b2f3f9d4

@inorbert 와 shazam의 μ§€μ‹œλ₯Ό
μš°λ¦¬λŠ” μš°λ¦¬κ°€ λ°œκ²¬ν•œ 것을 κ°œμ„ ν•˜κ³  λ‹€μ‹œ 보고할 κ²ƒμž…λ‹ˆλ‹€.
-- λŒ€λŸ°

이것은 schmich/instascan/pull/78μ—μ„œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œμ νŠΈμ— μ΅œμ‹  webrtc-adapter λ₯Ό μˆ˜λ™μœΌλ‘œ ν¬ν•¨ν•˜λŠ” 것을 μžŠμ§€ λ§ˆμ‹­μ‹œμ˜€.

@PallasKatze λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ GURUμž…λ‹ˆλ‹€. 이제 λͺ¨λ‘ μž‘λ™ν•˜κ³  ν…ŒμŠ€νŠΈν•˜κ³  병합해야 ν•©λ‹ˆκΉŒ? 관심 μžˆλŠ” μ‚¬λžŒμ΄ μžˆμ„ 경우 ν˜„μƒκΈˆμ΄ μ „μ•‘ μ§€κΈ‰λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ„μ™€μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

Safari11μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 이유
var userAgent = window.navigator.userAgent;

  • if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i)) {
  • Constraints.video.facingMode = "ν™˜κ²½";
  • }
    +
    this._stream = Camera._wrapErrors(async() => {
    return await navigator.mediaDevices.getUserMedia(μ œμ•½ 쑰건);
    });

λ‹€μŒμ€ https://github.com/centogram/instascan μ—μ„œ 컴파일된 λ²„μ „μž…λ‹ˆλ‹€.
μΈμŠ€νƒ€μŠ€μΊ”.zip

@centogram ios11 μ½”λ“œλ‘œ μ „λ©΄ 카메라λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? 감사 ν•΄μš” :)

@pandalion λ„€, ν•˜μ§€λ§Œ μ½”λ“œλ₯Ό μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. Constraints.video.facingMode μ œμ•½ 쑰건을 "environment"μ—μ„œ "user"둜 λ³€κ²½ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

@centogram 은 맀λ ₯처럼 μž‘λ™ν•©λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€!

@centogram @hrrsppzgl
μ–΄λ–€ 쀄을 μˆ˜μ •ν•΄μ•Όν•©λ‹ˆκΉŒ?

@centogram @hrrsppzgl
μ–΄λ–€ 쀄을 μˆ˜μ •ν•΄μ•Όν•©λ‹ˆκΉŒ?

@adelsadek1
λ‹Ήμ‹ μ—κ²Œ μ •λ§λ‘œ ν•„μš”ν•œ 것은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? μ—¬κΈ°μ—μ„œ @centogram μˆ˜μ • μ½”λ“œλ₯Ό λ‹€μš΄λ‘œλ“œ ν–ˆμŠ΅λ‹ˆκΉŒ?
https://github.com/centogram/instascan

@hrrsppzgl 예, @centogram이 라인 μˆ˜μ •μ—

@hrrsppzgl 예, @centogram이 라인 μˆ˜μ •μ—

검색
faceMode: {μ •ν™•ν•œ: "ν™˜κ²½" },
"ν™˜κ²½"을 "μ‚¬μš©μž"둜 λ³€κ²½

image

μ•ˆλ…•ν•˜μ„Έμš” @lnorbert

λ‚˜λŠ” λ‹Ήμ‹ μ˜ 발자취λ₯Ό λ”°λ₯΄λ €κ³  λ…Έλ ₯ν–ˆμ§€λ§Œ,

git clone [email protected]:schmich/instascan.git
cd instascan/
npm install gulp-cli -g
npm install
gulp release
cp dist/instascan.min.js /path/to/our/libraries/include/dir

κ·ΈλŸ¬λ‚˜ 첫 번째 cmdλ₯Ό μ‹œλ„ν•˜λ©΄ μ•„λž˜ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

Screenshot 2019-07-15 at 7 20 52 PM

μ—¬κΈ° μ’€ λ„μ™€μ£Όμ‹œκ² μ–΄μš”?

κ°μ‚¬ν•©λ‹ˆλ‹€

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰