2016-11-07 3 views
0

En utilisant navigator.mediaDevices.getUserMedia (contraintes), vous pouvez obtenir un objet MediaStream pour différents périphériques, parmi lesquels webcam et microphone, ce qui vous permet de faire ce que vous voulez avec les données qui y transitent. La méthode getUserMedia renvoie une promesse qui renvoie à son tour un flux multimédia ou rejette s'il n'y a pas de flux disponible pour les contraintes données (vidéo, audio, etc.) Si vous obtenez un objet stream MAIS n'enregistrez aucune référence à la MediaStream - le garbage collector devrait l'enlever, non? Cependant, ce que j'ai observé est que le flux n'est pas supprimé - si j'obtiens un flux pour la webcam par exemple, il continue d'être occupé même si je n'ai plus de référence pour le flux.Où la référence MediaStream est-elle stockée?

La question est: où est stocké l'objet MediaStream si vous n'enregistrez pas vous-même une référence? Pourquoi n'est-il pas supprimé par le garbage collector? Pourquoi ma webcam reste-t-elle occupée?

+0

Quel navigateur? Avec [ce violon] (https://jsfiddle.net/jib1/qz7qh9h7/) mon appareil photo s'éteint après ~ 10 secondes dans Firefox et Chrome. Attention à inclure du code? – jib

Répondre

1

Le MediaStream API vous oblige à arrêter chaque piste contenue dans l'instance MediaStream que vous avez obtenue. Jusqu'à ce que vous le fassiez, la capture des médias continuera.

navigator.mediaDevices 
 
    .getUserMedia({ 
 
    audio: true, 
 
    video: true 
 
    }) 
 
    .then(function (stream) { 
 
    console.log('got stream with id ' + stream.id) 
 
    stream.getTracks().forEach(function (track) { track.stop() }) 
 
    // WebCam will not be busy anymore 
 
    }) 
 
    .catch(function (reason) { 
 
    console.error('capture failed ' + reason) 
 
    })

+0

Je suppose que lorsque j'ai eu ce problème, il y avait un mécanisme sous-jacent dans le cadre vidéo HTML (videojs) que j'utilisais qui était en train de gâcher le nombre de fois que getUserMedia a été appelé. Cela dit, votre message a répondu à la question :) – maxpaj