声音webRTC android中的回声和噪音



我在webRTC上工作,我在本地网络上的两个android设备之间进行直播,它对我来说运行得很好,除了音质问题——声音中有噪音和回声。如果我在一端使用免提,效果会更好,但我不想使用免提。

那么我该如何提高音质,有什么技术可以提高音质呢。它还表示,如果回声仍然存在,webRTC内置了回声消除功能。

在创建音频源时,可以尝试添加特殊的音频约束。它应该看起来像:

MediaConstraints audioConstraints = new MediaConstraints();
audioConstarints.mandatory.add(new MediaConstraints.KeyValuePair("googNoiseSuppression", "true"));
audioConstarints.mandatory.add(new MediaConstraints.KeyValuePair("googEchoCancellation", "true"));

有很多与音频功能相关的媒体限制,我建议尝试它们的不同组合,完整列表可以在这里找到https://chromium.googlesource.com/external/webrtc/+/分支主管/57/webrtc/api/mediaconstraintsinterface.cc

现在的情况是,您正在向自己播放自己的本地音频。这将在麦克风和扬声器之间创建一个反馈回路。这就是为什么当你有免提设备的时候听起来会更好。您可以通过修改getUserMedia()的流来删除本地音频:

var constraints = {video: true, audio: true};
getUserMedia(constraints, function(stream){
    var videoOnly = new MediaStream(stream.getVideoTracks());
}, errorHandler);

我想你正在体验拉森效应,两个麦克风都在回放两个音频输出,产生无尽的音频循环。如果两个设备都在同一个房间里,你对此无能为力,但实际上浏览器有回声消除选项,你可以通过这种方式激活(不确定默认情况下是这样):

if (window.chrome) {
    audioConstraints = {
        mandatory: {
            echoCancellation: true
        }
    }
} else {
    audioConstraints = {
        echoCancellation: true
    }
}
var constraints = {video: videoConstraints, audio: audioConstraints};
navigator.getUserMedia(constraints, userMediaSuccess, userMediaError);

此外,将本地视频静音,用户显然不需要它。

最新更新