WebRTC - 禁用所有音频处理

Posted

技术标签:

【中文标题】WebRTC - 禁用所有音频处理【英文标题】:WebRTC - disable all audio processing 【发布时间】:2015-07-08 07:22:09 【问题描述】:

我目前正在尝试通过 webrtc 获得尽可能干净的音频通道。通过 getUserMedia mediaconstraints 对象,我设置了以下选项:

constraints: 
        audio: 
            mandatory: 
                echoCancellation: false,
                googEchoCancellation: false,
                googAutoGainControl: false,
                googAutoGainControl2: false,
                googNoiseSuppression: false,
                googHighpassFilter: false,
                googTypingNoiseDetection: false,
                //googAudioMirroring: false // For some reason setting googAudioMirroring causes a navigator.getUserMedia error:  NavigatorUserMediaError
            
        ,
        video: false
    ,

这大大提高了音频质量,但似乎仍然存在音频处理,这会导致某些测试样本以高频噪声的形式破坏音频。

有一个 Chrome 标志 --use-file-for-fake-audio-capture 如http://peter.sh/experiments/chromium-command-line-switches/#use-file-for-fake-audio-capture 所述,它允许通过文件输入进行测试。如标志描述中所述,必须禁用所有音频处理,否则音频将失真 - 因此似乎有其他选项可用于此目的。

我也尝试了--disable-audio-track-processing --audio-buffer-size=16 --enable-exclusive-audio Chrome 标志,但似乎仍然有一些音频处理。

有什么方法可以禁用仍然存在的音频处理(最好通过 JS API)?

【问题讨论】:

这是发生在本地还是在对等连接中? Chrome 可能正在为 Opus 动态更改比特率(只有在您在连接中注意到这一点时才会出现这种情况)。 通过对等连接。我认为这是某种语音音频优化。总是在样本播放 x 时间后开始播放。 我读了它,所以我可以肯定地说比特率是根据可用带宽调整的。 您找到解决方案了吗?我使用 PCMU 作为编解码器,传递这些约束不会删除处理或回声消除 当心这个未解决的问题bugs.chromium.org/p/webrtc/issues/detail?id=5758 【参考方案1】:

我敢打赌,opus 编解码器的可变比特率(默认)行为会导致一些压缩或调整。您可以手动修改 SDP 报价以使用 CBR(恒定比特率)而不是 VBR(可变比特率)。当你从浏览器获得 SDP 报价时,换行:

a=fmtp:111 minptime=10; useinbandfec=1

到:

a=fmtp:111 minptime=10; cbr=1

请注意,我同时添加 cbr=1删除 useinbandfec=1。我不肯定删除 useinbandfec 是必要的,但似乎带内 FEC(转发纠错)会导致您也希望避免的压缩调整。

【讨论】:

【参考方案2】:

这是禁用音频处理并获得干净信号的更新方法:

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

如果您通过 WebRTC 流式传输音频,则默认为针对语音优化的无线电或电话质量音频。因此,请确保您的 SDP 具有 stereomaxaveragebitrate 参数:

a=fmtp:111 minptime=10;useinbandfec=1; stereo=1; maxaveragebitrate=510000

【讨论】:

以上是关于WebRTC - 禁用所有音频处理的主要内容,如果未能解决你的问题,请参考以下文章

reSipWebRTC

WebRTC Native M96中的基本音频处理操作(AudioStateAudioProcessingAudioMixer)

WebRTC音频预处理单元APM的整体编译及使用 - android

提纲挈领webrtc音频处理算法之写在前面的话

WebRTC音频系统 音频发送和接收

WebRTC 一对一语音通话中音频端到端分段延迟分析