Closed riosu closed 8 years ago
FF40だと発生しない。 FF43だと発生する。
Firefox42のリリースノートはこちら。 https://wiki.mozilla.org/Media/WebRTC/ReleaseNotes/42
これから、変更点を確認していきます。
発生個所とタイミングありがとうございます。 10日ほど経ちましたので、今後の改修のご予定などありましたら共有頂ければ幸いです。 すみませんが、よろしくお願いします。
見当違いかもしれませんが、 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とかにしたらエラーが出なくなりましたので、ご報告です。
@goroakimoto ご報告ありがとうございます。 @NojiriKeishi 検証対応が遅くなり申し訳ありません。
事象としては、本来 makeAnswer
をする受け手側で、pc.onnegotiationneeded
が発火し、makeOfferr
しようとしたためエラーが出ているようです。
@goroakimoto さんの対処は setTimeout
で makeOffer
実行タイミングをずらしてますので、エラーが出なくなったのだと思われます。
peer.jsの修正を考えております。もうしばらくお待ち下さい。
@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
この度はご報告いただきありがとうございました!
修正版の peer.js ですが、CDNにも配置済みです。 https://skyway.io/dist/0.3/peer.js
修正大変ありがとうございます。 活用させて頂きます。 いつも対応大変ありがとうございます。 重ねてお礼申し上げます。
通話は正常に行なうことが出来る。