Добавить сервер TURN в android webRtc native

Я работаю над собственным приложением для Android WebRtc. Я также компилирую io.pristine lib. Я могу устанавливать звонки между двумя устройствами, только если они оба подключены к Wi-Fi. В случае, если одно из устройств подключено к сотовой сети, я не могу установить связь. Я читал любой возможный форум, и похоже, что мне нужен сервер TURN. У меня уже есть собственный сервер TURN, но я не понимаю, как я могу заставить приложение использовать этот сервер. Любая помощь приветствуется. Спасибо!!


person Alexander    schedule 16.06.2017    source источник
comment
не могли бы вы подсказать мне, как собрать io.pristine lib.   -  person M.Hefny    schedule 17.08.2017
comment
Строго говоря, достаточно просто STUN-сервера, но TURN также предоставит запасной вариант, если ваши клиенты не могут установить одноранговое соединение. Существуют бесплатные общедоступные серверы STUN, например stun.l.google.com:19302.   -  person jamix    schedule 03.01.2018


Ответы (2)


Вам необходимо установить сервер TURN при создании PeerConnection.

Это будет примерно так:

    // Set ICE servers
    List<PeerConnection.IceServer> iceServers = new ArrayList<>();
    iceServers.add(new org.webrtc.PeerConnection.IceServer("stun:xxx.xxx.xxx.xxx"));
    iceServers.add(new org.webrtc.PeerConnection.IceServer("turn:xxx.xxx.xxx.xxx:3478", "username", "credential"));

    // Create peer connection
    final PeerConnectionFactory.Options options = new PeerConnectionFactory.Options();
    PeerConnectionFactory factory = new PeerConnectionFactory(new PeerConnectionFactory.Options());
    MediaConstraints constraints = new MediaConstraints();
    PeerConnection peerConnection = factory.createPeerConnection(iceServers, constraints, new YourPeerConnectionObserver());

Я не запускал этот код, но вы должны понять.

person Mikko    schedule 03.08.2017
comment
просто добавьте скобку в конце 2-й и 3-й строки. - person Uriel Frankel; 24.12.2017
comment
Привет, @Mikko, мои серверы ICE выглядят так: stun: URL, turn: URL: 433? Transport = tcp, turn: URL: 5349? Transport = tcp Но я вижу только typ host и typ srflx Ice Candidates в сигнальном канале. Я могу установить вызов, когда устройства подключены к той же точке доступа, но получает onIceConnectionChange: state = FAILED, когда одно из них использует сотовую сеть - person Dmytro Batyuk; 22.10.2018

WebRTC отказался от старого API для создания серверов ICE. (Ответ, использующий старый API)

Для создания ICE-сервера вам необходимо использовать шаблон сборщика IceServer.

 PeerConnection.IceServer stun =  PeerConnection.IceServer.builder("stun:stun.l.google.com:19302").createIceServer();
 PeerConnection.IceServer turn =  PeerConnection.IceServer.builder("turn:numb.viagenie.ca").setUsername("[email protected]").setPassword("muazkh").createIceServer();
person emin deniz    schedule 24.06.2019