javascript - webRTC:稍后添加音频或使用 peerJS 禁用麦克风

标签 javascript html webrtc video-conferencing peerjs

我目前正在编写一个应用程序,使用户能够使用 peerJS 通过 webRTC 开始视频通话。现在,我希望用户能够决定是否要添加音频,而无需重新开始通话。

如我所见 - 根据 this answer - 无法使用浏览器控制麦克风。假设我在启用视频和音频的情况下开始通话,我可以将合作伙伴端的视频元素静音。我不想那样做。为什么?我想有人可以使用浏览器的开发人员控制台并取消视频元素的静音,从而在调用者不知情的情况下监视调用者。

所以现在看来​​我必须重新调用合作伙伴并激活视频和音频,现在如果用户只想要视频我将不得不再次调用。

我的问题:有更好的方法吗?另外,如果接听电话,有没有办法确定它是纯视频通话还是视频和音频通话?

最佳答案

我偶然发现了this blog post from Mozilla .有趣的部分从标题“静音音频和视频流”下方开始。在这里您将找到以下代码行:

mediaStream.getVideoTracks()[0].enabled = !(mediaStream.getVideoTracks()[0].enabled);

这基本上意味着您可以禁用视频轨道。事实证明,同样的事情也可能发生在:

mediaStream.getAudioTracks()[0].enabled = false;

这将使音频流静音。如果像这样应用于 localStream:

Participant.prototype.startCall = function(){

     var participant = this;

     var target = participant.callees[0];

     navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

     navigator.getUserMedia({
          audio: true,
          video: true
     },function(stream){
          console.log("called");
          //IMPORTANT LINE HERE
          stream.getAudioTracks()[0].enabled = false;
          participant.localStream = stream;
          participant.call = participant.peer.call(target, stream);
     },function(error){
          console.log(error);   
     });
};

它似乎禁用了音频流。如您所见,我将 localStream 存储为我的对象的属性,稍后可以使用

激活音频流
myObj.localStream.getAudioTracks()[0].enabled = true;

据我判断,您不能对 remoteStream 执行相同的操作。但我必须通过进一步的测试来验证这一点。

关于javascript - webRTC:稍后添加音频或使用 peerJS 禁用麦克风,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22783682/

相关文章:

javascript - HTML5 不加载隐藏的 div?

javascript - 当滚动触发时,JQuery 多次重复百分号

html - 对齐项的限制 :stretch on flexbox?

javascript - 为什么从同一设备查看 3 次后重定向页面不起作用?

webrtc - Modernizr getusermedia 未定义

Webrtc Android DTMF 支持

javascript - 如何减去两个时间字符串 (HH :MM) in javascript?

javascript - JSX 表达式必须有一个父元素。ts(2657) 原生 react

html - Angular 组件倾斜的背景

javascript - Webrtc为什么ontrack从不调用调用者?