Compartilhamento de tela usando webRTC quando chamada de áudio em javascript

Sep 03 2020

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

ishanshah Sep 21 2020 at 21:22

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