Ich verwende libjingle_peerconnection
installiert mit Cocoapods. Wenn ich SDP Angebot erhalten durch Server von meinem Anrufer signalisiert, ich versuche, dies als eine Remote-Beschreibung zu setzen, die RTCSessionDescriptionDelegate
peerConnection:didSetSessionDescriptionWithError:
mit Fehler auslöst:webRTC auf iOS: SDP-Antwort kann nicht gesendet werden, RTCPeerConnection.setRemoteDescription() fehlgeschlagen
Error Domain=RTCSDPError Code=-1 "(null)" UserInfo={error=Failed to set remote answer sdp: Called in wrong state: STATE_INIT}
.
Mein Code ist:
- (void)transportChanell:(TransportChannel *)channel didReceivedSignalWithSessionDescription:(NSString *)sessionDescription withType:(NSString *)type {
RTCSessionDescription *remoteDesc = [[RTCSessionDescription alloc] initWithType:@"answer" sdp:sessionDescription];
[_peerConnection setRemoteDescriptionWithDelegate:self sessionDescription:remoteDesc];
}
Ich habe das Problem sehr viel untersucht und in WebRTC Quellcode den Ort gefunden, wie ich nehme an, dieser Fehler kommt aus BadRemoteSdp(type, BadStateErrMsg(state()), err_desc);
und alle möglichen Zustände WebRtcSession
sind:
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.
Irgendwelche Vorschläge, bitte, was könnte ich in Anrufer oder Angerufener Seite verpasst haben?
Ich hoffe, ich habe alles klar beschrieben: Das Problem ist auf der Angerufenen Seite, als ich das Angebot vom Anrufer erhielt. Was soll ich tun, wenn ich nur den Stream des Anrufers auf der Seite des Angerufenen sehen möchte und nicht den Anrufer zurück zum Anrufer streamen möchte? Sollte der Angerufene auch ein Angebot erstellen oder sollte ich nur eine Antwort auf das bereits erhaltene Angebot senden (das versuche ich gerade). –
Wenn ich 'setLocalDescription' vergessen hätte, konnte ich kein SDP-Angebot bekommen, um es über den Signalisierungsserver zu senden, was ich erfolgreich gemacht habe. Aber wie ich bereits sagte, erzeuge ich Angebot nur auf der Anruferseite und möchte Antwort von Angerufenem erhalten, was fehlgeschlagen ist. Mache ich das Ding falsch und soll die Angerufene Seite zuerst auch anbieten? –