iOS& Safari 11 WebRTC不会收集STUN / TURN Trickle ICE候选人

时间:2017-10-06 11:55:02

标签: ios safari webrtc turn coturn

在iOS 11(iPhone 5s和iPhone 7)或桌面上使用Safari 11时,我的网络应用程序无法通过CoTURN服务器收集WebRTC中继ICE候选人。 Web应用程序(建立单向音频WebRTC对等连接)在真实浏览器(Chrome和Firefox)之间直接或通过CoTURN中继工作正常,我通常在这些浏览器上获得6-15个ICE候选者。

我在接收方有一个(坦率地,不必要的)getUserMedia调用,允许Safari生成主机ICE候选者。 (注意......用户必须批准音频和/或视频访问才能在Safari提供主机冰候选人之前,即使是在接收端也是如此。我已经过了那个障碍,但就这样你也不会打到它......这是出于“隐私”问题。)在我添加allow getUserMedia之前,我没有收到任何ICE。现在我收到两名候选人。一个使用私有IPv4,另一个使用IPv6。这足以让应用程序在同一台计算机或本地网络上正常工作。因此,我对应用程序代码的其他部分非常有信心。我不确定我的问题是应用程序代码还是CoTURN服务器。

收到的ICE候选人的例子:

{"candidate":{"candidate":"candidate:622522263 1 udp 2113937151 172.27.0.65 56182 typ host generation 0 ufrag r23H network-cost 50","sdpMid":"audio","sdpMLineIndex":0,"usernameFragment":"r23H"}}

我非常确定我的RTCPeerConnection的RTCIceServer字典符合以下标准:

我尝试了多种参数:

// For Example:
var RPCconfig = {
    iceServers: [{ 
        urls: "turn:Example.live",
        username: "un",
        credential: "pw"
        }] 
     };

// Or:    
var RPCconfig = {
    iceServers: [{ 
        urls: "turns:Example.live",
        username: "un",
        credential: "pw",
        credentialType: "password"
        }, {
        urls: "stun:Example.live"
        }] 
    };

// And even more desperate attempts...
var RPCconfig = {
    iceServers: [{ 
        urls: "turn:Example.live?transport=tcp",
        username: "un",
        credential: "pw",
        credentialType: "password"
        }] 
};

这是一个信号处理日志的例子,用于了解正在发生的事情。这是来自接收方,即Safari 11.另一个浏览器是Chrome(比较6对2 ICE候选人)。状态变化是指oniceconnectionstatechange

SDP Offer received. 
Sending signal SDP 
Sending signal IceCandidate
Sending signal IceCandidate 
ICE Candidate Received 
4:08:25 AM State Change -> checking 
ICE Candidate Received 
ICE Candidate Received 
ICE Candidate Received 
ICE Candidate Received 
ICE Candidate Received
4:08:40 AM State Change -> failed
据我所知,就接受所有可能的传输方法而言,CoTURN的配置非常宽松。它适用于提供ICE候选者以及作为其他浏览器的中继。

任何方向都将不胜感激。即使它只是一个可用的示例RTCIceServer字典代码或经过验证的TURN服务器。

0 个答案:

没有答案