Как изменить прямую трансляцию во время вызова между одноранговыми узлами в PeerJS?

#javascript #webrtc #peerjs

#javascript #webrtc #peerjs

Вопрос:

У меня есть приложение NodeJS, которое копирует масштабирование. Я выяснил, как передавать аудио и видео в реальном времени между одноранговыми узлами. Теперь я застрял в точке, где мне нужно добавить опцию совместного использования экрана. Пожалуйста, подскажите мне способ изменить поток на «screenStream». Совместное использование экрана должно начинаться при нажатии кнопки с идентификатором «shareScreen».

Вот script.js файл (кстати, я использую библиотеку PeerJS для P2P-вызова и подключения:

 var socket = io('/');
var myPeer = new Peer(undefined, {
    host: 'peerjs-server.herokuapp.com',
    port: '443',
    secure: true
});

var videoGrid = document.getElementById('videoGrid');
var myVideo = document.createElement('video');
myVideo.muted = true;

var peers = {};

myPeer.on('open', (id) => {
    socket.emit('join-room', roomId, id);

    document.getElementById('disconnectButton').onclick = () => {
        socket.emit('disconnected');
        window.location = "https://www.google.com";
    }
});

navigator.mediaDevices.getUserMedia({
    video: true,
    audio: true
}).then((stream) => {

    socket.on('user-connected', (userId) => {
        connectToNewUser(userId, stream);
    });

    addVideoStream(myVideo, stream);

    myPeer.on('call', (call) => {
        call.answer(stream);
        const videoElement = document.createElement('video');
        call.on('stream', (userVideoStream) => {
            addVideoStream(videoElement, userVideoStream);
        });
    });

    document.getElementById("videoToggler").onclick = () => {
        if (stream.getVideoTracks()[0].enabled) {
            stream.getVideoTracks()[0].enabled = false;
            stream.getVideoTracks()[0].muted = false;
            document.getElementById("videoToggler").classList.remove('fa-video');
            document.getElementById("videoToggler").classList.add('fa-video-slash');
            document.getElementById("videoToggler").style.color = "#FF0000";
        } else {
            stream.getVideoTracks()[0].enabled = true;
            stream.getVideoTracks()[0].muted = true;
            document.getElementById("videoToggler").classList.remove('fa-video-slash');
            document.getElementById("videoToggler").classList.add('fa-video');
            document.getElementById("videoToggler").style.color = "#000000";
        }
    }

    document.getElementById("audioToggler").onclick = () => {
        if (stream.getAudioTracks()[0].enabled) {
            stream.getAudioTracks()[0].enabled = false;
            stream.getAudioTracks()[0].muted = false;
            document.getElementById("audioToggler").classList.remove('fa-microphone');
            document.getElementById("audioToggler").classList.add('fa-microphone-slash');
            document.getElementById("audioToggler").style.color = "#FF0000";
        } else {
            stream.getAudioTracks()[0].enabled = true;
            stream.getAudioTracks()[0].muted = true;
            document.getElementById("audioToggler").classList.remove('fa-microphone-slash');
            document.getElementById("audioToggler").classList.add('fa-microphone');
            document.getElementById("audioToggler").style.color = "#000000";
        }
    }
});

function connectToNewUser(userId, stream) {
    var call = myPeer.call(userId, stream);
    peers[userId] = call;
    const videoElement = document.createElement('video');
    call.on('stream', (userVideoStream) => {
        addVideoStream(videoElement, userVideoStream);
    });
    call.on('close', () => {
        videoElement.remove();
    });
}

function addVideoStream(videoElement, stream) {
    videoElement.autoplay = true;
    videoElement.srcObject = stream;
    videoGrid.append(videoElement);
}

socket.on('user-disconnected', (userId) => {
    peers[userId].close();
});
  

Комментарии:

1. Вы нашли какое-либо решение для этого !?

2. @AbdullahKhan Нет 🙁

3. Я пытаюсь это сделать. Пока я могу обновить поток с аудио-видео на общий доступ к экрану. Я опубликую ответ, когда завершу свое решение

4. Так меняется ли поток на веб-странице?

5. Вы должны обновить видеопоток потоком совместного использования экрана