Проблема с исходящим вызовом WebRTC (iOS, Kurento) - PullRequest
0 голосов
/ 09 мая 2018

Я довольно новичок в webrtc и довольно опытен в iOS.

У нас есть медиасервер на AWS (все порты открыты) с клиентом kurento one2one . Все работает хорошо, когда я звоню с рабочего стола на рабочий стол. когда я звоню с настольного компьютера на iOS, он работает (т.е. входящие звонки на iOS).

Проблема в том, что при исходящем звонке с iOS на рабочий стол он не работает.

Ниже приведены журналы сервера, поэтому я думаю, что вызов подключается ...

Полученное сообщение: {"id": "comingCall "," from ":" qqq "}

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

chrome: {"audio": true, "video": {"необязательный": [{"minWidth": 640}, {"maxWidth": 640}, {"minFramerate": 15}, {"maxFramerate" : 15}]}}

Отправка сообщения: {"id": "comingCallResponse "," from ":" qqq "," callResponse ":" accept "," sdpOffer ":” огромный текст, удален ”}

Полученное сообщение: {"id": "startCommunication", "sdpAnswer": "огромный текст, удалено"}} 1020 *

Когда нажимается звонок, я делаю ниже на 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) {

        }];
    }
}

Я также забочусь о кандидатах ICEC ...

Поскольку входящие сообщения работают без проблем, я предполагаю, что при создании потока не было допущено никакой ошибки. Я что-то пропускаю для исходящего звонка?

1 Ответ

0 голосов
/ 17 мая 2018

Я наконец-то это выяснил. Проблема была с ICECandidates, я узнал, что добавление ICECandidate после настройки удаленного описания работает. Сделал массив ICECandidates, собранных из веб-сокета и добавил их, как только я получил удаленное RemoteDescription:)

Я надеюсь, что это поможет кому-то в будущем.

...