2016-06-16 9 views
1

私はlibjingle_peerconnectionとココアポッドがインストールされています。iOSのwebRTC:RTCPeerConnection.setRemoteDescription()がSDP応答を送信できませんでした

Error Domain=RTCSDPError Code=-1 "(null)" UserInfo={error=Failed to set remote answer sdp: Called in wrong state: STATE_INIT}:私は私の呼び出し側からサーバーをシグナリングによりSDP提供を受けるとき、私はエラーでRTCSessionDescriptionDelegatepeerConnection:didSetSessionDescriptionWithError: をトリガーリモート説明、としてこれを設定しようとしています。

私のコードは次のとおりです。

- (void)transportChanell:(TransportChannel *)channel didReceivedSignalWithSessionDescription:(NSString *)sessionDescription withType:(NSString *)type { 
    RTCSessionDescription *remoteDesc = [[RTCSessionDescription alloc] initWithType:@"answer" sdp:sessionDescription]; 
    [_peerConnection setRemoteDescriptionWithDelegate:self sessionDescription:remoteDesc]; 
} 

私が問題に非常に多くのことを調査し、のWebRTCのソースコードで場所を見つけ、私が思うように、このエラーがBadRemoteSdp(type, BadStateErrMsg(state()), err_desc);から来ているとWebRtcSessionのすべての可能な状態がありました:

STATE_INIT = 0, 
    STATE_SENTOFFER,   // Sent offer, waiting for answer. 
    STATE_RECEIVEDOFFER,  // Received an offer. Need to send answer. 
    STATE_SENTPRANSWER,  // Sent provisional answer. Need to send answer. 
    STATE_RECEIVEDPRANSWER, // Received provisional answer, waiting for answer. 
    STATE_INPROGRESS,  // Offer/answer exchange completed. 
    STATE_CLOSED,   // Close() was called. 

どのような提案がありますか、私は発信者または着信側で何が欠けていますか?

答えて

2

オファーは、エラーメッセージに応じて「回答」とマークされているようです。あなたがSTATE_SENTOFFER状態になることを期待しているので失敗します。

オファーを作成して相手に送信した場合、最初にsetLocalDescriptionを呼び出すことを忘れた可能性があります。失敗したクライアントから申し出を送信しなかった場合は、回答の代わりにオファーを送信するように相手を変更する必要があります。

+0

私はすべてを明確に記述して欲しいと思います。発信者から申し出を受けたとき、問題は被呼側にあります。呼び出し側のストリームを呼び出し側に見たいだけで、呼び出し側を呼び出し元にストリームを送信しないようにするにはどうしたらよいですか?着メロを作成する必要がありますか、または私はただ受け取ったオファー(これは私が今試しているもの)に答えを送るべきです。 –

+0

私は 'setLocalDescription'を呼び出すことを忘れてしまったでしょう - 私は成功したシグナリングサーバを通してSDPオファーを送ることができませんでした。しかし、私がすでに言ったように、私は呼び出し側でのみオファーを生成し、失敗した呼び出し側から回答を得たいと考えています。私は間違ったことをしていますか? –

関連する問題