我正在研究webRTC我正在本地网络上的两个Android设备之间进行实时流动它对我来说工作得非常好,除了声音质量问题,声音中有噪音和回声。如果我在一端使用免提,它会变得更好,但我不想使用免提。
那么我怎样才能改善音质,有哪些技术可以改善音质。它还说webRTC具有内置的回声消除功能,如果不是为什么echo还在那里。
答案 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);