2013-07-22 7 views
10

Niedawno zacząłem dostawać błędy podczas próby uzyskania dostępu do mikrofonu klienta przez moją stronę internetową. Gdy Chrome zapyta, czy zezwolić witrynie na dostęp do mikrofonu użytkownika, generowany jest komunikat [object NavigatorUserMediaError] bez względu na to, czy kliknął "zezwalaj", czy "odmawiaj". Dzieje się tak niezależnie od tego, czy mikrofon jest rzeczywiście podłączony do komputera (na którym działa Ubuntu 12.04).Dlaczego getUserMedia rzuca [obiekt NavigatorUserMediaError] po kliknięciu przycisku "Zezwól" w przeglądarce Chrome?

Dalsze testowanie za pomocą przeglądarki Firefox wykazało, że nie dotyczy to tylko przeglądarki Chrome. Problem zaczął się dopiero po tym, jak zrobiłem demo na żywo, a następnie wylogowałem się z komputera. Próbowałem zrobić demo z kości bez dostępu do mikrofonu i wpadł na ten sam problem.

var getVideo = false, getAudio = true; 

navigator.getUserMedia || (navigator.getUserMedia = navigator.mozGetUserMedia || 
     navigator.webkitGetUserMedia || navigator.msGetUserMedia); 

function init() { 
    if(navigator.getUserMedia) { 
     navigator.getUserMedia({video:getVideo, audio:getAudio}, onSuccess, onError); 
    } else { 
     alert('getUserMedia failed.'); 
    } 
} 

function onSuccess() { 
    console.log("Yay"); 
} 

function onError(err) { 
    console.log("Noo " + err); 
} 

Jest to dość zastanawiające, gdyż pracował doskonale, aż do punktu, w którym ja wylogowany a następnie zalogowanych powrotem i próbuje przetestować go ponownie.

Hostuję kod lokalny, poprzez Jetty i Eclipse. Uzyskuję do niego dostęp, wpisując w przeglądarce internetowej localhost:8080/my-program.

Edytuj: Po wystąpieniu błędu ikona kamery pojawia się na pasku adresu Chrome, informując, że Chrome uzyskuje dostęp do mojego mikrofonu i wyświetla dwa możliwe mikrofony: "Domyślne" i "Wbudowane audio Analogowe Stereo. "

Edycja 2: Ten błąd występuje również na innych stronach internetowych, które próbują uzyskać dostęp do mojego mikrofonu przez Webrtc. Tradycyjna implementacja Flasha nadal działa.

Chrome wydaje komunikat o błędzie w regularnych odstępach czasu, gdy jest otwarty.

[361:362:0725/095320:ERROR:audio_output_device.cc(186)] 
Not implemented reached in virtual void 
media::AudioOutputDevice::OnStateChanged(media::AudioOutputIPCDelegate::State) 

Edit 3: udało mi się wyjaśnić komunikat o błędzie nieco bardziej

NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1} 
+0

Jest to problem z moim systemem, nie mój kod internetowej. Z innych komputerów strona działa zgodnie z oczekiwaniami. –

Odpowiedz

3

To może zdarzyć się w dwóch sytuacjach i mam doświadczenie zarówno w Ubuntu 12.04:

  • Kliknąłeś Odrzuć raz, a następnie przeglądarka zapisuje to ustawienie, zawsze zwracając błąd, gdy pojawi się pytanie o dostęp do multimediów na tej stronie. (Wydaje się, że to nie jest twój przypadek, ponieważ dostajesz pytanie z przeglądarki, ale musisz po prostu przejść do paska adresu, kliknąć ikonę kamery i zmienić opcję, aby zapytać ponownie).

  • Twoja przeglądarka nie ma dostępu do urządzeń multimedialnych i tak jak w każdym komputerze bez aparatów fotograficznych i mikrofonów, nawet jeśli naciśniesz Zezwalaj, pojawi się zdarzenie błędu, ponieważ nie może podać żadnych strumieni. Spróbuj sprawdzić ustawienia przeglądarki, aby zobaczyć, czy możesz wybrać wybraną kamerę. Doświadczyłem tego i lista była pusta. Aby rozwiązać ten problem, musiałem zrestartować komputer, a Chrome ponownie zaczął wyświetlać listę urządzeń.

+0

Chrome wyświetla dwie opcje mikrofonu: domyślne i wbudowane audio analogowe stereo. Błąd występuje w obu opcjach. Jeśli to, co mówisz, jest prawdą, w jaki sposób strona działała, gdy nie miałem podłączonego mikrofonu? –

+0

Trzecią sytuacją, w której może się to zdarzyć, jest dostęp do witryny za pośrednictwem protokołu HTTP, a witryna nie jest hostem lokalnym - Chrome obsługuje teraz tylko dźwięk przez HTTPs. –

6

jednej przeglądarki na raz

Napotkałem tę sytuację, kiedy jestem testów z wieloma przeglądarkami otwartych. Wygląda na to, że tylko jedna przeglądarka może uzyskać dostęp do multimediów na raz.

tj. Kiedy mam otwartą stronę w przeglądarce Chrome i działa wideo/audio, Firefox nie będzie działał, a gdy uruchomię go w przeglądarce Firefox, Chrome nie działa.

+0

Dzięki za cynk. –

1

NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}

Oznacza to ustawienia przeglądarki nie pozwala na dostęp do kamery. Przejdź do ustawień przeglądarki -> w ustawieniach witryny znajdziesz listę stron internetowych, które zablokowały Ci dostęp do Twojego urządzenia.

0

getUserMedia działa tylko na https; nie ma wyjątku dla localhost (tj. http://localhost). Safari nigdy też nie pozwala na pobieranie getUserMedia w ramach iFrame. Zawsze otrzymuję komunikat "Próba wywołania getUserMedia z dokumentu o innym pochodzeniu zabezpieczeń niż jego ramka najwyższego poziomu". To uniemożliwia korzystanie z witryn takich jak codepen i jsfiddle.

Więcej detials https://webrtchacks.com/safari-webrtc/

+1

Jeśli dobrze pamiętam, ** jest ** wyjątkiem dla 'localhost' w Chrome. – jamix

+1

Tak, teraz localhost w Chrome również go obsługuje. –

+1

Użyłem wcześniej webRtc w localhost i działało dobrze. ale ostatnio od czasu aktualizacji przeglądarki otrzymuję ten błąd. 'DevicesNotFoundError' sprawdź to [link] (https://stackoverflow.com/questions/48378750/getusermedia-devicesnotfounderror-thrown-in-latest-browsers) –

Powiązane problemy