RTCPeerConnection connectionState никогда не перемещается из «нового» в «проверка» / «подключен» - PullRequest
0 голосов
/ 27 июня 2018

Я перенял проект WebRTC у кого-то, и, хотя я начинаю обдумывать концепции, я все еще нахожусь в тупике из-за конкретной проблемы: перемещение соединения WebRTC с new на checking / completed и т.д ...

Вот степень вывода из chrome://webrtc-internals:

enter image description here

Наш код звонит connect():

connect(mediaStream, interviewUid, applicantUid) {
    return new Promise((resolve, reject) => {
      this.connectRtcPeerConnection()
        .then(() => {
          this.connectionState = Socket.CONNECTION_STATES.connected;
          this.rtcPeer.addStream(mediaStream);
          return this.rtcPeer.createOffer({ offerToReceiveAudio: 1, offerToReceiveVideo: 1 });
        }).then((offer) => {
          console.log('offer created', offer);
          return this.rtcPeer.setLocalDescription(offer);
        }).then(() => {
          const message = {
            id: SENDABLE_MESSAGES.connect,
            sdpOffer: this.rtcPeer.localDescription,
            interviewUid,
            applicantUid,
          };
          this.sendMessageToServer(message);
          resolve();
        })
        .catch((error) => {
          console.error(error);
          reject();
        });
    });
  }

который по очереди вызывает connectRtcPeerConnection():

connectRtcPeerConnection (* * тысяча двадцать-один

) {
    return new Promise((resolve, reject) => {
      if (this.rtcPeer) {
        resolve();
      }
      console.log('started connecting');

      const rtcPeerOptions = {
        iceServers: [TRUNCATED],
      };

      console.log('rtcPeerOptions', rtcPeerOptions);
      this.rtcPeer = new RTCPeerConnection(rtcPeerOptions);
      console.log('rtcPeer object: ', this.rtcPeer);
      this.rtcPeer.onerror = reject;
      this.rtcPeer.onicecandidate = (candidate) => { this.handleIceCandidateEvent(candidate); };
      this.rtcPeer.oniceconnectionstatechange = () => {
        this.handleIceConnectionStateChangeEvent();
      };
      this.rtcPeer.onaddstream = () => { console.log('handleAddStreamEvent'); };
      this.rtcPeer.onremovestream = () => { console.log('handleRemoveStreamEvent'); };
      this.rtcPeer.onicegatheringstatechange = () => { console.log('handleIceGatheringStateChangeEvent'); };
      this.rtcPeer.onsignalingstatechange = () => { console.log('handleSignalingStateChangeEvent'); };
      this.rtcPeer.onnegotiationneeded = () => { console.log('handleNegotiationNeededEvent'); };
      resolve();
    });
  }

Этот фрагмент кода никогда не выполняется:

this.rtcPeer.oniceconnectionstatechange = () => {
  this.handleIceConnectionStateChangeEvent();
};

Я следовал каждому условному и кодовому пути и в настоящее время не вижу, в чем проблема. Кто-нибудь сталкивался с этим и может пролить свет на потенциальные вещи, которые стоит посмотреть / рассмотреть?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Когда я реализовывал библиотеку Kurento для iOS, попробовал что-то вроде этого:

Сгенерированный SDPOffer

Установить LocalDescription на нашем конце

WebRTC начал генерировать IceCandidate

Кандидат Ice отправляется через WebSocket

В этот момент другая сторона отправила SDPAnswer.

Обработанный SDPОтвет с нашей стороны.

Установить RemoteDescription на нашем конце.

Сервер начал отправлять IceCandidate, собранные в их конце.

Добавлены эти IceCandidate в массиве с нашей стороны.

Здесь получено изменение состояния соединения на «Проверка»

Получено RemoteStream в этот момент.

Здесь получено изменение состояния соединения на «Подключено»

Надеюсь, это поможет!

0 голосов
/ 27 июня 2018

ну, вы никогда не вызываете setRemoteDescription или не добавляете удаленного кандидата в лед через addIceCandidate. Без этого не с кем поговорить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...