JavaScript: черный экран при одноранговом соединении

#javascript #socket.io #peerjs

#javascript #socket.io #peerjs

Вопрос:

Я пытаюсь создать простой веб-сайт для видеозвонков, с которого кто-то может поделиться ссылкой, и человек, который нажимает на ссылку, присоединится к вызову, проблема в том, что если я присоединюсь к нему с разных вкладок моего браузера Chrome, это сработает, но если один из моих друзей попытается присоединиться к вызову, он покажет черныйэкран в виде видео моего друга и аудио также не передается. Мой код :-

 let peer =  new Peer({host:'peerjs-server.herokuapp.com', secure:true, port:443})

const socket = io('/');

let myVideoStream;
const videoArea = document.getElementById('videos');
const myVideo = document.createElement('video');
myVideo.muted = true;
const peers = {};

navigator.mediaDevices.getUserMedia({
    video: true,
    audio: true
}).then(stream => {
    myVideoStream = stream;
    addVideoObject(myVideo, stream);
    peer.on('call', call => {
        call.answer(stream);
        const video = document.createElement('video');
        call.on('stream', (userStream) => {
            addVideoObject(video, userStream);
        });
    })
    socket.on('user-connected', userId => {
        console.log('Final Confirmation');
        connectUser(userId, stream);
    })
}).catch(err => {
    alert('Your camera or microphone is not working!');
    console.log(err);
});

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

peer.on('open', id => {
    console.log('Peer identified');
    socket.emit('join-room', window.location.href.split('/')[4], id);
})

function addVideoObject(video, stream) {
    video.srcObject = stream;
    video.addEventListener("loadedmetadata", () => {
        video.play();
    });
    videoArea.append(video);
}

function connectUser(userId, stream) {
    console.log('User Connected');
    const call = peer.call(userId, stream);
    const video = document.createElement('video');
    call.on('stream', userStream => {
        addVideoObject(video, userStream);
    });

    call.on('close', () => {
        console.log('User Disconnected');
        video.remove()
    });

    peers[userId] = call;
}

const muteUnmute = () => {
    try {
      const enabled = myVideoStream.getAudioTracks()[0].enabled;
      if (enabled) {
        myVideoStream.getAudioTracks()[0].enabled = false;
        setUnmuteButton();
      } else {
        setMuteButton();
        myVideoStream.getAudioTracks()[0].enabled = true;
      }
    } catch {
      alert("Your microphone or camera is not working");
    }
  };
  
  const playStop = () => {
    try {
      let enabled = myVideoStream.getVideoTracks()[0].enabled;
      if (enabled) {
        myVideoStream.getVideoTracks()[0].enabled = false;
        setPlayVideo();
      } else {
        setStopVideo();
        myVideoStream.getVideoTracks()[0].enabled = true;
      }
    } catch {
      alert("You camera is not working!");
    }
  };

  const setMuteButton = () => {
    const html = `
      <i class="fas fa-microphone"></i>
      <span>Mute</span>
    `;
    document.querySelector(".main__mute_button").innerHTML = html;
  };
  
  const setUnmuteButton = () => {
    const html = `
      <i class="unmute fas fa-microphone-slash"></i>
      <span>Unmute</span>
    `;
    document.querySelector(".main__mute_button").innerHTML = html;
  };
  
  const setStopVideo = () => {
    const html = `
      <i class="fas fa-video"></i>
      <span>Stop Video</span>
    `;
    document.querySelector(".main__video_button").innerHTML = html;
  };
  
  const setPlayVideo = () => {
    const html = `
    <i class="stop fas fa-video-slash"></i>
      <span>Play Video</span>
    `;
    document.querySelector(".main__video_button").innerHTML = html;
  };

 

Я использую peer.js и розетка.ввод-вывод для этого веб-сайта.
Вы можете проверить это, веб-сайт размещен с heroku по этому URL-адресу — https://protected-everglades-14521.herokuapp.com

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

1. Кто-нибудь, кто может мне помочь??