2013-07-22 13 views
10

Recentemente, ho iniziato a ricevere errori quando provavo ad accedere al microfono del cliente attraverso il mio sito web. Quando Chrome chiede se consentire al sito di accedere al microfono dell'utente, viene prodotto [object NavigatorUserMediaError] indipendentemente dal fatto che facciano clic su "consenti" o "nega". Questo è accaduto indipendentemente dal fatto che un microfono sia effettivamente collegato al computer (che sta usando Ubuntu 12.04).Perché getUserMedia lancia un [oggetto NavigatorUserMediaError] quando faccio clic su "Consenti" in Chrome?

Ulteriori test tramite Firefox hanno dimostrato che questo non è specifico per Chrome. Il problema è iniziato solo dopo aver effettuato una demo di live-input e quindi disconnesso dal computer. Ho provato a realizzare una demo di accesso nudo al microfono, e ho riscontrato lo stesso problema.

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); 
} 

Questo è piuttosto enigmatico come aveva funzionato alla perfezione fino al punto in cui mi sono collegato fuori e poi collegato indietro e ho cercato di provare di nuovo.

Sto ospitando il codice Web localmente, tramite Jetty ed Eclipse. Sto accedendo digitando localhost:8080/my-program nel browser web.

Modifica: Dopo l'errore, l'icona di una telecamera viene visualizzata nella barra degli indirizzi di Chrome, dicendo che Chrome sta accedendo al mio microfono e elenca due possibili microfoni, "Predefinito" e "Stereo analogico stereo incorporato. "

Modifica 2: Questo errore si verifica anche su altri siti Web che tentano di accedere al mio microfono tramite webrtc. L'implementazione tradizionale di Flash funziona ancora.

Chrome sembra lanciare un messaggio di errore a intervalli regolari mentre è aperto.

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

Edit 3: sono stato in grado di chiarire il messaggio di errore un po 'più

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

Questo è un problema con il mio sistema, non il mio codice web. Da altri computer, il sito funziona come previsto. –

risposta

3

Questo può avvenire in due situazioni e ho sperimentato sia in Ubuntu 12.04:

  • È stato fatto clic su Rifiuta una sola volta, quindi il browser salva l'impostazione, restituendo sempre l'errore quando viene richiesto l'accesso ai media in tale pagina. (Questo non sembra essere il tuo caso quando ottieni la domanda dal browser, ma devi solo andare alla barra degli indirizzi, fare clic sull'icona della fotocamera e cambiare l'opzione per chiedere di nuovo).

  • Il browser non ha accesso ai dispositivi multimediali e come in qualsiasi computer senza telecamere né microfoni, anche se si preme Consenti, si verificherà un evento di errore in quanto non è in grado di fornire flussi. Prova a controllare le impostazioni del browser per vedere se puoi scegliere la videocamera selezionata. Ho provato questo e l'elenco era vuoto. Per risolvere questo problema ho dovuto riavviare la macchina e Chrome ha iniziato a mostrare di nuovo l'elenco dei dispositivi.

+0

Chrome vede due opzioni microfono, Predefinito e Audio stereo analogico incorporato. L'errore si verifica con entrambe le opzioni. Se quello che dici è vero, come funzionava il sito quando non avevo collegato il microfono? –

+0

Una terza situazione in cui ciò può accadere è quando si accede al sito tramite HTTP e il sito non è localhost - Chrome ora supporta solo l'audio su HTTP. –

6

Un browser alla volta

che ho incontrato questa situazione quando sto testando con più browser aperte. Sembrerebbe che solo un browser possa accedere ai media alla volta.

ie Quando ho la mia pagina aperta in Chrome e il video/audio funziona, quindi Firefox non funzionerà, e quando funzionerò in Firefox, Chrome non funzionerà.

+0

Grazie per il suggerimento. –

1

NavigatorUserMediaError {codice: 1, PERMISSION_DENIED: 1}

Ciò significa le impostazioni del browser non stanno permettendo di accedere alla fotocamera. Vai nelle impostazioni del browser -> sotto le impostazioni del sito web troverai un elenco di pagine web che hai bloccato dall'accesso al tuo dispositivo.

0

getUserMedia funziona solo su https; nessuna eccezione per localhost (cioè http://localhost). Anche Safari sembra non consentire mai getUserMedia da all'interno di un iFrame. Ricevo sempre un "Tentativo di chiamare getUserMedia da un documento con un'origine di sicurezza diversa da quella del frame di primo livello". Questo rende impossibile l'utilizzo di siti come codepen e jsfiddle.

Più detials https://webrtchacks.com/safari-webrtc/

+1

Se non ricordo male, ci ** è ** un'eccezione per 'localhost' in Chrome. – jamix

+1

Sì, ora anche il localhost in Chrome lo supporta. –

+1

ho usato webRtc in precedenza in localhost e ha funzionato bene. ma da quando i nuovi aggiornamenti del browser mi danno questo errore. 'DevicesNotFoundError' controlla questo [collegamento] (https://stackoverflow.com/questions/48378750/getusermedia-devicesnon propagandito-informazioni-nel-grandi-grandi) –