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

lit*_*e06 8 javascript jquery 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);
          }
        });
    });
Run Code Online (Sandbox Code Playgroud)

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

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

ica*_*oli 11

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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


Kir*_*tin 5

嗯,这是可能的,但目前只在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);
      }
 );
Run Code Online (Sandbox Code Playgroud)

诀窍是修改流,然后用修改流的音轨(取自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();
Run Code Online (Sandbox Code Playgroud)

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

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

这适合我