Bildschirmfreigabe mit webRTC beim Audioanruf in Javascript
Ich werde die Bildschirmfreigabefunktion mit webRTC ausführen. Mein Code funktioniert gut bei Videoanrufen. Im Status eines Audioanrufs funktioniert dies jedoch nicht. Hier ist mein Code.
Dies dient zum Erstellen einer Peer-Verbindung und zum Hinzufügen eines Streams für Audioanrufe
const senders = [];
var mediaConstraints = {audio: true, video: false}
navigator.mediaDevices.getUserMedia(mediaConstraints)
.then(function (localStream) {
localLiveStream = localStream;
document.getElementById("local_video").srcObject = localLiveStream;
localLiveStream.getTracks().forEach(track => senders.push(myPeerConnection.addTrack(track, localLiveStream)));
})
.catch(handleGetUserMediaError);
wenn Bildschirmfreigabefeld
mediaConstraints.video = true;
let displayStream = await navigator.mediaDevices.getDisplayMedia(mediaConstraints)
if (displayStream) {
document.getElementById("local_video").srcObject = displayStream;
console.log("senders: ", senders);
try {
senders.find(sender => sender.track.kind === 'video').replaceTrack(displayStream.getTracks()[0]);
} catch (e) {
console.log("Error: ", e)
}
}
Im Status der Bildschirmfreigabe ist sender.track.kind "Audio"
senders.find(sender => sender.track.kind === 'video') = null.
Da dies ersetzt, macht replaceTrack einen Fehler. Gibt es eine andere Möglichkeit für die Bildschirmfreigabe?
Antworten
Sie müssen eine Videospur hinzufügen, um dies zu erreichen. Es wird eine Neuverhandlung erfordern.
Fügen Sie also die Bildschirmspur zur Verbindung hinzu (nicht ersetzen) und erstellen Sie das Angebot erneut!
connection.addTrack(screenVideoTrack);
Überprüfen Sie dies als Referenz:
https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/onnegotiationneeded