nttcom / peerjs

[Deprecated] This branch is a customized version of PeerJS for NTT Communications's WebRTC platform SkyWay.
http://nttcom.github.io/skyway/en/
Other
225 stars 91 forks source link

Firefoxが接続受け手の場合にエラーが発生する #41

Closed riosu closed 8 years ago

riosu commented 8 years ago

通話は正常に行なうことが出来る。

PeerJS:  Failed to createOffer,  (InvalidStateError) Cannot create offer in state have-remote-offer peer.js:1628:11
yusuke84 commented 8 years ago

FF40だと発生しない。 FF43だと発生する。

yusuke84 commented 8 years ago

エラー発生箇所とタイミング

Firefox42のリリースノートはこちら。 https://wiki.mozilla.org/Media/WebRTC/ReleaseNotes/42

これから、変更点を確認していきます。

NojiriKeishi commented 8 years ago

発生個所とタイミングありがとうございます。 10日ほど経ちましたので、今後の改修のご予定などありましたら共有頂ければ幸いです。 すみませんが、よろしくお願いします。

microaijp commented 8 years ago

見当違いかもしれませんが、 peer.js の 578行目あたり、

  if (pc.signalingState == 'stable') {
    setTimeout(function(ev){
      // prevent error for FF40. When callee, before handling remoteDescription, calling _makeOffer makes error
      // cause localDescription set. Delaying calls make it fix above mismatch.
      Negotiator._makeOffer(connection);
    }, 0);
  } else {
    util.log('onnegotiationneeded triggered when not stable. Is another connection being established?');
  }

の setTimeout の 0 を 100とかにしたらエラーが出なくなりましたので、ご報告です。

yusuke84 commented 8 years ago

@goroakimoto ご報告ありがとうございます。 @NojiriKeishi 検証対応が遅くなり申し訳ありません。

事象としては、本来 makeAnswerをする受け手側で、pc.onnegotiationneeded が発火し、makeOfferr しようとしたためエラーが出ているようです。 @goroakimoto さんの対処は setTimeoutmakeOffer 実行タイミングをずらしてますので、エラーが出なくなったのだと思われます。

peer.jsの修正を考えております。もうしばらくお待ち下さい。

yusuke84 commented 8 years ago

@NojiriKeishi 対応策を講じたものをpullreq出しました。動作検証後マージします。

今回の事象は onnegotiationneededイベントの発火タイミングがFF42+で変更になったため発生したようです。

onnegotiationneededイベントのcallbackの中ではmakeOfferが行われます。 Offerする側(caller側)で発火するのは全く問題ないのですが、このイベントはOfferを受ける側(callee側)でも発火するため、callbackの中でcaller側であることを判別する条件分岐が入っています。(callee側だとmakeOfferを行わない)

今回は、FF42+で発火タイミングがより早くなったため、条件分岐で適切に分岐できずに、callee側でもmakeOfferを行いエラーが発生していました。

改修内容としては、IF文の条件を追加しています。 https://github.com/nttcom/peerjs/commit/d3fd4e327298730ba7ee03f63859e9f422d81ac6#diff-0e4bfadc2f518e77444db1f92a1d2451R580

この度はご報告いただきありがとうございました!

yusuke84 commented 8 years ago

修正版の peer.js ですが、CDNにも配置済みです。 https://skyway.io/dist/0.3/peer.js

NojiriKeishi commented 8 years ago

修正大変ありがとうございます。 活用させて頂きます。 いつも対応大変ありがとうございます。 重ねてお礼申し上げます。