【问题标题】:How to add audio/video mute/unmute buttons in WebRTC video chat如何在 WebRTC 视频聊天中添加音频/视频静音/取消静音按钮
【发布时间】:2016-03-31 21:24:20
【问题描述】:

我正在尝试创建 WebRTC 视频聊天。现在,我正忙于创建媒体轨道按钮(静音视频以启用或禁用视频发送,以及静音音频以与音频相同)。这是我的代码。

<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);
  });

有人可以指导我吗?

【问题讨论】:

    标签: javascript jquery webrtc videochat


    【解决方案1】:

    流中的视频和音频轨道有一个enabled 属性,您可以对其进行修改。例如:

    function muteMic() {
      myStream.getAudioTracks().forEach(track => track.enabled = !track.enabled);
    }
    
    function muteCam() {
      myStream.getVideoTracks().forEach(track => track.enabled = !track.enabled);
    }
    

    【讨论】:

    • 这将停止视频和音频流。这不是问题所问的。
    • @NafiuLawal 它只是暂停(静音)它们,但是是的,我已经更新了独立静音相机和麦克风的答案。谢谢!
    【解决方案2】:

    终于搞定了! 这个“webrtc video stream stop sharing”的问题的第一个答案引导我走向正确的方向。 我创建了两个新函数来静音视频和音频,并将它们绑定到 html 文件中的适当按钮。 最后变成了这个样子:

    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);
    }
    

    希望对某人有所帮助。

    【讨论】:

    • 您好,我是在阅读The evolution of webRTC 后来到这里,但未能成功。虽然这件事更简单,而且可以正常工作。有人可以确认哪种是标准方式,我应该使用哪种方式!非常感谢:D
    【解决方案3】:

    使用MediaStreamTrack.enabled

    let mic_switch = true;
    let video_switch = true;
    
    function toggleVideo() {
      if(localStream != null && localStream.getVideoTracks().length > 0){
        video_switch = !video_switch;
    
        localStream.getVideoTracks()[0].enabled = video_switch;
      }
    
    }
    
    function toggleMic() {
      if(localStream != null && localStream.getAudioTracks().length > 0){
        mic_switch = !mic_switch;
    
        localStream.getAudioTracks()[0].enabled = mic_switch;
      }     
    

    远程流也一样。

    【讨论】:

      猜你喜欢
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多