2015-03-25 273 views
5

我正在webRTC我做两个Android设备之间的本地网络上的直播流它对我来说工作相当好,除了音质问题有噪音和回声在声音。如果我在一端使用免提,它会变得更好,但我不想使用免提。回声和噪音在声音webRTC android

那么,我该如何改善音质,还有哪些技巧可以改善音质。它还表示webRTC具有内置的回声消除功能,而不是回声仍然存在的原因。

回答

1

我想你正在经历拉森效应,这两个麦克风重放2个音频输出,创造无限的音频循环。 没有什么可以做针对这一点,如果两个设备都在同一个房间,但确确实实的浏览器有一个可以激活这种方式(不知道他们是默认情况下)回声消除选项:

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

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

1

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

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

其实我编码在Android这样我怎么能在android端做到这一点? – umerk44 2015-03-26 07:58:51

+0

@ umerk44你可以编辑你的问题,包括你写的一些代码来获取用户的视频和音频流? – 2015-03-26 08:28:42

2

您可以尝试在您创建音频源添加特殊的音频约束。它应该是这样的:

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