javascript - webRTC 真的有可能无噪音地传输高质量音频吗?

标签 javascript streaming webrtc voip opus

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

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

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

最佳答案

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
  }
});
  1. 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);

这为立体声提供了 520kbps 的潜在最大比特率,即每个 channel 260kbps!

实际比特率取决于您的网络速度和信号强度。

有关 SDP 的更多信息:

The Session Description Protocol (SDP) [RFC4566] describes various aspects of multimedia session such as media capabilities, transport addresses and related metadata in a transport agnostic manner, for the purposes of session announcement, session invitation and parameter negotiation.

https://tools.ietf.org/id/draft-nandakumar-rtcweb-sdp-01.html#rfc.section.3

查看我的实现了这些功能的项目: https://github.com/kmturley/webrtc-radio

关于javascript - webRTC 真的有可能无噪音地传输高质量音频吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063374/

相关文章:

javascript - 使用 WebRTC/替代方案的点对点 1080p 直播?

javascript - jquery 文件上传成功后如何从 C# MVC Controller 获取响应

javascript - 更新 Meteor.js 中的帖子

javascript - 如何在javascript中将xml数据格式存储为字符串?

javascript - AngularJS 指令与 Controller 对话以调用 onchange 函数

ios - 使用 MPMoviePlayerController 而不是 UIWebView 播放 YouTube 视频

ajax - 通过 http 流式传输二进制数据

java - Java 中的文件流

firefox - 使用 MediaRecorder 指定编解码器

javascript - 如何从 Canvas 中保存图像