iOS & Safari 11 WebRTC tidak mengumpulkan Kandidat STUN/TURN Trickle ICE

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:

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.


person Justin    schedule 06.10.2017    source sumber
comment
Saya juga mengalami banyak masalah dengan ini. Jika Anda menemukan solusinya, silakan laporkan kembali!. Aku akan melakukan hal yang sama. Sebagai catatan tambahan, penggunaan opsi lama, misalnya ( offerToReceiveAudio: 1 ), diketahui menyebabkan perilaku ini tetapi dihilangkan di adapter.js baru. Sayangnya masalah ini masih mempengaruhi saya meskipun telah menghapus opsi lama.   -  person Geige V    schedule 04.11.2017
comment
Saya rasa masalahnya bukan pada server TURN. Saya pikir ini ada hubungannya dengan cara kerja jaringan di jaringan tertentu, karena saya telah mencapai kesuksesan dalam hal data seluler, dalam segala hal. Saya rasa saya perlu memaksanya untuk menggunakan TCP, tetapi saya tidak yakin apakah Safari memperhatikan hal itu, dan saya tidak yakin bagaimana cara melihat internal WebRTC versi Safari. Dokumentasi tentang dukungan setengah-setengah Apple terhadap WebRTC tidak ada. Saya juga harus mengubah kode aplikasi lagi beberapa hari yang lalu untuk menambahkan tombol putar agar pengguna dapat mengklik untuk mengatasi penolakan janji penguncian yang baru.   -  person Justin    schedule 05.11.2017
comment
@GeigeV Apakah Anda pernah memikirkan hal ini? Saya perhatikan bahwa ketika Aplikasi WebRTC saya berjalan di Safari di IOS 12, aplikasi tersebut hang ketika mencoba membuat Kandidat ICE.   -  person    schedule 09.03.2019
comment
Saya juga mengalami masalah serupa, tetapi bedanya terkadang kandidat ICE jenis lain juga dikembalikan dari Trickle ICE sehingga saya dapat memiliki koneksi (tetapi hal ini tidak selalu terjadi). Benar-benar bingung dengan perilaku Safari ini   -  person Humoyun Ahmad    schedule 28.05.2020