@GizzaProger

Почему не всегда удается соединится p2p (webrtc)?

Всем привет.
Не могу понять почему не всегда удается соединиться p2p с помощью simple-peer?
Если пробую соединяться из разных вкладок браузера, то все хорошо. Соединяется быстро и во всех случаях. Если я пробую соеденится с разных пк, то это получается не всегда. Сегодня может соеденение пройти, а завтра нет. Бывает, что если инитатор это первый пк, то соеденятся, а если второй то нет. Я не могу выцепить закономерность почему так происходит. Думал, что сообщения не правильно доставляются, но с моего пк сколько угодно участников может быть. Думал, что брандмаузер, но тогда бы не было такого хаотичного результата с соеденениями. Может кто-то сталкивался с подобным?
Соледеняю дву пиров при помощи socket io.
1) Получаю массив юзеров
2) Для каждого юзера создаю пир инитатор
3) Как только юзер просигналит, отправляю сообщение юзеру из массива юзеров по id.
4) Как только получаю сообщение инитатора, то принимаю его сигнал
5) Как только принимающий дает свой сгнал отправляю его обратно инитатору
6) Получаю сигнал на стороне инитатора и использую его
Вот код
intiatorOnSignal(peer, userId) {
      // Как только инитатор просигналил
      peer.on("signal", signal => {
        console.log("Пытаемся просигналить (инитатор)");
        // Проверка на то, что этот пир еще не сигналил и то, что сигнал это не новое предложение о подключении
        // if (!this.getPeerById(userId).signaling || signal.type != "offer") {
        this.getPeerById(userId).signaling = true;
        // Отправляем предложение о соеденении
        console.log("Инитатор отправляет сигнал ", userId);
        this.sendMsgToUser(
          {
            signal,
            name: "signaling initiator",
            username: this.user.name,
            avatar: this.user.avatar_link,
            sender: this.socketId,
            forPeer: userId
          },
          userId
        );
        console.log("Успешно просигналили юзеру");
        // }
      });
    },
    onGetMsg() {
      this.socket.on("get msg", data => {
        switch (data.msg.name) {
          // Получаем предложение о соеденении
          case "signaling initiator":
            // 4
            this.getMedia(stream => {
              let depended = this.getDependedPeer(stream, data);
              let peer = depended.peer;
              // Как только просигналили,
              // if (depended.isNewPeer) {
              peer.on("signal", signal => {
                console.log("Получили сигнал инитатора");
                // Отправляем инитатору ответный сигнал
                console.log("Отправляеум ответный сигнал ", data.msg.forPeer);
                this.sendMsgToUser(
                  {
                    sendeId: this.id,
                    sender: this.socketId,
                    signal,
                    name: "signaling answer",
                    forPeer: data.msg.forPeer
                  },
                  data.msg.sender
                );
              });
              // }
              peer.signal(data.msg.signal);
            });
            break;
          case "signaling answer":
            console.log("Получили сигнал ответа");
            // 5
            // Получаем ответный сигнал от пира и соеденеяемся с ним
            // if (data.msg.signal.type == "answer") {
            if (this.getPeerById(data.msg.forPeer)) {
              console.log(this.getPeerById(data.msg.forPeer))
              this.getPeerById(data.msg.forPeer).peer.signal(data.msg.signal);
              console.log("Использовали сигнал ответа");
            }
            // }
            break;
        }
      });
    },

Вот ошибка
Error: Connection failed.
at makeError (index.js?051a:18)
at Peer._onConnectionStateChange (index.js?051a:660)
at RTCPeerConnection.Peer._pc.onconnectionstatechange (index.js?051a:122)
Уже не знаю в чем может быть дело. Любая версия мне поможет
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы