メソッドhere iPhoneのシミュレータ(React Nativeを使用)からChromeブラウザで開始された音声コールに応答しようとしています。RTCPeerConnection.iceConnectionStateがチェックからクローズに変更されました
イベントシーケンスの概要:
- は、呼び出し信号
- を受け送っ
- が呼び出し信号
- は、PeerConnection 作成
- をリモート記述(申し出)を受けた参加ローカルストリームを得ました
- ローカルストリームを追加
- を受信しました
- 候補
- 7及び8を15回(すなわち、合計16倍)
- がトリガ
- signalingStateを有するリモート・オファーに
- を変更onaddstreamの
- コールバック関数をトリガonnegotiationneeded繰り返し添加setRemoteDescriptionが起動され、answerが作成されました。
- signalingStateは
- onicecandidateが初めてトリガーチェックに変え、安定
- iceconnectionstateに変更しました。
- は、2回目に誘発されたオニカンジン酸デヒドロゲナーゼから候補を放出した。
null
- iceconnectionstateがに変更された候補者が
前に、私はかなりために、この問題に引っかかってきましたしばらく。私はこの時点で何をデバッグすべきかを知らない。接続の終了の原因は何ですか?必要に応じてさらにログを投稿することができます。
一つの観測はiceconnectionstatechange
に対応する2 RTCEvent
は、以下の性質を有していることである。
isTrusted:false
ターゲットRTCPeerConnectionはここ
iceConnectionState:"closed"
iceGatheringState:"complete"
がremoteOfferとremoteCandidatesを処理するために、私の機能であります
WebRTCClass.prototype.onRemoteOffer = function(data) {
var ref;
if (this.active !== true) {
return;
}
var peerConnection = this.getPeerConnection(data.from);
console.log('onRemoteOffer', data,peerConnection.signalingState);
if (peerConnection.iceConnectionState !== 'new') {
return;
}
var onSuccess = (function(_this){
return function(){
console.log("setRemoteDescription onSuccess function");
_this.getLocalUserMedia((function(_this) {
return function(onSuccess,stream) {
peerConnection.addStream(_this.localStream);
var onAnswer = (function(_this) {
return function(answer) {
var onLocalDescription = function() {
return _this.transport.sendDescription({
to: data.from,
type: 'answer',
ts: peerConnection.createdAt,
description: {
sdp: answer.sdp,
type: answer.type
}
});
};
return peerConnection.setLocalDescription(new RTCSessionDescription(answer), onLocalDescription, _this.onError);
};
})(_this);
return peerConnection.createAnswer(onAnswer, _this.onError);
}
})(_this)
);
}
})(this);
return peerConnection.setRemoteDescription(new RTCSessionDescription(data.description),onSuccess,console.warn);
};
WebRTCClass.prototype.onRemoteCandidate = function(data) {
var peerConnection, ref;
if (this.active !== true) {
return;
}
if (data.to !== this.selfId) {
return;
}
console.log('onRemoteCandidate', data);
peerConnection = this.getPeerConnection(data.from);
if ((ref = peerConnection.iceConnectionState) !== "closed" && ref !== "failed" && ref !== "disconnected" && ref !== "completed") {
peerConnection.addIceCandidate(new RTCIceCandidate(data.candidate));
}
};
Iは、[反応-ネイティブのWebRTCを(https://github.com/oney/react-native-webrtc)は、元のWebRTCパッケージからわずかに異なる動作と思われます。しかし、私はこれに非常に新しいので、私はwebrtcプロトコルの正しい軌跡に従っていない可能性もあります –
シミュレータとブラウザは同じネットワークにありますか? createpeerconnectionでSTUNまたはTURNサーバーを使用していますか?あなたはiosまたはchrome libjingleログを持っていますか? – manishg
シミュレータとブラウザは同じネットワーク(127.0.0.1)にあります。 peerconnectionは、STUNサーバを 'stun:stun.l.google.com:19302'に設定して作成されました。私はlibjingleログまたはそれを有効にする方法はよく分かりません。私は参考にしてもらえますか?私はコードで生成されたより詳細なログをいくつか持っています。 –