webRTC:稍后添加音频或使用peerJS禁用麦克风
webRTC: Add audio later or disable microphone using peerJS
我目前正在编写一个应用程序,使用户能够使用peerJS通过webRTC启动视频通话。现在,我希望用户能够决定是否要添加音频,而无需重新启动呼叫。
在我看来 - 根据这个答案 - 无法使用浏览器控制麦克风。假设我在启用视频和音频的情况下开始通话,我可以将合作伙伴端的视频元素静音。我不想那样做。为什么?我想有人可以使用浏览器的开发人员控制台并将视频元素取消静音,从而在他或她不知情的情况下监视呼叫者。
所以现在看来,我将不得不重新呼叫合作伙伴并激活视频和音频,现在如果用户只想要视频,我将不得不再次重新呼叫。
我的问题:有没有更好的方法?另外,如果接听电话,有没有办法确定它是仅视频通话还是视频和音频通话?
偶然地,我从Mozilla找到了这篇博文。有趣的部分从标题"静音音频和视频流"下方开始。在这里,您将找到以下代码行:
mediaStream.getVideoTracks()[0].enabled = !(mediaStream.getVideoTracks()[0].enabled);
这基本上意味着您可以禁用视频轨道。事实证明,同样的情况是可能的:
mediaStream.getAudioTracks()[0].enabled = false;
这将使音频流静音。如果将其应用于本地流,如下所示:
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;
据我判断,您不能在远程流上执行相同的操作。但我必须通过进一步的测试来验证这一点。
似乎您正在寻找一种撤销对麦克风或网络摄像头的访问权限的方法,以便数据流停止,指示灯熄灭,如果重新激活相机,则会再次提示用户。
根据W3C WebRTC规范,你应该能够做到这一点:
脚本可以使用 MediaStreamTrack.stop() 方法指示轨道不再需要其源。当使用某个源的所有曲目都已停止时,将撤销对该源的给定权限并停止该源。如果数据是从实时源(例如,麦克风或摄像机)生成的,则用户代理应删除该源的任何活动"广播"指示器。
在peerJS API文档中没有提到stop()方法,但是你应该能够在浏览器的WebRTC实现上调用它,使用传递给peerJS的call()
函数的流,我将称之为stream
:
var s = function(t) {
t.stop();
}
stream.getAudioTracks().map(s);
这应该会导致浏览器撤销音频访问权限。
但是,我不会太担心在用户浏览器中保留打开的WebRTC连接的安全性。如果有人能够入侵浏览器,他们已经可以访问用户的未加密密码,并且相机指示器(如果可用)在任何情况下都会亮起。
祝你好运!
- 使用navigator.getUserMedia(Javascript)访问移动麦克风
- WebAudio API麦克风分贝阈值/选通(麦克风输入太敏感)
- 正在寻找一种跨移动浏览器兼容的方式,通过内置麦克风进行录制
- HTML5音频如何防止浏览器麦克风拾取所有声音
- PeerJS自动重新连接
- 具有多个对等PeerJS
- 通过chrome后台扩展或后台应用程序访问用户麦克风
- 闪烁麦克风事件大小调整
- 如何将MP3文件播放到麦克风输入jQuery中
- 使用Cordova和JavaScript(无需getUserMedia)从android麦克风获取音频数据
- 网络音频:如何使用移动麦克风从远处拾取音频
- Javascript:获取浏览器's选定的麦克风名称
- 使用getUserMedia()同时录制来自多个麦克风的音频
- 访问移动摄像机和麦克风
- 如何使用peerJS对等连接接收数据
- Webrtc.使用PeerJs的对等连接
- 检查摄像头或麦克风是否已连接到计算机
- 检查用户是否已插入麦克风
- 写入服务器时,麦克风的半速音频上下文
- webRTC:稍后添加音频或使用peerJS禁用麦克风