即使在使用 webRTC 建立对等连接后停止流后,浏览器仍继续使用红点访问相机
Posted
技术标签:
【中文标题】即使在使用 webRTC 建立对等连接后停止流后,浏览器仍继续使用红点访问相机【英文标题】:Browser keeps on accessing the camera with red dot even after stopping the stream aafter establishing the peer connection using webRTC 【发布时间】:2020-10-16 18:23:42 【问题描述】:let localStream;
let peerConnection;
navigator.mediaDevices.getUserMedia(
audio: true,
video: true
).then(function(stream)
createPeerConnection();
localStream = stream;
peerConnection.addStream(localStream);
);
所以当停止流时它会停止视频
localStream.getTracks().forEach(track => track.stop());
但浏览器选项卡显示它正在访问摄像头或麦克风,旁边有一个红点。我只是不想重新加载页面以阻止它。
注意:这种情况发生在使用 webRTC 建立对等连接后,并且在断开对等连接后,摄像头灯保持亮起。
有没有办法做到这一点。提前感谢您的帮助。
【问题讨论】:
这能回答你的问题吗? Stop/Close webcam which is opened by navigator.getUserMedia 感谢您的回复。我也从中得到了参考。没有帮助。我得到了一个新观点,即在与其他对等方建立 webRTC 调用后,相机没有停止。似乎一些 stram 克隆仍在该页面中。有没有办法销毁所有的流。createPeerConnection()
看起来像什么?你在那里克隆媒体流吗?
在 createPeerConnection() 中我只创建 peerconnection 并初始化 pc 以及使用 pc.addStream(localStream)
添加流
@PradiptaDey 你能展示一下你是怎么做到的吗?试图复制,但不能在这里。
【参考方案1】:
您可以使用布尔值或条件,其中在 track.stop() 之后选项卡访问相机,您可以将值设置为 false,然后相机将不再被访问。 (ps如果可行的话你可以试试)
<!DOCTYPE html>
<html>
<head>
<title>Web Client</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div id="callerIDContainer">
<button onclick="call_user();">Call User</button>
</div>
<div class="video-container">
<video autoplay muted class="local-video" id="local-video"></video>
</div>
<div>
<button onclick="hangup();">Hangup</button>
</div>
</body>
<script >
var localStream;
var accessRequired=true
function call_user() //your function
if(accessRequired)
navigator.mediaDevices.getUserMedia(
audio: true,
video: true
).then(function(stream)
localStream = stream;
const localVideo = document.getElementById("local-video");
if (localVideo)
localVideo.srcObject = localStream;
);
function hangup()
localStream.getTracks().forEach(track => track.stop()).then(()=>accessRequired=false);
</script>
</html>
试试这个呼叫用户然后挂断它正在工作
【讨论】:
你能用一个sinppet或例子解释一下吗 感谢您的回复,但我想这无济于事,因为我已经有一个函数,在停止后我正在访问相机,我需要调用该函数才能再次访问相机。问题是相机灯在停止后仍然亮着,我也没有再次调用该函数。 @Pradipta Dey - 你解决了这个问题吗?【参考方案2】:您问题中的示例代码看起来像是使用 gUM() 创建纯音频流 (video: false, audio:true
)。
如果在纯音频流上的所有轨道上使用 .stop()
也会停止其他流上的视频轨道,那就太奇怪了。如果您想关闭相机的直播灯,您需要停止您在peerConnection.addTrack(videoTrack)
中使用的视频轨道。您可能还需要使用peerConnection.close()
终止通话。
【讨论】:
感谢您的回复。我想你明白了我的意思。绝对对不起配置视频应该是真的。我现在已经编辑了这个问题。我已经使用了获取 userMedia 的成功回调如下peerConnection.addStream(localStream)
所以在断开连接时我也在做peerConnection.close()
并停止所有轨道。有时相机灯仍然亮着,浏览器说它仍在访问我的相机【参考方案3】:
我在使用 webRTC 和 React 时遇到了同样的问题。我已经停止了远程流的轨道,但我忘了停止本地流:
window.localStream.getTracks().forEach((track) =>
track.stop();
);
【讨论】:
以上是关于即使在使用 webRTC 建立对等连接后停止流后,浏览器仍继续使用红点访问相机的主要内容,如果未能解决你的问题,请参考以下文章