Search code examples
javascriptjquerywebrtcvideochat

How to add audio/video mute/unmute buttons in WebRTC video chat


I'm trying to create WebRTC video chat. Now I'm stacked on creating media-tracks buttons (mute video to enable or disable video sending, and mute audio to make the same with audio). Here is my code.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
  <script type="text/javascript" src="http://cdn.peerjs.com/0.3/peer.min.js"></script>
  <script>
  navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

  var myStream;
  var peer = new Peer({key: 'PeerJS key'});
  var setOthersStream = function(stream){
    $('#others-video').prop('src', URL.createObjectURL(stream));
  };

  var setMyStream = function(stream){
    myStream = stream;
    $('#video').prop('src', URL.createObjectURL(stream));

  };

  peer.on('open', function(id){
    $('#peer-id').text(id);
  });

  peer.on('call', function(call){
    call.answer(myStream);
    call.on('stream', setOthersStream);
  });

  $(function(){
    navigator.getUserMedia({audio: true, video: true}, setMyStream, function(){});

    $('#call').on('click', function(){
      var call = peer.call($('#others-peer-id').val(), myStream);
      call.on('stream', setOthersStream);
    });
  });

  peer.on('error', function(e){
    console.log(e.message);
  });

Can anyone guide me please?


Solution

  • finally I got it work! The first answer for question from this "webrtc video stream stop sharing" guided me to the right direction. I created two new functions to mute video and audio, and bound them to appropriate buttons in html file. And finally it became look like this:

    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
    
    var myStream;
    var peer = new Peer({key: 'PeerJS key'});
    
    var setOthersStream = function(stream){
      $('#others-video').prop('src', URL.createObjectURL(stream));
    };
    
    var setMyStream = function(stream){
      myStream = stream;
      $('#video').prop('src', URL.createObjectURL(stream));
    };
    
    peer.on('open', function(id){
      $('#peer-id').text(id);
    });
    
    peer.on('call', function(call){
      call.answer(myStream);
      call.on('stream', setOthersStream);
    });
    
    $(function(){
      navigator.getUserMedia({audio: true, video: true}, setMyStream, function(){});
      $('#call').on('click', function(){
        var call = peer.call($('#others-peer-id').val(), myStream);
        call.on('stream', setOthersStream);
      });
    });
    
    peer.on('error', function(e){
      console.log(e.message);
    });
    
    //create button to toggle video
    var video_button = document.createElement("video_button");
    video_button.appendChild(document.createTextNode("Toggle hold"));
    
    video_button.video_onclick = function(){
      myStream.getVideoTracks()[0].enabled = !(myStream.getVideoTracks()[0].enabled);
    }
    
    var audio_button = document.createElement("audio_button");
    video_button.appendChild(document.createTextNode("Toggle hold"));
    
    audio_button.audio_onclick = function(){
      myStream.getAudioTracks()[0].enabled = !(myStream.getAudioTracks()[0].enabled);
    }
    

    Hope it will help to someone.