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}
Jest to problem z moim systemem, nie mój kod internetowej. Z innych komputerów strona działa zgodnie z oczekiwaniami. –