WebRTC:是否可以控制麦克风和音量

我正在开发一个演示站点,其中包括一个允许用户拨打电话的滑出式小部件。

我正在使用SIPml5工具和webrtc2sip后端来处理呼叫。 这部分都已设置好并正常工作。 所以现在我正在考虑是否可以使用窗口小部件中的滑块控制麦克风和音量级别。 这有可能吗? 我在网上到处看,并没有太多运气。

我找到了一些网站,向我展示了如何控制jQuery滑块代码中音频标签的音量。 所以我尝试设置它,如下面的代码:

$(function() { $( "#slider-spkr" ).slider({ orientation: "vertical", range: "min", min: 0, max: 100, value: 60, slide: function( event, ui ) { var value = $("#slider-spkr").slider("value"); document.getElementById("audio_remote").volume = (value / 100); }, change: function() { var value = $("#slider-spkr").slider("value"); document.getElementById("audio_remote").volume = (value / 100); } }); }); 

不幸的是,这也不起作用。 所以我不确定在使用SIPml5时是否允许这样做,或者我的jQ​​uery代码需要调整。

有没有其他人有运气添加麦克风/音量控制? 谢谢你的帮助。

Afaik无法调整麦克风音量。 但您可以使用stream api打开/关闭它:

 function toggleMic(stream) { // stream is your local WebRTC stream var audioTracks = stream.getAudioTracks(); for (var i = 0, l = audioTracks.length; i < l; i++) { audioTracks[i].enabled = !audioTracks[i].enabled; } } 

此代码适用于本机webrtc api,而不是sipML5。 看来他们还没有实现它。 这里的收据不是很清楚。

嗯,这是可能的,但目前只在Chrome中有一些假设。 我不是作者,你可以在这个开源库( SimpleWebRtc )中找到这段代码的灵感。

 navigator.webkitGetUserMedia(constraints, function(webRTCStream){ var context = new window.AudioContext(); var microphone = context.createMediaStreamSource(webRTCStream); var gainFilter = context.createGain(); var destination = context.createMediaStreamDestination(); var outputStream = destination.stream; microphone.connect(gainFilter); gainFilter.connect(destination); var filteredTrack = outputStream.getAudioTracks()[0]; webRTCStream.addTrack(filteredTrack); var originalTrack = webRTCStream.getAudioTracks()[0]; webRTCStream.removeTrack(originalTrack); }, function(err) { console.log("The following error occured: " + err); } ); 

诀窍是修改流,然后用修改流的音轨(取自MediaStreamDestination流)替换当前流的音轨。

免责声明:

这在版本35的FireFox中不起作用,因为它们只是没有实现MediaStream.addTrack / removeTrack。 我目前使用此检查

  this.micVolumeIsSupported = function() { var MediaStream = window.webkitMediaStream || window.MediaStream; return !!MediaStream.prototype.addTrack && !!MediaStream.prototype.removeTrack; }; _gainSupported = this.micVolumeIsSupported(); 

由于在使用混合曲目停止流的错误 ,Chrome中存在限制。 您可能希望在关闭连接或连接中断之前恢复这些轨道;

 this.restoreTracks = function(){ if(_gainSupported && _tracksSubstituted){ webRTCStream.addTrack(originalTrack); webRTCStream.removeTrack(filteredTrack); _tracksSubstituted = false; } }; 

这对我有用