19

It's November of 2019, this JavaScript code works in FireFox (70.0.1 (64-bit)), Safari (13.0.2 (15608.2.30.1.1)), Opera (Version:65.0.3467.48), On a Windows Chrome Version 70.0.3538.77 (64-bit), this code works. but NOT in MacOS Google Chrome (Version 78.0.3904.108 (Official Build) (64-bit)):

navigator
.mediaDevices
.getUserMedia({video: true, audio: true})
.then(stream => {
    console.log("success!")
})
.catch(e => {
    console.log("e: ", e);
});

In Chrome's console, I got: DOMException: Permission denied After much googling, I haven't found anything up to date. How exactly do we use JS to request camera access in Chrome?

Morris
  • 948
  • 2
  • 9
  • 22
  • 1
    Check your settings that you didn't accidentally reject or disable the use permission at some point: Settings -> Site Settings -> Camera – Patrick Evans Nov 22 '19 at 19:28
  • 1
    If I specifically set the site's camera settings to "Block", I get the same exception. It should be set to "Ask". – teg_brightly Nov 22 '19 at 19:32
  • @PatrickEvans, I checked, it's set to "Ask". Still I got the message, indeed the same message that would show up when that very setting is "Blocked" as mentioned by Ernest. You will see what I mean if you paste my code into Chrome console. – Morris Nov 22 '19 at 19:59
  • 1
    Have you checked this: https://github.com/webrtc/samples/issues/1191 Also does this page ask for a microphone? https://webrtc.github.io/samples/src/content/getusermedia/audio/ – teg_brightly Nov 22 '19 at 20:40
  • @Ernest, webrtc.github.io/samples/src/content/getusermedia/audio does work fine in my Chrome, but when I use the source code locally, I go NotAllowedError. Finally the solution lies in System Preferences > Security & Privacy > Privacy > Camera & Microphone as jib mentioned below. – Morris Nov 25 '19 at 09:19

7 Answers7

10

Since MacOS Mojave, camera and microphone require OS permissions.

This applies to all non-Apple products, including all browsers other than Safari.

Check System Preferences > Security & Privacy > Privacy > Camera & Microphone. Make sure Chrome is listed and has a checkbox.

You should have gotten a special OS prompt about this the first time Chrome tried to access them. But if it accidentally got blocked somehow, you won't ever be prompted again.

jib
  • 40,579
  • 17
  • 100
  • 158
8

In my case, I did not realize the project I was working in was adding a security header, blocking the possibility of microphone use:

Feature-Policy "microphone 'none'; geolocation 'none'"

eazy_g
  • 377
  • 3
  • 10
3

Windows 11 - Microphone Privacy Settings fix

From the other solutions it sounds like a variety of issues could be causing this problem. For me (Windows 11, Google Chrome) this issue was caused by my microphone being disabled in my Windows privacy settings.

To fix, click Start and search for "Microphone Privacy Settings". In the control panel that pops up, switch "Microphone access" to on.

Alex Crist
  • 1,059
  • 2
  • 12
  • 22
1

In my case, this error was occurring for me even though the site in question did not appear under blocked sites on the microphone setting page.

I had to go to Site Settings -> View Permissions and Data stored across all sites -> Find my Site -> Click Reset Permissions to fix the issue.

Kevin Lee
  • 1,370
  • 14
  • 22
1

Feature-Policy has now been renamed to Permissions-Policy in the spec, and this article will eventually be updated to reflect that change. src

In my case, I set a header with an empty parentheses

Permissions-Policy: microphone=()

and according to this document, it disables the access.

The empty allowlist ensures that the feature is disabled in all contexts everywhere.

So changing the header to

Permissions-Policy: microphone=(self)

solved my problem.

Saeed
  • 5,413
  • 3
  • 26
  • 40
0

It seems, on your browser media is disabled, try to enable your media source video/audio on your chrome browser

ndotie
  • 1,830
  • 17
  • 18
-2

I got the same error in a slightly different case (on Windows 10, Chrome): I was running a local server and accessed my own website from http://127.0.0.1:5500/. The solution was to access it from http://localhost:5500/ instead.

Falk Tandetzky
  • 5,226
  • 2
  • 15
  • 27