8

ユーザーが電話をかけることができるスライドアウトウィジェットを含むデモサイトに取り組んでいます。

通話を処理するために webrtc2sip バックエンドと共に SIPml5 ツールを使用しています。その部分はすべてセットアップされ、適切に機能しています。そのため、ウィジェットのスライダーを使用してマイクと音量レベルを制御できるかどうかを確認しています。これは可能ですか?私はオンラインでどこでも見ていますが、あまり運がありません。

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 を使用しているときにこれを行うことが許可されているかどうか、または jQuery コードを調整する必要があるかどうかはわかりません。

マイク/音量コントロールを追加して運が良かった人はいますか? ご協力いただきありがとうございます。

4

2 に答える 2

6

それは可能ですが、現在は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;
  }
};

これは私のために働く

于 2015-02-19T04:13:10.340 に答える