Webrt c Web Audio добавляет Delay Node во входящий поток - PullRequest
1 голос
/ 04 апреля 2020

Я добавляю задержку к входящему только для аудио потоку WebRT C, используя DelayNode в Google Audio API в Google Chrome.

connectionRecv.onaddstream = (event) => {
  const recvAudio = new Audio();
  recvAudio.srcObject = event.stream.clone();
  recvAudio.autoplay = true;

  recvAudio.onloadedmetadata = () => {

    // controls if original stream should also be played
    // true causes WebRTC getStats() receive track audioLevel == 0
    recvAudio.muted = muteOriginalStream;

    const recvAudioSource = audioContext.createMediaStreamSource(recvAudio.srcObject as MediaStream);
    const delayNode = audioContext.createDelay();
    delayNode.delayTime.value = 1; // delay by 1 second
    recvAudioSource.connect(delayNode);
    delayNode.connect(audioContext.destination);
  };
};

Это работа с одной маленькой проблемой. Я хочу отключить исходный поток, чтобы не слышать двойной звук (исходный поток и задержанный поток). Но когда я приглушаю исходный поток, чтобы слышать только задержанный поток, RTCPeerConnection getStats() возвращает 0 для дорожки приема audioLevel.

Я пробовал много разных способов обвязки вокруг принятый поток, поэтому я слышу только задержанную версию, но либо вообще не слышу звука, либо getStats() audioLevel равен 0. Я ищу реализацию, которая сохраняет ненулевое значение audioLevel из WebRT C getStats(), пока через устройство вывода звука воспроизводится только задержанный поток. Проще говоря:

Как я могу воспроизвести только задержанный поток без обнуления WebRT C getStats() приемный трек audioLevel?

I Я создал минимальное воспроизведение проблемы на стеке здесь , где я создаю петлевое соединение WebRT C, где отправитель и получатель - это один и тот же браузер. Изучите журналы консоли, чтобы увидеть полученную дорожку audioLevel, возвращенную с getStats().

Примечание: если вы используете мой стек-блиц, я предлагаю вам использовать наушники, чтобы избежать обратной связи l oop.

1 Ответ

1 голос
/ 04 апреля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...