Есть две возможные причины немедленного NotAllowedError
на данный момент:
1.getUserMedia запрашивает https
Похоже, что Safari требует https
для доступа к камере и микрофону, как в iOS, так и в OSX.
С https ссылкой , iOS Safari 12 работает длямне; та же ссылка в http получает NotAllowedError
.
Chrome имеет те же требования.Это согласуется с направлением спецификации, которое недавно ограничило getUserMedia
безопасными контекстами.Браузеры, которые еще не обновились, по-прежнему выставляют navigator.mediaDevices
в http, но getUserMedia
всегда отклоняет NotAllowedError
.
В будущем ожидается, что браузеры полностью удалят mediaDevices
в http, чтобы соответствовать спецификации.
2.getUserMedia требует политики объектов в кросс-исходных элементах iframes.
Это кажется новым в Safari 12. В элементах iframes политика элементов getUserMedia
по умолчанию отключена для содержимого кросс-источников.
Это работает для меня:
<iframe
allow="camera;microphone"
src="https://webrtc.github.io/samples/src/content/getusermedia/gum/">
</iframe>
Это не работает :
<iframe src="https://webrtc.github.io/samples/src/content/getusermedia/gum/">
</iframe>
... и в дополнение к ошибке с NotAllowedError
, Safari предупреждает в веб-консоли:
The top-level frame has prevented a document with a different security origin to
call getUserMedia.
Это также недавнее обновление до спецификации .