Webrtc Web Audio 将延迟节点添加到传入流
Webrtc Web Audio add Delay Node to incoming stream
我在 Google Chrome.[=25= 中使用网络音频 API 的 DelayNode
为传入的纯音频 WebRTC 流添加延迟]
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()
returns 0 用于接收轨道 audioLevel
.
我尝试了很多不同的方法来绕过接收到的流,所以我只能听到延迟版本,但要么我根本听不到任何音频,要么 getStats()
audioLevel
是0. 我正在寻找一种实现,它保留来自 WebRTC getStats()
的非零 audioLevel
,而只有延迟流正在通过音频输出设备播放。简单来说:
如何在不清零 WebRTC getStats()
接收轨道的情况下只播放延迟流 audioLevel
?
我在 stackblitz here 上创建了问题的最小复制,我在其中创建了一个环回 WebRTC 连接,其中发送方和接收方是同一浏览器。检查控制台日志以查看从 getStats()
.
返回的接收轨道 audioLevel
注意:如果您使用我的 stackblitz,我建议您使用耳机以避免反馈循环。
我没有针对您所述问题的解决方案,但作为获取关卡信息的解决方法,您可以在音频上下文中添加一个AnalyserNode,然后使用它提供的时域或频域数据自己计算音频电平。
我在 Google Chrome.[=25= 中使用网络音频 API 的 DelayNode
为传入的纯音频 WebRTC 流添加延迟]
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()
returns 0 用于接收轨道 audioLevel
.
我尝试了很多不同的方法来绕过接收到的流,所以我只能听到延迟版本,但要么我根本听不到任何音频,要么 getStats()
audioLevel
是0. 我正在寻找一种实现,它保留来自 WebRTC getStats()
的非零 audioLevel
,而只有延迟流正在通过音频输出设备播放。简单来说:
如何在不清零 WebRTC getStats()
接收轨道的情况下只播放延迟流 audioLevel
?
我在 stackblitz here 上创建了问题的最小复制,我在其中创建了一个环回 WebRTC 连接,其中发送方和接收方是同一浏览器。检查控制台日志以查看从 getStats()
.
audioLevel
注意:如果您使用我的 stackblitz,我建议您使用耳机以避免反馈循环。
我没有针对您所述问题的解决方案,但作为获取关卡信息的解决方法,您可以在音频上下文中添加一个AnalyserNode,然后使用它提供的时域或频域数据自己计算音频电平。