webRTC是否真的可以在没有噪音的情况下传输高质量的音频?

时间:2017-09-05 21:08:53

标签: javascript streaming webrtc voip opus

我已经使用最高质量的设置和多个STUN / TURN服务器进行了测试,但没有找到真正高质量的流。

根据我的经验,webRTC始终具有波动且有限的带宽和高水平的背景噪音,无法达到mp3 / Shoutcast / Icecast无线电流的质量。

有没有人找到过使用webRTC提供真正高带宽音频流的方法,或者目前实际上不可能这样做?

2 个答案:

答案 0 :(得分:3)

首先,值得一提的是Web RTC建立在底层网络连接的基础上,如果它很差,那么很少有更高层可以做到这一点来避免这种情况。

观察您突出显示的特定比较,有几个因素对VoIP语音质量至关重要(假设您专注于问题中的语音):

  • 延迟:为了避免延迟和回声,语音通信需要低端到端的延迟。高质量VoIP系统的目标通常是低于200毫秒的延迟。
  • 抖动 - 这实质上是延迟一次的变化,即端到端延迟如何随时间变化。
  • 数据包丢失 - 与数据相比,语音实际上可以容忍数据包丢失。 VoIp目标通常在1%或更低的范围内。

将其与蒸汽收音机等进行比较,关键是延迟 - 等待几秒钟让流开始播放并不罕见。

这允许接收器填充更大的数据包缓冲区,等待解码和回放,并使其更容忍延迟(抖动)的变化。

举一个简单的例子,如果您的连接中断了半秒,这会立即影响双向VoIP呼叫,但它可能根本不会影响流式音频,假设网络完全恢复且缓冲区有几个当时有几秒钟的内容。

因此,与流式音频相比,您所看到的质量差异很可能与通信的实际性质相关,而不是与固有的WebRTC故障有关 - 或者更准确地说,即使WebRTC是完美的,实时的双向VoIP非常容易受到网络条件的影响。

为。一个注意事项,视频清晰需要更多的带宽,并且也受到网络的影响,但人们往往更容忍视频和口吃。多媒体电话中的语音质量问题(此时amyay)。

答案 1 :(得分:0)

WebRTC的默认音频设置非常低。它默认为42 kb / s左右的单声道音频,因为它似乎是为语音设计的。我通过配置一些设置提高了质量。

1)在getUserMedia()约束中禁用autoGainControlechoCancellationnoiseSuppression

navigator.mediaDevices.getUserMedia({
  audio: {
    autoGainControl: false,
    channelCount: 2,
    echoCancellation: false,
    latency: 0,
    noiseSuppression: false,
    sampleRate: 48000,
    sampleSize: 16,
    volume: 1.0
  }
});

2)将stereomaxaveragebitrate属性添加到SDP:

let answer = await peer.conn.createAnswer(offerOptions);
answer.sdp = answer.sdp.replace('useinbandfec=1', 'useinbandfec=1; stereo=1; maxaveragebitrate=510000');
await peer.conn.setLocalDescription(answer);

这可能会使立体声的最大比特率达到520kb / s,即每个通道260kps!