声音webRTC android中的回声和噪音

时间:2015-03-25 06:46:30

标签: android webrtc

我正在研究webRTC我正在本地网络上的两个Android设备之间进行实时流动它对我来说工作得非常好,除了声音质量问题,声音中有噪音和回声。如果我在一端使用免提,它会变得更好,但我不想使用免提。

那么我怎样才能改善音质,有哪些技术可以改善音质。它还说webRTC具有内置的回声消除功能,如果不是为什么echo还在那里。

3 个答案:

答案 0 :(得分:3)

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

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

有许多与音频功能相关的媒体限制,我建议尝试不同的组合,您可以在此处找到完整列表https://chromium.googlesource.com/external/webrtc/+/master/talk/app/webrtc/mediaconstraintsinterface.cc

答案 1 :(得分:2)

我猜您正在体验Larsen效果,两个麦克风都会重放2个音频输出,从而创建无限的音频循环。 如果两个设备都在同一个房间,你可以做的很少,但实际上浏览器有回声消除选项你可以用这种方式激活(不确定它们是默认的):

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

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

答案 2 :(得分:1)

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

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