Compartilhamento de tela usando webRTC quando chamada de áudio em javascript
Vou fazer a função de compartilhamento de tela usando webRTC. Meu código está funcionando bem durante chamadas de vídeo. Mas no status de chamada de áudio, isso não está funcionando. Aqui está meu código.
Isso é para criar conexão de pares e adicionar fluxo para chamadas de áudio
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);
quando o campo de compartilhamento de tela
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)
}
}
No status de compartilhamento de tela, sender.track.kind é "áudio". Então
senders.find(sender => sender.track.kind === 'video') = null.
Como isso, replaceTrack comete erro. Existe alguma outra maneira de compartilhamento de tela?
Respostas
Você precisa adicionar uma trilha de vídeo para conseguir isso. Isso exigirá renegociação.
Portanto, adicione a trilha de tela (não substitua) à conexão e, em seguida, crie a oferta novamente!
connection.addTrack(screenVideoTrack);
Verifique isso para referência:
https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/onnegotiationneeded