最近、自分のWebサイトからクライアントのマイクにアクセスしようとすると、エラーが発生し始めました。 Chromeがサイトにユーザーのマイクへのアクセスを許可するかどうかを尋ねるとき、ユーザーが「許可」または「拒否」をクリックするかどうかにかかわらず、[object NavigatorUserMediaError]
が生成されます。これはかどうかに関係なく発生しています。マイクは実際にはコンピューター(Ubuntu 12.04を実行している)に接続されています。
Firefoxでさらにテストしたところ、これはChromeに固有のものではないことがわかりました。この問題は、ライブ入力デモを実行してからコンピューターからログアウトした後にのみ開始されました。マイクにアクセスするための骨の折れるデモを作成しようとしましたが、同じ問題が発生しました。
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);
}
これは、ログアウトしてから再度ログインして再度テストを試みるまでは完全に機能していたため、かなり不可解です。
JettyとEclipseを介して、Webコードをローカルでホストしています。 Webブラウザにlocalhost:8080/my-program
と入力してアクセスしています。
編集:エラーが発生した後、カメラのアイコンがchromeアドレスバーに表示され、Chromeが私のマイクにアクセスしていて、2つの可能なマイクが一覧表示されています、「デフォルト」および「内蔵オーディオアナログステレオ」。
編集2:このエラーは、webrtcを介してマイクにアクセスしようとする他のWebサイトでも発生しています。従来のFlash実装は引き続き機能します。
Chromeは、開いている間、定期的にエラーメッセージをスローしているようです。
[361:362:0725/095320:ERROR:audio_output_device.cc(186)]
Not implemented reached in virtual void
media::AudioOutputDevice::OnStateChanged(media::AudioOutputIPCDelegate::State)
編集3:エラーメッセージをもう少し明確にすることができました
NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}
**一度に1つのブラウザ**
複数のブラウザを開いてテストしているときに、この状況が発生しました。一度に1つのブラウザのみがメディアにアクセスできるように見えます。
つまり、ページをChromeで開いていて、ビデオ/オーディオが機能している場合、Firefoxは機能しません。また、Firefoxで機能している場合、Chrome動作しません。
これは2つの状況で発生する可能性があり、Ubuntu12.04で両方を経験しました。
[拒否]を1回クリックすると、ブラウザはその設定を保存し、そのページでメディアアクセスを要求されると常にエラーを返します。 (ブラウザから質問が表示されるので、これは当てはまらないようですが、アドレスバーに移動し、カメラアイコンをクリックして、オプションを変更してもう一度質問するだけです)。
お使いのブラウザはメディアデバイスにアクセスできず、カメラやマイクのないコンピュータと同様に、[許可]を押しても、ストリームを提供できないため、エラーイベントが発生します。ブラウザの設定をチェックして、選択したカメラを選択できるかどうかを確認してください。私はこれを経験しました、そしてリストは空でした。これを解決するには、マシンを再起動する必要があり、Chromeはデバイスのリストを再び表示し始めました。
NavigatorUserMediaError {コード:1、PERMISSION_DENIED:1}
これは、ブラウザの設定でカメラへのアクセスが許可されていないことを意味します。ブラウザの設定に移動します->ウェブサイトの設定の下に、デバイスへのアクセスをブロックしたウェブページのリストが表示されます。
getUserMediaはhttpsでのみ機能します。 localhostの例外はありません(つまり、 http:// localhost )。 Safariは、iFrame内からのgetUserMediaを許可していないようです。 「最上位フレームとは異なるセキュリティオリジンを持つドキュメントからgetUserMediaを呼び出そうとしています」というエラーが常に発生します。これにより、codepenやjsfiddleなどのサイトを使用できなくなります。