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 后添加它们:)
我希望这对以后的人有所帮助。
我是 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 后添加它们:)
我希望这对以后的人有所帮助。