Instascan: IOS11 - Web RTC 兼容性

创建于 2017-07-01  ·  18评论  ·  资料来源: schmich/instascan

谢谢你的这项伟大的工作,
我们正在尝试实现此代码以在 IOS 浏览器中扫描二维码,我们正在使用支持 Web RTC 的最新 IOS11 beta 进行测试。

我们可以访问 eth camera 和 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 webkit 版本 = 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编译的有效版本
instascan.zip

所有18条评论

500 美元的赏金我无法解决这个问题也许 500 美元的赏金会鼓励比我更有能力的人解决这个问题。 我相信 IOS11 Beta 现在支持 webRTC getUserMedia() 。 您可以看到一个工作演示(仅当您安装了 iOS11 测试版时:-) --> https://tokbox.com/developer/sdks/js/ --> https://tokbox.com/developer/beta/safari /

这个赏金仍然有效 - 我会兑现它。
我们打算在我们的项目中使用 instascan,但需要一些支持(我们准备支付)
有没有人可以
[1] 解决问题
[2] 为 instascan 项目贡献开源代码
[3]并为您的努力赚取一点点钱

+1

@ddwyer我们最近在 out 应用程序中实施了 Instascan。 这是一个很棒的图书馆,并且按预期工作。 我们没有使用已发布的版本,而是从 master 构建了一个新版本。

这是我为我们的应用程序重新构建所做的工作:

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 beta 中, <video />元素需要属性playsinline 。 似乎有一段时间是一个错误,但现在它很快就结束了测试版 idk ...

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是一个 javascript

为什么我不在 safari11 上工作
var userAgent = window.navigator.userAgent;

  • if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i)) {
  • 约束。视频。面临模式=“环境”;
  • }
    +
    this._stream = await Camera._wrapErrors(async () => {
    返回等待 navigator.mediaDevices.getUserMedia(constraints);
    });

这是一个从https://github.com/centogram/instascan编译的有效版本
instascan.zip

@centogram我可以将前置摄像头与您的 ios11 代码一起使用吗? 谢谢 :)

@pandalion是的,但您需要修改代码。 您只需要将约束条件从“环境”更改为“用户”。

@centogram像魅力一样工作。 格拉斯!

@centogram @hrrsppzgl
我必须修改哪一行?

@centogram @hrrsppzgl
我必须修改哪一行?

@adelsadek1
你真正需要什么? 您是否从这里下载了@centogram修改后的代码?
https://github.com/centogram/instascan

@hrrsppzgl是的,我有但仍然无法工作@centogram提到要修改行,但我没有要修改哪一行

@hrrsppzgl是的,我有但仍然无法工作@centogram提到要修改行,但我没有要修改哪一行

搜索
面对模式:{精确:“环境”},
将“环境”更改为“用户”

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 等级