Maison  >  Questions et réponses  >  le corps du texte

MediaStream dans Safari ne parvient pas à libérer correctement les ressources

<p>J'utilise la méthode AudioWorkletNode pour enregistrer et tous les navigateurs semblent enregistrer correctement. </p> <p>Lorsque j'enregistre, l'icône d'enregistrement apparaît sur l'onglet et disparaît à la fin de l'enregistrement. </p> <p> Cependant, dans Safari, une petite icône de haut-parleur (indiquant généralement que l'onglet émet du son) apparaîtra sur l'onglet à la place de l'icône du microphone. </p> <p>Je pense donc que je n’ai peut-être pas fermé quelque chose. </p> <p>Une fois l'enregistrement terminé, je ferai ce qui suit :</p> <pre class="brush:php;toolbar:false;">// le flux est un type MediaStream si (flux) stream.getTracks().forEach(track => track.stop()); flux = null</pre> <p>Le flux est créé via : </p> <pre class="brush:php;toolbar:false;">stream = wait navigator.mediaDevices.getUserMedia({ audio : options });</pré> <p>Y a-t-il autre chose à faire pour libérer toutes les ressources ? </p>
P粉106715703P粉106715703386 Il y a quelques jours455

répondre à tous(1)je répondrai

  • P粉536909186

    P粉5369091862023-08-31 10:10:19

    Pour tout désactiver, la méthode ci-dessous semble fonctionner. Je viens de trouver ceci par essais et erreurs parce que je n'arrivais pas à comprendre comment faire en sorte que Safari me dise ce qu'il contient encore :

    // stream : MediaStream
    // sourceNode : MediaStreamAudioSourceNode
    // recorderNode : AudioWorkletNode
    
    const tracks = stream.getTracks();
    tracks.forEach((track) => {
      track.stop();
      stream.removeTrack(track)
    });
    stream = null
    
    sourceNode.disconnect();
    sourceNode = undefined
    
    recorderNode.disconnect();
    recorderNode = undefined

    répondre
    0
  • Annulerrépondre