Как исправить сильное эхо при записи звука с помощью navigator.mediaDevices.getUserMedia? - PullRequest
1 голос
/ 30 апреля 2020

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

Я использую:

  • Windows 10 PRO 18362.778
  • Chrome 81.0.4044.113
  • Электрон 8.2.3

Вот некоторый код.

Я создаю эти ограничения, когда хочу захватить и записать только видео:

const constraints = {
        audio: false,
        video: {
            mandatory: {
                chromeMediaSource: 'desktop',
                chromeMediaSourceId: source.id
            }
        }
    }

Затем я передаю это потоку так:

const stream = await navigator.mediaDevices.getUserMedia(constraints)

Это работает как шарм. Однако, когда я начинаю добавлять аудио, это дает мне эхо:

const constraints = {
        audio: {
            mandatory: {
                chromeMediaSource: 'desktop',
            }
        },
        video: {
            mandatory: {
                chromeMediaSource: 'desktop',
            }
        }
    }

Кроме того, я не могу просто установить звук на true. Затем он дает мне эту ошибку:

Uncaught (в обещании) DOMException: Ошибка запуска захвата экрана

Интересный факт. Когда я go до страницы документации Mozilla об аудио ограничениях и использую демо-кнопку, это также дает мне эхо. Я пытался сделать это на Edge, и результат получился лучше, но все же имел эхо. Так может ли это быть аудиокод c?

Здесь говорит, что ограничение echoCancellation поддерживается и включено по умолчанию, начиная с Chrome версии 62.

Здесь - это ветвь на Github где я пытался найти решение, но не смог.

Здесь - это мое git репо, если вы хотите посмотреть на него более внимательно.

PS: это мое первый пост здесь. Дайте мне знать, если я сделал что-то не так и могу улучшить пост. Спасибо!

1 Ответ

0 голосов
/ 30 апреля 2020

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

 // Preview the source in a video element
    videoElement.srcObject = stream
    videoElement.muted = true
    videoElement.play()

Это будет работать во всех браузерах, и вы все равно будете записывать звук.

...