Как получить разрешение на захват звука в расширении Chrome без фактической записи

#javascript #google-chrome-extension #getusermedia

#javascript #google-chrome-extension #getusermedia

Вопрос:

Я использую getUserMedia для записи аудио от пользователя следующим образом:

 stream = await navigator.mediaDevices.getUserMedia({ audio: true });
  

После выполнения этой строки запрашивается разрешение пользователя на запись звука. Я хочу сделать этот шаг вперед, например, сначала запросить разрешение, и если разрешение не предоставлено, я не показываю пользовательский интерфейс записи. Как мы можем этого добиться?

Ответ №1:

В обычном коде веб-страницы он работает, чтобы получить поток, а затем остановить его дорожки. Подобная функция должна сделать это за вас.

 async function getUserMediaPermission (constraints) {
    try {
        const stream = await navigator.mediaDevices.getUserMedia (constraints)
        if (stream) {
            stream.tracks.forEach(track => track.stop())
            return true
        }
        return false
    } 
    catch(error) {
        return false
    }
}
  

Затем вы вызываете функцию с таким кодом

  const permissionGranted = getUserMediaPermission ({audio:true})
 if (!permissionGranted) console.log ('Hey! to use this you must grant permission!')
  

Что это делает: он получает поток. await getUserMedia() не завершается, пока пользователь не предоставит разрешение. Вызывается catch{} , если пользователь отказывает в разрешении.

Но в настольных браузерах разрешение является постоянным, поэтому оно уже было предоставлено await getUserMedia() сразу. То же самое верно, если в нем уже было отказано.

Как только у вас есть поток, вы должны закрыть его. Нет никакой stream.close() функции: способ, которым вы «закрываете» поток, — это остановить все его дорожки и позволить stream объекту выйти из области видимости.

Я не знаю, работает ли это в веб-расширениях; Я знаю, что это работает в настольных и мобильных браузерах. Если у вас это работает в вашем веб-расширении, пожалуйста, оставьте комментарий или ответ, в котором говорится, как вы это сделали.