Erhalten der Mikrofongenehmigung im Browser
Nachdem Sie den Peer erstellt haben, möchten Sie die Erlaubnis des Browsers erhalten, auf das Mikrofon zuzugreifen. Dafür verwenden wir die Methode getUserMedia()
des Objekts navigator.mediaDevices
.
Der Endpunkt getUserMedia()
nimmt ein constraints
-Objekt entgegen, das angibt, welche Berechtigungen benötigt werden. getUserMedia()
ist ein Promise, das bei erfolgreicher Auflösung ein MediaStream
-Objekt zurückgibt. In unserem Fall wird dies den Ton unseres Streams enthalten. Falls das Promise nicht erfolgreich aufgelöst wird, sollten Sie den Fehler abfangen und anzeigen.
-
Fügen Sie den folgenden Code am Ende Ihrer
script.js
-Datei hinzu:jsfunction getLocalStream() { navigator.mediaDevices .getUserMedia({ video: false, audio: true }) .then((stream) => { window.localStream = stream; // A window.localAudio.srcObject = stream; // B window.localAudio.autoplay = true; // C }) .catch((err) => { console.error(`you got an error: ${err}`); }); }
Lassen Sie uns die wichtigsten Zeilen erklären:
-
window.localStream = stream
verbindet dasMediaStream
-Objekt (das wir in der vorherigen Zeilestream
zugewiesen haben) mit dem Fenster alslocalStream
. -
window.localAudio.srcObject = stream
setzt dassrc
-Attribut des<audio>
-Elements mit der IDlocalAudio
auf den durch das Promise zurückgegebenenMediaStream
, sodass unser Stream abgespielt wird. -
window.localAudio.autoplay = true
setzt dasautoplay
-Attribut des<audio>
-Elements auf true, sodass das Audio automatisch abgespielt wird.
Warnung: Wenn Sie online recherchiert haben, sind Sie möglicherweise auf
navigator.getUserMedia
gestoßen und haben angenommen, dass Sie dies anstelle vonnavigator.mediaDevices.getUserMedia
verwenden können. Das wäre falsch. Ersteres ist eine veraltete Methode, die Callbacks sowie Einschränkungen als Argumente erfordert. Letzteres verwendet ein Promise, sodass Sie Callbacks nicht verwenden müssen. -
-
Versuchen Sie, Ihre
getLocalStream
-Funktion aufzurufen, indem Sie die folgende Zeile am Ende Ihres Codes hinzufügen:jsgetLocalStream();
-
Aktualisieren Sie Ihre App, die weiterhin unter
localhost:8000
laufen sollte; Sie sollten das folgende Berechtigungsfenster sehen: -
Schließen Sie einige Kopfhörer an, bevor Sie die Mikrofonbenutzung erlauben, damit Sie später, wenn Sie sich selbst stummschalten, kein Feedback bekommen. Wenn das Berechtigungsfenster nicht angezeigt wurde, öffnen Sie den Inspektor, um zu sehen, ob Sie Fehler haben. Stellen Sie auch sicher, dass Ihre JavaScript-Datei korrekt mit Ihrem
index.html
verlinkt ist.
So sollte alles zusammen aussehen:
/* global Peer */
/**
* Gets the local audio stream of the current caller
* @param callbacks - an object to set the success/error behavior
* @returns {void}
*/
function getLocalStream() {
navigator.mediaDevices
.getUserMedia({ video: false, audio: true })
.then((stream) => {
window.localStream = stream;
window.localAudio.srcObject = stream;
window.localAudio.autoplay = true;
})
.catch((err) => {
console.error(`you got an error: ${err}`);
});
}
getLocalStream();