我已经使用最高质量的设置和多个STUN / TURN服务器进行了测试,但没有找到真正高质量的流。
根据我的经验,webRTC始终具有波动且有限的带宽和高水平的背景噪音,无法达到mp3 / Shoutcast / Icecast无线电流的质量。
有没有人找到过使用webRTC提供真正高带宽音频流的方法,或者目前实际上不可能这样做?
答案 0 :(得分:3)
首先,值得一提的是Web RTC建立在底层网络连接的基础上,如果它很差,那么很少有更高层可以做到这一点来避免这种情况。
观察您突出显示的特定比较,有几个因素对VoIP语音质量至关重要(假设您专注于问题中的语音):
将其与蒸汽收音机等进行比较,关键是延迟 - 等待几秒钟让流开始播放并不罕见。
这允许接收器填充更大的数据包缓冲区,等待解码和回放,并使其更容忍延迟(抖动)的变化。
举一个简单的例子,如果您的连接中断了半秒,这会立即影响双向VoIP呼叫,但它可能根本不会影响流式音频,假设网络完全恢复且缓冲区有几个当时有几秒钟的内容。
因此,与流式音频相比,您所看到的质量差异很可能与通信的实际性质相关,而不是与固有的WebRTC故障有关 - 或者更准确地说,即使WebRTC是完美的,实时的双向VoIP非常容易受到网络条件的影响。
为。一个注意事项,视频清晰需要更多的带宽,并且也受到网络的影响,但人们往往更容忍视频和口吃。多媒体电话中的语音质量问题(此时amyay)。
答案 1 :(得分:0)
WebRTC的默认音频设置非常低。它默认为42 kb / s左右的单声道音频,因为它似乎是为语音设计的。我通过配置一些设置提高了质量。
1)在getUserMedia()约束中禁用autoGainControl
,echoCancellation
和noiseSuppression
:
navigator.mediaDevices.getUserMedia({
audio: {
autoGainControl: false,
channelCount: 2,
echoCancellation: false,
latency: 0,
noiseSuppression: false,
sampleRate: 48000,
sampleSize: 16,
volume: 1.0
}
});
2)将stereo
和maxaveragebitrate
属性添加到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!