Webrtc Web音频将延迟节点添加到传入流中

问题描述 投票:0回答:1

我正在Google Chrome中使用Web Audio API的DelayNode向传入的纯音频WebRTC流添加延迟。

DelayNode

这正在解决一个小问题。我想使原始流静音,以免听到双重音频(原始流和延迟流)。但是,当我使原始流静音时,我只听到延迟的流时,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()为0。我在寻找一种实现,它保留WebRTC audioLevel中的非零audioLevel,而仅延迟流正在通过音频输出设备播放。简而言之:

我如何只播放延迟的流而不将WebRTC getStats()接收音轨getStats()归零?

我已经在stackblitz audioLevel上创建了该问题的最小复制,在其中我创建了环回WebRTC连接,其中发送方和接收方是同一浏览器。检查控制台日志,以查看从here返回的接收轨道audioLevel

注意:如果您使用我的堆叠闪电弹,我建议您使用耳机来避免反馈回路。

google-chrome webrtc signal-processing html5-audio web-audio-api
1个回答
0
投票

我没有针对您所陈述问题的解决方案,但是作为替代方法以获取电平信息,您可以在音频上下文中添加getStats()并使用时域或频域数据它可以自己计算音频电平。

© www.soinside.com 2019 - 2024. All rights reserved.