WebRTC信令状态永远不会改变为iOS上的HaveLocalAnswer

时间:2015-09-25 16:58:27

标签: ios webrtc signaling

我想知道为什么在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),所以我必须手动创建答案并强制发送给他。我做错了什么?

1 个答案:

答案 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以获得更好的概述。

你没有做错任何事。您可能需要对您所处的州进行一些手动记账,并相应地创建答案或要约。