В последнее время я начал получать ошибки при попытке получить доступ к микрофону клиента через мой веб-сайт. Когда 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. Я обращаюсь к нему, набрав localhost:8080/my-program
в веб-браузере.
Изменить: После появления ошибки значок камеры появляется в хромированной адресной строке, говоря, что Chrome обращается к моему микрофону и перечисляет два возможных микрофона: "По умолчанию" и "Встроенный аналоговый стереозвук".
Изменить 2: Эта ошибка также возникает на других веб-сайтах, которые пытаются получить доступ к моему микрофону через webrtc. Традиционная реализация 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}