Erhalten der Berechtigung des Browsers für das Mikrofon
Nachdem Sie den Peer erstellt haben, möchten Sie die Berechtigung des Browsers erhalten, auf das Mikrofon zuzugreifen. Wir werden die Methode getUserMedia() auf dem Objekt navigator.mediaDevices verwenden. Der getUserMedia()-Endpunkt nimmt ein constraints-Objekt, das die benötigten Berechtigungen angibt. getUserMedia() ist ein Promise, das bei erfolgreicher Auflösung ein MediaStream-Objekt zurückgibt. In unserem Fall wird es den Ton aus unserem Stream enthalten. Wenn das Promise nicht erfolgreich aufgelöst wird, sollten Sie den Fehler abfangen und anzeigen.
-
Fügen Sie den folgenden Code am Ende Ihrer Datei
script.jshinzu: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 = streamhängt dasMediaStream-Objekt (das wir in der vorherigen Zeilestreamzugewiesen haben) alslocalStreaman das Fenster an.window.localAudio.srcObject = streamsetzt dassrc-Attribut des<audio>-Elements mit der IDlocalAudioauf denMediaStream, der durch das Promise zurückgegeben wird, sodass unser Stream wiedergegeben wird.window.localAudio.autoplay = truesetzt dasautoplay-Attribut des<audio>-Elements auf true, damit der Ton automatisch abgespielt wird.
Warnung: Wenn Sie online ein wenig recherchiert haben, sind Sie möglicherweise auf
navigator.getUserMediagestoßen und haben angenommen, dass Sie diese Methode anstelle vonnavigator.mediaDevices.getUserMediaverwenden können. Das wäre falsch. Ersteres ist eine veraltete Methode, die sowohl Rückruffunktionen als auch Constraints als Argumente erfordert. Letzteres verwendet ein Promise, sodass Sie keine Rückruffunktionen verwenden müssen. -
Versuchen Sie, Ihre Funktion
getLocalStreamaufzurufen, indem Sie die folgende Zeile am Ende Ihres Codes hinzufügen:jsgetLocalStream(); -
Aktualisieren Sie Ihre Anwendung, die immer noch unter
localhost:8000ausgeführt werden sollte; Sie sollten das folgende Berechtigungs-Popup sehen:
-
Schließen Sie einige Kopfhörer an, bevor Sie die Mikrofonnutzung zulassen, damit Sie später, wenn Sie sich selbst entstummen, kein Feedback erhalten. Wenn Sie die Berechtigungsanfrage nicht gesehen haben, öffnen Sie den Inspektor, um zu sehen, ob Sie Fehler haben. Stellen Sie auch sicher, dass Ihre JavaScript-Datei korrekt mit Ihrer
index.htmlverknüpft 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();