2016-06-16 19 views
1

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 RTCSessionDescriptionDelegatepeerConnection: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?

Antwort

2

Das Angebot scheint laut der Fehlermeldung als "Antwort" markiert zu sein. Es schlägt fehl, weil es erwartet, dass Sie sich in dem Status STATE_SENTOFFER befinden.

Wenn Sie ein Angebot erstellt und an den anderen Teilnehmer gesendet haben, haben Sie möglicherweise vergessen, zuerst setLocalDescription aufzurufen. Wenn Sie dem fehlgeschlagenen Kunden kein Angebot gesendet haben, sollte die andere Partei geändert werden, um ein Angebot anstelle einer Antwort zu senden.

+0

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). –

+0

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? –