localStream.getTracks().forEach(track => track.stop());
3 Réponses :
vous pouvez utiliser une valeur booléenne ou une condition dans laquelle l'onglet accède à la caméra après track.stop (), vous pouvez définir la valeur sur false, la caméra ne sera plus accessible. (ps tu peux essayer ça si ça marche)
<!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>
essayez cet utilisateur d'appel puis raccrochez cela fonctionne
Pouvez-vous s'il vous plaît expliquer avec un sinppet ou un exemple
Merci pour la réponse, mais cela n'aidera pas, je suppose, car j'ai déjà une fonction à l'intérieur de laquelle j'accède à la caméra après m'être arrêté, je dois appeler cette fonction pour accéder à nouveau à la caméra. Le problème est que la lumière de la caméra reste allumée même après l'arrêt et que je n'invoque pas à nouveau la fonction.
L'exemple de code de votre question semble utiliser gUM () pour créer un flux audio uniquement ( {video: false, audio:true}
).
Il serait étrange que l'utilisation de .stop()
sur toutes les pistes de votre flux audio uniquement arrête également la piste vidéo sur un autre flux. Si vous souhaitez éteindre la lumière en direct de votre caméra, vous devrez arrêter la piste vidéo que vous avez utilisée dans peerConnection.addTrack(videoTrack)
. Vous devrez probablement également supprimer l'appel en utilisant peerConnection.close()
.
Merci pour votre réponse. Je pense que vous avez compris mon point. Absolument désolé pour la vidéo de configuration devrait être vrai là-bas. J'ai édité la question maintenant. J'ai utilisé le rappel de succès pour obtenir userMedia comme ci-dessous peerConnection.addStream(localStream)
Donc, tout en déconnectant, je fais également peerConnection.close()
et peerConnection.close()
toutes les pistes. Parfois, la lumière de la caméra reste allumée et le navigateur dit qu'il accède toujours à ma caméra
J'ai eu le même problème avec webRTC et React. J'ai arrêté les pistes du flux distant mais j'ai oublié d'arrêter le flux local:
window.localStream.getTracks().forEach((track) => { track.stop(); });
Est-ce que cela répond à votre question? Arrêter / Fermer la webcam qui est ouverte par navigator.getUserMedia
Merci pour votre réponse. J'en ai également tiré la référence. N'aide pas. J'ai eu un nouveau point qui est que la caméra ne s'arrête pas après avoir établi un appel webRTC avec un autre pair. Il semble qu'un clone de stram se trouve toujours sur cette page. Existe-t-il une option pour détruire tous les flux.
À quoi ressemble
createPeerConnection()
? Clonez-vous le flux multimédia là-bas?à l'intérieur de createPeerConnection () Je crée uniquement la connexion et initialise le PC et j'ajoute le flux en utilisant
pc.addStream(localStream)
@PradiptaDey pouvez-vous montrer comment vous faites cela? Essayer de repro mais ne peut pas ici.