1
votes

Le navigateur continue d'accéder à la caméra avec un point rouge même après avoir arrêté le flux après avoir établi la connexion homologue à l'aide de webRTC

localStream.getTracks().forEach(track => track.stop());

5 commentaires

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.


3 Réponses :


0
votes

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


2 commentaires

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.



0
votes

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() .


1 commentaires

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



0
votes

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();
});


0 commentaires