我想知道为什么在createAnswerWithDelegate
peerConnection的signalingState之后永远不会改为RTCSignalingHaveLocalPrAnswer
?
呼叫追踪是:
if(peerConnection.signalingState == RTCSignalingHaveRemoteOffer) {
NSLog(@"Setting Remote Offer desc");
[peerConnection createAnswerWithDelegate:self constraints:_constraints];
}
然后
-(void)peerConnection:(RTCPeerConnection *)peerConnection didCreateSessionDescription:(RTCSessionDescription *)sdp error:(NSError *)error
{
if(error) {
NSLog(@"Error - %@", error.description);
}
else {
NSLog(@"Setting Local Desc");
[peerConnection setLocalDescriptionWithDelegate:self sessionDescription:sdp];
}
}
然后在-(void)peerConnection:(RTCPeerConnection *)peerConnection didSetSessionDescriptionWithError:(NSError *)error
解雇此条件if(peerConnection.signalingState == RTCSignalingStable)
,所以我必须手动创建答案并强制发送给他。我做错了什么?
答案 0 :(得分:3)
这就是" has-remote-pranswer"状态在当前Editor's Draft of the WebRTC specification(2015年10月6日)中描述:
类型"提供"的本地描述已经成功应用并且类型为" pranswer"的远程描述。已成功应用。
A" pranswer"定义为:
" pranswer"的RTCSdpType表示必须将描述视为[SDP]答案,而不是最终答案。用作SDP" pranswer"可以作为对SDP优惠的回复,或对先前发送的SDP" pranswer"的更新。
createAnswerWithDelegate 创建的答案是"答案"而不是" pranswer"。因此,国家直接进入"稳定"州。 请参阅规范state flow chart以获得更好的概述。
你没有做错任何事。您可能需要对您所处的州进行一些手动记账,并相应地创建答案或要约。