Jus*_*tin 6 safari ios webrtc turn coturn
在 iOS 11(iPhone 5s 和 iPhone 7)或桌面上使用 Safari 11 时,我的 Web 应用程序无法通过 CoTURN 服务器收集 WebRTC 中继 ICE 候选对象。Web 应用程序(建立单向音频 WebRTC 对等连接)在真实浏览器(Chrome 和 Firefox)之间直接或通过 CoTURN 中继工作正常,我通常在这些浏览器上获得 6-15 个 ICE 候选者。
我在接收端有一个(坦率地说,不必要的)调用 getUserMedia,它允许 Safari 生成主机 ICE 候选对象。(注意……在 Safari 提供主机 Ice Candidates 之前,用户必须批准音频和/或视频访问,即使是在仅接收端。我已经克服了那个障碍,但只是这样你就不会遇到它。 ..这是出于“隐私”考虑。)。在我添加允许 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"}}
Run Code Online (Sandbox Code Playgroud)
我很确定我的 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"
}]
};
Run Code Online (Sandbox Code Playgroud)
这是信令进程日志的示例,以了解正在发生的事情。这是来自接收方的 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
Run Code Online (Sandbox Code Playgroud)
据我所知,CoTURN 在接受所有可能的传输方法方面配置得相当宽松。它适用于提供 ICE Candidates 和作为其他浏览器的中继。
任何方向将不胜感激。即使它只是一个示例 RTCIceServer 字典代码,或者一个经过验证的 TURN 服务器来尝试。
| 归档时间: |
|
| 查看次数: |
2968 次 |
| 最近记录: |