Aplikasi web saya gagal mengumpulkan kandidat ICE relai WebRTC melalui server CoTURN saat menggunakan Safari 11 di iOS 11 (iPhone 5s & iPhone 7) atau desktop. Aplikasi web (yang membuat koneksi rekan WebRTC hanya audio satu arah) berfungsi dengan baik antara browser sebenarnya (Chrome dan Firefox) baik secara langsung atau melalui relai CoTURN, dan saya biasanya mendapatkan 6-15 kandidat ICE di browser ini.
Saya memiliki panggilan (sejujurnya, tidak perlu) ke getUserMedia di sisi penerima, yang memungkinkan kandidat host ICE diproduksi oleh Safari. (Perhatikan... pengguna harus menyetujui akses audio dan/atau video sebelum Safari menyediakan Kandidat Ice host, meskipun hanya menerima saja. Saya sudah melewati rintangan itu, tapi supaya Anda tidak akan berhasil juga... Ini karena masalah "privasi".). Sebelum saya menambahkan izinkan getUserMedia, saya tidak menerima ICE. Sekarang saya menerima dua kandidat. Satu dengan IPv4 pribadi dan satu lagi dengan IPv6. Ini cukup agar aplikasi berfungsi dengan baik saat berada di mesin atau jaringan lokal yang sama. Jadi saya cukup yakin dengan bagian lain dari kode aplikasi. Saya tidak yakin apakah masalah saya ada pada kode aplikasi atau server CoTURN.
Contoh kandidat ICE yang diterima:
{"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"}}
Saya cukup yakin Kamus RTCIceServer untuk RTCPeerConnection saya sejalan dengan standar berikut:
- https://w3c.github.io/webrtc-pc/webrtc.html
- https://tools.ietf.org/html/rfc7064
- https://tools.ietf.org/html/rfc7065
Dan saya sudah mencoba beberapa variasi parameter:
// 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"
}]
};
Berikut ini contoh log proses pemberian sinyal untuk mengetahui apa yang sedang terjadi. Ini dari sisi penerima, yaitu Safari 11. Browser lainnya adalah Chrome (bandingkan 6 vs 2 kandidat ICE). Perubahan keadaan mengacu pada 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 dikonfigurasikan secara bebas dalam hal menerima setiap metode transportasi yang mungkin sejauh yang saya tahu. Ini berfungsi dengan baik untuk menyediakan Kandidat ICE dan sebagai relay untuk browser lain.
Segala arah akan sangat dihargai. Meskipun itu hanya contoh kode Kamus RTCIceServer yang berfungsi atau server TURN yang terbukti untuk dicoba.