我目前正在编写一个应用程序,使用户能够使用 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/