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;
据我所知,您无法对远程流执行相同的操作。但我将通过进一步测试来验证这一点。
stream.getAudioTracks()[0] .enabled
。我想当音频被禁用时,它不会传输到对等方,但我还没有能够测量数据传输。 - Bert看起来你想找的是一种撤销麦克风或摄像头访问权限的方法,使数据流停止,指示灯熄灭,并且如果重新激活相机,则再次提示用户。
根据W3C WebRTC规范,你应该能够做到这一点:
脚本可以使用MediaStreamTrack.stop()方法指示轨道不再需要其源。当使用源的所有轨道都已停止时,将撤消该源的权限并停止该源。如果数据来自实时源(例如麦克风或相机),则用户代理应删除该源的任何活动“正在直播”指示器。
peerJS API文档中没有提到stop()方法,但是你应该能够在浏览器的WebRTC实现上调用它,使用你传递给peerJS的call()
函数的流,我将其称为stream
:
var s = function(t) {
t.stop();
}
stream.getAudioTracks().map(s);
这应该会导致浏览器撤销音频访问权限。
然而,我不会太担心在用户的浏览器中保留一个开放的WebRTC连接的安全性。如果有人能够入侵浏览器,他们已经可以访问用户未加密的密码,并且摄像头指示灯(如果可用)无论如何都会亮起来。
祝好运!