微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OT.Publisher 访问被拒绝:最终用户拒绝访问硬件设备 getUserMedia

如何解决OT.Publisher 访问被拒绝:最终用户拒绝访问硬件设备 getUserMedia

我正在尝试使用带有 Capacitor + Ionic + Vue.js 的 Open Tok JS SDK 创建实时流媒体,但 iOS 似乎不支持代码

[log] - {"code":1500,"message":"OT.Publisher Access Denied: Permission Denied: End-user denied permission to hardware devices (getUserMedia error: NotAllowedError)","name":"OT_USER_MEDIA_ACCESS_DENIED","stack":"C@capacitor://localhost/js/chunk-90ec66da.9f0ce302.js:37:52873\nx@capacitor://localhost/js/chunk-90ec66da.9f0ce302.js:37:53369\ncapacitor://localhost/js/chunk-90ec66da.9f0ce302.js:37:54452\npromiseReactionJob@[native code]","originalMessage":"The request is not allowed by the user agent or the platform in the current context,possibly because the user denied permission.","originalName":"NotAllowedError"}

Debug error Screenshot from XCode

有人解决了这个错误吗?我该如何解决

解决方法

基于加密的安全性 getUserMedia() 方法仅在安全上下文中可用。安全上下文是浏览器有理由相信包含使用 HTTPS/TLS 安全加载的文档并且对不安全上下文的暴露有限的上下文。如果文档未在安全上下文中加载,则 navigator.mediaDevices 属性未定义,从而无法访问 getUserMedia()。

在这种情况下尝试访问 getUserMedia() 将导致 TypeError。

文档来源安全 由于与 getUserMedia() 相关的明显安全问题,如果意外使用或没有仔细管理安全性,它只能在安全上下文中使用。有许多不安全的方法可以加载文档,而这些方法又可能会尝试调用 getUserMedia()。以下是不允许调用 getUserMedia() 的情况示例:

加载到沙盒元素中的文档不能调用 getUserMedia(),除非它的沙盒属性设置为 allow-same-origin。 使用没有来源的 data:// 或 blob:// URL 加载的文档(例如,当用户在地址栏中键入这些 URL 之一时)无法调用 getUserMedia()。这些从 JavaScript 代码加载的 URL 继承了脚本的权限。 任何其他没有原点的情况,例如当使用 srcdoc 属性指定框架的内容时。

https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia#security

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。