WebRTC 拨出电话问题 (iOS,Kurento)

Issue with WebRTC outgoing call (iOS,Kurento)

我是 webrtc 的新手,但在 iOS 方面经验丰富。

我们在 AWS 上设置了一个媒体服务器(所有端口都打开),kurento one2one client。当我从桌面调用到桌面时,一切都运行良好。当我从桌面呼叫 iOS 时它有效(即呼叫 iOS)。

问题是当我从 iOS 向桌面拨打电话时,它不起作用。

以下是服务器日志,所以我认为呼叫正在接通...

Received message: {"id":"incomingCall","from":"qqq"}

spec: {"audio":true,"video":{"width":640,"framerate":15}}

chrome: {"audio":true,"video":{"optional":[{"minWidth":640},{"maxWidth":640},{"minFramerate":15},{"maxFramerate":15}]}}

Sending message:{"id":"incomingCallResponse","from":"qqq","callResponse":"accept","sdpOffer”:”huge text, so removed”}

Received message: {"id":"startCommunication","sdpAnswer":"huge text, so removed”}

点击呼叫后,我在 iOS 上执行以下操作:

[peerConnection offerForConstraints:[self defaultOfferConstraints] completionHandler:^(RTCSessionDescription * _Nullable sdp, NSError * _Nullable error) {
    
    [peerConnection setLocalDescription:sdp completionHandler:^(NSError * _Nullable error) {
        NSLog(@"%@",error.description);
    }];
    
    
    [[NSOperationQueue mainQueue] addOperationWithBlock:^ {
        NSDictionary *registerMessage = @{
                                          @"id": @"call",
                                          @"from": @"qqq",
                                          @"to": @"www",
                                          @"sdpOffer" : sdp.description,
                                          };
        NSData *messageData = [NSJSONSerialization dataWithJSONObject:registerMessage
                                                              options:NSJSONWritingPrettyPrinted
                                                                error:nil];
        NSString *messageString =
        [[NSString alloc] initWithData:messageData encoding:NSUTF8StringEncoding];
        [webSocket send:messageString];
    }];
}];

在我接受回复后,我在下面做了,

if ([answerID isEqualToString:@"callResponse"]) {
    NSString *answerRespose = [wssMessage objectForKey:@"response"];
    if ([answerRespose isEqualToString:@"accepted"]) {
        description = [[RTCSessionDescription alloc] initWithType:RTCSdpTypeAnswer sdp:sdpAnswer];
        [peerConnection setRemoteDescription:description completionHandler:^(NSError * _Nullable error) {
            
        }];
    }
}

我也在照顾 ICE 候选人...

由于传入的作品没有任何问题,我假设在创建流时没有出错。 我是不是错过了拨出电话的东西?

我终于找到了。 问题出在 ICECandidates 上,我了解到在设置远程描述后添加 ICECandidate 是可行的。 制作了一个从网络套接字收集的数组 ICECandidates 并在我获得远程 RemoteDescription 后添加它们:)

我希望这对以后的人有所帮助。