javascript - 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"}
有人解决了这个错误吗?我该如何解决?
解决方案
基于加密的安全性 getUserMedia() 方法仅在安全上下文中可用。安全上下文是浏览器有理由确信包含使用 HTTPS/TLS 安全加载的文档,并且对不安全上下文的暴露有限。如果文档未在安全上下文中加载,则 navigator.mediaDevices 属性未定义,从而无法访问 getUserMedia()。
在这种情况下尝试访问 getUserMedia() 将导致 TypeError。
文档源安全 由于与 getUserMedia() 相关的明显安全问题,如果意外使用或没有仔细管理安全性,它只能在安全上下文中使用。有许多不安全的方式来加载文档,这些方式可能反过来尝试调用 getUserMedia()。以下是不允许调用 getUserMedia() 的情况示例:
加载到沙盒元素中的文档不能调用 getUserMedia(),除非它的沙盒属性设置为允许同源。使用没有来源的 data:// 或 blob:// URL 加载的文档(例如当用户在地址栏中键入这些 URL 之一时)不能调用 getUserMedia()。这些从 JavaScript 代码加载的 URL 继承了脚本的权限。没有来源的任何其他情况,例如当 srcdoc 属性用于指定框架的内容时。
https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia#security
推荐阅读
- android - 防止应用在导航栏上按下 Home 时返回 BootActivity
- ios - 守卫之后的代码被调用的时间比预期的要晚
- c++ - 无法在 Raspberry Pi 上的 QML 图像中加载图像源
- regex - 替换文件中第一次出现的 sed 命令不起作用
- javascript - 如何在javascript中将对象从一个文件传递到另一个文件?
- javascript - echarts在折线图和y轴标签之间添加填充
- sql - SQL - 如何在不重新计算的情况下将计算列选择到另一列中?
- sonarqube - SONAR - url [http://localhost:9000/batch/index] 返回的状态无效:[407]
- django - django 仅向用户显示重组中的用户信息
- javascript - 如何修复“this.reduce() 不是函数”?